346 Commits

Author SHA1 Message Date
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
69eb11ce9b Return types read off the body and generic structs live together 2026-09-25 20:51:38 +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
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
f6384fdf38 Merge master into the generics lane 2026-09-25 20:03:34 +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
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
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
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
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
37938db7c2 A call through a failed local is not reported and a miscounted call's arguments are, eval-in-frame answers slotless frames and ended stops, flan dev links its own agent, and the daemon buffer colours only file:line:col diagnostics 2026-09-25 16:47:51 +07:00
43c7494d54 A Vec or Map field grown through a struct parameter taken by value is warned at the parameter, naming the field path and the (Ptr ...) that reaches the caller's 2026-09-25 16:40:39 +07:00
730730a1a7 A relocated prelude refusal's note says only that the refusal is there, since the notes before it name which body 2026-09-25 16:23:19 +07:00
7b3e7f0efa A program's global or type cannot change what the prelude means: a type variable wins over a global in a type position, prelude signatures pair against prelude types, and a global or type spelled like a built-in type is refused 2026-09-25 16:22:27 +07:00
f32f88413e Merge branch 'master' into worktree-agent-a4f010dac78379ee2 2026-09-25 16:20:22 +07:00
b51b7d0a53 A refusal in a prelude generic's body stands at the call that asked for the copy, with the prelude's line as a note 2026-09-25 16:20:08 +07:00
8eac6734f0 Merge branch 'master' into worktree-agent-a37bbb17fdd22924a 2026-09-25 16:15:40 +07:00
ea67e058bf A generic over a generic struct calls another at the same struct variables, and a struct copy is a map key and a function-value parameter on both backends 2026-09-25 16:15:40 +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
8fe2a666a1 A refused if is answered from memory for the same condition, scope and expectation, so a refused or/and chain is checked in linear time 2026-09-25 16:09:31 +07:00
4054c4921b A defstruct whose fields introduce $t or an array length $n is a generic struct, each application of it an ordinary struct copy that generic functions bind against, and a printed call is evaluated once 2026-09-25 16:08:14 +07:00
69d17a9d59 Merge branch 'master' into worktree-agent-aebbe657e5dc1f8ef 2026-09-25 16:03:19 +07:00
25e303caf4 Master's indented reader is merged, and its x += v over a place with a call in it reads as update, evaluating the place once 2026-09-25 15:56:51 +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
d46067962d A Vec or Map parameter the function grows with push, reserve or put is warned at the parameter, naming the (Ptr ...) that reaches the caller's container 2026-09-25 15:41:42 +07:00
e616a29ceb A parameter vector paired by a lowercase type the program declares is warned at, naming the type and where it is declared 2026-09-25 15:37:26 +07:00
1716b146cd A condition check_truthy has already refused is refused again from memory, so a retry through nested not is linear and keeps its message 2026-09-25 15:35:36 +07:00
da9f21ddcd A form sent to the daemon is refused with every error in it, and an expression evaluated from the break buffer sees the stopped frame's locals 2026-09-25 15:33:23 +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
23af8a4dd3 A bool arm and a dyn arm of an if meet at dyn with the bool boxed, so (or false (box "s")) answers "s" 2026-09-25 15:31:12 +07:00
074b2da6f3 The indented reader refuses a continuation line that is not deeper than its statement, takes one-line statements in arms, then/else and defer, typed lets and bare-name blocks, and names the shape it wanted where it used to say two values cannot sit side by side 2026-09-25 15:30:52 +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
b8c81d94ee enum? admits exactly the enums, entails ordered? and equal?, and licenses a generic conversion from an enum to a number beside numeric? 2026-09-25 15:26:27 +07:00
5b8c4a68fa into refuses to copy elements that own storage as they stand, and names (map clone) where clone takes the element 2026-09-25 15:22:44 +07:00
580d377847 A fixed array of strings or of structs is a map key, hashed and compared element by element 2026-09-25 15:21:30 +07:00
a41e43cbba (slice d ...) over a dyn text answers a text, in the three spellings the typed slice has 2026-09-25 15:19:39 +07:00
6745aa7cb4 map-keys and map-values are prelude generics over any hashable key 2026-09-25 15:17:05 +07:00
680b8e7e59 A refusal inside a generic copy names each call that asked for it, a refused generic body is reported once, and a type variable prints with its $ 2026-09-25 15:13:12 +07:00
e2aa0196cf Conditions have parents under Error, restarts carry where and why, and a handler reads the message with its values 2026-09-25 14:51:18 +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
409c5f5c0d A read-only slice's diagnostics name (clone v) wherever clone copies the element type 2026-09-25 14:31:21 +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
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