- 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.
32 lines
1.2 KiB
Markdown
32 lines
1.2 KiB
Markdown
Index Operator in Hakorune Compiler (selfhost)
|
||
|
||
Scope
|
||
- Bring Hako-side behavior up to parity with Rust parser/MIR builder for Phase‑20.31.
|
||
|
||
User-facing spec (Phase‑1)
|
||
- Read: expr[index] for Array/Map
|
||
- Write: expr[index] = value for Array/Map
|
||
- String indexing/ranges: out of scope in Phase‑1
|
||
- Unsupported receiver: Fail‑Fast 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 (opt‑in, 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 Phase‑2 (String/range) for later work.
|
||
|