aboutsummaryrefslogtreecommitdiffstats
path: root/core/module.h
diff options
context:
space:
mode:
authoreunhhu <[email protected]>2026-10-18 17:23:37 +0100
committereunhhu <[email protected]>2026-10-18 17:23:37 +0100
commitd8e297452d8e0896d4733e09b70fdc3e6ce08a55 (patch)
treeb7502c598faf2fe54f49dc7e40ebfe54f94bb910 /core/module.h
parent241016b0fc3139414089619f0ef8cb7237722c6c (diff)
downloadpure-d8e297452d8e0896d4733e09b70fdc3e6ce08a55.tar.gz
pure-d8e297452d8e0896d4733e09b70fdc3e6ce08a55.zip
Module format and executor: 027's stage 3, nested stored state: a stored or a transient list's records may hold lists (a message's rows not, nor as a key); such a list's cell holds the value in its items' stored form (PURE_CELL_LIST, held as bytes are: each item's fields in order, 8 bytes a number, bool or i64, a u32le length and bytes a text or a list, a list's in this form again), read into one of the event's lists by ITEM_GET (counted in the event's room) and written from one by LIST_APPEND, LIST_INSERT and ITEM_SET, APPEND_IN reading, appending and writing back (undone with the event): images, the log, undoing, readers' shares and commits hold it as a text's bytes, so nothing new is stored or recovered; a list image's header names its record graph (a list field's items' record by its number, the graph's other records after the fields: a record holds itself through a list), and starting or replacing moves the items of the lists in fields by field name down the graph (PureLayout, pure_list_migrate); an event's lists keep the event's lists' numbers; a view lets go the lists a view before it read in; no FIND joined to a list field's read; pure-run shows a kept list's lists; unit tests (an event changing a number and a stored item's list, the process dying at the tree's four stages and the log's two, failed commits changing nothing; a replacement moving a stored and a transient list's lists, their items' record gaining a field and the board's fields changing places; under ASan and UBSan too)
Diffstat (limited to 'core/module.h')
-rw-r--r--core/module.h19
1 files changed, 12 insertions, 7 deletions
diff --git a/core/module.h b/core/module.h
index 18947d0..15109b6 100644
--- a/core/module.h
+++ b/core/module.h
@@ -93,13 +93,18 @@ typedef enum { PURE_BITS_AND, PURE_BITS_OR, PURE_BITS_XOR, PURE_BITS_LEFT, PURE_
* number (else LIMIT), in its base with a sign; FIXED takes a number. */
enum { PURE_MODULE_HELD = 32, PURE_HELD_TEXT = 16, PURE_HELD_APPEND = 1 << 8 };
/* 027's stage 2b: lists in records. A record field of type LIST holds a list
- * of the record its default names (an event's alone: an event's lists, and
- * the lists in their items, are the only ones that may hold one). The value
- * is the list's number among the event's lists made so (0: an empty one),
- * an i64 in its cell, so moves and reads (ITEM_GET) are an integer's; such
- * lists go as the event or a view's body ends. A list is a value: storing
- * one in a second cell shares it, and a list shared or bound is copied
- * before it changes (so no other value sees the change).
+ * of the record its default names. In an event's list (and the lists in its
+ * items) the value is the list's number among the event's lists made so (0:
+ * an empty one), an i64 in its cell, so moves and reads (ITEM_GET) are an
+ * integer's; such lists go as the event or a view's body ends. A list is a
+ * value: storing one in a second cell shares it, and a list shared or bound
+ * is copied before it changes (so no other value sees the change). Since
+ * stage 3 a stored or a transient list's records may hold lists too (a
+ * message's rows not, nor as a key): there the cell holds the value in its
+ * items' stored form (PURE_CELL_LIST), read into one of the event's lists
+ * as ITEM_GET reads it and written from one as it is set (LIST_APPEND,
+ * LIST_INSERT, ITEM_SET; APPEND_IN reads, appends and writes back), so
+ * saving, undoing and sharing with readers hold it as a text's bytes.
* LIST_VALUE pushes the value of an event's list state (the argument): a
* copy of its items. LIST_BIND gives the bound list state (a register: an
* event's list flagged PURE_LIST_BOUND, read and walked, never changed by