behavior-contracts 0.4.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +78 -29
- package/dist/behavior.d.ts +7 -0
- package/dist/behavior.d.ts.map +1 -1
- package/dist/behavior.js.map +1 -1
- package/dist/builder.d.ts.map +1 -1
- package/dist/builder.js +10 -3
- package/dist/builder.js.map +1 -1
- package/dist/generator/async-plan.d.ts +78 -0
- package/dist/generator/async-plan.d.ts.map +1 -0
- package/dist/generator/async-plan.js +116 -0
- package/dist/generator/async-plan.js.map +1 -0
- package/dist/generator/core.d.ts +35 -0
- package/dist/generator/core.d.ts.map +1 -1
- package/dist/generator/core.js +1 -0
- package/dist/generator/core.js.map +1 -1
- package/dist/generator/{emit-straightline-typed-go.d.ts → emit-shared-go-typed.d.ts} +28 -17
- package/dist/generator/emit-shared-go-typed.d.ts.map +1 -0
- package/dist/generator/emit-shared-go-typed.js +572 -0
- package/dist/generator/emit-shared-go-typed.js.map +1 -0
- package/dist/generator/emit-shared-go.d.ts +29 -0
- package/dist/generator/emit-shared-go.d.ts.map +1 -0
- package/dist/generator/{emit-straightline-go.js → emit-shared-go.js} +17 -31
- package/dist/generator/emit-shared-go.js.map +1 -0
- package/dist/generator/{emit-straightline-typed-rust.d.ts → emit-shared-rust-typed.d.ts} +27 -17
- package/dist/generator/emit-shared-rust-typed.d.ts.map +1 -0
- package/dist/generator/emit-shared-rust-typed.js +576 -0
- package/dist/generator/emit-shared-rust-typed.js.map +1 -0
- package/dist/generator/{emit-straightline-rust.d.ts → emit-shared-rust.d.ts} +1 -36
- package/dist/generator/emit-shared-rust.d.ts.map +1 -0
- package/dist/generator/{emit-straightline-rust.js → emit-shared-rust.js} +7 -28
- package/dist/generator/emit-shared-rust.js.map +1 -0
- package/dist/generator/emit-shared-typescript.d.ts +12 -0
- package/dist/generator/emit-shared-typescript.d.ts.map +1 -0
- package/dist/generator/{emit-straightline-typescript.js → emit-shared-typescript.js} +9 -30
- package/dist/generator/emit-shared-typescript.js.map +1 -0
- package/dist/generator/emit-straightline-typed-typescript.d.ts +1 -1
- package/dist/generator/emit-straightline-typed-typescript.d.ts.map +1 -1
- package/dist/generator/emit-straightline-typed-typescript.js +1 -1
- package/dist/generator/emit-straightline-typed-typescript.js.map +1 -1
- package/dist/generator/emit-typed-native-go.d.ts +63 -0
- package/dist/generator/emit-typed-native-go.d.ts.map +1 -0
- package/dist/generator/emit-typed-native-go.js +2260 -0
- package/dist/generator/emit-typed-native-go.js.map +1 -0
- package/dist/generator/emit-typed-native-rust.d.ts +53 -0
- package/dist/generator/emit-typed-native-rust.d.ts.map +1 -0
- package/dist/generator/emit-typed-native-rust.js +2123 -0
- package/dist/generator/emit-typed-native-rust.js.map +1 -0
- package/dist/generator/index.d.ts +4 -12
- package/dist/generator/index.d.ts.map +1 -1
- package/dist/generator/index.js +16 -52
- package/dist/generator/index.js.map +1 -1
- package/dist/generator/native-expr.d.ts +120 -0
- package/dist/generator/native-expr.d.ts.map +1 -0
- package/dist/generator/native-expr.js +456 -0
- package/dist/generator/native-expr.js.map +1 -0
- package/dist/generator/straightline.d.ts +46 -0
- package/dist/generator/straightline.d.ts.map +1 -1
- package/dist/generator/straightline.js +65 -0
- package/dist/generator/straightline.js.map +1 -1
- package/dist/generator/typed.d.ts.map +1 -1
- package/dist/generator/typed.js +8 -0
- package/dist/generator/typed.js.map +1 -1
- package/dist/guard.js +14 -0
- package/dist/guard.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/plan.d.ts +6 -2
- package/dist/plan.d.ts.map +1 -1
- package/dist/plan.js +4 -0
- package/dist/plan.js.map +1 -1
- package/package.json +1 -1
- package/dist/generator/emit-go.d.ts +0 -19
- package/dist/generator/emit-go.d.ts.map +0 -1
- package/dist/generator/emit-go.js +0 -79
- package/dist/generator/emit-go.js.map +0 -1
- package/dist/generator/emit-raw-abi-go.d.ts +0 -45
- package/dist/generator/emit-raw-abi-go.d.ts.map +0 -1
- package/dist/generator/emit-raw-abi-go.js +0 -345
- package/dist/generator/emit-raw-abi-go.js.map +0 -1
- package/dist/generator/emit-raw-abi-rust.d.ts +0 -45
- package/dist/generator/emit-raw-abi-rust.d.ts.map +0 -1
- package/dist/generator/emit-raw-abi-rust.js +0 -380
- package/dist/generator/emit-raw-abi-rust.js.map +0 -1
- package/dist/generator/emit-rust.d.ts +0 -25
- package/dist/generator/emit-rust.d.ts.map +0 -1
- package/dist/generator/emit-rust.js +0 -125
- package/dist/generator/emit-rust.js.map +0 -1
- package/dist/generator/emit-straightline-go.d.ts +0 -58
- package/dist/generator/emit-straightline-go.d.ts.map +0 -1
- package/dist/generator/emit-straightline-go.js.map +0 -1
- package/dist/generator/emit-straightline-php.d.ts +0 -46
- package/dist/generator/emit-straightline-php.d.ts.map +0 -1
- package/dist/generator/emit-straightline-php.js +0 -941
- package/dist/generator/emit-straightline-php.js.map +0 -1
- package/dist/generator/emit-straightline-python.d.ts +0 -36
- package/dist/generator/emit-straightline-python.d.ts.map +0 -1
- package/dist/generator/emit-straightline-python.js +0 -855
- package/dist/generator/emit-straightline-python.js.map +0 -1
- package/dist/generator/emit-straightline-rust.d.ts.map +0 -1
- package/dist/generator/emit-straightline-rust.js.map +0 -1
- package/dist/generator/emit-straightline-typed-go.d.ts.map +0 -1
- package/dist/generator/emit-straightline-typed-go.js +0 -1111
- package/dist/generator/emit-straightline-typed-go.js.map +0 -1
- package/dist/generator/emit-straightline-typed-rust.d.ts.map +0 -1
- package/dist/generator/emit-straightline-typed-rust.js +0 -1153
- package/dist/generator/emit-straightline-typed-rust.js.map +0 -1
- package/dist/generator/emit-straightline-typescript.d.ts +0 -47
- package/dist/generator/emit-straightline-typescript.d.ts.map +0 -1
- package/dist/generator/emit-straightline-typescript.js.map +0 -1
|
@@ -0,0 +1,456 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* native-expr.ts — the RUNTIME-FREE native expression compiler (#108 / bc#101).
|
|
3
|
+
*
|
|
4
|
+
* The typed-native emitters (emit-typed-native-go.ts / -rust.ts) are static mirrors of runBehavior.
|
|
5
|
+
* runBehavior's cond node (behavior.ts:425-429) and map guard (behavior.ts:443-445) lower an
|
|
6
|
+
* arbitrary Expression IR through the reference evaluator `evaluate` (expr-eval.ts). To mirror those
|
|
7
|
+
* on the RUNTIME-FREE covered plane (bc#90 — NO boxed Value, NO bc-runtime import), this module
|
|
8
|
+
* compiles an Expression IR node to a NATIVE Go/Rust expression whose observable result (value +
|
|
9
|
+
* fail-closed failure code) is BYTE-EQUAL to `evaluate`.
|
|
10
|
+
*
|
|
11
|
+
* # The closed op set (25)
|
|
12
|
+
* literals: int({int:"…"}), float({float:n}), bare-number, str, bool, null
|
|
13
|
+
* refs: ref, refOpt construction: obj, arr
|
|
14
|
+
* numeric: add, sub, mul, neg, div, mod string: concat
|
|
15
|
+
* compare: eq, ne, lt, le, gt, ge bool/null: and, or, not, coalesce, cond arr: len
|
|
16
|
+
*
|
|
17
|
+
* # Static typing
|
|
18
|
+
* On the covered plane every operand's type is STATICALLY known (input port scalar type / input
|
|
19
|
+
* array elemType / prior-node outType field / map $as element type / literal kind). So the compiler
|
|
20
|
+
* infers a `TypeRef` for every sub-expression. A TYPE_MISMATCH that `evaluate` would raise at runtime
|
|
21
|
+
* is a GENERATION-TIME fail-closed reject here (the shape is not covered) — never a silent miscompile.
|
|
22
|
+
* The ONLY runtime failures a covered expression can still raise are the value-dependent arithmetic
|
|
23
|
+
* ones: INT_OVERFLOW / NAN_OR_INF / MOD_ZERO / PRECISION_LOSS, and the literal INVALID_LITERAL. Those
|
|
24
|
+
* are emitted as calls to a small fixed set of RUNTIME-FREE local helper funcs (bcAdd/bcMod/… in Go,
|
|
25
|
+
* bc_add/bc_mod/… in Rust) that carry the exact failure code — so the covered module still imports
|
|
26
|
+
* ZERO bc runtime.
|
|
27
|
+
*
|
|
28
|
+
* # Fallible → statements
|
|
29
|
+
* A fallible sub-expression (checked arith, div, mod, an int literal, len over a possibly-huge arr)
|
|
30
|
+
* is hoisted to a temp with an early error-return, so the final `expr` is pure. `compile` returns
|
|
31
|
+
* `{ stmts, expr, ref }`: `stmts` are the hoisted statements (in evaluation order — left-to-right,
|
|
32
|
+
* short-circuit-aware), `expr` the final native value expression, `ref` its static TypeRef.
|
|
33
|
+
*/
|
|
34
|
+
import { GeneratorFailure } from "./core.js";
|
|
35
|
+
const SCALARS = ["string", "int", "float", "bool"];
|
|
36
|
+
/**
|
|
37
|
+
* fail — a GENERATION-TIME fail-closed reject. On the covered plane a statically-detectable violation
|
|
38
|
+
* (a TYPE_MISMATCH the reference evaluator would raise at runtime, an INVALID_LITERAL / out-of-range
|
|
39
|
+
* literal, an uncovered shape) is surfaced as the emitter's fail-closed `UNSUPPORTED_NODE_STRAIGHTLINE`
|
|
40
|
+
* with the SPECIFIC semantic reason (`why`) in the message — never a silent miscompile. The
|
|
41
|
+
* value-dependent RUNTIME failures (INT_OVERFLOW / NAN_OR_INF / MOD_ZERO / PRECISION_LOSS) are NOT
|
|
42
|
+
* thrown here; they are emitted into the generated runtime-free helpers with their exact codes.
|
|
43
|
+
*/
|
|
44
|
+
function fail(why, msg) {
|
|
45
|
+
throw new GeneratorFailure("UNSUPPORTED_NODE_STRAIGHTLINE", `[${why}] ${msg}`);
|
|
46
|
+
}
|
|
47
|
+
function isScalar(r, s) {
|
|
48
|
+
return r.kind === "scalar" && (s === undefined ? r.scalar !== "null" : r.scalar === s);
|
|
49
|
+
}
|
|
50
|
+
/** classify a single-key operator node; else null. */
|
|
51
|
+
function opOf(node) {
|
|
52
|
+
if (node === null || typeof node !== "object" || Array.isArray(node))
|
|
53
|
+
return null;
|
|
54
|
+
const keys = Object.keys(node);
|
|
55
|
+
if (keys.length !== 1)
|
|
56
|
+
return null;
|
|
57
|
+
return { op: keys[0], arg: node[keys[0]] };
|
|
58
|
+
}
|
|
59
|
+
const I64_MAX = 9223372036854775807n;
|
|
60
|
+
const I64_MIN = -9223372036854775808n;
|
|
61
|
+
const SAFE_INT = 9007199254740991n; // 2^53-1
|
|
62
|
+
/**
|
|
63
|
+
* NativeExprCompiler — compiles Expression IR to native code via a backend. One instance per
|
|
64
|
+
* expression-compilation context (it accumulates hoisted statements through `compile`).
|
|
65
|
+
*/
|
|
66
|
+
export class NativeExprCompiler {
|
|
67
|
+
be;
|
|
68
|
+
constructor(be) {
|
|
69
|
+
this.be = be;
|
|
70
|
+
}
|
|
71
|
+
/** compile a node to {stmts, expr, ref}. Fallible sub-exprs are hoisted into stmts. */
|
|
72
|
+
compile(node) {
|
|
73
|
+
// ── literals ──
|
|
74
|
+
if (node === null)
|
|
75
|
+
return fail("UNSUPPORTED_NODE_STRAIGHTLINE", `${this.be.lang} native expr: a bare null literal has no native scalar type on the runtime-free plane (wrap it in an opt-typed position)`);
|
|
76
|
+
if (typeof node === "boolean")
|
|
77
|
+
return { stmts: [], expr: this.be.boolLit(node), ref: { kind: "scalar", scalar: "bool" } };
|
|
78
|
+
if (typeof node === "string")
|
|
79
|
+
return { stmts: [], expr: this.be.strLit(node), ref: { kind: "scalar", scalar: "string" } };
|
|
80
|
+
if (typeof node === "number")
|
|
81
|
+
return this.numberLit(node);
|
|
82
|
+
const o = opOf(node);
|
|
83
|
+
if (o === null)
|
|
84
|
+
fail("UNSUPPORTED_NODE_STRAIGHTLINE", `${this.be.lang} native expr: not a portable expression node: ${JSON.stringify(node).slice(0, 80)}`);
|
|
85
|
+
switch (o.op) {
|
|
86
|
+
case "int":
|
|
87
|
+
return this.intLit(o.arg);
|
|
88
|
+
case "float":
|
|
89
|
+
return this.floatLit(o.arg);
|
|
90
|
+
case "ref":
|
|
91
|
+
case "refOpt":
|
|
92
|
+
return this.ref(o.arg, o.op === "refOpt");
|
|
93
|
+
case "obj":
|
|
94
|
+
return this.obj(o.arg);
|
|
95
|
+
case "arr":
|
|
96
|
+
return this.arr(o.arg);
|
|
97
|
+
case "add":
|
|
98
|
+
case "sub":
|
|
99
|
+
case "mul":
|
|
100
|
+
return this.arith(o.op, o.arg);
|
|
101
|
+
case "neg":
|
|
102
|
+
return this.neg(o.arg);
|
|
103
|
+
case "div":
|
|
104
|
+
return this.div(o.arg);
|
|
105
|
+
case "mod":
|
|
106
|
+
return this.mod(o.arg);
|
|
107
|
+
case "concat":
|
|
108
|
+
return this.concat(o.arg);
|
|
109
|
+
case "eq":
|
|
110
|
+
case "ne":
|
|
111
|
+
return this.eqNe(o.op, o.arg);
|
|
112
|
+
case "lt":
|
|
113
|
+
case "le":
|
|
114
|
+
case "gt":
|
|
115
|
+
case "ge":
|
|
116
|
+
return this.compare(o.op, o.arg);
|
|
117
|
+
case "and":
|
|
118
|
+
case "or":
|
|
119
|
+
return this.andOr(o.op, o.arg);
|
|
120
|
+
case "not":
|
|
121
|
+
return this.not(o.arg);
|
|
122
|
+
case "coalesce":
|
|
123
|
+
return this.coalesce(o.arg);
|
|
124
|
+
case "cond":
|
|
125
|
+
return this.cond(o.arg);
|
|
126
|
+
case "len":
|
|
127
|
+
return this.len(o.arg);
|
|
128
|
+
default:
|
|
129
|
+
return fail("UNSUPPORTED_NODE_STRAIGHTLINE", `${this.be.lang} native expr: operator '${o.op}' is not in the covered closed set (fail-closed)`);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/** compile a node and require it to produce a native `bool` (the cond `if` / guard `when` gate). A
|
|
133
|
+
* non-bool result is a GENERATION-TIME fail-closed reject (strict-bool, mirrors requireBool). */
|
|
134
|
+
compileBool(node) {
|
|
135
|
+
const c = this.compile(node);
|
|
136
|
+
if (!isScalar(c.ref, "bool"))
|
|
137
|
+
fail("UNSUPPORTED_NODE_STRAIGHTLINE", `${this.be.lang} native expr: condition must be a bool (strict-bool, no truthiness), got ${JSON.stringify(c.ref)}`);
|
|
138
|
+
return c;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* compileTo — compile a node to the given expected TypeRef, MATERIALIZING an {obj}/{arr}/scalar
|
|
142
|
+
* literal against `expected` (the cond-branch / boundary shape — mirrors emitTypedValue). A ref /
|
|
143
|
+
* operator sub-node is compiled by `compile` and must already carry the expected type. `named`
|
|
144
|
+
* targets require the plan-resolved decl fields (passed via `resolveDecl`).
|
|
145
|
+
*/
|
|
146
|
+
compileTo(node, expected, resolveDecl) {
|
|
147
|
+
const op = opOf(node);
|
|
148
|
+
// {obj:{...}} → a named struct literal, each field lowered to its declared type.
|
|
149
|
+
if (op !== null && op.op === "obj" && expected.kind === "named") {
|
|
150
|
+
if (op.arg === null || typeof op.arg !== "object" || Array.isArray(op.arg))
|
|
151
|
+
fail("INVALID_NODE", `${this.be.lang} native expr: {obj} expects an object`);
|
|
152
|
+
const fields = op.arg;
|
|
153
|
+
const decl = resolveDecl(expected.name);
|
|
154
|
+
const stmts = [];
|
|
155
|
+
const inits = [];
|
|
156
|
+
for (const f of decl) {
|
|
157
|
+
if (!(f.name in fields))
|
|
158
|
+
fail("MISSING_PROP", `${this.be.lang} native expr: {obj} missing field '${f.name}' for ${expected.name}`);
|
|
159
|
+
const sub = this.compileTo(fields[f.name], f.type, resolveDecl);
|
|
160
|
+
stmts.push(...sub.stmts);
|
|
161
|
+
inits.push({ field: f.name, expr: sub.expr });
|
|
162
|
+
}
|
|
163
|
+
return { stmts, expr: this.be.structLit(expected.name, inits), ref: expected };
|
|
164
|
+
}
|
|
165
|
+
// {arr:[...]} → a native slice/vec literal of the element type.
|
|
166
|
+
if (op !== null && op.op === "arr" && expected.kind === "arr") {
|
|
167
|
+
if (!Array.isArray(op.arg))
|
|
168
|
+
fail("INVALID_NODE", `${this.be.lang} native expr: {arr} expects an array`);
|
|
169
|
+
const stmts = [];
|
|
170
|
+
const items = [];
|
|
171
|
+
for (const el of op.arg) {
|
|
172
|
+
const sub = this.compileTo(el, expected.elem, resolveDecl);
|
|
173
|
+
stmts.push(...sub.stmts);
|
|
174
|
+
items.push(sub.expr);
|
|
175
|
+
}
|
|
176
|
+
return { stmts, expr: this.be.arrLit(this.be.renderType(expected.elem), items), ref: expected };
|
|
177
|
+
}
|
|
178
|
+
// otherwise a scalar literal / ref / operator: compile and require the expected type.
|
|
179
|
+
const c = this.compile(node);
|
|
180
|
+
if (!typeRefEqual(c.ref, expected))
|
|
181
|
+
fail("UNSUPPORTED_NODE_STRAIGHTLINE", `${this.be.lang} native expr: expression type ${JSON.stringify(c.ref)} does not match expected ${JSON.stringify(expected)} (fail-closed)`);
|
|
182
|
+
return c;
|
|
183
|
+
}
|
|
184
|
+
// ── literals ──────────────────────────────────────────────────────────────────────
|
|
185
|
+
numberLit(n) {
|
|
186
|
+
// bare number (§2.3): integral → int (must be safe-integer), else float.
|
|
187
|
+
if (Number.isInteger(n)) {
|
|
188
|
+
if (n < -Number(SAFE_INT) || n > Number(SAFE_INT))
|
|
189
|
+
fail("INVALID_LITERAL", `${this.be.lang} native expr: integral number literal ${n} exceeds safe range; use {int:"..."}`);
|
|
190
|
+
return { stmts: [], expr: this.be.intLit(String(n)), ref: { kind: "scalar", scalar: "int" } };
|
|
191
|
+
}
|
|
192
|
+
if (!Number.isFinite(n))
|
|
193
|
+
fail("NAN_OR_INF", `${this.be.lang} native expr: non-finite float literal ${n}`);
|
|
194
|
+
return { stmts: [], expr: this.be.floatLit(n), ref: { kind: "scalar", scalar: "float" } };
|
|
195
|
+
}
|
|
196
|
+
intLit(arg) {
|
|
197
|
+
if (typeof arg !== "string")
|
|
198
|
+
fail("INVALID_NODE", `${this.be.lang} native expr: {int:...} expects a string`);
|
|
199
|
+
// parse + i64 range check AT GENERATION TIME (the literal is static). INVALID_LITERAL / INT_OVERFLOW
|
|
200
|
+
// become a generation-time reject — the runtime never re-checks a static literal.
|
|
201
|
+
let v;
|
|
202
|
+
try {
|
|
203
|
+
v = BigInt(arg);
|
|
204
|
+
}
|
|
205
|
+
catch {
|
|
206
|
+
fail("INVALID_LITERAL", `${this.be.lang} native expr: invalid int literal: ${arg}`);
|
|
207
|
+
}
|
|
208
|
+
if (v < I64_MIN || v > I64_MAX)
|
|
209
|
+
fail("INT_OVERFLOW", `${this.be.lang} native expr: i64 overflow in literal: ${arg}`);
|
|
210
|
+
return { stmts: [], expr: this.be.intLit(v.toString()), ref: { kind: "scalar", scalar: "int" } };
|
|
211
|
+
}
|
|
212
|
+
floatLit(arg) {
|
|
213
|
+
if (typeof arg !== "number")
|
|
214
|
+
fail("INVALID_NODE", `${this.be.lang} native expr: {float:...} expects a number`);
|
|
215
|
+
if (!Number.isFinite(arg))
|
|
216
|
+
fail("NAN_OR_INF", `${this.be.lang} native expr: non-finite {float} literal ${arg}`);
|
|
217
|
+
return { stmts: [], expr: this.be.floatLit(arg), ref: { kind: "scalar", scalar: "float" } };
|
|
218
|
+
}
|
|
219
|
+
// ── refs ──────────────────────────────────────────────────────────────────────────
|
|
220
|
+
ref(arg, opt) {
|
|
221
|
+
if (!Array.isArray(arg) || arg.length === 0 || !arg.every((p) => typeof p === "string"))
|
|
222
|
+
fail("INVALID_NODE", `${this.be.lang} native expr: ${opt ? "refOpt" : "ref"} expects a non-empty string path`);
|
|
223
|
+
const path = arg;
|
|
224
|
+
const head = this.be.resolveHead(path[0]);
|
|
225
|
+
if (head === null)
|
|
226
|
+
fail("UNKNOWN_BINDING", `${this.be.lang} native expr: unknown binding: ${path[0]}`);
|
|
227
|
+
// A refOpt into a possibly-null intermediate would need opt-nil propagation; on the covered plane
|
|
228
|
+
// the cond/guard exprs read REQUIRED typed fields (the corpus + graphddb shapes). A refOpt or a
|
|
229
|
+
// walk through an opt field is fail-closed here (keep the boxed path for that shape).
|
|
230
|
+
if (opt)
|
|
231
|
+
fail("UNSUPPORTED_NODE_STRAIGHTLINE", `${this.be.lang} native expr: refOpt inside a cond/guard expression is not native-covered (fail-closed)`);
|
|
232
|
+
const { expr, ref } = this.be.fieldAccess(head.expr, head.ref, path.slice(1));
|
|
233
|
+
if (ref.kind === "opt")
|
|
234
|
+
fail("UNSUPPORTED_NODE_STRAIGHTLINE", `${this.be.lang} native expr: a required ref resolving to an opt field is not native-covered in a cond/guard expression (fail-closed)`);
|
|
235
|
+
return { stmts: [], expr, ref };
|
|
236
|
+
}
|
|
237
|
+
// ── construction ────────────────────────────────────────────────────────────────────
|
|
238
|
+
obj(_arg) {
|
|
239
|
+
fail("UNSUPPORTED_NODE_STRAIGHTLINE", `${this.be.lang} native expr: an {obj} inside a nested expression has no inferable named type here; obj is materialized only at the cond-branch/output boundary against an expected type (compileTo)`);
|
|
240
|
+
}
|
|
241
|
+
arr(_arg) {
|
|
242
|
+
fail("UNSUPPORTED_NODE_STRAIGHTLINE", `${this.be.lang} native expr: an {arr} inside a nested expression has no inferable element type here; arr is materialized only against an expected type (compileTo)`);
|
|
243
|
+
}
|
|
244
|
+
// ── numeric ─────────────────────────────────────────────────────────────────────────
|
|
245
|
+
binArgs(op, arg) {
|
|
246
|
+
if (!Array.isArray(arg) || arg.length !== 2)
|
|
247
|
+
fail("INVALID_NODE", `${this.be.lang} native expr: ${op} expects 2 args`);
|
|
248
|
+
return [arg[0], arg[1]];
|
|
249
|
+
}
|
|
250
|
+
arith(op, arg) {
|
|
251
|
+
const [ea, eb] = this.binArgs(op, arg);
|
|
252
|
+
const a = this.compile(ea);
|
|
253
|
+
const b = this.compile(eb);
|
|
254
|
+
if (isScalar(a.ref, "int") && isScalar(b.ref, "int")) {
|
|
255
|
+
// checked i64 → fallible helper (INT_OVERFLOW).
|
|
256
|
+
const helper = op === "add" ? "addI64" : op === "sub" ? "subI64" : "mulI64";
|
|
257
|
+
const temp = this.be.freshTemp();
|
|
258
|
+
const stmts = [...a.stmts, ...b.stmts, ...this.be.hoistFallible(temp, this.be.scalarType("int"), this.be.helperCall(helper, [a.expr, b.expr]))];
|
|
259
|
+
return { stmts, expr: temp, ref: { kind: "scalar", scalar: "int" } };
|
|
260
|
+
}
|
|
261
|
+
if (isScalar(a.ref, "float") && isScalar(b.ref, "float")) {
|
|
262
|
+
// checked finite f64 → fallible helper (NAN_OR_INF).
|
|
263
|
+
const helper = op === "add" ? "addF" : op === "sub" ? "subF" : "mulF";
|
|
264
|
+
const temp = this.be.freshTemp();
|
|
265
|
+
const stmts = [...a.stmts, ...b.stmts, ...this.be.hoistFallible(temp, this.be.scalarType("float"), this.be.helperCall(helper, [a.expr, b.expr]))];
|
|
266
|
+
return { stmts, expr: temp, ref: { kind: "scalar", scalar: "float" } };
|
|
267
|
+
}
|
|
268
|
+
fail("TYPE_MISMATCH", `${this.be.lang} native expr: ${op} requires int×int or float×float (got ${scalarName(a.ref)}×${scalarName(b.ref)})`);
|
|
269
|
+
}
|
|
270
|
+
neg(arg) {
|
|
271
|
+
if (!Array.isArray(arg) || arg.length !== 1)
|
|
272
|
+
fail("INVALID_NODE", `${this.be.lang} native expr: neg expects 1 arg`);
|
|
273
|
+
const a = this.compile(arg[0]);
|
|
274
|
+
if (isScalar(a.ref, "int")) {
|
|
275
|
+
const temp = this.be.freshTemp();
|
|
276
|
+
const stmts = [...a.stmts, ...this.be.hoistFallible(temp, this.be.scalarType("int"), this.be.helperCall("negI64", [a.expr]))];
|
|
277
|
+
return { stmts, expr: temp, ref: { kind: "scalar", scalar: "int" } };
|
|
278
|
+
}
|
|
279
|
+
if (isScalar(a.ref, "float")) {
|
|
280
|
+
const temp = this.be.freshTemp();
|
|
281
|
+
const stmts = [...a.stmts, ...this.be.hoistFallible(temp, this.be.scalarType("float"), this.be.helperCall("negF", [a.expr]))];
|
|
282
|
+
return { stmts, expr: temp, ref: { kind: "scalar", scalar: "float" } };
|
|
283
|
+
}
|
|
284
|
+
fail("TYPE_MISMATCH", `${this.be.lang} native expr: neg requires numeric (got ${scalarName(a.ref)})`);
|
|
285
|
+
}
|
|
286
|
+
div(arg) {
|
|
287
|
+
const [ea, eb] = this.binArgs("div", arg);
|
|
288
|
+
const a = this.compile(ea);
|
|
289
|
+
const b = this.compile(eb);
|
|
290
|
+
// div ALWAYS widens to float (PRECISION_LOSS if an int operand |x|>2^53) then checks finite
|
|
291
|
+
// (NAN_OR_INF for /0). The widen+divide is one fallible helper taking each operand as its native
|
|
292
|
+
// type. To keep the helper monomorphic per operand kind, we widen int operands via widenI64F first.
|
|
293
|
+
const wa = this.widenToFloat(a);
|
|
294
|
+
const wb = this.widenToFloat(b);
|
|
295
|
+
const temp = this.be.freshTemp();
|
|
296
|
+
const stmts = [...wa.stmts, ...wb.stmts, ...this.be.hoistFallible(temp, this.be.scalarType("float"), this.be.helperCall("divF", [wa.expr, wb.expr]))];
|
|
297
|
+
return { stmts, expr: temp, ref: { kind: "scalar", scalar: "float" } };
|
|
298
|
+
}
|
|
299
|
+
/** widen an int/float compiled value to a fallible f64 (PRECISION_LOSS for int out of ±2^53). */
|
|
300
|
+
widenToFloat(c) {
|
|
301
|
+
if (isScalar(c.ref, "float"))
|
|
302
|
+
return c;
|
|
303
|
+
if (isScalar(c.ref, "int")) {
|
|
304
|
+
const temp = this.be.freshTemp();
|
|
305
|
+
const stmts = [...c.stmts, ...this.be.hoistFallible(temp, this.be.scalarType("float"), this.be.helperCall("widenI64F", [c.expr]))];
|
|
306
|
+
return { stmts, expr: temp, ref: { kind: "scalar", scalar: "float" } };
|
|
307
|
+
}
|
|
308
|
+
fail("TYPE_MISMATCH", `${this.be.lang} native expr: numeric operand expected for div, got ${scalarName(c.ref)}`);
|
|
309
|
+
}
|
|
310
|
+
mod(arg) {
|
|
311
|
+
const [ea, eb] = this.binArgs("mod", arg);
|
|
312
|
+
const a = this.compile(ea);
|
|
313
|
+
const b = this.compile(eb);
|
|
314
|
+
if (isScalar(a.ref, "int") && isScalar(b.ref, "int")) {
|
|
315
|
+
const temp = this.be.freshTemp();
|
|
316
|
+
const stmts = [...a.stmts, ...b.stmts, ...this.be.hoistFallible(temp, this.be.scalarType("int"), this.be.helperCall("modI64", [a.expr, b.expr]))];
|
|
317
|
+
return { stmts, expr: temp, ref: { kind: "scalar", scalar: "int" } };
|
|
318
|
+
}
|
|
319
|
+
if (isScalar(a.ref, "float") && isScalar(b.ref, "float")) {
|
|
320
|
+
const temp = this.be.freshTemp();
|
|
321
|
+
const stmts = [...a.stmts, ...b.stmts, ...this.be.hoistFallible(temp, this.be.scalarType("float"), this.be.helperCall("modF", [a.expr, b.expr]))];
|
|
322
|
+
return { stmts, expr: temp, ref: { kind: "scalar", scalar: "float" } };
|
|
323
|
+
}
|
|
324
|
+
fail("TYPE_MISMATCH", `${this.be.lang} native expr: mod requires int×int or float×float (got ${scalarName(a.ref)}×${scalarName(b.ref)})`);
|
|
325
|
+
}
|
|
326
|
+
// ── string ──────────────────────────────────────────────────────────────────────────
|
|
327
|
+
concat(arg) {
|
|
328
|
+
if (!Array.isArray(arg) || arg.length < 2)
|
|
329
|
+
fail("INVALID_NODE", `${this.be.lang} native expr: concat expects >= 2 args`);
|
|
330
|
+
const parts = arg.map((p) => this.compile(p));
|
|
331
|
+
for (const p of parts)
|
|
332
|
+
if (!isScalar(p.ref, "string"))
|
|
333
|
+
fail("TYPE_MISMATCH", `${this.be.lang} native expr: concat requires string parts (got ${scalarName(p.ref)})`);
|
|
334
|
+
const stmts = parts.flatMap((p) => p.stmts);
|
|
335
|
+
return { stmts, expr: this.be.concat(parts.map((p) => p.expr)), ref: { kind: "scalar", scalar: "string" } };
|
|
336
|
+
}
|
|
337
|
+
// ── compare ─────────────────────────────────────────────────────────────────────────
|
|
338
|
+
eqNe(op, arg) {
|
|
339
|
+
const [ea, eb] = this.binArgs(op, arg);
|
|
340
|
+
const a = this.compile(ea);
|
|
341
|
+
const b = this.compile(eb);
|
|
342
|
+
// eq/ne: same scalar type only (null-eq is via opt; not on this plane). arr/obj eq is undefined.
|
|
343
|
+
if (!isScalar(a.ref) || !isScalar(b.ref) || scalarName(a.ref) !== scalarName(b.ref))
|
|
344
|
+
fail("TYPE_MISMATCH", `${this.be.lang} native expr: ${op} requires same scalar type (got ${scalarName(a.ref)}×${scalarName(b.ref)})`);
|
|
345
|
+
const sc = a.ref.scalar;
|
|
346
|
+
const stmts = [...a.stmts, ...b.stmts];
|
|
347
|
+
const cmp = this.be.binOp(op === "eq" ? "==" : "!=", a.expr, b.expr, sc);
|
|
348
|
+
return { stmts, expr: cmp, ref: { kind: "scalar", scalar: "bool" } };
|
|
349
|
+
}
|
|
350
|
+
compare(op, arg) {
|
|
351
|
+
const [ea, eb] = this.binArgs(op, arg);
|
|
352
|
+
const a = this.compile(ea);
|
|
353
|
+
const b = this.compile(eb);
|
|
354
|
+
if (!isScalar(a.ref) || !isScalar(b.ref) || scalarName(a.ref) !== scalarName(b.ref))
|
|
355
|
+
fail("TYPE_MISMATCH", `${this.be.lang} native expr: ${op} requires same scalar int/float/string (got ${scalarName(a.ref)}×${scalarName(b.ref)})`);
|
|
356
|
+
const sc = a.ref.scalar;
|
|
357
|
+
if (sc === "bool")
|
|
358
|
+
fail("TYPE_MISMATCH", `${this.be.lang} native expr: ${op} on bool is not defined`);
|
|
359
|
+
const sym = op === "lt" ? "<" : op === "le" ? "<=" : op === "gt" ? ">" : ">=";
|
|
360
|
+
const stmts = [...a.stmts, ...b.stmts];
|
|
361
|
+
// string compare must be CODE-POINT order (helper); int/float use native operators.
|
|
362
|
+
if (sc === "string") {
|
|
363
|
+
return { stmts, expr: this.be.helperCall(cmpHelper(op), [a.expr, b.expr]), ref: { kind: "scalar", scalar: "bool" } };
|
|
364
|
+
}
|
|
365
|
+
return { stmts, expr: this.be.binOp(sym, a.expr, b.expr, sc), ref: { kind: "scalar", scalar: "bool" } };
|
|
366
|
+
}
|
|
367
|
+
// ── bool / null (short-circuit) ───────────────────────────────────────────────────────
|
|
368
|
+
andOr(op, arg) {
|
|
369
|
+
const [ea, eb] = this.binArgs(op, arg);
|
|
370
|
+
const a = this.compile(ea);
|
|
371
|
+
if (!isScalar(a.ref, "bool"))
|
|
372
|
+
fail("TYPE_MISMATCH", `${this.be.lang} native expr: ${op} requires bool operands (got ${scalarName(a.ref)})`);
|
|
373
|
+
// SHORT-CIRCUIT: the right operand (and its fallible temps + failures) must NOT be evaluated when
|
|
374
|
+
// the left settles the result. We realize this with a ternary over the LEFT: and → a?compileR:false,
|
|
375
|
+
// or → a?true:compileR — and any hoisted temps of b live INSIDE the taken branch. To keep the
|
|
376
|
+
// right side's statements from leaking to the unconditional prefix, we compile b to a self-contained
|
|
377
|
+
// block-expression when it has stmts; when b is pure, a native `&&`/`||` is exact and simpler.
|
|
378
|
+
const b = this.compile(eb);
|
|
379
|
+
if (!isScalar(b.ref, "bool"))
|
|
380
|
+
fail("TYPE_MISMATCH", `${this.be.lang} native expr: ${op} requires bool operands (got ${scalarName(b.ref)})`);
|
|
381
|
+
if (b.stmts.length === 0) {
|
|
382
|
+
// pure right side: native &&/|| short-circuits exactly (no failure to guard).
|
|
383
|
+
return { stmts: a.stmts, expr: `(${a.expr} ${op === "and" ? "&&" : "||"} ${b.expr})`, ref: { kind: "scalar", scalar: "bool" } };
|
|
384
|
+
}
|
|
385
|
+
// right side is fallible: guard its evaluation behind the left's short-circuit via a temp+if.
|
|
386
|
+
const temp = this.be.freshTemp();
|
|
387
|
+
const guard = this.be.shortCircuitBool(op, temp, a.expr, b.stmts, b.expr);
|
|
388
|
+
return { stmts: [...a.stmts, ...guard], expr: temp, ref: { kind: "scalar", scalar: "bool" } };
|
|
389
|
+
}
|
|
390
|
+
not(arg) {
|
|
391
|
+
if (!Array.isArray(arg) || arg.length !== 1)
|
|
392
|
+
fail("INVALID_NODE", `${this.be.lang} native expr: not expects 1 arg`);
|
|
393
|
+
const a = this.compile(arg[0]);
|
|
394
|
+
if (!isScalar(a.ref, "bool"))
|
|
395
|
+
fail("TYPE_MISMATCH", `${this.be.lang} native expr: not requires bool (got ${scalarName(a.ref)})`);
|
|
396
|
+
return { stmts: a.stmts, expr: this.be.notOp(a.expr), ref: { kind: "scalar", scalar: "bool" } };
|
|
397
|
+
}
|
|
398
|
+
coalesce(arg) {
|
|
399
|
+
// coalesce needs a nullable left (opt). On the runtime-free covered plane an opt operand in a
|
|
400
|
+
// cond/guard expr is not covered (opt-nil requires the boxed path). Fail closed.
|
|
401
|
+
fail("UNSUPPORTED_NODE_STRAIGHTLINE", `${this.be.lang} native expr: coalesce (needs a nullable/opt operand) is not native-covered inside a cond/guard expression (fail-closed)`);
|
|
402
|
+
}
|
|
403
|
+
cond(arg) {
|
|
404
|
+
if (!Array.isArray(arg) || arg.length !== 3)
|
|
405
|
+
fail("INVALID_NODE", `${this.be.lang} native expr: cond expects [c,t,e]`);
|
|
406
|
+
const c = this.compileBool(arg[0]);
|
|
407
|
+
const t = this.compile(arg[1]);
|
|
408
|
+
const e = this.compile(arg[2]);
|
|
409
|
+
if (!typeRefEqual(t.ref, e.ref))
|
|
410
|
+
fail("TYPE_MISMATCH", `${this.be.lang} native expr: cond branches must have the same type (got ${JSON.stringify(t.ref)} vs ${JSON.stringify(e.ref)})`);
|
|
411
|
+
const ty = this.be.renderType(t.ref);
|
|
412
|
+
// SHORT-CIRCUIT: only the taken branch is evaluated. If both branches are pure, a native ternary is
|
|
413
|
+
// exact. If a branch is fallible, we guard both branches inside an if/else assigning a temp.
|
|
414
|
+
if (t.stmts.length === 0 && e.stmts.length === 0) {
|
|
415
|
+
return { stmts: c.stmts, expr: this.be.ternary(c.expr, t.expr, e.expr, ty), ref: t.ref };
|
|
416
|
+
}
|
|
417
|
+
const temp = this.be.freshTemp();
|
|
418
|
+
const guard = this.be.condGuard(temp, ty, c.expr, t.stmts, t.expr, e.stmts, e.expr);
|
|
419
|
+
return { stmts: [...c.stmts, ...guard], expr: temp, ref: t.ref };
|
|
420
|
+
}
|
|
421
|
+
// ── arr ───────────────────────────────────────────────────────────────────────────
|
|
422
|
+
len(arg) {
|
|
423
|
+
if (!Array.isArray(arg) || arg.length !== 1)
|
|
424
|
+
fail("INVALID_NODE", `${this.be.lang} native expr: len expects 1 arg`);
|
|
425
|
+
const a = this.compile(arg[0]);
|
|
426
|
+
if (a.ref.kind !== "arr")
|
|
427
|
+
fail("TYPE_MISMATCH", `${this.be.lang} native expr: len requires an array (got ${JSON.stringify(a.ref)})`);
|
|
428
|
+
// len returns i64. A native slice length is usize/int; the only failure is i64 overflow for an
|
|
429
|
+
// astronomically large slice — the helper checks it (INT_OVERFLOW), matching lenCore→checkI64.
|
|
430
|
+
const temp = this.be.freshTemp();
|
|
431
|
+
const stmts = [...a.stmts, ...this.be.hoistFallible(temp, this.be.scalarType("int"), this.be.helperCall("lenArr", [a.expr]))];
|
|
432
|
+
return { stmts, expr: temp, ref: { kind: "scalar", scalar: "int" } };
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
/** the code-point compare helper name for a string comparison. */
|
|
436
|
+
function cmpHelper(op) {
|
|
437
|
+
return op === "lt" ? "strLt" : op === "le" ? "strLe" : op === "gt" ? "strGt" : "strGe";
|
|
438
|
+
}
|
|
439
|
+
function scalarName(r) {
|
|
440
|
+
return r.kind === "scalar" ? r.scalar : r.kind;
|
|
441
|
+
}
|
|
442
|
+
/** structural TypeRef equality (for cond-branch join + expected checks). */
|
|
443
|
+
export function typeRefEqual(a, b) {
|
|
444
|
+
if (a.kind !== b.kind)
|
|
445
|
+
return false;
|
|
446
|
+
if (a.kind === "scalar" && b.kind === "scalar")
|
|
447
|
+
return a.scalar === b.scalar;
|
|
448
|
+
if (a.kind === "opt" && b.kind === "opt")
|
|
449
|
+
return typeRefEqual(a.inner, b.inner);
|
|
450
|
+
if (a.kind === "arr" && b.kind === "arr")
|
|
451
|
+
return typeRefEqual(a.elem, b.elem);
|
|
452
|
+
if (a.kind === "named" && b.kind === "named")
|
|
453
|
+
return a.name === b.name;
|
|
454
|
+
return false;
|
|
455
|
+
}
|
|
456
|
+
//# sourceMappingURL=native-expr.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native-expr.js","sourceRoot":"","sources":["../../src/generator/native-expr.ts"],"names":[],"mappings":"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"}
|
|
@@ -158,6 +158,52 @@ export declare function emitStraightlineModule(ctx: EmitContext, dialect: Straig
|
|
|
158
158
|
* の意味論を RunPlan に保存させる)は null。
|
|
159
159
|
*/
|
|
160
160
|
export declare function sequentialOrder(comp: Component): number[] | null;
|
|
161
|
+
/**
|
|
162
|
+
* concurrencyPlan (bc#87) — the component's plan is a valid staged plan WITH at least one
|
|
163
|
+
* real-concurrency stage (a stage with 2+ mutually-independent members). Returns the staged
|
|
164
|
+
* execution plan (each stage = op indices, ASCENDING — matching plan.go/plan.rs's `sort` before
|
|
165
|
+
* commit) + the static concurrency bound, so the emitter can lay down explicit static parallel
|
|
166
|
+
* orchestration (goroutine/scoped-thread per member, bounded by `concurrency`). The staging, the
|
|
167
|
+
* bound, and WHICH ops run in parallel are ALL fully static (baked from `plan.groups`).
|
|
168
|
+
*
|
|
169
|
+
* Returns null (keep the runtime RunPlan/run_plan path — this analyzer does not cover it) when:
|
|
170
|
+
* - the plan is strictly sequential (`sequentialOrder != null` already covers it),
|
|
171
|
+
* - coverage is invalid (out-of-range / duplicate / under-cover) — that INVALID_PLAN semantics
|
|
172
|
+
* stays runtime,
|
|
173
|
+
* - a multi-op stage has an INTRA-STAGE parent/child dependency (a §1-violating plan; run_behavior
|
|
174
|
+
* falls back to sequential there, but we do NOT statically claim it — fail-closed conservative),
|
|
175
|
+
* - concurrency <= 1 (a bounded-parallel stage with bound 1 degenerates to sequential; run_behavior
|
|
176
|
+
* keeps sequential dispatch — no static parallel orchestration to emit, stays sequential-eligible
|
|
177
|
+
* via sequentialOrder only if all stages are single-op; a multi-op stage at bound 1 is left to the
|
|
178
|
+
* runtime so we never emit a "parallel" form that is actually serial).
|
|
179
|
+
*
|
|
180
|
+
* The emitted parallel form is byte-equivalent to run_behavior BECAUSE the deterministic protocol is
|
|
181
|
+
* reproduced exactly: PREFLIGHT (ascending, from settled prior-stage results) → DISPATCH (bounded,
|
|
182
|
+
* the goroutine/thread is the ONLY runtime element) → COMMIT (ascending: interpret Policy Kind +
|
|
183
|
+
* materialize). Error precedence under bounded concurrency is thus the LOWEST-index failing member of
|
|
184
|
+
* the stage — never a race — because interpretation is committed in ascending index order.
|
|
185
|
+
*/
|
|
186
|
+
export interface StagePlan {
|
|
187
|
+
/** stages in declaration order; each stage's op indices sorted ASCENDING (commit order). */
|
|
188
|
+
stages: number[][];
|
|
189
|
+
/** flattened execution order (stages concatenated) — the order node-result locals are declared in. */
|
|
190
|
+
order: number[];
|
|
191
|
+
/** static concurrency bound (plan.concurrency; >= 2 when any stage is real-parallel). */
|
|
192
|
+
concurrency: number;
|
|
193
|
+
}
|
|
194
|
+
export declare function concurrencyPlan(comp: Component): StagePlan | null;
|
|
195
|
+
/** An execution plan for a covered read: strictly sequential (order only) OR staged with real
|
|
196
|
+
* concurrency (bc#87). `parallelStages` maps a stage's first index → the full ascending stage member
|
|
197
|
+
* list when that stage is real-parallel (2+ members); single-op stages are absent. */
|
|
198
|
+
export interface ExecPlan {
|
|
199
|
+
order: number[];
|
|
200
|
+
concurrency: number;
|
|
201
|
+
/** op index → the ascending member list of its stage IFF that stage is real-parallel (else absent). */
|
|
202
|
+
parallelStageOf: Map<number, number[]>;
|
|
203
|
+
}
|
|
204
|
+
/** execPlan — the unified covered-read execution plan (bc#87): sequential OR staged-with-concurrency.
|
|
205
|
+
* Returns null when neither (the component is not a covered read shape). */
|
|
206
|
+
export declare function execPlan(comp: Component): ExecPlan | null;
|
|
161
207
|
/** 逐次直線化された 1 op の静的メタ(skip 可能性・policy)。 */
|
|
162
208
|
export interface SequentialOpMeta {
|
|
163
209
|
/** 実行時に「未生成」で終わり得るか(parent skip 連鎖 / bindField null-binding / continue 失敗)。 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"straightline.d.ts","sourceRoot":"","sources":["../../src/generator/straightline.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"straightline.d.ts","sourceRoot":"","sources":["../../src/generator/straightline.ts"],"names":[],"mappings":"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"}
|