feat: 支持 class 静态方法与静态 super

This commit is contained in:
爱特每羊队
2026-06-09 09:59:42 +08:00
parent 5638638909
commit b2540f427b
4 changed files with 90 additions and 8 deletions
+36
View File
@@ -113,3 +113,39 @@ fn derived_method_super_call_uses_current_receiver() {
.unwrap();
assert_num(result, 3.0);
}
#[test]
fn static_method_is_callable_on_constructor() {
let mut vm = Vm::new();
let result = eval(&mut vm, "class A { static m(){ return 1 } } A.m()").unwrap();
assert_eq!(result.as_int(), 1);
}
#[test]
fn static_and_instance_methods_do_not_collide() {
let mut vm = Vm::new();
let result = eval(
&mut vm,
"class A { m(){ return 1 } static m(){ return 2 } } let a = new A(); a.m() + A.m()",
)
.unwrap();
assert_num(result, 3.0);
}
#[test]
fn derived_static_method_super_call_resolves_parent_constructor() {
let mut vm = Vm::new();
let result = eval(
&mut vm,
"class A { static m(){ return 1 } } class B extends A { static n(){ return super.m() + 1 } } B.n()",
)
.unwrap();
assert_num(result, 2.0);
}
#[test]
fn inherited_static_method_is_found_on_constructor_chain() {
let mut vm = Vm::new();
let result = eval(&mut vm, "class A { static m(){ return 4 } } class B extends A {} B.m()").unwrap();
assert_eq!(result.as_int(), 4);
}