docs(metatype): comptime aggregate subslice gap resolved

This commit is contained in:
agra
2026-06-17 05:16:08 +03:00
parent 60471b3a2c
commit 964ddeb73a

View File

@@ -97,12 +97,15 @@ Pick any (independent):
`declare()` never `define()`d (hard error at end of comptime), use-before-define.
### make_enum follow-ups (deferred capability gaps — NOT crashes; clean diagnostics)
`make_enum` itself is DONE (see Last completed step). Two adjacent capabilities
would let the variant list be built more freely; both currently error cleanly
`make_enum` itself is DONE (see Last completed step). Remaining adjacent
capabilities would let the variant list be built more freely; both error cleanly
(post-0140) rather than crash, so they're enhancements, not blockers:
- **Comptime slice over a non-string aggregate.** `arr[..]` over a `[]EnumVariant`
array bails — the interp's `.subslice` op (`interp.zig:~1235`) only supports
STRING bases. Needed for `vs[..]`-style construction. Probe `.sx-tmp/probe_me2.sx`.
- ~~Comptime slice over a non-string aggregate~~ — DONE. `arr[lo..hi]` over a
`[]EnumVariant` array now yields a real slice value at comptime (was: bailed,
string-only). Fix threaded `base_ty` onto the `Subslice` op so the interp tells
an array from a `{ptr,len}` slice, folded open-ended `hi` to a fixed array's
static length at lower time (no runtime/.ir change), and added
`interp.zig:subsliceElements`. `examples/0621` locks it.
- **Comptime `List` growth.** Building variants via `List(EnumVariant).append` at
comptime bails ("struct_get: base has no fields") — the allocator/List protocol
path isn't fully interp-evaluable. Probe `.sx-tmp/probe_makeenum.sx`.
@@ -131,6 +134,13 @@ would let the variant list be built more freely; both currently error cleanly
`examples/1178` locks it).
## Log
- **Comptime subslice over non-string aggregates.** `arr[lo..hi]` at comptime
used to bail (interp `.subslice` was string-only) and the open-ended `hi` came
from a `.length` op that misread a 2-elem array as a `{ptr,len}` fat pointer.
Fix (interp-only; runtime already correct via `LLVMTypeOf`): thread `base_ty`
onto the `Subslice` op, fold open-ended `hi` to a fixed array's static length at
lower time (no IR/.ir change), add `subsliceElements`. `examples/0621` mints an
enum from `dirs[0..2]`. Suite green (679).
- **`make_enum` done.** General enum constructor `make_enum(name, variants:
[]EnumVariant) -> Type` in `meta.sx` (pure sx over declare/define). A non-generic
builder assembles the variant list in a local, then mints from it —