performance improvements

This commit is contained in:
2026-04-06 00:04:40 +03:00
parent 7582c5aee7
commit b0ea71e104
8 changed files with 469 additions and 343 deletions

View File

@@ -55,7 +55,7 @@ fn value_def_to_value(def: &ValueDef) -> Value {
};
map.insert(SmolStr::from(k.as_str()), val);
}
Value::Object(map)
Value::Object(Box::new(map))
}
let obj = def.value.as_ref().unwrap().as_object().unwrap();
json_obj_to_value(obj)

View File

@@ -628,7 +628,7 @@ fn test_numberlist_contains() {
let mut compiler = Compiler::new();
let bytecode = compiler.compile(ast).expect("compile");
let mut vm = VM::new(&bytecode);
vm.set_global("nums", Value::NumberList(vec![dec!(1), dec!(2), dec!(3), dec!(4)]));
vm.set_global("nums", Value::NumberList(Box::new(vec![dec!(1), dec!(2), dec!(3), dec!(4)])));
vm.execute().expect("execute");
assert_eq!(vm.get_global("result").unwrap(), &Value::Boolean(true));
}
@@ -639,7 +639,7 @@ fn test_numberlist_indexof() {
let mut compiler = Compiler::new();
let bytecode = compiler.compile(ast).expect("compile");
let mut vm = VM::new(&bytecode);
vm.set_global("nums", Value::NumberList(vec![dec!(1), dec!(2), dec!(3)]));
vm.set_global("nums", Value::NumberList(Box::new(vec![dec!(1), dec!(2), dec!(3)])));
vm.execute().expect("execute");
assert_eq!(vm.get_global("result").unwrap(), &Value::Number(dec!(2)));
}
@@ -650,7 +650,7 @@ fn test_numberlist_slice() {
let mut compiler = Compiler::new();
let bytecode = compiler.compile(ast).expect("compile");
let mut vm = VM::new(&bytecode);
vm.set_global("nums", Value::NumberList(vec![dec!(10), dec!(20), dec!(30), dec!(40)]));
vm.set_global("nums", Value::NumberList(Box::new(vec![dec!(10), dec!(20), dec!(30), dec!(40)])));
vm.execute().expect("execute");
// slice(1,3) = [20, 30], sum = 50
assert_eq!(vm.get_global("result").unwrap(), &Value::Number(dec!(50)));
@@ -662,7 +662,7 @@ fn test_numberlist_reverse() {
let mut compiler = Compiler::new();
let bytecode = compiler.compile(ast).expect("compile");
let mut vm = VM::new(&bytecode);
vm.set_global("nums", Value::NumberList(vec![dec!(1), dec!(2), dec!(3)]));
vm.set_global("nums", Value::NumberList(Box::new(vec![dec!(1), dec!(2), dec!(3)])));
vm.execute().expect("execute");
assert_eq!(vm.get_global("result").unwrap(), &Value::Number(dec!(3)));
}
@@ -673,7 +673,7 @@ fn test_numberlist_sort() {
let mut compiler = Compiler::new();
let bytecode = compiler.compile(ast).expect("compile");
let mut vm = VM::new(&bytecode);
vm.set_global("nums", Value::NumberList(vec![dec!(30), dec!(10), dec!(20)]));
vm.set_global("nums", Value::NumberList(Box::new(vec![dec!(30), dec!(10), dec!(20)])));
vm.execute().expect("execute");
assert_eq!(vm.get_global("result").unwrap(), &Value::Number(dec!(10)));
}
@@ -684,7 +684,7 @@ fn test_numberlist_isempty() {
let mut compiler = Compiler::new();
let bytecode = compiler.compile(ast).expect("compile");
let mut vm = VM::new(&bytecode);
vm.set_global("nums", Value::NumberList(vec![]));
vm.set_global("nums", Value::NumberList(Box::new(vec![])));
vm.execute().expect("execute");
assert_eq!(vm.get_global("result").unwrap(), &Value::Boolean(true));
}
@@ -1028,7 +1028,7 @@ fn make_object(entries: Vec<(&str, Value)>) -> Value {
for (k, v) in entries {
map.insert(SmolStr::new(k), v);
}
Value::Object(map)
Value::Object(Box::new(map))
}
#[test]
@@ -1113,7 +1113,7 @@ fn test_object_method_keys() {
let result = run_expr_with_globals("person.keys()", vec![("person", obj)]);
assert_eq!(
result,
Value::StringList(vec![SmolStr::new("name"), SmolStr::new("age")])
Value::StringList(Box::new(vec![SmolStr::new("name"), SmolStr::new("age")]))
);
}
@@ -1177,7 +1177,7 @@ fn test_object_method_values_strings() {
let result = run_expr_with_globals("obj.values()", vec![("obj", obj)]);
assert_eq!(
result,
Value::StringList(vec![SmolStr::new("x"), SmolStr::new("y")])
Value::StringList(Box::new(vec![SmolStr::new("x"), SmolStr::new("y")]))
);
}
@@ -1188,7 +1188,7 @@ fn test_object_method_values_numbers() {
("b", Value::Number(dec!(2))),
]);
let result = run_expr_with_globals("obj.values()", vec![("obj", obj)]);
assert_eq!(result, Value::NumberList(vec![dec!(1), dec!(2)]));
assert_eq!(result, Value::NumberList(Box::new(vec![dec!(1), dec!(2)])));
}
#[test]