Files
hakorune/lang/src/llvm_ir/emit
nyash-codex eadde8d1dd fix(mir/builder): use function-local ValueId throughout MIR builder
Phase 25.1b: Complete SSA fix - eliminate all global ValueId usage in function contexts.

Root cause: ~75 locations throughout MIR builder were using global value
generator (self.value_gen.next()) instead of function-local allocator
(f.next_value_id()), causing SSA verification failures and runtime
"use of undefined value" errors.

Solution:
- Added next_value_id() helper that automatically chooses correct allocator
- Fixed 19 files with ~75 occurrences of ValueId allocation
- All function-context allocations now use function-local IDs

Files modified:
- src/mir/builder/utils.rs: Added next_value_id() helper, fixed 8 locations
- src/mir/builder/builder_calls.rs: 17 fixes
- src/mir/builder/ops.rs: 8 fixes
- src/mir/builder/stmts.rs: 7 fixes
- src/mir/builder/emission/constant.rs: 6 fixes
- src/mir/builder/rewrite/*.rs: 10 fixes
- + 13 other files

Verification:
- cargo build --release: SUCCESS
- Simple tests with NYASH_VM_VERIFY_MIR=1: Zero undefined errors
- Multi-parameter static methods: All working

Known remaining: ValueId(22) in Stage-B (separate issue to investigate)

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-17 00:48:18 +09:00
..

LLVMEmitBox — MIR(JSON v0) → Object (.o)

Responsibility

  • Generate an object file from MIR(JSON v0) via a provider.
  • Phase 20.34 starts with a providerfirst stub; connects to a Plugin v2 wrapper for ny-llvmc (or llvmlite) next.

Interface (stable)

  • emit_object(mir_json: String, opts: Map|Null) -> String|Null
    • Returns output path string on success; returns null with a tagged diagnostic on failure.

Tags (FailFast, stable)

  • [llvmemit/input/null] — input is null
  • [llvmemit/input/invalid] — missing functions/blocks
  • [llvmemit/provider/missing] — no provider hint
  • [llvmemit/provider/unsupported] <name> — unsupported provider name
  • [llvmemit/ny-llvmc/not-found] — ny-llvmc not found (planned)
  • [llvmemit/ny-llvmc/failed status=N] — ny-llvmc returned nonzero (planned)
  • [llvmemit/skip] provider stub; implement Plugin v2 call — current stub behavior

Toggles (default OFF)

  • HAKO_LLVM_EMIT_PROVIDER=ny-llvmc|llvmlite — select provider
  • HAKO_LLVM_OPT_LEVEL=0..3 — optimization level (providerside)
  • HAKO_LLVM_TIMEOUT_MS=60000 — process timeout (providerside)

Notes

  • BoxFirst: keep provider behind a single Plugin v2 method LLVMCodegenBox.emit_object/2.
  • Environments must not change defaults silently; FailFast with stable tags.