60ef7b2e06
A recur from an arm of a match over an enum is in tail position, and a session's blind spot for macros an expansion defines is recorded
2026-09-25 10:39:42 +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
066fb18940
Every Flan form heads the code it produced in the emitted IR, the x86 listing and both disassembly buffers, and the objects are the same with or without it
2026-09-25 10:34:07 +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
83b244475a
A refusal that suggests a fix suggests one that compiles, for vec-new, map-new and a near miss that is a value
2026-09-25 10:30:52 +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
5581bafacb
A dyn at, set-at or push that traps names the file, line and column it was written at
2026-09-25 10:25:28 +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
dd160aa31b
A return computes its value before it runs its defers
2026-09-25 10:19:09 +07:00
e511174d3c
No top-level value in the compiler goes unreferenced
2026-09-25 10:16:25 +07:00
3636f31cba
A running program's reply never says it has not called (agent/start ...), because the agent's constructor has bound the socket before main
2026-09-25 10:16:25 +07:00
0167fcef43
A quasiquote inside a quasiquote nests, and a macro that writes a macro defines one the program can call
2026-09-25 10:14:41 +07:00
d006a8b480
An array literal's first element types the rest, constant arithmetic folds at a bounded type variable, and a pointer or a plain union takes a byte fill
2026-09-25 10:14:24 +07:00
96be1193c0
The x86 backend describes every frame it emits for an unwinder, in a release build as in a debug one
2026-09-25 10:07:40 +07:00
4a292b5a73
f64-inf, f64-nan, f32-inf and f32-nan are constants the compiler supplies
2026-09-25 10:07:22 +07:00
b153f325b8
A declared name that starts with $ is refused where it is declared
2026-09-25 10:04:23 +07:00
bf827dc55b
A test binary leaves nothing in the temporary directory it was given
2026-09-25 09:56:39 +07:00
6a1182df5d
A test binary runs under a temporary directory of its own and leaves nothing in the one it was given
2026-09-25 09:40:00 +07:00
795ba945d9
A dyn value held beside a sibling that can allocate is rooted until it is used, on every backend
2026-09-25 09:32:34 +07:00
0d629d791f
The array an index or a slice is taken of is rooted while its index runs, when it is a temporary
2026-09-25 09:30:41 +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
96314accd0
One library pipeline builds every program, one alias names the corpus, and a closed session leaves no directory behind
2026-09-25 08:53:45 +07:00
00f116ea29
Six small refusals and conversions say what the program wrote
2026-09-25 08:41:31 +07:00
376e990689
The prelude's macro module drops a defn- that names a macro, as it drops a defn
2026-09-25 08:40:35 +07:00
6f0f4957f4
The break buffer, the inspector and the watch table show what a stopped program holds
2026-09-25 08:37:15 +07:00
ff744120fc
A release build's watch is only its value, next-error lets go of a stack that has resumed, and the frame a stop is in is always shown
2026-09-25 08:36:53 +07:00
0653f341d0
A dyn value held in an operand list is rooted while a sibling operand may allocate
2026-09-25 08:36:34 +07:00
63f1a1357f
Merge branch 'master' into worktree-agent-ad23aafb29b84cc8b
2026-09-25 08:33:28 +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
88584f76bc
The records say what the tree does, and an arena grown in place answers to its budget
2026-09-25 07:39:11 +07:00
cda939c8be
Only a place has an address in the inspector, and a watched dyn value and string are pinned armed
2026-09-25 07:32:25 +07:00
7d75cc0a5d
The CLI and the tests load, check and link a program through one module in the library
2026-09-25 07:30:55 +07:00
54ec52fde6
A dev session that ends cleanly takes its directories with it, and Build.executable says where the IR it kept is
2026-09-25 07:28:34 +07:00
377ada8d27
The inspector says where a slot's value is stored
2026-09-25 07:27:25 +07:00
85b9f35a66
(watch "name" v) renders any value into the watch table the way print renders it
2026-09-25 07:22:59 +07:00
f142cfaadf
A u64 constant above 2^63 can be written in decimal, and a cast's integer literal too wide for i32 is read at the cast's type
2026-09-25 07:16:42 +07:00
aa5052e401
A dyn value an expression answers is the reply's value, not the program's output
2026-09-25 07:14:13 +07:00
aa629da2e5
vec-new and map-new take a type expression where they take a type, so (vec-new [u8]) makes a Vec of byte slices
2026-09-25 07:10:48 +07:00
cf028e23ea
A class and each case of a data type are names on the definitions list
2026-09-25 07:09:46 +07:00
b4e19bebf8
A loop's initialisers are checked in order and each sees the names bound before it, as a let's do
2026-09-25 07:06:17 +07:00
8b354d4bc8
The notes say what is built: no pool, frames on x86, implicit widening, and the budget in the spec
2026-09-25 07:05:55 +07:00
9194f918fc
An aggregate that reads its own destination sees the old value, on x86 too
...
x86 built a settling right-hand side straight into its destination, so (set p (P {.a (.b p) .b (.a p)})) wrote .a and read it back for .b. assign now also asks whether the value reads storage the destination lies in, and goes through the temporary when it does. The global-initialiser entry was already closed by startup_plan's Set; the unrooted-temporary entry turns out to be a both-backends rooting gap and stays open for a decision.
2026-09-25 07:05:18 +07:00
3a3674efb7
A gensym is never the same name twice in one compiler process, however many macro modules it loads
2026-09-25 07:04:10 +07:00
6b9d1fa644
A cast of NaN or an infinity to an integer says so by name, on both backends
2026-09-25 06:58:06 +07:00
45cc4d20e8
One file holds what five did
...
# Conflicts:
# FIX.org
2026-09-21 21:07:40 +07:00
57fe91f303
Five records become one, and every citation lands somewhere
...
FIX.org, NEXT.md, DISCUSS.org, docs/DISCUSS.md and the session handoff at the
root are one TODO.org now: 293 entries under seven subsystem headings, each
carrying an org keyword that says where it stands. A DONE entry is a few lines
saying what was decided and what that rules out; the reasoning that would not
compress — the embedding spike and the four reports the hand-written x86
backend was built from — moved into docs/BUILT.md instead, and its entries
point there in one line.
Every entry was checked against the tree before it got a keyword, and the
prose was wrong in both directions. Things the deleted files called open were
built: the first-evaluation stall, main being redefinable, macro parameter
lists, the type-limit constants, the array constructors, the byte fills,
inc/dec, the discard's fontification, the Emacs buffers, rt_die's _exit, the
backtrace surface, and the acceptance failure that could print and still exit
zero. Things they called done were not: the backend reports' no-plan buckets
had gone stale in the other direction, the value-dependent defvar was
superseded rather than built, and macro-expansion source locations are on an
unmerged lane, so that entry is NEXT and names the branch.
Every comment that cited one of the five by name now cites a heading that
exists, in TODO.org or in docs/BUILT.md. The session reports under
docs/handoffs/ keep naming the files they worked on, because rewriting them
would falsify what those sessions did; each carries a note saying where the
content went.
2026-09-21 21:05:48 +07:00
594b4bae2e
A macro call records a handful of forms, not sixty-four
2026-09-21 20:37:30 +07:00