feat: class 私有成员语义(字段/方法/访问器 + brand 检查 + 契约修复)

This commit is contained in:
2026-08-09 11:08:36 +08:00
parent 088b3bc976
commit 6c79dbb21c
41 changed files with 573 additions and 216 deletions
+24 -5
View File
@@ -58,10 +58,8 @@ impl Inst {
| OpCode::SET_PROP_DYNAMIC
| OpCode::IC_SET_PROP
| OpCode::SET_ELEM
| OpCode::GET_PRIVATE
| OpCode::SET_PRIVATE
| OpCode::INIT_PRIVATE
| OpCode::PRIVATE_BRAND_IN
| OpCode::DELETE_PROP_STATIC
| OpCode::DELETE_PROP_DYNAMIC
| OpCode::DEFINE_ACCESSOR
@@ -253,16 +251,37 @@ impl Inst {
| OpCode::SET_PROP_DYNAMIC
| OpCode::IC_SET_PROP
| OpCode::SET_ELEM
| OpCode::GET_PRIVATE
| OpCode::SET_PRIVATE
| OpCode::INIT_PRIVATE
| OpCode::PRIVATE_BRAND_IN
| OpCode::DEFINE_ACCESSOR
| OpCode::DEFINE_PROP => {
push_operand(&mut uses, &self.rd);
push_operand(&mut uses, &self.a);
push_operand(&mut uses, &self.b);
}
// 私有写:rd=对象、a=值、b=键是 use,额外读 ext[0](brand 对象寄存器)
OpCode::SET_PRIVATE => {
push_operand(&mut uses, &self.rd);
push_operand(&mut uses, &self.a);
push_operand(&mut uses, &self.b);
let brand_reg = self.ext.first().copied().unwrap_or(0);
if brand_reg != 0 {
uses.push(brand_reg);
}
}
// 私有读/品牌检查:a=对象、b=私有键是 use,rd 是结果 def
// GET_PRIVATE 额外读 ext[0](brand 对象寄存器,0 表示跳过检查)
OpCode::GET_PRIVATE => {
push_operand(&mut uses, &self.a);
push_operand(&mut uses, &self.b);
let brand_reg = self.ext.first().copied().unwrap_or(0);
if brand_reg != 0 {
uses.push(brand_reg);
}
}
OpCode::PRIVATE_BRAND_IN => {
push_operand(&mut uses, &self.a);
push_operand(&mut uses, &self.b);
}
// delete:读 obj(+dynamic 读 key)
OpCode::DELETE_PROP_STATIC => push_operand(&mut uses, &self.rd),
OpCode::DELETE_PROP_DYNAMIC => {