diff --git a/src/mir/builder/calls/lowering.rs b/src/mir/builder/calls/lowering.rs index e7c4612c..12cd7a64 100644 --- a/src/mir/builder/calls/lowering.rs +++ b/src/mir/builder/calls/lowering.rs @@ -7,6 +7,7 @@ use crate::ast::ASTNode; use crate::mir::builder::{MirBuilder, MirType, MirInstruction}; +use crate::mir::{ValueId}; use crate::mir::region::function_slot_registry::FunctionSlotRegistry; use super::function_lowering; use std::collections::HashMap; @@ -267,16 +268,18 @@ impl MirBuilder { let mut slot_regs: Vec<(String, Option)> = Vec::new(); if let Some(ref mut f) = self.current_function { - // First parameter is always 'me' - let me_id = f.next_value_id(); + // 📦 Hotfix 6: Use pre-reserved ValueIds instead of generating new ones + // MirFunction::new() already reserved ValueIds 0..N for parameters + // First parameter is always 'me' at ValueId(0) + let me_id = ValueId(0); f.params.push(me_id); self.variable_map.insert("me".to_string(), me_id); self.value_origin_newbox.insert(me_id, box_name.to_string()); slot_regs.push(("me".to_string(), None)); - // Then regular parameters - for p in params { - let pid = f.next_value_id(); + // Then regular parameters at ValueId(1), ValueId(2), ... + for (idx, p) in params.iter().enumerate() { + let pid = ValueId((idx + 1) as u32); f.params.push(pid); self.variable_map.insert(p.clone(), pid); slot_regs.push((p.clone(), None));