1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
use super::{Executable, Interpreter};
use crate::{
builtins::{Array, ResultValue},
syntax::ast::node::{ArrayDecl, Node},
BoaProfiler,
};
impl Executable for ArrayDecl {
fn run(&self, interpreter: &mut Interpreter) -> ResultValue {
let _timer = BoaProfiler::global().start_event("ArrayDecl", "exec");
let array = Array::new_array(interpreter)?;
let mut elements = Vec::new();
for elem in self.as_ref() {
if let Node::Spread(ref x) = elem {
let val = x.run(interpreter)?;
let mut vals = interpreter.extract_array_properties(&val).unwrap();
elements.append(&mut vals);
continue;
}
elements.push(elem.run(interpreter)?);
}
Array::add_to_array_object(&array, &elements)?;
Ok(array)
}
}