LineState
Defined in: packages/engine/src/engine/DocumentModel.ts:34
Persistent per-line state tracked by the DocumentModel.
Each line receives an immutable lineId that survives structural edits
(insertions, deletions, line shifts). This allows caches, the dependency
graph, and VM checkpoints to reference lines by ID instead of by volatile
line numbers.
── Multi-expression support ─────────────────────────────────────────
A single document line may contain multiple inline solves (s\…“).
To support this without breaking the 1:1 line-to-DAG-node contract:
expressions[]holds all extracted expression strings (1 entry for full-line expressions, N entries for N inline solves).bytecodes[]holds compiled bytecode in corresponding order.results[]holds evaluation result groups in corresponding order. Each element is aValue[], a group of Values produced by that expression. For variable definitions, the group always has exactly 1 element. For multi-output expressions (e.g., currency conversion), the group may have multiple Values (one per target unit).reads[]andwrites[]are aggregated across ALL expressions on the line, the DAG treats the line as a single dependency node.inlineSolveCountis 0 for full-line expressions, >0 for inline solves.
Properties
Section titled “Properties”bytecodes
Section titled “bytecodes”bytecodes: BytecodeProgram[];Defined in: packages/engine/src/engine/DocumentModel.ts:56
Compiled bytecode for each expression, in corresponding order. Parallel to expressions.
dirty: boolean;Defined in: packages/engine/src/engine/DocumentModel.ts:81
True if this line needs re-evaluation.
expressions
Section titled “expressions”expressions: string[];Defined in: packages/engine/src/engine/DocumentModel.ts:50
Extracted expression texts.
- Full-line expressions: one entry (the trimmed text).
- Inline solve lines: one entry per
s\…“ span, in left-to-right order. - Markdown-only lines: empty array.
inlineSolveCount
Section titled “inlineSolveCount”inlineSolveCount: number;Defined in: packages/engine/src/engine/DocumentModel.ts:94
Number of inline solve expressions on this line. 0 = full-line expression (or markdown-only).
0 = N inline solves embedded in markdown text.
isEmpty
Section titled “isEmpty”isEmpty: boolean;Defined in: packages/engine/src/engine/DocumentModel.ts:87
True if this line contains only markdown (no evaluable expression).
isVariableDef
Section titled “isVariableDef”isVariableDef: boolean;Defined in: packages/engine/src/engine/DocumentModel.ts:84
True if any expression on this line defines a variable (never evict bytecode).
lineId
Section titled “lineId”readonly lineId: number;Defined in: packages/engine/src/engine/DocumentModel.ts:36
Immutable unique identifier, survives all structural edits.
reads: string[];Defined in: packages/engine/src/engine/DocumentModel.ts:59
Variables this line reads (for dependency tracking). Aggregated across all expressions.
result
Section titled “result”result: Value | null;Defined in: packages/engine/src/engine/DocumentModel.ts:78
Convenience accessor for the first expression’s first result.
Equals results[0]?.[0] ?? null. For single-expression lines,
this is the primary result. For multi-expression (inline solve) lines,
prefer accessing results[i][j] directly.
results
Section titled “results”results: Value[][];Defined in: packages/engine/src/engine/DocumentModel.ts:70
Evaluation result groups for each expression, in corresponding order.
Each Value[] is a group of Values produced by one expression.
Variable definitions always produce exactly 1 Value per group.
Multi-output expressions (e.g. currency conversion) may produce N Values.
text: string;Defined in: packages/engine/src/engine/DocumentModel.ts:42
The full line text (may include markdown).
textHash
Section titled “textHash”textHash: number;Defined in: packages/engine/src/engine/DocumentModel.ts:39
djb2 hash of the line text, used for O(1) change detection.
writes
Section titled “writes”writes: string[];Defined in: packages/engine/src/engine/DocumentModel.ts:62
Variables this line writes (empty if not a variable definition). Aggregated across all expressions.