aboutsummaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* xref self-test: a real write in a compiler copy, reject unknown options; ↵Gravatar zinc 13 days4-16/+42
| | | | runerr.sh runs every folder it is given
* merge xref report: baseline, --check, self-testGravatar zinc 13 days10-32/+1178
|\
| * xref: checked-in baseline, --check self-test hooked into the lsp section, todoGravatar zinc 13 days5-29/+702
| |
| * agent/xref-report: unmerged work from previous sessionGravatar zinc 13 days6-4/+477
|/
* todo: record each agent's state at the end of the session and the merge orderGravatar zinc 13 days1-23/+170
|
* todo: test blocks, destructors and record/replay in flightGravatar zinc 13 days1-4/+7
|
* parity: clear links from earlier runs so a program's writes never reach the treeGravatar zinc 13 days1-0/+3
|
* Merge the defer statement; todo: tick it, add its follow-upsGravatar zinc 13 days23-7/+514
|\
| * zc: add the defer statementGravatar zinc 13 days23-6/+513
| | | | | | | | | | | | | | | | | | | | | | | | defer expr; and defer { ... } register code that runs when the enclosing block ends: at the end of the block, and at return, break and continue that leave it. the tokens are kept at the defer and compiled again at each exit (block_close, body, kw_return, kw_break, kw_continue), newest first, before the block's variables are released, so the analyzer sees a deferred rt.free(p) as the transfer of p where it runs. names mean what they meant at the defer; values are read when it runs. return, break and continue inside a deferred statement are errors, reported once. works in unchecked code and closures (own base per function context).
* | Merge four small fixes: std hovers, capture terminator, bare static calls, ↵Gravatar zinc 13 days13-20/+135
|\ \ | | | | | | | | | void main; todo updated
| * | fix std hover, full capture terminator, bare static calls, void main in ↵Gravatar zinc 13 days13-19/+133
| |/ | | | | | | | | | | | | | | | | | | | | | | | | run-only images - hover: a symbol from an embedded library source (tinyvm:std.zc, tinyvm:icon.zc) was looked up only in the document; look it up by its qualified name in the library source (hover_embedded_sym), and render a method found that way by its line (bs_hover). - std.capture: allocate one word more than the 256 it holds, so end() terminates inside the buffer. - a bare call to a static function of the enclosing struct resolves like a bare struct constant (mstruct is set for every non-generic struct's methods); the struct's own wins over a global. - run.zc declares main untyped (fn main();), so a run-only image accepts int, void or untyped main with both compilers.
* | todo: the spec verifier restarted from the first agent's partial workGravatar zinc 13 days1-3/+4
| |
* | jit_x64_test: run programs in a scratch directory so bareio's note stays out ↵Gravatar zinc 13 days1-4/+6
| | | | | | | | of the tree
* | Merge the x86-64 jit, phase 1; todo: tick it, add phase 2Gravatar zinc 13 days7-39/+668
|\ \
| * | x86-64 jit: zyi target, ZYNOO3, bench and test timeouts, docs; drop a stray fileGravatar zinc 13 days6-20/+33
| | |
| * | x86-64 jit: translate ordinary vm blocks to x86-64 on linux, o3 regions on ↵Gravatar zinc 13 days3-15/+625
| | | | | | | | | | | | the region interpreter
* | | todo: record the vision, priorities and settled feature decisions; add the ↵Gravatar zinc 13 days1-0/+94
| | | | | | | | | | | | items they imply
* | | todo: no zc0 structs; records become grouped, documented arrays; in-flight ↵Gravatar zinc 13 days1-10/+20
| |/ |/| | | | | list updated
* | todo: handoff section with state, conventions, in-flight work and ↵Gravatar zinc 13 days1-35/+96
| | | | | | | | architecture notes
* | todo: zc0 structs before the records refactorGravatar zinc 13 days1-1/+2
| |
* | Merge the compiler split into phase filesGravatar zinc 13 days29-10517/+10636
|\ \ | | | | | | | | | | | | also: ca_owners in the language server keeps the owner order in a fixed array instead of a heap list the analyzer rejected.
| * | split compiler.zc into files by phaseGravatar zinc 13 days29-10513/+10631
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | src/compiler/compiler.zc is now twelve files under src/compiler/, listed in order in src/compiler/parts. cat of the parts in order is byte-identical to the old file, so every compiler and image except the language server's is unchanged. no function was edited. consumers read the list: the makefile, bootstrap-check, genmap (which still writes one compiler.zc into a generated map directory), tinyvm.bat, test.sh, test_win.ps1 and the lsp drivers. the language server embeds each part and serves them joined as the one document tinyvm:/compiler.zc.
* | | todo: tick the spec; list the bugs its appendix b foundGravatar zinc 13 days1-1/+2
| | |
* | | Merge branch 'worktree-agent-ac140cf83750c2604' into ccr-0054c02e-dfdvndGravatar zinc 13 days3-2/+1095
|\ \ \
| * | | docs: add SPEC.md, the first written specification of zcGravatar zinc 13 days3-2/+1095
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Reference for lexing, types, expressions (full precedence table), statements, declarations, the ownership analyzer and its messages, compile-time execution and the runtime contract, with appendices for the zc0 subset and for doc/implementation disagreements and bugs found while checking the rules against build/bin/zy. Pointers added to README.md and ONBOARD.md.
* | | | todo: tick zc0 byte strings and u/m/d; note zc0's remaining gapsGravatar zinc 13 days1-1/+2
| | | | | | | | | | | | | | | | parity now compares 60 programs with no unexpected difference.
* | | | Merge branch 'worktree-agent-a0734822346ae18db' into ccr-0054c02e-dfdvndGravatar zinc 13 days6-52/+285
|\ \ \ \ | |_|/ / |/| | |
| * | | zc0: byte string types, u/m/d as names, enhancements in asmGravatar zinc 13 days6-52/+285
| |/ / | | | | | | | | | | | | | | | | | | | | | | | | bstr locals, globals, parameters and returns are byte strings for + , the comparisons, indexing, slicing, len and put_s; b"..." globals; embed inside a function. u, m and d are ordinary names: a recast is the letter with the star touching it (u*x), tags .u .m .d are accepted on types and bare. an enhancement named inside asm { } emits its opcode. zc0's image of the genome and language server sources is unchanged.
* | | todo: tick the parity runner; zc0 follow-ups it foundGravatar zinc 13 days1-1/+3
| | |
* | | Merge branch 'worktree-agent-aaf6bc066598a6622' into ccr-0054c02e-dfdvndGravatar zinc 13 days7-3/+292
|\ \ \
| * | | parity: compare what zc0 and the self-hosted compiler printGravatar zinc 13 days7-3/+292
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | src/tools/parity.sh compiles each program of tests/programs, examples and examples/learn with zc0 (runtime, program, mkgenome, a microcore with the image embedded, kept under build/parity/) and runs it beside build/bin/zy < prog.zc, then compares stdout. what zc0 rejects is skipped and counted. tests/parity.known lists the differences that are by design (zc0 has no ownership analysis or memdebug checks). make parity runs it. tests/programs/parity_ops.zc pins operator precedence and associativity across every binary operator, unary operators, assignment and short-circuit order; its output matches a c compiler's.
* | | | todo: compiler file split, cross-reference report, local records, x86-64 jitGravatar zinc 13 days1-0/+4
| |_|/ |/| |
* | | todo: tick typedefs and the string aliasGravatar zinc 13 days1-2/+2
| | |
* | | Merge branch 'worktree-agent-a3354164c07827b2e' into ccr-0054c02e-dfdvndGravatar zinc 13 days18-14/+326
|\ \ \
| * | | add c-style typedef and a built-in string aliasGravatar zinc 13 days18-14/+326
| |/ / | | | | | | | | | | | | | | | | | | | | | typedef T name; binds name to the type record of T, at the top level or in a function (scoped to its block). string is a built-in alias for char*. A type name straight before , or ) in a parameter list is the parameter's name, so fn f(string) still works. The language server shows typedef T name; on hover and highlights typedef as a keyword.
* | / todo: tick struct constants and member typos; add follow-ups and the spec workGravatar zinc 13 days1-1/+7
| |/ |/|
* | Merge branch 'worktree-agent-a96a10dc1489688ea' into ccr-0054c02e-dfdvndGravatar zinc 13 days9-7/+173
|\ \
| * | constants inside structs, and typo suggestions for fields and static membersGravatar zinc 13 days9-7/+173
| |/ | | | | | | | | | | | | | | const NAME = e; inside a struct body declares a compile-time constant named Struct.NAME, reached as Struct.NAME or by bare name in the struct's methods. A misspelled field or Struct.name member now ends its error with '; did you mean 'name'?' on the member word, which the language server turns into a quick fix.
* | Merge std library docsGravatar zinc 13 days4-47/+145
|\ \
| * | document the standard library apiGravatar zinc 13 days4-47/+145
| |/ | | | | | | | | | | | | | | | | | | | | every public declaration in src/lib/std.zc has a comment directly above it, so the language server can show it. comments only; no code changed. the comments now match the bodies: Host.env and Bytes.env report the characters copied (at most n - 1), capture drops output past 256 characters, and Buf.set can raise the length past the current end. adds examples/std_tour.zc, which calls one or two functions from each group, and points the README standard-library section at it.
* | todo: tick the markdown cleanup and onboarding checkGravatar zinc 13 days1-2/+2
| |
* | docs: remove temporary notes and fix onboarding driftGravatar zinc 13 days7-1230/+8
|/ | | | | | | | | | | | - delete TASKLIST.md and docs/design/handoff.md; the handoff content lives in README.md - move docs/BOOTSTRAP-OWNERSHIP.md to docs/history/ and index it in docs/history/README.md - point ONBOARD.md, docs/BORROW.md and the ticked TODO.md item at the new path - ONBOARD.md section 9 no longer mentions TASKLIST.md - ONBOARD.md section 3 and 4 markers are now `// ...` (line comments lost their colon) verified from a clean build: make clean, make (fixpoint 376903 words), the section 0-7 commands (section 4 after the marker fix), and the rejection suites. make check was started but did not complete (stopped before it finished).
* todo: record the reverted unchecked trial and what it showedGravatar zinc 13 days1-1/+1
|
* todo: one sorted list of open work; library suggestions without naming librariesGravatar zinc 13 days14-38/+148
| | | | | | | | | | | | | | TODO.md ticks the items verified done (namespaces, actor and icon libraries and their coverage, the genome embed, the bootstrap ownership limits, the docs and fixtures sweep) and lists everything still open, including the newly requested language features, sorted easiest first. the compiler no longer names actor: file libraries for suggestions come from src/lib/modules.txt, and lib.name before its include reports the missing include. icon gains fixtures for reading globals while stepping and for begin_function on a non-function, and the suite checks that nothing the compiler reads by default mentions actors. bf.zc, the web sample and std's capture example use qualified runtime names; LEARN.md uses build/bin paths.
* PROPOSALS.md: features worth adding to zcGravatar zinc 13 days1-0/+132
|
* zc: untyped local const, c precedence for && and ||, import fixes for every ↵Gravatar zinc 13 days9-46/+277
| | | | | | | | | | | | | | | | module const name = value; inside a function declares a local constant that takes the initializer's type. the let quick fix now writes a bare const. the self-hosted compiler bound || tighter than &&, unlike zc0 and the readme. no existing source mixed them without parentheses, so only new code was affected. missing-name diagnostics and their quick fixes now search every module: rt, core, run, loaded files, and std, icon and actor scanned from source, including static groups (std.Text.itoa). typos suggest module exports (putc -> rt.put_c) and get a change-to fix.
* lsp: quick fixes for hints and bare library names; comment cleanupGravatar zinc 13 days10-507/+780
| | | | | | | | | | | | | | | | | | | an undefined bare name that a module exports now says which one: "put_c is used but never defined; did you mean to include rt and use rt.put_c?", and the import quick fix is titled the same way and marked preferred when it is the only one, so the editor's auto-fix applies it. hints gain quick fixes that keep the program's meaning: an unused parameter, or a local with no other use, is renamed to _; a constant local with one declarator becomes const; a power-of-two multiply becomes a parenthesized shift (not when a * / or % binds its left operand); and let p = rt.new(n) with a small constant becomes let p[n]. the hints no longer fire for _ discards or for locals already declared const. whole-line /* */ comments in zc sources are // comments now, and //: is gone from the maintained sources: the notes it marked were mostly the documentation of the declaration below, which hovers now show. section headers are separated from the declarations after them.
* embed: tests, editor support and docs; js vm file access; test fixesGravatar zinc 13 days35-122/+507
| | | | | | | | | | | | | | | | | | | | embed declarations get accept and reject fixtures, a run-only image check through zc0, an lsp keyword hover and the grammar keyword. errors point at the declaration and still declare the name, so its uses are not reported again. zc0 tracks byte-string globals and lays embedded arrays out one word per element, the way its own indexing reads them. the command-line javascript vm reaches node's file system for the file syscalls, so include and embed work there; other embedders opt in. the web build is self-contained in build/web with its examples. README, BORROW and BOOTSTRAP-OWNERSHIP describe the new build and ownership rules, and ONBOARD.md is a reading and verification order for the code. the suite passes the map header to mklayout, the wasm fuzz program uses the include format, and lsp drivers scale their deadlines on hosts without the arm64 jit (ZC_TEST_TIMEOUT_SCALE). LLVM_CONFIG selects an llvm with headers for the llvm section.
* build: embed images with #embed, keep everything generated in build/Gravatar zinc 13 days79-1142/+1472
| | | | | | | | | | | | | | | | | | | | | | | | | | the cores take their genome in with c23 #embed through src/core/genome.h, so images are plain little-endian word files (genome.bin) instead of generated c headers. zc0 writes that format, mkgenome checks an image against its map and shows a compiler's diagnostics when it gets them, and the javascript vm and the editor's vm host read the same files. src/tools/findcc.sh picks a compiler with #embed (clang 19 or gcc 15). zc gets an embed declaration, embed "file" as [type] name, for globals and locals: a byte string by default, char*, numbers read little-endian, and arrays of numbers. the compiler and language server carry their library and source texts through it, so embed.sh and the text it spliced into compiler.zc are gone. make writes executables to build/bin, the default map to build/core/map, the web page to build/web and the extension staging to build/vsix, and the genome now rebuilds when its sources change. the test suite lays out its own map and bootstrap and reads nothing from build/. also: rt.put_s of a byte string in zc0 images, retained function sources no longer count as live objects, a missing include no longer cascades into undefined-name errors, consecutive comment lines join into one hover paragraph, and stale test fixtures follow the include format.
* analyzer: close the ownership gaps that stopped the compiler compiling itselfGravatar zinc 13 days11-11/+154
| | | | | | | | | | | | an owned local can now move into a released owner declared in the same or an outer block, and g = m*x lends a local owner to a global until the global is assigned again in the same block. leaving that block, giving the local away, or returning while the lend is open is an error. recasting a plain local now names it and says it has no ownership to recast. methdef and syntax_resident use the supported spellings, so make genome reaches its fixpoint from a clean checkout. runerr.sh reads the first // expect: line, since the include headers moved it off line 1.