aboutsummaryrefslogtreecommitdiff
path: root/src
Commit message (Collapse)AuthorAgeFilesLines
* merge work/jit2: x86-64 jit inline enhancementsGravatar zinc 2026-10-142-8/+183
|\
| * x86-64 jit: header comment and todo for inlined enhancementsGravatar zinc 2026-10-141-2/+2
| |
| * rt: note the two definitions of a heap block's length (bnd recipe, paylen)Gravatar zinc 2026-10-141-0/+4
| |
| * x86-64 jit: inline enhancements (micro-ops lowered to registers, literal ↵Gravatar zinc 2026-10-141-5/+176
| | | | | | | | specialization, ZYNOENH=1 to call xrun); enh_ops test; jit_x64_test in test.sh
| * core: an enhancement's ld reads 0 past 2^32 in xexec too (mread took an ↵Gravatar zinc 2026-10-141-1/+1
| | | | | | | | int), as the jits and the microcore do
* | Merge branch 'main' into work/xrefGravatar zinc 2026-10-1416-42/+190
|\|
| * merge bounds checkingGravatar zinc 2026-10-1416-42/+190
| |\
| | * bounds checking: constant loop bound proof works, plain-op fixed-array ↵Gravatar zinc 2026-10-142-7/+10
| | | | | | | | | | | | check, docs (readme, spec 4.15 and friends, server, vscode), conformance and test.sh fixes, todo
| | * bounds checking: port agent/bounds-checking onto main 0879d0a; unbounded ↵Gravatar zinc 2026-10-1416-40/+185
| | | | | | | | | | | | main in o3call, o3 tests expect no check, boundsrules, bounds_fixed, bounds_heap and zc0unbounded tests
* | | zc0: integer literals as the compiler reads them (010 is 10, 0x is 0, values ↵Gravatar zinc 2026-10-141-2/+20
| | | | | | | | | | | | wrap modulo 2^64)
* | | zc0: embed of an array type inside a functionGravatar zinc 2026-10-141-2/+4
| | |
* | | zc0: x as T reads a whole type (x as int*, x as char**)Gravatar zinc 2026-10-141-1/+1
| | |
* | | zc0: reject .u on a typed parameter with the compiler's messageGravatar zinc 2026-10-141-1/+4
| | |
* | | zc0: string literals have no length limit (the token text grows)Gravatar zinc 2026-10-141-11/+22
|/ /
* | merge: memdebug obj_base via size classesGravatar zinc 2026-10-141-9/+18
|\ \
| * | memdebug: obj_base finds the header from the buddy size classes, not a ↵Gravatar zinc 2026-10-141-9/+18
| |/ | | | | | | 64-word scan; regression program
* | merge: seven self-hosted compiler fixes from conformanceGravatar zinc 2026-10-144-7/+8
|\ \ | |/ |/|
| * switch: case member(): with no names matches a tagged member by tag even ↵Gravatar zinc 2026-10-141-1/+1
| | | | | | | | when it has fields (spec 4.7.3)
| * memdebug: accept 'memdebug scrub;' (the check compared against rt.scrub); ↵Gravatar zinc 2026-10-141-1/+1
| | | | | | | | the scrub program reads the freed word through asm
| * return: a value returned from a void function is dropped and the function ↵Gravatar zinc 2026-10-141-1/+1
| | | | | | | | yields 0 (typecheck off, spec 4.8.3)
| * fndef: allow 24 parameters; the limit check ran after the 24th was countedGravatar zinc 2026-10-141-1/+1
| |
| * casts: a cast clears the byte-string flag unless the type is bstr, so ↵Gravatar zinc 2026-10-141-0/+1
| | | | | | | | (int*)s indexes words
| * unary: u*x, m*x, d*x are not recasts when the tag names a visible local ↵Gravatar zinc 2026-10-141-1/+1
| | | | | | | | (spec 1.6.3)
| * capture_scan: restore panic after the dry scan, so a bad literal in a ↵Gravatar zinc 2026-10-141-2/+2
| | | | | | | | function's first statement is reported
* | merge main into work/line-tablesGravatar zinc 2026-10-143-0/+498
|\|
| * xref self-test: a real write in a compiler copy, reject unknown options; ↵Gravatar zinc 2026-10-141-4/+18
| | | | | | | | runerr.sh runs every folder it is given
| * xref: checked-in baseline, --check self-test hooked into the lsp section, todoGravatar zinc 2026-10-141-0/+21
| |
| * agent/xref-report: unmerged work from previous sessionGravatar zinc 2026-10-142-0/+463
| |
* | line tables and backtraces: port agent/line-tables onto main, op 56 on the ↵Gravatar zinc 2026-10-1418-27/+365
|/ | | | x86-64 jit, docs, measurements, tests; default genome reservation 0x68000
* parity: clear links from earlier runs so a program's writes never reach the treeGravatar zinc 2026-10-141-0/+3
|
* Merge the defer statement; todo: tick it, add its follow-upsGravatar zinc 2026-10-147-3/+119
|\
| * zc: add the defer statementGravatar zinc 2026-10-147-3/+119
| | | | | | | | | | | | | | | | | | | | | | | | 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 2026-10-145-13/+47
|\ \ | | | | | | | | | void main; todo updated
| * | fix std hover, full capture terminator, bare static calls, void main in ↵Gravatar zinc 2026-10-145-13/+47
| |/ | | | | | | | | | | | | | | | | | | | | | | | | 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.
* | Merge the x86-64 jit, phase 1; todo: tick it, add phase 2Gravatar zinc 2026-10-141-21/+599
|\ \ | |/ |/|
| * x86-64 jit: zyi target, ZYNOO3, bench and test timeouts, docs; drop a stray fileGravatar zinc 2026-10-141-9/+12
| |
| * x86-64 jit: translate ordinary vm blocks to x86-64 on linux, o3 regions on ↵Gravatar zinc 2026-10-141-15/+590
| | | | | | | | the region interpreter
* | Merge the compiler split into phase filesGravatar zinc 2026-10-1419-10486/+10567
|\ \ | | | | | | | | | | | | 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 2026-10-1419-10482/+10562
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* | | Merge branch 'worktree-agent-a0734822346ae18db' into ccr-0054c02e-dfdvndGravatar zinc 2026-10-141-50/+125
|\ \ \ | |/ / |/| |
| * | zc0: byte string types, u/m/d as names, enhancements in asmGravatar zinc 2026-10-141-50/+125
| | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* | | Merge branch 'worktree-agent-aaf6bc066598a6622' into ccr-0054c02e-dfdvndGravatar zinc 2026-10-141-0/+160
|\ \ \ | |_|/ |/| |
| * | parity: compare what zc0 and the self-hosted compiler printGravatar zinc 2026-10-141-0/+160
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* | | Merge branch 'worktree-agent-a3354164c07827b2e' into ccr-0054c02e-dfdvndGravatar zinc 2026-10-142-12/+145
|\ \ \ | |_|/ |/| |
| * | add c-style typedef and a built-in string aliasGravatar zinc 2026-10-142-12/+145
| |/ | | | | | | | | | | | | | | 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.
* | Merge branch 'worktree-agent-a96a10dc1489688ea' into ccr-0054c02e-dfdvndGravatar zinc 2026-10-141-7/+117
|\ \
| * | constants inside structs, and typo suggestions for fields and static membersGravatar zinc 2026-10-141-7/+117
| |/ | | | | | | | | | | | | | | 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.
* / document the standard library apiGravatar zinc 2026-10-141-47/+81
|/ | | | | | | | | | | 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: one sorted list of open work; library suggestions without naming librariesGravatar zinc 2026-10-145-22/+72
| | | | | | | | | | | | | | 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.
* zc: untyped local const, c precedence for && and ||, import fixes for every ↵Gravatar zinc 2026-10-142-42/+218
| | | | | | | | | | | | | | | | 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.