WIP: Add Store instruction to MIR for variable assignments

- Added Store instruction generation in build_assignment()
- This partially addresses the VM infinite loop issue
- However, the loop still uses old values (%0) instead of updated values
- Need to implement proper SSA phi nodes for loop variables

The root cause: MIR generation doesn't properly track variable updates
in loops. Current SSA implementation lacks phi nodes.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Moe Charm
2025-08-18 22:04:50 +09:00
parent 8f8781219e
commit 54f7d6eb63
3 changed files with 46 additions and 1 deletions

View File

@ -0,0 +1,12 @@
// 超シンプルなVMループテスト
local i = 1
print("Before loop: i = " + i)
// 3回だけループ
loop(i <= 3) {
print("In loop: i = " + i)
i = i + 1
print("After increment: i = " + i)
}
print("After loop: i = " + i)

View File

@ -0,0 +1,25 @@
// Windows VM Test Program
// 超シンプルなプログラムでVMの動作確認
print("🎉 Hello from Nyash VM on Windows!")
print("=====================================")
// 基本的な計算
local x = 10
local y = 20
local result = x + y
print("10 + 20 = " + result)
// ループテスト
print("\nCounting to 5:")
local i = 1
loop(i <= 5) {
print(" Count: " + i)
i = i + 1
}
// Box生成テスト
local str = new StringBox("Nyash")
print("\nStringBox created: " + str)
print("\n✅ VM test completed successfully!")

View File

@ -316,7 +316,15 @@ impl MirBuilder {
let value_id = self.build_expression(value)?;
// In SSA form, each assignment creates a new value
self.variable_map.insert(var_name, value_id);
self.variable_map.insert(var_name.clone(), value_id);
// Generate a Store instruction to ensure VM can track the assignment
// For now, we use the variable name as a simple pointer identifier
let var_ptr = self.value_gen.next();
self.emit_instruction(MirInstruction::Store {
value: value_id,
ptr: var_ptr,
})?;
Ok(value_id)
}