Files
hakorune/docs/development/selfhosting/index-operator-hako.md

32 lines
1.2 KiB
Markdown
Raw Normal View History

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.