Files
hakorune/docs/development/selfhosting/index-operator-hako.md
nyash-codex 5e3d9e7ae4 restore(lang/compiler): bring back lang/src/compiler from e917d400; add Hako index canaries and docs; implement Rust-side index operator (Array/Map get/set) with Fail‑Fast diagnostics
- restore: lang/src/compiler/** (parser/emit/builder/pipeline_v2) from e917d400
- docs: docs/development/selfhosting/index-operator-hako.md
- smokes(hako): tools/smokes/v2/profiles/quick/core/index_operator_hako.sh (opt-in)
- smokes(vm): adjust index_operator_vm.sh for semicolon gate + stable error text
- rust/parser: allow IndexExpr and assignment LHS=Index; postfix parse LBRACK chain
- rust/builder: lower arr/map index to BoxCall get/set; annotate array/map literals; Fail‑Fast for unsupported types
- CURRENT_TASK: mark Rust side done; add Hako tasks checklist

Note: files disappeared likely due to branch FF to a lineage without lang/src/compiler; no explicit delete commit found. Added anchor checks and suggested CI guard in follow-up.
2025-10-31 20:18:39 +09:00

32 lines
1.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Index Operator in Hakorune Compiler (selfhost)
Scope
- Bring Hako-side behavior up to parity with Rust parser/MIR builder for Phase20.31.
User-facing spec (Phase1)
- Read: expr[index] for Array/Map
- Write: expr[index] = value for Array/Map
- String indexing/ranges: out of scope in Phase1
- Unsupported receiver: FailFast with a stable diagnostic
Required changes (Hako compiler)
- Parser
- Add IndexExpr(target, index)
- Permit Assign(IndexExpr, value) on LHS
- Lowering (MIR emit)
- Array: index read/write → BoxCall("get"/"set") on ArrayBox
- Map: index read/write → BoxCall("get"/"set") on MapBox
- Optional (AOT): dotted extern mapping remains as today (nyash.array.get_h, nyash.map.set_hh …)
- Diagnostics
- If receiver type cannot be resolved to ArrayBox/MapBox, emit: "index operator is only supported for Array/Map"
Smokes (optin, external HAKO_BIN)
- tools/smokes/v2/profiles/quick/core/index_operator_hako.sh
- Requires HAKO_BIN; skips with WARN when missing
- Canaries: array read/write, map rw, negative string
Rollout
- No flags are required; follow Rust side semantics.
- Keep Phase2 (String/range) for later work.