jetcrab\bytecode\literals/
function.rs

1use crate::ast::Node;
2use crate::vm::instructions::Instruction;
3
4pub trait FunctionLiteralGenerator {
5    fn generate_function_expression(&mut self, node: &Node);
6    fn generate_arrow_function_expression(&mut self, node: &Node);
7}
8
9pub trait FunctionLiteralCore {
10    fn instructions(&mut self) -> &mut Vec<Instruction>;
11    fn visit_node(&mut self, node: &Node);
12}
13
14impl<T> FunctionLiteralGenerator for T
15where
16    T: FunctionLiteralCore,
17{
18    fn generate_function_expression(&mut self, node: &Node) {
19        if let Node::FunctionExpression(expr) = node {
20            if let Some(id) = &expr.id {
21                self.visit_node(id);
22            }
23            for param in &expr.params {
24                self.visit_node(param);
25            }
26            self.visit_node(&expr.body);
27        }
28    }
29
30    fn generate_arrow_function_expression(&mut self, node: &Node) {
31        if let Node::ArrowFunctionExpression(expr) = node {
32            for param in &expr.params {
33                self.visit_node(param);
34            }
35            self.visit_node(&expr.body);
36        }
37    }
38}