Fix LLVM print to output 42 instead of 4 (handle value) for field access. Root cause: Type tags lost through MIR copy instruction chains - getField tagged ValueId 16 as handle - MIR copy chain: 16 → 17 → 18 - print used ValueId 18 (not tagged) → treated as raw integer Solution: Type-tag based handle detection with copy propagation - boxcall.py: Tag getField results as handles - global_call.py: Skip boxing for handles in print - copy.py: Propagate value_types tags through copy chains Test coverage: - apps/tests/phase285_print_raw_int.hako: Raw int regression check - apps/tests/phase285_userbox_field_basic.hako: Field access parity Result: VM/LLVM parity achieved (both output 42) ✅ 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
9 lines
233 B
Plaintext
9 lines
233 B
Plaintext
// Phase 285LLVM-1.4: Ensure raw integers are still boxed correctly
|
|
// This test guards against handle collision (raw 42 vs handle 42)
|
|
static box Main {
|
|
main() {
|
|
print(42) // Raw integer literal
|
|
return 0
|
|
}
|
|
}
|