From e67f22ba5c7e4aec9162cff5d21c371e39c0c3e9 Mon Sep 17 00:00:00 2001 From: nyash-codex Date: Sat, 1 Nov 2025 12:07:22 +0900 Subject: [PATCH] fix(mir): remove ValueId reset in function lowering - resolve ValueId undefined errors MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Problem: ValueId(17/31/46615) undefined errors during VM execution Root cause: value_gen.reset() in lower_method_as_function and lower_static_method_as_function caused ValueId reuse across multiple functions, leading to value_types HashMap corruption Solution: Remove 6 lines (2 sets of save/reset/restore logic) - Set 1 (lower_method_as_function): Lines 896-897, 951 - Set 2 (lower_static_method_as_function): Lines 980-981, 1037 Impact: Maintains global ValueId uniqueness across all functions - No side effects (reset logic was unnecessary) - Fixes ParserBox and complex static box execution Test: /tmp/test_parserbox.hako now progresses past ValueId errors - Previous: Invalid value: use of undefined value ValueId(17) - After: Different error (Box type registration), confirming fix 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- src/mir/builder/builder_calls.rs | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/mir/builder/builder_calls.rs b/src/mir/builder/builder_calls.rs index 435d0805..8690cde8 100644 --- a/src/mir/builder/builder_calls.rs +++ b/src/mir/builder/builder_calls.rs @@ -893,8 +893,6 @@ impl super::MirBuilder { let saved_function = self.current_function.take(); let saved_block = self.current_block.take(); let saved_var_map = std::mem::take(&mut self.variable_map); - let saved_value_gen = self.value_gen.clone(); - self.value_gen.reset(); self.current_function = Some(function); self.current_block = Some(entry); self.ensure_block_exists(entry)?; @@ -950,7 +948,6 @@ impl super::MirBuilder { self.current_function = saved_function; self.current_block = saved_block; self.variable_map = saved_var_map; - self.value_gen = saved_value_gen; Ok(()) } @@ -980,8 +977,6 @@ impl super::MirBuilder { let saved_function = self.current_function.take(); let saved_block = self.current_block.take(); let saved_var_map = std::mem::take(&mut self.variable_map); - let saved_value_gen = self.value_gen.clone(); - self.value_gen.reset(); self.current_function = Some(function); self.current_block = Some(entry); self.ensure_block_exists(entry)?; @@ -1039,7 +1034,6 @@ impl super::MirBuilder { self.current_function = saved_function; self.current_block = saved_block; self.variable_map = saved_var_map; - self.value_gen = saved_value_gen; // Restore static box context self.current_static_box = saved_static_ctx; Ok(())