fix: 修复多分配寄存器导致的空属性问题

This commit is contained in:
2026-06-06 12:48:18 +08:00
parent 5ee8635615
commit 75c30931c6
2 changed files with 3 additions and 5 deletions
+1 -2
View File
@@ -205,9 +205,8 @@ impl Compiler {
} }
Expression::StaticMemberExpression(member) => { Expression::StaticMemberExpression(member) => {
self.count_expression(&member.object, ctx); self.count_expression(&member.object, ctx);
ctx.alloc_reg(); // key register ctx.alloc_reg();
ctx.projected_pc += 1; // LOAD_CONST key ctx.projected_pc += 1; // LOAD_CONST key
ctx.alloc_reg(); // result register
ctx.projected_pc += 1; // IC_GET_PROP ctx.projected_pc += 1; // IC_GET_PROP
ctx.projected_pc += 1; // IC ext word ctx.projected_pc += 1; // IC ext word
} }
+2 -3
View File
@@ -382,15 +382,14 @@ impl Compiler {
(idx & 0xFF) as u8, (idx & 0xFF) as u8,
((idx >> 8) & 0xFF) as u8, ((idx >> 8) & 0xFF) as u8,
)); ));
let result_reg = ctx.alloc_reg();
ctx.emit(opcode::encode( ctx.emit(opcode::encode(
OpCode::IC_GET_PROP, OpCode::IC_GET_PROP,
result_reg, 0,
obj_reg, obj_reg,
key_reg, key_reg,
)); ));
ctx.emit(0); ctx.emit(0);
Ok(result_reg) Ok(obj_reg)
} }
Expression::ComputedMemberExpression(member) => { Expression::ComputedMemberExpression(member) => {
let obj_reg = self.emit_expression(&member.object, ctx)?; let obj_reg = self.emit_expression(&member.object, ctx)?;