28 Commits

Author SHA1 Message Date
17a7afb297 The .fln reader takes loop and recur as names wherever the Lisp loop's spellings are not written, and the convert refusal lists its lines in a sentence of their own. 2026-09-26 10:43:10 +07:00
fc463cf320 The .fln reader refuses loop and recur, flan convert refuses a .flan file that uses them, and every loop outside recur.flan is a while or until. 2026-09-26 10:31:53 +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
a8f98c86f1 A let in a form cut from inside a body stays local when the editor sends it, and the printer forgets one file's class names before the next. 2026-09-26 05:44:03 +07:00
702ebdc9c5 In a .fln file a top-level let is a global and def is refused, while a let in a block or an evaluated expression stays local. 2026-09-26 05:39:59 +07:00
cde4f2ab1b A .fln file writes classes and methods as class, generic, multi and method headers, and flan convert prints them so. 2026-09-26 05:39:59 +07:00
905a4c53be A struct or union fits on one line, struct Pt(x: i32, y: i32), and flan convert writes that form when it fits. 2026-09-26 05:39:59 +07:00
de0c8791f3 A variable named like a header or clause word, data = 3 or on += 1, is read and printed as an assignment. 2026-09-26 05:39:59 +07:00
72c73117d6 A .fln file writes a type alias as type Row = Vec(i32), and flan check prints nothing for a file that checks unless given --defs. 2026-09-26 05:39:59 +07:00
1a97dfff77 A .fln file writes a condition's parent as struct DiskFull :parent IoError, a macro as macro repeat(i, n, & body) and a loop as loop x = a, y = b, and flan convert prints them so. 2026-09-26 05:39:59 +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
fff1c0b9c3 Merge master: return-type inference beside the syntax-following type spellings 2026-09-26 00:27:59 +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
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
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
2135f6d37f Merge branch 'master' into worktree-agent-a46233a32d1912c78 2026-09-25 23:27:55 +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
0e26af2107 A macro body counts as run in order only when nothing outside its templates depends on how the body splits into arguments, a let whose longer scope would reach a macro naming it stays in a do: block, and converted programs with shadowed names and macro bodies print what their paren originals print 2026-09-25 23:00:27 +07:00
55ab1a98ae A macro whose definition splices its body into a do, and comment, count as bodies run in order where the .fln printer writes a let flat, and a struct-pattern let renames and flattens like a plain one 2026-09-25 22:39:50 +07:00
0b80c1956f A let in .fln is always flat and a line indented under one is refused, the printer renames a let's name a later statement means otherwise or puts the let in a do: block, and a one-argument and/or prints as its argument 2026-09-25 22:23:37 +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
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
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
30373ffda5 A converted comment stays with the form it was written beside when the printer reorders or splits bindings, the round trip checks each comment's form, and a snippet's first line sets its left edge 2026-09-25 16:17:12 +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
8200120bf3 flan convert keeps comments and number spellings in both directions, and a .fln message quotes the text as written, with let-bound match, if and block calls read as values 2026-09-25 15:47:29 +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
d7016f91c7 A .fln file is read by an indented reader that yields the paren reader's forms, every program entry point picks the reader by extension, and flan convert prints either syntax as the other 2026-09-25 15:04:32 +07:00