jetcrab\bytecode\literals/
array.rs

1use crate::ast::Node;
2use crate::vm::instructions::Instruction;
3use crate::vm::types::ArraySize;
4
5pub trait ArrayGenerator {
6    fn generate_array_literal(&mut self, node: &Node);
7}
8
9pub trait ArrayCore {
10    fn instructions(&mut self) -> &mut Vec<Instruction>;
11    fn visit_node(&mut self, node: &Node);
12}
13
14impl<T> ArrayGenerator for T
15where
16    T: ArrayCore,
17{
18    fn generate_array_literal(&mut self, node: &Node) {
19        if let Node::ArrayLiteral(lit) = node {
20            for e in lit.elements.iter().flatten() {
21                self.visit_node(e);
22            }
23            self.instructions()
24                .push(Instruction::NewArray(ArraySize::new(lit.elements.len())));
25        }
26    }
27}