467 Commits

Author SHA1 Message Date
6c2f7c34c7 An eval or load reply carries the compiler's warnings, which Emacs marks at their sites and counts in the echo line, and a load says each warning once. 2026-09-26 19:20:40 +07:00
bbaca242e5 A dev eval prints the compiler's warnings for the forms it sent and not again for forms sent earlier. 2026-09-26 18:59:34 +07:00
08ecba92f6 The checker warns at a call through which a function calls itself on every path, so it never returns. 2026-09-26 18:55:49 +07:00
1215db7d26 Merge master into the arity lane. 2026-09-26 18:29:54 +07:00
8d198f88c9 A condition can bind what it tests with as, inside and chains too, and the bound name is read-only in the program and in the debugger. 2026-09-26 18:21:00 +07:00
d6c33928f5 A name an as bound is refused as itself when assigned, in the program and in a stopped frame alike. 2026-09-26 18:16:13 +07:00
7d2da19c0c A fn form's arities are one definition by an id the form is given, and a caller of a removed arity stops on StaleCall and is compiled again whenever its call checks. 2026-09-26 18:08:41 +07:00
fd6510e0b5 Merge branch 'master' into worktree-agent-afbb9bcfd4d47bb1b
# Conflicts:
#	lib/check.ml
2026-09-26 18:06:56 +07:00
8333ba017d A literal local read as a typed array's element takes that element's type, and the Option str refusal test names str. 2026-09-26 18:06:29 +07:00
b814aca187 A kept when or else-less chain over an Option arm is that Option, flattened one level, unless an Option of it is wanted. 2026-09-26 18:02:43 +07:00
83bb65957d Each name an as binds is a slot of its own under its name, so the break loop's locals show it with what the test found. 2026-09-26 17:59:59 +07:00
09ffc27883 Master merges into the as-chain lane. 2026-09-26 17:52:20 +07:00
e4d0e9c60e A pause mark on any column of a condition keeps what it binds, an as in parentheses gets its own refusal, and what an as finds is held in one slot. 2026-09-26 17:52:06 +07:00
b8e68a48f7 A literal local read at T? takes T, None may come first in an if, an Option around an array of Options takes a literal, and a literal refused at T? names the Option. 2026-09-26 17:45:44 +07:00
d14cffa23a (the dyn <literal>) beside nil traps at run time, and a dyn opened at f64 or bool traps at its site. 2026-09-26 17:44:27 +07:00
dd719766ee A fn's arities are one form, fn f with a (params) -> R line per arity, and evaluating it replaces every arity at once. 2026-09-26 17:35:18 +07:00
c60cc33b95 A dyn operand in a fold's first pair keeps the form dyn at a typed want, so only the answer is opened and every position gives the same result. 2026-09-26 17:30:44 +07:00
89d54a47f4 A None arm written first in a match meets the other arms at their Option. 2026-09-26 17:21:06 +07:00
4d85cefbe2 A bare nil in a typed fold is refused in every position while a dyn holding nil traps, a fold operand asked on its own terms records no literal-local use, and a wide literal at dyn says it has no dyn value. 2026-09-26 17:18:29 +07:00
cb60df1dc0 A T is wrapped in Some wherever a T? is wanted, one level at a time and never unwrapped back. 2026-09-26 17:11:12 +07:00
179156b105 A function name has one version per arity, and a call picks the version by its number of arguments. 2026-09-26 17:08:15 +07:00
c1916ed819 e as g is any test of a condition's and chain, binding g for the rest of the chain and the block. 2026-09-26 17:07:01 +07:00
7dcef05df3 A u64 past the largest i64 traps where it crosses into dyn, a dyn nil past a fold's first pair traps at run time, and an is-numeric $t boxes beside a dyn. 2026-09-26 16:47:28 +07:00
181f7da037 Merge master into the dyn fold lane.
# Conflicts:
#	lib/check.ml
2026-09-26 16:16:25 +07:00
97e89c8d40 min and max take a dyn in any position, picking numbers by value and chars by code point in the dyn runtime and trapping at the form on anything else. 2026-09-26 16:15:52 +07:00
adfab2d482 A narrowed name keeps its assignability, a local whose address is taken or that a fn assigns is not narrowed, a trailing ? tests a whole chain, and the optional refusals name the test to write. 2026-09-26 16:08:16 +07:00
d138155eae A dyn operand anywhere in an arithmetic, bitwise or comparison fold makes the fold dyn from there on, and min or max refuses one past its first pair as it does in it. 2026-09-26 16:08:08 +07:00
8afa054349 Merge master into the .fln optionals lane. 2026-09-26 15:52:00 +07:00
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
6c6b5a60cb ?? continues a line, a chain or an unwrap is no place to assign, nested marks and a ? on a value say what to write, a lowercase type takes ?, and a predicate reads as a word with its name beside it. 2026-09-26 15:36:49 +07:00
570d2d88fb A char plus or minus an integer is checked for overflow, so a trap names the true sum or the side of the range it left. 2026-09-26 15:27:07 +07:00
7361830938 A char minus a char takes the integer width its site wants, a chain of + or - folds left step by step, and a char plus a u64 is checked unsigned. 2026-09-26 15:23:34 +07:00
33203bd3c5 Merge master into the typed char lane
# Conflicts:
#	TODO.org
#	lib/check.ml
2026-09-26 15:04:23 +07:00
37c4f2ee10 A char plus or minus an integer is a char checked to be a scalar value, a char minus a char is their distance, and dyn chars do the same. 2026-09-26 14:55:00 +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
2ace3bfe2b (char n) on a u64 past 2^63 traps naming the u64 it was given. 2026-09-26 14:30:17 +07:00
92fbeb4fc9 println prints a char as the character itself, and a char inside a value, in the inspector or at the REPL prints as its literal. 2026-09-26 13:59:32 +07:00
fd8620516c A char literal is a typed char unless typed code wants a number, and a char compares, hashes, converts with (i32 c) and a checked (char n), and crosses into dyn as a dyn char. 2026-09-26 13:49:02 +07:00
38078cada3 A kept if-let chain takes its type from what its arm answered, so an arm that returns stays Never and one with no value makes the chain a statement. 2026-09-26 13:47:24 +07:00
5038c5954a get on a String is refused as at is, a dyn get's trap names get, a kept else-less form beside a number is blamed at itself in arithmetic and comparisons, and a kept if-let chain with no final else gives an Option. 2026-09-26 13:40:16 +07:00
b545584de8 Master is merged into the when, get and if let lane, and dyn get over text counts characters through at's own body. 2026-09-26 13:17:57 +07:00
c24b19e7b1 Merge master into the dyn char lane 2026-09-26 13:09:28 +07:00
1b588df6b5 Master is merged into the when, get and if let lane after the review fixes. 2026-09-26 13:09:24 +07:00
79430aca77 A lambda's last form is checked at the return its position wants, a call's arguments and a kept cond with no else keep a when as an Option, a when used as an arithmetic operand is blamed itself, elif let reads and prints as a nested if-let, and dyn get over text or a vec runs at's own runtime body. 2026-09-26 13:09:21 +07:00
4a7df449aa bytes->string copies the Vec's bytes into a new String, a String's character walk stops at its position and never reads past its length, and a builder's block is a String in the leak report. 2026-09-26 13:00:13 +07:00
e5fd44920e Merge branch 'master' into worktree-agent-a26dff0627201f77b 2026-09-26 12:55:06 +07:00
a3899f3ecb Master is merged into the when, get and if let lane for the review fixes. 2026-09-26 12:53:34 +07:00
f35a2b240a Merge master into the dyn char lane 2026-09-26 12:51:41 +07:00
28d4c0f8dc A number literal takes its type from its uses inside the function, an unconstrained float literal is an f64, and a dyn use asks for the dyn width. 2026-09-26 12:41:54 +07:00