8afa054349
Merge master into the .fln optionals lane.
2026-09-26 15:52:00 +07:00
33203bd3c5
Merge master into the typed char lane
...
# Conflicts:
# TODO.org
# lib/check.ml
2026-09-26 15:04:23 +07:00
7db1a81d1f
Builtins, prelude, vendor and raylib predicates are named with is- or has- and no name carries a ? or !.
2026-09-26 14:34:36 +07:00
92fbeb4fc9
println prints a char as the character itself, and a char inside a value, in the inspector or at the REPL prints as its literal.
2026-09-26 13:59:32 +07:00
fd8620516c
A char literal is a typed char unless typed code wants a number, and a char compares, hashes, converts with (i32 c) and a checked (char n), and crosses into dyn as a dyn char.
2026-09-26 13:49:02 +07:00
b545584de8
Master is merged into the when, get and if let lane, and dyn get over text counts characters through at's own body.
2026-09-26 13:17:57 +07:00
c24b19e7b1
Merge master into the dyn char lane
2026-09-26 13:09:28 +07:00
1b588df6b5
Master is merged into the when, get and if let lane after the review fixes.
2026-09-26 13:09:24 +07:00
f35a2b240a
Merge master into the dyn char lane
2026-09-26 12:51:41 +07:00
659f4d8c6c
Merge branch 'master' into worktree-agent-a26dff0627201f77b
2026-09-26 12:29:59 +07:00
9c47d3bacc
A dyn goes into every integer width range-checked, a char where its code point fits, and the trap names the width and what it found.
2026-09-26 12:27:40 +07:00
36655025c0
Master is merged into the when, get and if let lane again.
2026-09-26 12:23:17 +07:00
d5437c3f22
A non-ASCII char literal is refused where a byte is wanted, a dyn int or char goes into an i32 range-checked, a cast on a dyn char gives its code point, and C1 controls print as \uXXXX.
2026-09-26 12:15:04 +07:00
62fd7b19bc
Master is merged into the when, get and if let lane.
2026-09-26 12:13:55 +07:00
5ee433a38f
A kept when answers an Option, get is a checked lookup over arrays, slices, Vecs and dyn, and if let reads as a two-arm match in both syntaxes.
2026-09-26 12:12:48 +07:00
5cc661d6ab
Merge branch 'master' into worktree-agent-a26dff0627201f77b
2026-09-26 12:07:11 +07:00
db67ab19b4
String is owned, growable, always-valid UTF-8 text over a (Vec u8), and the prelude's text builders return it.
2026-09-26 12:07:11 +07:00
66ea0b3abe
Merge branch 'master' into worktree-agent-ab88d16e8e6fbfe15
2026-09-26 12:05:38 +07:00
6d8ced2ba3
A dyn text becomes a str as its own bytes, a dyn view becomes its own storage, and a dyn vec or map becomes a checked copy in a [const T], a fixed array or a struct, while a writable [T] is never a copy.
2026-09-26 11:48:01 +07:00
1d09f2fd3d
Merge master into the dyn char lane
2026-09-26 11:11:42 +07:00
71f2b0b9b6
Dyn has a char that prints as its literal, dyn text counts characters, and chars and text convert between a text and a vec of chars.
2026-09-26 11:11:42 +07:00
c4452fc500
Merge master into the bit operators lane
2026-09-26 11:04:32 +07:00
473bf0a2b7
The bit operators are && || ^^ ~~ in .fln at Python's precedence, take integers only on typed and dyn values, and popcount, leading-zeros, trailing-zeros and the rotations exist on both backends.
2026-09-26 10:49:54 +07:00
0a05d83b3b
A release build's dyn view carries no dev record, the dev registry grows instead of dropping notes, a container compared with itself still traps on a stale view inside it, has-key? traps at its site, and a trap clears the walk site it leaves.
2026-09-26 10:13:01 +07:00
d519ca81dd
Merge master into the views lane
2026-09-26 09:29:15 +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
4eefd25df9
A class instance refuses a key its class does not declare, read or written, through get, put, .field and [:key].
2026-09-26 06:02:51 +07:00
605eb97e75
A dyn value's .field and [:key] read as get and assign as put.
2026-09-26 05:52:56 +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
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
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
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
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
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
5a78cdd202
Merge master
2026-09-25 13:36:54 +07:00
f3d969618d
A class slot can carry a type, and set writes a declared slot
2026-09-25 13:32:16 +07:00
53880eb685
A class slot's type names its own package's class first, an int widens into a float slot exactly when it round-trips, and a constructor's refusal names the call that was wrong
2026-09-25 13:29:30 +07:00
639ff1859c
Aborting an expression that trapped in the park abandons it by a jump back to the poll that called it, and the session stays
2026-09-25 13:28:16 +07:00
3e09a1f722
Merge branch 'master' into worktree-agent-ac750a5e83cab251b
2026-09-25 13:18:42 +07:00
9aeee9d676
Merge branch 'master' into worktree-agent-a6ffe579d55d1892b
2026-09-25 13:16:58 +07:00
16427f8d07
A class slot may be a class or an Option, an int widens into a float slot when exact, a gained typed slot starts at its zero, and a migration never re-enters itself
2026-09-25 12:55:25 +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
e0af3c9b1d
A method of update-instance-for-redefined-class runs on each instance as it migrates, and one that signals offers migrate-by-name
2026-09-25 11:55:40 +07:00
3892f1ed34
Merge master
2026-09-25 11:50:29 +07:00
2682214499
A defclass slot may declare a type that every store into it checks, and set writes a declared slot
2026-09-25 11:40:08 +07:00
3cb6cebdbe
(- x) negates a typed number, a type variable and a dyn, and a float's negation of zero is -0.0
2026-09-25 11:37:56 +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
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
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
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