386 Commits

Author SHA1 Message Date
e79d9c0d07 Merge master into the views lane 2026-09-26 06:18:31 +07:00
d5d9dc1538 A view describes a struct from its own program's table, and an Option's payload is bound to a slot before it is viewed. 2026-09-26 06:17:59 +07:00
7953376e4e Any typed container of numbers, bools, str, structs, arrays, slices or Vecs crosses into dyn as a view from any storage, and a dev build traps on a view whose frame returned or whose block was released. 2026-09-26 06:10:11 +07:00
b1404727b6 A lambda with a block prints wherever it is last in its brackets, an element after a block lambda is refused as not last, and TAB offers no column of a block whose brackets have closed 2026-09-26 06:09:47 +07:00
b92e91bcaa A parameter, local or field may be named str or any other type name when a type follows it, and a type-named parameter with no type after it is refused with both fixes. 2026-09-26 05:27:23 +07:00
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
3c962197f4 A .fln lambda's body follows =>, and a lambda's block may sit inside a call's brackets as its last argument 2026-09-26 05:17:31 +07:00
6c32383539 Typed lambdas bind a generic's CFn variables, a local shadows an enum of its name, the lambda-in-brackets fix is the typed let that compiles, an else deeper than a one-line if or after else-if is refused by name, a block if takes a one-line else, and messages spell every type in the code's syntax 2026-09-26 00:36:21 +07:00
fff1c0b9c3 Merge master: return-type inference beside the syntax-following type spellings 2026-09-26 00:27:59 +07:00
40eb57a5b6 A dyn opened in any value position of an operand or an arm makes it meet as a dyn, found by the one walk of value positions the frame-escape check also uses 2026-09-26 00:09:42 +07:00
fd1a7f2b36 A one-line if takes its else on the next line, lambdas state their types, a restart's report sits on its header, Dir.north names an enum member, messages spell types in the code's syntax, adjacent globals convert adjacent, and a bad map key is one error 2026-09-26 00:07:28 +07:00
dbddc61b30 defvar in a .fln file suggests once and def in its spelling, and x++ on a global suggests ++(x) 2026-09-25 23:48:59 +07:00
dca29a5605 A .fln file's common mistakes are answered in .fln terms, a bare () in a body slot does nothing, and the syntax gaps found writing by hand are listed in TODO.org 2026-09-25 23:44:04 +07:00
263214e639 A dyn opened by an expectation is marked where it is opened, so a bool or an Option beside a dyn stays a dyn, and an operand refused at a type is not asked again, so nested sums and matches check in linear time 2026-09-25 23:43:14 +07:00
7e48f1eaf5 Eight hand-written .fln programs run the same on both backends and through a conversion to parens and back 2026-09-25 23:34:16 +07:00
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
3e504deb6f An arm is checked at the other arm's type first and meets it at the join only when refused there, so every program master accepts keeps its type and value while arms still meet in either order 2026-09-25 23:10:16 +07:00
319a3c78c4 Merge branch 'master' into worktree-agent-a46233a32d1912c78 2026-09-25 22:40:48 +07:00
a14e633a21 A pointer's element type can be cast and a slice made from a pointer and a count with slice-from 2026-09-25 22:35:34 +07:00
a39d96149d slice-from-ptr is refused with the slice-from call to write, and the pointer cast's const rule is documented as covering the outer pointer only 2026-09-25 22:35:24 +07:00
70b9040512 type-of answers a dyn value's kind as a keyword, and a class cannot be named after a built-in kind 2026-09-25 22:29:26 +07:00
35aa5a8c0f A refused dyn view of a global names its own defining form as the fix, and every dyn fix is spelled in the syntax the code was written in 2026-09-25 22:27:36 +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
e80411d283 type-of answers a value's kind as a keyword or an instance's class name, and a class named like a kind is refused. 2026-09-25 22:18:36 +07:00
47cc213b42 Return types read off the body and the converter's latest fixtures live together 2026-09-25 22:14:32 +07:00
ff0679cbb1 An if's else arm is checked once and brought to the join, an abandoned check undoes only what it wrote, and an arm refused at the join says why at its value 2026-09-25 22:14:06 +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
d16fe79b79 A refused dyn view of a parameter names its declaration as the fix 2026-09-25 22:09:44 +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
e81191d770 A bool returned from C reads as its low bit on --x86 as on LLVM, and the where-and fix and the x-1 hint follow the code's own syntax rather than its file name 2026-09-25 21:50:56 +07:00
bb800903d8 Return types read off the body and frame-escape refusals live together 2026-09-25 21:49:14 +07:00
18581a452c = and != compare bools, a match over a bool takes true and false arms, a match over a dyn takes keyword arms, and where predicates joined with and are refused with the comma or vector form as the fix 2026-09-25 21:35:31 +07:00
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
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
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
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
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
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
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