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
a1e5e39dba
Master's changes are merged into the dyn printing lane, with its converter fixture
2026-09-25 22:11:04 +07:00
4f060bb648
Dyn and typed containers print as [1 2 3] and {:a 1}, a refused dyn view names the value and a dyn fix in the file's own syntax, and a dyn function whose body gives no value says so by name
2026-09-25 22:01:40 +07:00
cf8fea9b3c
docs/BUILT.md says a restart is taken after the jobs queued before it.
2026-09-25 22:01:15 +07:00
d77d541360
A value that traps or faults while the inspector reads it shows as #<trapped: NAME> with no break pushed, a restart already accepted is taken before queued reads run, and a fault in the inspector's read names the read.
2026-09-25 21:27:24 +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
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
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
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
7c1cbd3a9f
Merge branch 'master' into worktree-agent-a9288676abb278ffb
2026-09-25 17:00:08 +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
020392b064
Merge branch 'master' into worktree-agent-a55c4be9d199b8eb4
2026-09-25 16:22:58 +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
d0fc036bba
flan dev --sanitize builds the host under ASan and UBSan on LLVM, refuses --x86 by name, and the sanitize sweep drives a real session through reloads and breaks
2026-09-25 15:39:00 +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
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
b0323606fc
spike/ is gone: the x86 and JS surveys and the cells check live in test/, their probes in test/programs as x86-p* and js-p*, and dump.sh in tools/
2026-09-25 15:14:27 +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
d2f25a6e44
Merge branch 'master' into worktree-agent-a9288676abb278ffb
2026-09-25 13:35:10 +07:00
0358f6637c
Merge branch 'master' into worktree-agent-ad097f67134ba0552
2026-09-25 13:15:36 +07:00
1e5be63a1a
An array reached through read-only storage slices to a [const T], a Vec or Map copied out of one stays read-only through lets, and an if's const and writable branches meet at const in either order
2026-09-25 13:08:29 +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
042c969e30
Every description of an Allocator value says it is two words
2026-09-25 12:55:38 +07:00
acec25f8a1
Merge master
2026-09-25 12:43:50 +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
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
6e8cc52bc7
Merge branch 'master' into worktree-agent-ad097f67134ba0552
2026-09-25 12:02:48 +07:00
3892f1ed34
Merge master
2026-09-25 11:50:29 +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
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
20fa04d9df
A program never waits on an editor that stops reading its pushes, and the editor keeps a bounded tail of the program's output
2026-09-25 11:42:54 +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
c671f23b2c
Merge master
2026-09-25 11:36:46 +07:00
5062052425
Raylib's strings, models, file lists and matrix stack are bound, and a dev build can name what is still loaded at exit
2026-09-25 11:28:02 +07:00
05d86b243f
A library resource is known by its identifying field, a Get or a consuming Load is counted as raylib means it, bare pointers are not resources, the report waits for FLAN_DEV_LEAKS, and a release build emits the code it did before the tracker
2026-09-25 11:27:41 +07:00
9e26275f9b
A quasiquote nests as SBCL's does, a match takes an enum, and until is a prelude macro
2026-09-25 11:27:14 +07:00
97a2795cb2
A module that makes a closure stays mapped, and a closure held beside a collecting operand is rooted
2026-09-25 11:24:34 +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
f4725788c5
The daemon pushes the program's output and the watch table to an editor that asked for them, and every key a Flan buffer's own map binds is that buffer's under Evil
2026-09-25 11:16:49 +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
389e93ff09
A capturing fn's environment belongs to the collector, so a closure may outlive the frame that made it
2026-09-25 11:13:57 +07:00
d03b02b347
Merge master
2026-09-25 11:12:30 +07:00
0d771494a6
Merge branch 'master' into worktree-agent-a8f5ad274482eeb9c
2026-09-25 11:07:02 +07:00
8bebff61eb
Merge branch 'master' into worktree-agent-a8f88805fa4af49cf
2026-09-25 11:01:36 +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
3f30b82bcb
A return computes its value before its defers, and a dozen small refusals and constants say what the program meant
2026-09-25 10:54:09 +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