Index Operator — Design (Phase‑20.31 scoped) Scope (Phase‑1) - Support bracket indexing for Array/Map: - Read: expr[index] - Write: expr[index] = value - Semantics (lowering): - Array - Read → nyash.array.get_h(handle, idx) - Write → nyash.array.set_h(handle, idx, val) - Map - Read → nyash.map.get_hh(handle, key_any) - Write → nyash.map.set_hh(handle, key_any, val_any) - Out of scope in Phase‑1: String indexing/ranges. Parser/AST - Add IndexExpr(target, index) - Permit Assign(IndexExpr, value) on the LHS. MIR Lowering (Fail‑Fast contract) - If receiver is neither Array nor Map → error: "index operator is only supported for Array/Map". - For Map keys/values: - If arguments are SSA values (handles), pass as is; otherwise wrap primitive i64 as IntegerBox via available builder utilities. Error Policy - Fail‑Fast, no silent fallback. - Stable diagnostics for unsupported types and malformed LHS. Rollout / Flags - Implement in Rust parser first; Ny parser later. - If needed, guard with a dev flag for initial rollout (HAKO_INDEX_OPERATOR_DEV=1), default ON in dev profile, OFF in prod profiles. Tests (canaries) - arr_read: [1,2][0] == 1 → true - arr_write: arr[1]=3; arr[1]==3 → true - map_rw: m[10]=7; m[10]==7 → true - negative: "hello"[0] (Phase‑1) → error Notes - This leverages existing NyRT dotted externs already implemented for Array/Map, minimizing surface area and risk.