jetcrab\bytecode\literals/
object.rs1use crate::ast::Node;
2use crate::vm::instructions::Instruction;
3
4pub trait ObjectGenerator {
5 fn generate_object_literal(&mut self, node: &Node);
6 fn generate_property(&mut self, node: &Node);
7}
8
9pub trait ObjectCore {
10 fn instructions(&mut self) -> &mut Vec<Instruction>;
11 fn visit_node(&mut self, node: &Node);
12}
13
14impl<T> ObjectGenerator for T
15where
16 T: ObjectCore,
17{
18 fn generate_object_literal(&mut self, node: &Node) {
19 if let Node::ObjectLiteral(lit) = node {
20 self.instructions().push(Instruction::NewObject);
21 for prop in &lit.properties {
22 if let Node::Property(property) = prop {
23 self.visit_node(&property.key);
24 self.visit_node(&property.value);
25 self.instructions().push(Instruction::SetProperty);
26 }
27 }
28 }
29 }
30
31 fn generate_property(&mut self, node: &Node) {
32 if let Node::Property(prop) = node {
33 self.visit_node(&prop.key);
34 self.visit_node(&prop.value);
35 }
36 }
37}