diff --git a/aster-core/src/vm/compiler.rs b/aster-core/src/vm/compiler.rs index cbf26e4..8b83213 100644 --- a/aster-core/src/vm/compiler.rs +++ b/aster-core/src/vm/compiler.rs @@ -77,6 +77,7 @@ struct Local { name: String, depth: u8, // scope depth where declared; 0 = uninitialized is_captured: bool, + #[allow(dead_code)] is_const: bool, } @@ -88,10 +89,8 @@ struct Upvalue { } struct LoopContext { - start_ip: usize, // bytecode offset of loop condition - break_patches: Vec, // jump instruction offsets that need break dest - continue_patches: Vec,// jump instruction offsets that need continue dest - scope_depth: u8, // scope depth when loop started + break_patches: Vec, + continue_patches: Vec, } pub struct Compiler { @@ -241,10 +240,8 @@ impl Compiler { let exit_jump = self.emit_jump(OpCode::JumpIfFalse); self.loop_stack.push(LoopContext { - start_ip, break_patches: Vec::new(), continue_patches: Vec::new(), - scope_depth: self.scope_depth, }); self.compile_stmt(body)?; @@ -279,10 +276,8 @@ impl Compiler { let exit_jump = self.emit_jump(OpCode::JumpIfFalse); self.loop_stack.push(LoopContext { - start_ip, break_patches: Vec::new(), continue_patches: Vec::new(), - scope_depth: self.scope_depth, }); self.compile_stmt(body)?; @@ -355,10 +350,8 @@ impl Compiler { // 7. Loop body (can resolve var_name to loop_var_slot) self.loop_stack.push(LoopContext { - start_ip: forin_loc, break_patches: Vec::new(), continue_patches: Vec::new(), - scope_depth: self.scope_depth, }); self.compile_stmt(body)?; @@ -993,9 +986,3 @@ fn assign_op_to_compound(op: &AssignOp) -> CompoundOp { AssignOp::Equal => unreachable!(), } } - -fn emit_i16_placeholder(code: &mut Vec, op: OpCode) -> usize { - let loc = code.len(); - emit_i16(code, op, 0x7FFF); - loc -} diff --git a/aster-core/src/vm/vm.rs b/aster-core/src/vm/vm.rs index 91a4516..690df32 100644 --- a/aster-core/src/vm/vm.rs +++ b/aster-core/src/vm/vm.rs @@ -46,7 +46,7 @@ pub struct Vm { pub stack: Vec, /// Call frames - pub frames: Vec, + frames: Vec, /// Script-level globals (top-level let bindings) pub globals: Rc>>, @@ -61,7 +61,7 @@ pub struct Vm { pub current_dir: String, /// Open upvalues (tracked so closures share the same upvalue object) - pub open_upvalues: Vec>>, + open_upvalues: Vec>>, /// VM-compiled closures: maps Function Rc pointer → Closure data closures: RefCell>>, @@ -602,10 +602,6 @@ impl Vm { // IP management // ======================================================================== - fn frame(&self) -> &CallFrame { - self.frames.last().unwrap() - } - fn frame_mut(&mut self) -> &mut CallFrame { self.frames.last_mut().unwrap() } @@ -917,13 +913,6 @@ impl Vm { } } - fn get_constant(&self, idx: usize) -> Result { - let frame = self.frames.last().unwrap(); - frame.closure.proto.constants.get(idx).cloned().ok_or_else(|| RuntimeError::RuntimeError { - message: format!("Constant index {} out of bounds", idx), - token: None, - }) - } // ======================================================================== // Upvalues