8fe8062a0c
Hand-written .fln programs exist, flan convert writes corpus-shaped paren text, and several .fln diagnostics suggest .fln spellings
2026-09-25 23:26:53 +07:00
4b1e722854
slice-from makes a slice from a pointer and any integer count, and ((Ptr U) p) casts a pointer's element type without dropping const
2026-09-25 22:24:11 +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
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
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
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
729d1a27ed
map-keys and map-values walk a Map of closures, since (map-next m cur k) walks keys alone and neither needs a zeroed value, and nothing names spike/ any more
2026-09-25 16:10:20 +07:00
a13c2f9ec3
The Map header mirror the collector reads is checked against flan_rt.c's, array key pairs cannot share a name, and a program holding only a Map of dyn sets up the collector
2026-09-25 15:52:57 +07:00
6e29c19097
The collector walks a Map's full slots, so a Map may hold closures and dyn values and keeps them alive
2026-09-25 15:31:50 +07:00
f6ba1e6c4d
A CFn may sit in a struct field, a fixed array or a global, and a call through a null one signals NullCall on both backends
2026-09-25 15:26:27 +07:00
1bada92870
A handled condition's sentence is consumed when it is copied, and the class-slot, migration and destroyed-allocator traps put their own sentence on the wire
2026-09-25 14:48:46 +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
b6dbc08c78
An expression at a stop that destroys the program's temp arena leaves context/temp empty rather than restoring the destroyed record
2026-09-25 14:26:31 +07:00
5646ae148e
Merge master; an expression evaluated at a stop runs against a scratch temp arena that is wiped after it, and the program's own temp arena is never rolled back
2026-09-25 14:09:30 +07:00
46a89aac0c
An expression evaluated at a stop rolls the temp allocator back to where it was, so its own text is reclaimed and the stopped frames' text survives
2026-09-25 13:54:07 +07:00
8bb2885e63
An abandoned evaluation puts the context allocator back, and a fault's break loop runs on a guarded stack of its own so a runaway recursion evaluated there is another break rather than a dead session
2026-09-25 13:49:24 +07:00
a0a86d0b80
The temp allocator grows a block that outgrows its chunk, answers a formatted number with one bump allocation, poisons what a dev wipe releases, and is wiped after each expression run while parked
2026-09-25 13:47:00 +07:00
a4e45d9a78
A message longer than its buffer is cut at a character and ends in an ellipsis, and the break loop and the unhandled message use the full text
2026-09-25 13:41:58 +07:00
5a78cdd202
Merge master
2026-09-25 13:36:54 +07:00
d2f25a6e44
Merge branch 'master' into worktree-agent-a9288676abb278ffb
2026-09-25 13:35:10 +07:00
639ff1859c
Aborting an expression that trapped in the park abandons it by a jump back to the poll that called it, and the session stays
2026-09-25 13:28:16 +07:00
9d6694fd92
Merge master: an evaluated expression's lifted bodies are placed with its thunk
2026-09-25 13:18:40 +07:00
9aeee9d676
Merge branch 'master' into worktree-agent-a6ffe579d55d1892b
2026-09-25 13:16:58 +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
02e4fef830
i64->bytes and f64->bytes allocate from a growing temp allocator that (free-temp) releases once a frame and a dev build's agent poll wipes, so a number drawn every frame no longer leaks
2026-09-25 13:07:21 +07:00
59a0fc80de
Only a string the checker marks as a literal reaches C uncopied, a slice of dyn is refused at its clone, and the context allocator holds an incarnation so a restored context whose arena was destroyed traps
2026-09-25 12:55:18 +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
1fb4b37125
A restart that takes values can be taken from the break loop, which asks for one per parameter and stores them into the frame as an invoke-restart would
2026-09-25 12:46:23 +07:00
acec25f8a1
Merge master
2026-09-25 12:43:50 +07:00
1d219b526c
Merge master into the typed class slots lane
2026-09-25 12:14:42 +07:00
c6cb018b9f
Only a closure that outlives its frame takes a collector environment, and the collector reads a Vec's elements only through a block it knows is live
2026-09-25 12:12:25 +07:00
93ff39c01d
flan_destroyed_proc says it is the backstop for a caller holding a bare allocator record
2026-09-25 12:08:47 +07:00
c116237621
An Allocator value is its record and the incarnation it was made for, so one kept past its arena-destroy traps at every use even after arena-new reuses the record
2026-09-25 12:05:44 +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
e0af3c9b1d
A method of update-instance-for-redefined-class runs on each instance as it migrates, and one that signals offers migrate-by-name
2026-09-25 11:55:40 +07:00
c9eb425ed1
A number i64->bytes or f64->bytes renders is copied into the context allocator and outlives the frame that made it
2026-09-25 11:47:01 +07:00
cb83014715
(clone xs) copies any slice's elements into a block from the context allocator or a named one, through the lowering (bytes s) uses
2026-09-25 11:40:42 +07:00
c6f0dd5450
A dev build fills a Vec's old buffer with 0xDEADBEEF when a push moves it, so a stale slice reads a value nobody wrote
2026-09-25 11:36:59 +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
494c57d764
Merge branch 'master' into worktree-agent-ae2997a1e90aa9e02
2026-09-25 11:18:12 +07:00
840b3b215e
A Map's churn test fails a table that doubles instead of sweeping, and nothing recalled is cited as read
2026-09-25 11:18:12 +07:00
ed8dbbcd62
A handler-bind clause runs with only the handlers outside its own form in force, and a stale call in main's running loop stays listed until the callee changes back or the program re-runs
...
The first is CLHS 9.1.4.1: a clause that signalled the condition it handles used to re-enter itself until the stack ran out. The stale list now names a lifted clause by the function it is written in, and BUILT.md's cost line is measured against master.
2026-09-25 11:15:52 +07:00
0d771494a6
Merge branch 'master' into worktree-agent-a8f5ad274482eeb9c
2026-09-25 11:07:02 +07:00
cbfac9f474
A Map is a Swiss table, one control byte a slot with key and value side by side
...
Removal marks a deleted slot unless no probe can have passed it, and a rebuild at the same capacity sweeps them. The header, the entry points and the iteration contract are unchanged. A Map has no bounds check, so the entry asking to convert one is closed with nothing to convert.
2026-09-25 11:00:22 +07:00
0a6ea7c32b
A caller excused for going stale takes back the generic copies its failed check cached, and a package's stale callers are named at their own file and line
2026-09-25 10:51:44 +07:00
fe20f68ada
The runtime's races are driven by tests, a destroyed arena's record is reused, and a dyn index names its site
2026-09-25 10:51:08 +07:00
cc39ff2a01
A destroyed arena's allocator is reused by the next arena-new with its epoch kept, a stale dyn view names its site, and the spec fixes the Vec at five words in every build
2026-09-25 10:48:30 +07:00
39d35f51db
A function whose signature changed installs, and a caller compiled against the old one stops on StaleCall at the call
...
A dev cell carries its body's signature word beside the body, every call through a cell (and every function value taken from one) compares it with the word the site was compiled for, and the session lists the stale callers by file and line on the reply. Both backends, both installers; release builds have neither the word nor the compare.
2026-09-25 10:40:18 +07:00
cf04bfc8fd
A u64 converts to and from a float on x86 as it does under LLVM, across the top half of its range
2026-09-25 10:21:23 +07:00