1778 Commits

Author SHA1 Message Date
ed7258c80f An abandoned check puts back everything it wrote into the environment, an else arm refused on its own terms is not blamed for the then arm's type, and a match's arms meet at the same join as an if's 2026-09-25 21:26:56 +07:00
d574031609 Keyword arms over a dyn and = on bool are queued 2026-09-25 21:23:50 +07:00
d4f24adbc8 A function cannot return or store in a global the address of its own frame, and a dev build poisons every arena's bytes on free-all 2026-09-25 21:19:13 +07:00
ab5fe36a48 A frame address stored into a global's field, array or Vec element, or pushed or put into a global container is refused with a fix that names no wrong type, and the sanitizer sweep builds at -O0 so a read of a returned frame reports 2026-09-25 21:18:48 +07:00
bd70dfa913 Merge branch 'master' into worktree-agent-a9ad2e8b56d1fbd10 2026-09-25 21:18:18 +07:00
4fa11f6360 Merge master 2026-09-25 21:11:31 +07:00
0fc258c434 Merge branch 'master' into worktree-agent-a46233a32d1912c78 2026-09-25 21:11:17 +07:00
3001aadff3 .fln files open in flan-fln-mode, which evaluates, moves over, indents and edits their statements, clauses and top-level forms 2026-09-25 21:07:16 +07:00
5c044a7b40 id and ad on a comment that belongs to no form find no object 2026-09-25 21:05:02 +07:00
f76d0d6e9f An if's arms and a _ function's exits meet at one join in any order, a return inside the last form counts where it is written, and a constant computed by a _ function is refused as with a written type 2026-09-25 21:02:26 +07:00
095701b29b A negated name counts as the name an arm's pattern binds, and a comment belongs to the form or block whose column it sits at 2026-09-25 21:02:19 +07:00
fcd32c21c5 A match arm can be a number, char or string literal 2026-09-25 21:01:40 +07:00
76b2ab3113 A duplicate literal arm is one whose value equals an earlier arm's at the scrutinee's type, and a literal no dyn holds is refused with a pattern fix 2026-09-25 21:01:15 +07:00
9e09375d7b Merge branch 'master' into worktree-agent-a6088ba602da36c5e
# Conflicts:
#	TODO.org
2026-09-25 20:58:42 +07:00
4d3688a519 Merge master into the .fln mode lane; a .fln arm sends its match whenever its value uses any name the pattern has, C-c C-s steps a .fln top-level form, and a comment block directly above a form is part of its text objects 2026-09-25 20:53:48 +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
a6ccce0e67 Every store of a frame address into a global outside main is refused, fn and handler bodies and restart clauses are checked as frames of their own, and the suggested clone keeps the slice's bounds 2026-09-25 20:50:17 +07:00
c6a3259a62 A function that returns or stores into a global an address or slice of its own frame is refused, a dev free-all poisons any arena's released bytes and ASan sees them released, and @sanitize checks stack use after return 2026-09-25 20:40:21 +07:00
df7078d586 A _ function's exits combine exactly as an if's arms do, a refused _ body or loop is collected with every other error, and the placeholder type never leaves the checker 2026-09-25 20:37:50 +07:00
f1bdcc8840 Editor code cut out mid-line carries :indent, the column its statement starts at, so the reader accepts its wrapped lines as the file does and reports every location where it is in the buffer 2026-09-25 20:35:33 +07:00
36c2d14c28 The inspector's reader prints a generic struct instance as (Pair i32 {…}) through Render.head, as the compiled renderer does. 2026-09-25 20:33:31 +07:00
db7f703c0e ML-style patterns are held as a future direction 2026-09-25 20:33:26 +07:00
25911d7c9d Nested ML-style patterns are wanted 2026-09-25 20:31:57 +07:00
e7d82cb640 A match arm can match a number or string literal, queued 2026-09-25 20:30:31 +07:00
c3ba4c9e08 A wrapped condition or arm value is sent whole and reads as it does in the file, an arm whose value uses nothing its pattern binds sends that value, a match arm is a clause object, and dad on the last form takes the blank lines before it 2026-09-25 20:29:06 +07:00
72c35ff05c A dyn value the inspector reads is rendered on the program's own thread, so one that traps or faults is a nested break and the daemon keeps answering. 2026-09-25 20:24:34 +07:00
8fdf8513fd A _ body's errors are reported with every other error in the file, a literal return takes the type of the other exits, and a recursive _ function that gives nothing returns () 2026-09-25 20:17:44 +07:00
267e84bada In a .fln buffer numbers are coloured, a colon is not part of a name, TAB keeps a line at a valid column, evil line objects take their newline, and C-x C-e and C-u C-c C-c understand match arms, conditions, clauses and comments 2026-09-25 20:14:51 +07:00
5d3a0fc316 Inferring a closure return and recompiling a _ caller after its callee changes wait behind .fln 2026-09-25 20:14:22 +07:00
241ea67fbb A struct can be generic over types and lengths, and an error in a generic names the call that made it 2026-09-25 20:03:49 +07:00
f6384fdf38 Merge master into the generics lane 2026-09-25 20:03:34 +07:00
df00848910 A struct value's printed head comes from Render.head, which every renderer shares 2026-09-25 20:00:51 +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
ff8b61e44c A self-containing or runaway generic struct and a where clause over a length are each one error among the file's others, and a literal that does not fit a variable a typed field decided names that field 2026-09-25 19:57:58 +07:00
ae23787c04 The inspector reads a stopped program's memory through the compiled layouts, so locals, inspect, at, condition and globals build no module, and the inspector reads a generic instance's type arguments. 2026-09-25 19:57:39 +07:00
8c814b39c1 .fln files open in flan-fln-mode, which evaluates, moves over, indents and edits statements, clauses and top-level forms, and every Flan mode derives from flan-base-mode 2026-09-25 17:13:12 +07:00
89e4f53895 Places are evaluated once, enums have a predicate, CFn values live in structs, and a program's names cannot break the prelude 2026-09-25 17:12:56 +07:00
d6e6a5dc0c A program's global named as a prelude function or global shadows it for the file, with the shadowing warning a defn gets 2026-09-25 17:12:05 +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
20684c2d9f A grown parameter the function returns, or whose field it reassigns, is not warned at 2026-09-25 17:06:19 +07:00
dbdaf66e29 A slice that bytes or clone copied is released with free, and a dev build traps a free through the wrong allocator 2026-09-25 17:05:08 +07:00
7bcf9e5054 A dev build refuses (free s) on a slice over a Vec's or a Map's storage, and says a formatted number's text is released by free-temp 2026-09-25 17:04:52 +07:00
4c336687ef Master's error recovery is merged, and the refusal memos are consulted only where a refusal is raised 2026-09-25 17:03:32 +07:00
2f321fd061 Merge master into the generics lane 2026-09-25 17:03:13 +07:00
1e8086b4d3 The use-after-release checks to build are recorded 2026-09-25 17:00:16 +07:00
7c1cbd3a9f Merge branch 'master' into worktree-agent-a9288676abb278ffb 2026-09-25 17:00:08 +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
fc6e2f7dfb The break window evaluates in a frame and steps through a function, and C-c C-c reports every error in the form
# Conflicts:
#	test/test_dev.ml
2026-09-25 16:52:32 +07:00
2c8bd61a20 (free s) hands a slice (bytes s) or (clone xs) made back to the context allocator or a named one, a dev build traps on the wrong allocator, and a sliced array literal lives for its whole function on x86 2026-09-25 16:48:09 +07:00