issue(0141): comptime List growth in type construction (two-layer)
File the last METATYPE deferred enhancement: List(T).append at comptime
bails ('struct_get: base has no fields') in a type-construction ::.
Standalone repro + two-layer root cause (null comptime allocator at
scanDecls; *T slot_ptr struct_get) + investigation prompt. Non-blocking:
array-literal locals already build variant lists (examples/0620/0624).
Checkpoint + Known issues reference 0141.
This commit is contained in:
@@ -114,7 +114,9 @@ shifts every `.ir` snapshot. On-demand import keeps the prelude clean.
|
||||
## Next step
|
||||
The reflect/construct triad is COMPLETE — `` `enum `` (`0619`), `` `struct ``
|
||||
(`0622`), `` `tuple `` (`0623`) all reflect AND construct + round-trip. Remaining
|
||||
METATYPE work is ONE deferred enhancement, a clean diagnostic rather than a crash:
|
||||
METATYPE work is ONE deferred enhancement, a clean diagnostic rather than a crash
|
||||
— filed as **issue 0141** (repro `issues/0141-*.sx` + full two-layer writeup +
|
||||
investigation prompt):
|
||||
- **Comptime `List` growth** — `List(T).append` at comptime bails ("struct_get:
|
||||
base has no fields"). Doesn't block anything: array-literal locals already build
|
||||
variant lists (`examples/0620`/`0624`). Probe `.sx-tmp/probe_makeenum.sx` /
|
||||
@@ -166,17 +168,22 @@ capabilities would let the variant list be built more freely; both error cleanly
|
||||
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.** `List(T).append` at comptime bails ("struct_get:
|
||||
base has no fields"). Investigated — two layers (null comptime allocator at
|
||||
scanDecls + `struct_get` through a `*T` slot_ptr chain); see the detailed writeup
|
||||
under "Next step". Layer 1 has a known fix; layer 2 is deep. Probe
|
||||
`.sx-tmp/probe_makeenum.sx`.
|
||||
- **Comptime `List` growth** (issue 0141). `List(T).append` at comptime bails
|
||||
("struct_get: base has no fields"). Investigated — two layers (null comptime
|
||||
allocator at scanDecls + `struct_get` through a `*T` slot_ptr chain); see the
|
||||
detailed writeup under "Next step" and `issues/0141-*.md`. Layer 1 has a known
|
||||
fix; layer 2 is deep. Probe `.sx-tmp/probe_makeenum.sx`.
|
||||
- ~~Generic type-fn body locals~~ — DONE. A generic `($T) -> Type` now
|
||||
comptime-evaluates its FULL body (prelude statements + return), so a local
|
||||
before the return resolves. `createComptimeFunctionWithPrelude` +
|
||||
`evalComptimeTypeBody`; no-prelude bodies stay on the old path. `examples/0624`.
|
||||
|
||||
## Known issues
|
||||
- issue 0141 (OPEN, deferred enhancement — not a blocker) — `List(T).append` at
|
||||
comptime bails in a type-construction `::` (two layers: null comptime allocator
|
||||
+ `*T` slot_ptr `struct_get`). Workaround: array-literal locals
|
||||
(`examples/0620`/`0624`). Full writeup + investigation prompt in
|
||||
`issues/0141-*.md`.
|
||||
- issue 0140 — comptime type-construction bail panicked instead of diagnosing —
|
||||
RESOLVED. `evalComptimeType` now clears `last_bail_detail` before the interp
|
||||
call and, on the `catch`, emits a build-gating `.err` at the construction span
|
||||
|
||||
Reference in New Issue
Block a user