diff options
| -rw-r--r-- | TODO.md | 3 |
1 files changed, 2 insertions, 1 deletions
@@ -162,7 +162,8 @@ the final full suite stays at the very end whatever its size. - [x] c typedefs: `typedef T name;` declares a type alias, including pointer, array and function types, usable everywhere a type is, shown in hovers. - [x] split `src/compiler/compiler.zc` into files by phase, listed in order in `src/compiler/parts`; the concatenation reproduces the old file exactly so every image stayed byte-identical. the makefile, tool scripts, `genmap` (which still writes one `compiler.zc` into a map directory), the language server (it embeds each part and serves them as the one document `tinyvm:/compiler.zc`), tests and docs read the list. the comments in `src/runtime/rt.zc` that say "compiler.zc" were left alone (rt.zc is part of the genome, and this change touched no genome source). - [ ] a cross-reference report: for every global of the compiler, the functions that write it and the ones that only read it, built from the language server's references so scoping is exact, runnable as a script and in ci so a new writer of core state shows up in review. -- [ ] group the compiler's parallel per-local arrays (`lname`, `ltype`, `lstate`, `lhome`, `lown`, ...) into one record per local with accessor functions, so a branch snapshot is one block copy and each field's invariant is written once next to the record. then do the same for symbols and types. the genome must keep reaching its fixpoint, and the analyzer's behavior must not change (all rejection suites and the program checks identical). +- [ ] zc0 structs (word-sized fields, pointers, values, arrays of structs, field access), plain enums and `?:`, so the compiler's own sources can use records. this blocks the records refactor below. +- [ ] (needs zc0 structs) group the compiler's parallel per-local arrays (`lname`, `ltype`, `lstate`, `lhome`, `lown`, ...) into one record per local with accessor functions, so a branch snapshot is one block copy and each field's invariant is written once next to the record. then do the same for symbols and types. the genome must keep reaching its fixpoint, and the analyzer's behavior must not change (all rejection suites and the program checks identical). - [ ] zc0 has no `?:`; add it so parity covers conditional expressions, and grow zc0's subset where it is cheap (structs and enums are the largest group of programs parity skips today). - [ ] remaining zc0 gaps: string literals over 4095 bytes, `embed` of an array type inside a function, `x as T` with more than a single name (`x as int*`), and zc0 silently accepting `.u` on a parameter where the self-hosted compiler rejects it; also `docs/history/43-stdlib/notes.md` still says zc0 reserves u/m/d (a history note: add a pointer forward rather than rewriting it). - [ ] a run-only image accepts `void main()` from zc0 but the self-hosted compiler rejects it against `run.zc`'s `int main();` prototype; make the two agree. |
