feat: 支持访问器描述符与 get/set 语法
This commit is contained in:
@@ -72,6 +72,24 @@ fn compile_multiple_stmts() {
|
||||
assert!(load_count >= 3);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn compile_object_literal_getter_emits_define_accessor() {
|
||||
let module = compile_source("var o = { get x() { return 1; } };");
|
||||
assert!(
|
||||
module.bytecode.iter().any(|&i| opcode::opcode(i) == OpCode::DEFINE_ACCESSOR),
|
||||
"object literal getter should emit DEFINE_ACCESSOR"
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn compile_object_literal_setter_emits_define_accessor() {
|
||||
let module = compile_source("var o = { set x(v) { this.y = v; } };");
|
||||
assert!(
|
||||
module.bytecode.iter().any(|&i| opcode::opcode(i) == OpCode::DEFINE_ACCESSOR),
|
||||
"object literal setter should emit DEFINE_ACCESSOR"
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn compile_binary_ops() {
|
||||
let tests = [
|
||||
|
||||
@@ -278,3 +278,21 @@ fn compile_class_declaration_default_constructor_creates_submodule() {
|
||||
"default constructor submodule should be marked as class constructor"
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn compile_class_instance_getter_emits_define_accessor() {
|
||||
let module = compile_source("class A { get x() { return 1; } }");
|
||||
assert!(
|
||||
module.bytecode.iter().any(|&i| opcode::opcode(i) == OpCode::DEFINE_ACCESSOR),
|
||||
"class getter should emit DEFINE_ACCESSOR"
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn compile_class_static_setter_emits_define_accessor() {
|
||||
let module = compile_source("class A { static set x(v) { this.y = v; } }");
|
||||
assert!(
|
||||
module.bytecode.iter().any(|&i| opcode::opcode(i) == OpCode::DEFINE_ACCESSOR),
|
||||
"static class setter should emit DEFINE_ACCESSOR"
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user