aboutsummaryrefslogtreecommitdiff
path: root/docs/SPEC.md
Commit message (Collapse)AuthorAgeFilesLines
* len: len on a char* is an error with typecheck off too (appendix b.2.14)Gravatar zinc 14 days1-2/+2
|
* prototypes: parameters may be unnamed, int f(int, int*); (appendix b.2.13)Gravatar zinc 14 days1-2/+2
|
* as: the type after as is read greedily in both compilers; x as int * y is a ↵Gravatar zinc 14 days1-2/+2
| | | | syntax error (appendix b.2.12 settled, no compiler change)
* lexer: a block comment that is never closed is 'unterminated comment' ↵Gravatar zinc 14 days1-2/+2
| | | | (appendix b.2.11)
* bool: a value stored into a bool is normalised to 0 or 1 (appendix b.2.6)Gravatar zinc 14 days1-2/+2
|
* enum: a member is defined as soon as it is declared, so later values can ↵Gravatar zinc 14 days1-2/+2
| | | | name it (appendix b.2.2)
* globals: an integer constant initializing a float or f32 global converts to ↵Gravatar zinc 14 days1-1/+1
| | | | float (float g = 2; is 2.0)
* zc0umd: no recast uses a visible u/m/d as its tag (spec 1.6.3); spec: the ↵Gravatar zinc 14 days1-16/+23
| | | | fixed appendix b bugs are marked fixed
* bounds checking: constant loop bound proof works, plain-op fixed-array ↵Gravatar zinc 14 days1-5/+12
| | | | check, docs (readme, spec 4.15 and friends, server, vscode), conformance and test.sh fixes, todo
* line tables and backtraces: port agent/line-tables onto main, op 56 on the ↵Gravatar zinc 14 days1-5/+14
| | | | x86-64 jit, docs, measurements, tests; default genome reservation 0x68000
* Merge the defer statement; todo: tick it, add its follow-upsGravatar zinc 14 days1-0/+19
|\
| * zc: add the defer statementGravatar zinc 14 days1-0/+19
| | | | | | | | | | | | | | | | | | | | | | | | 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).
* | fix std hover, full capture terminator, bare static calls, void main in ↵Gravatar zinc 14 days1-2/+2
|/ | | | | | | | | | | | | 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.
* docs: add SPEC.md, the first written specification of zcGravatar zinc 14 days1-0/+1093
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.