129 Commits

Author SHA1 Message Date
d252eee2b2 In .fln x? tests that a value is present and narrows a local Option to its payload in the block it guards, and e? as g names what a test found. 2026-09-26 15:48:36 +07:00
178c129c97 A .fln name carries no ? or !, and .fln has T?, x ?? d, x!, if let over a plain name and a?.b chaining. 2026-09-26 14:54:58 +07:00
7db1a81d1f Builtins, prelude, vendor and raylib predicates are named with is- or has- and no name carries a ? or !. 2026-09-26 14:34:36 +07:00
5ee433a38f A kept when answers an Option, get is a checked lookup over arrays, slices, Vecs and dyn, and if let reads as a two-arm match in both syntaxes. 2026-09-26 12:12:48 +07:00
267db2cd91 The typed read-only text type is spelled str, and string is refused with that fix. 2026-09-26 05:22:24 +07:00
fff1c0b9c3 Merge master: return-type inference beside the syntax-following type spellings 2026-09-26 00:27:59 +07:00
dbddc61b30 defvar in a .fln file suggests once and def in its spelling, and x++ on a global suggests ++(x) 2026-09-25 23:48:59 +07:00
319a3c78c4 Merge branch 'master' into worktree-agent-a46233a32d1912c78 2026-09-25 22:40:48 +07:00
e80411d283 type-of answers a value's kind as a keyword or an instance's class name, and a class named like a kind is refused. 2026-09-25 22:18:36 +07:00
47cc213b42 Return types read off the body and the converter's latest fixtures live together 2026-09-25 22:14:32 +07:00
e81191d770 A bool returned from C reads as its low bit on --x86 as on LLVM, and the where-and fix and the x-1 hint follow the code's own syntax rather than its file name 2026-09-25 21:50:56 +07:00
18581a452c = and != compare bools, a match over a bool takes true and false arms, a match over a dyn takes keyword arms, and where predicates joined with and are refused with the comma or vector form as the fix 2026-09-25 21:35:31 +07:00
0fc258c434 Merge branch 'master' into worktree-agent-a46233a32d1912c78 2026-09-25 21:11:17 +07:00
69eb11ce9b Return types read off the body and generic structs live together 2026-09-25 20:51:38 +07:00
111ee66a4b A match arm can be a number, char or string literal compared with =, over a number, a string or a dyn, with a _ arm required 2026-09-25 20:51:24 +07:00
f6384fdf38 Merge master into the generics lane 2026-09-25 20:03:34 +07:00
ad40123b25 Master's error recovery and return types read off the body live together, and two ways out of an inferred body that cannot share a type are refused with both named 2026-09-25 19:58:31 +07:00
ff88b9dad6 A defn whose return slot is _ (or a .fln fn with no arrow) takes its return type from its own body, recursion through such functions is refused by name, and a stale caller of one is told which line changed its type 2026-09-25 17:09:13 +07:00
9d0d42e467 A generic struct's copy prints as (Pair i32 {...}), crosses to C behind a pointer, names each use that made it when refused, settles literal fields at the wider type, and is laid out by stores and restarts that first name it 2026-09-25 16:59:11 +07:00
83dc716133 A program's or a session's defn named as a macro shadows the macro for its calls, with the shadowing warning a prelude function gets 2026-09-25 16:32:49 +07:00
7b3e7f0efa A program's global or type cannot change what the prelude means: a type variable wins over a global in a type position, prelude signatures pair against prelude types, and a global or type spelled like a built-in type is refused 2026-09-25 16:22:27 +07:00
4054c4921b A defstruct whose fields introduce $t or an array length $n is a generic struct, each application of it an ordinary struct copy that generic functions bind against, and a printed call is evaluated once 2026-09-25 16:08:14 +07:00
23af8a4dd3 A bool arm and a dyn arm of an if meet at dyn with the bool boxed, so (or false (box "s")) answers "s" 2026-09-25 15:31:12 +07:00
8cc63ed9f6 A place in update, ++ and -- evaluates each of its subexpressions once, and (update place f args ...) stores (f old args ...) back into it 2026-09-25 15:26:27 +07:00
610e9fcf9d A parent's handler reads a name and message made in context/temp, whole and good until the frame ends, and the handler-case landing no longer holds a buffer of its own 2026-09-25 14:36:46 +07:00
b2eb81f7bf A slice or pointer can be read-only, and what it reaches cannot be written through it 2026-09-25 13:39:04 +07:00
f3d969618d A class slot can carry a type, and set writes a declared slot 2026-09-25 13:32:16 +07:00
d864818956 A handler for a parent reads the condition's own name and message or the condition printed with its values, kept in the handler-case's own frame across the unwind, and a frame re-entered through a signal or a C call names where it is 2026-09-25 13:16:35 +07:00
bfd176cce9 Merge master: a handler clause runs without its own handler in force, over the condition descriptor, and StaleCall is an Error 2026-09-25 12:50:01 +07:00
aedd50c646 Merge branch 'master' into worktree-agent-ac750a5e83cab251b
# Conflicts:
#	lib/check.ml
2026-09-25 12:17:58 +07:00
1d219b526c Merge master into the typed class slots lane 2026-09-25 12:14:42 +07:00
73dfaacbc8 A condition type may name a parent and a handler for Error catches every built-in error, a signal passes one descriptor carrying its chain, name, sentence and site, and the break loop shows the sentence the runtime wrote 2026-09-25 12:05:13 +07:00
6e8cc52bc7 Merge branch 'master' into worktree-agent-ad097f67134ba0552 2026-09-25 12:02:48 +07:00
c671bba490 (the T e) gives any expression its type, and an array literal nothing names is typed when its elements agree and a dyn vector when they mix 2026-09-25 11:47:28 +07:00
2ff1da88da A slice can be read-only: bytes-view answers a [const u8], and a store through one is refused at compile time 2026-09-25 11:43:41 +07:00
2682214499 A defclass slot may declare a type that every store into it checks, and set writes a declared slot 2026-09-25 11:40:08 +07:00
680c12e686 A restart frame carries where its clause is written, its :report sentence and whether a handler-case made it up, and the break loop shows the first two and hides the third 2026-09-25 11:35:12 +07:00
de26d6e625 ~~@xs splices an unquote per element, a session can call a macro an expansion defined, and an enum member cannot be named else 2026-09-25 11:24:27 +07:00
d03b02b347 Merge master 2026-09-25 11:12:30 +07:00
2f3544e7f5 Code after a return emits nothing, a wide element names the u64 array, and $ is refused in fn, handler, :keys and & binders 2026-09-25 10:53:52 +07:00
08545c757f cond is a special form again because the prelude relies on it, and until is a prelude macro because only programs use it 2026-09-25 10:48:40 +07:00
222dc0ae90 A loop, dotimes, match, macro, class or generic binding that starts with $ is refused too 2026-09-25 10:37:43 +07:00
e9e151e1a4 A match over an enum names its members as keywords and is refused when it misses one 2026-09-25 10:33:22 +07:00
7abe760288 cond and until are prelude macros, and a macro module holds only the macros its forms reach 2026-09-25 10:28:32 +07:00
6c9635cd53 A wide literal is refused for its range as an enum member, names the u64 cast where a dyn is wanted, and comes back wide from a macro 2026-09-25 10:26:03 +07:00
b153f325b8 A declared name that starts with $ is refused where it is declared 2026-09-25 10:04:23 +07:00
11dc230974 A defn- is private to its module, and the module's own macros may call it 2026-09-25 08:57:20 +07:00
793b0eea9e A defn- is private to its module, the package's own macros may write calls to it, and the refusal names the fix 2026-09-25 08:55:37 +07:00
cb0be62087 An integer written at or above 2^63 is a u64 and nothing else, and vec-new reads a type from its argument only when the builtin is what was called 2026-09-25 07:43:24 +07:00
6fd456c0a2 A function declared with defn- is callable only from the files of its own package 2026-09-25 07:42:40 +07:00