@scriptc/compiler 0.0.6 → 0.0.8
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/dist/backend/emission/emit-exprs.js +47 -1
- package/dist/backend/emission/emit-exprs.js.map +1 -1
- package/dist/backend/emission/emit-island.js +9 -1
- package/dist/backend/emission/emit-island.js.map +1 -1
- package/dist/backend/emission/emit-stmts.js +3 -1
- package/dist/backend/emission/emit-stmts.js.map +1 -1
- package/dist/backend/emission/emit-walkers.js +22 -8
- package/dist/backend/emission/emit-walkers.js.map +1 -1
- package/dist/backend/emission/emitter.js +12 -1
- package/dist/backend/emission/emitter.js.map +1 -1
- package/dist/backend/emission/may-throw.js +4 -3
- package/dist/backend/emission/may-throw.js.map +1 -1
- package/dist/backend/llvm/emitter.js +105 -9
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/diagnostics/diagnostic.d.ts +49 -1
- package/dist/diagnostics/diagnostic.js +119 -5
- package/dist/diagnostics/diagnostic.js.map +1 -1
- package/dist/frontend/lib-contract.d.ts +114 -0
- package/dist/frontend/lib-contract.js +372 -0
- package/dist/frontend/lib-contract.js.map +1 -0
- package/dist/frontend/lowering/lower-builtins.js +16 -1
- package/dist/frontend/lowering/lower-builtins.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.d.ts +47 -7
- package/dist/frontend/lowering/lower-calls.js +560 -36
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.d.ts +14 -1
- package/dist/frontend/lowering/lower-classes.js +85 -15
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-containers.js +43 -1
- package/dist/frontend/lowering/lower-containers.js.map +1 -1
- package/dist/frontend/lowering/lower-emitter.js +1 -1
- package/dist/frontend/lowering/lower-emitter.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.d.ts +26 -3
- package/dist/frontend/lowering/lower-exprs.js +474 -44
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-island.d.ts +7 -0
- package/dist/frontend/lowering/lower-island.js +71 -10
- package/dist/frontend/lowering/lower-island.js.map +1 -1
- package/dist/frontend/lowering/lower-mixins.d.ts +1 -1
- package/dist/frontend/lowering/lower-mixins.js +1 -1
- package/dist/frontend/lowering/lower-modules.js +95 -4
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.js +430 -44
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +19 -3
- package/dist/frontend/lowering/lowerer.js +188 -11
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/types.d.ts +28 -1
- package/dist/frontend/types.js +300 -8
- package/dist/frontend/types.js.map +1 -1
- package/dist/index.d.ts +11 -2
- package/dist/index.js +96 -7
- package/dist/index.js.map +1 -1
- package/dist/ir/nodes.d.ts +48 -2
- package/dist/ir/nodes.js +103 -3
- package/dist/ir/nodes.js.map +1 -1
- package/dist/ir/validate.js +35 -6
- package/dist/ir/validate.js.map +1 -1
- package/dist/library/profile.d.ts +53 -3
- package/dist/library/profile.js +143 -12
- package/dist/library/profile.js.map +1 -1
- package/dist/library/sidecar-validate.d.ts +4 -0
- package/dist/library/sidecar-validate.js +506 -0
- package/dist/library/sidecar-validate.js.map +1 -0
- package/dist/library/sidecar.d.ts +191 -0
- package/dist/library/sidecar.js +687 -0
- package/dist/library/sidecar.js.map +1 -0
- package/dist/library/trap-teaching.d.ts +11 -0
- package/dist/library/trap-teaching.js +49 -0
- package/dist/library/trap-teaching.js.map +1 -0
- package/dist/library/wyhash.d.ts +12 -0
- package/dist/library/wyhash.js +116 -0
- package/dist/library/wyhash.js.map +1 -0
- package/package.json +2 -2
- package/surface-manifest.json +37 -2
|
@@ -0,0 +1,372 @@
|
|
|
1
|
+
/* Library mode's contract-sidecar input: the entry module's exported
|
|
2
|
+
* function signatures and exported-const contract conventions, plus the
|
|
3
|
+
* exported type declarations of the WHOLE module graph (entry first, the
|
|
4
|
+
* other modules in canonical path order — never import order, so moving
|
|
5
|
+
* an import statement can never perturb a sidecar table) — all read from
|
|
6
|
+
* the SYNTAX TREE in statement order. Declaration order is the ratified
|
|
7
|
+
* contract (the sidecar's field, member, and arm orders are wire
|
|
8
|
+
* semantics), and the checker's property enumeration hands back
|
|
9
|
+
* internal/sorted order, so the AST is the only trustworthy order source;
|
|
10
|
+
* this module never touches the checker.
|
|
11
|
+
*
|
|
12
|
+
* Order must be derivable from ONE declaration site (ask 3's
|
|
13
|
+
* define-or-refuse rule), so this module also records every type name
|
|
14
|
+
* whose members gather from multiple sites — a second same-name interface
|
|
15
|
+
* block (declaration merging), a module augmentation's contribution, or a
|
|
16
|
+
* same-name exported declaration in another module (the type table has
|
|
17
|
+
* one namespace) — for the emitter to refuse when such a name is tabled.
|
|
18
|
+
*
|
|
19
|
+
* The projection into the sidecar schema's closed vocabulary happens in
|
|
20
|
+
* library/sidecar.ts; this module only captures syntactic shapes. The
|
|
21
|
+
* exported-const conventions this module reads (the ratified ask-2
|
|
22
|
+
* drafting item — under an embedder's profile a generated facade declares
|
|
23
|
+
* these; authors declare nothing):
|
|
24
|
+
*
|
|
25
|
+
* export const modelUnbound = ["fieldOrHelper", ...] as const;
|
|
26
|
+
* export const msgUnbound = ["arm", ...] as const;
|
|
27
|
+
* export const appearanceMsg = "arm";
|
|
28
|
+
* export const chromeMsg = "arm";
|
|
29
|
+
* export const envMsgs = [{ env: "NAME", msg: "arm" }, ...] as const;
|
|
30
|
+
*/
|
|
31
|
+
import * as ts from "./ts7/adapter.js";
|
|
32
|
+
const CONVENTION_CONSTS = new Set(["modelUnbound", "msgUnbound", "appearanceMsg", "chromeMsg", "envMsgs"]);
|
|
33
|
+
function locOf(file, node) {
|
|
34
|
+
return { file: file.fileName, start: node.getStart(), end: node.end };
|
|
35
|
+
}
|
|
36
|
+
function isExported(stmt) {
|
|
37
|
+
const mods = ts.canHaveModifiers(stmt) ? ts.getModifiers(stmt) : undefined;
|
|
38
|
+
return mods?.some((m) => m.kind === ts.SyntaxKind.ExportKeyword) === true;
|
|
39
|
+
}
|
|
40
|
+
function propName(name) {
|
|
41
|
+
if (ts.isIdentifier(name))
|
|
42
|
+
return name.text;
|
|
43
|
+
if (ts.isStringLiteral(name))
|
|
44
|
+
return name.text;
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
function shapeOfMembers(file, members, onBad) {
|
|
48
|
+
const fields = [];
|
|
49
|
+
for (const m of members) {
|
|
50
|
+
if (!ts.isPropertySignature(m)) {
|
|
51
|
+
onBad("a non-property member (methods/index signatures have no contract projection)");
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
const name = propName(m.name);
|
|
55
|
+
if (name === null) {
|
|
56
|
+
onBad("a computed property name");
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
const shape = m.type !== undefined ? typeShape(file, m.type) : { k: "unsupported", text: "missing type annotation" };
|
|
60
|
+
fields.push({ name, optional: m.postfixToken?.kind === ts.SyntaxKind.QuestionToken, shape, loc: locOf(file, m) });
|
|
61
|
+
}
|
|
62
|
+
return fields;
|
|
63
|
+
}
|
|
64
|
+
/** The syntactic shape of a type node, over the closed vocabulary the
|
|
65
|
+
* sidecar schema can express. Anything else lands as `unsupported` with
|
|
66
|
+
* the source text preserved for the refusal message. */
|
|
67
|
+
export function typeShape(file, node) {
|
|
68
|
+
switch (node.kind) {
|
|
69
|
+
case ts.SyntaxKind.BooleanKeyword:
|
|
70
|
+
return { k: "bool" };
|
|
71
|
+
case ts.SyntaxKind.NumberKeyword:
|
|
72
|
+
return { k: "number" };
|
|
73
|
+
case ts.SyntaxKind.StringKeyword:
|
|
74
|
+
return { k: "text" };
|
|
75
|
+
case ts.SyntaxKind.VoidKeyword:
|
|
76
|
+
return { k: "void" };
|
|
77
|
+
case ts.SyntaxKind.UndefinedKeyword:
|
|
78
|
+
return { k: "absent" };
|
|
79
|
+
default:
|
|
80
|
+
break;
|
|
81
|
+
}
|
|
82
|
+
if (ts.isParenthesizedTypeNode(node))
|
|
83
|
+
return typeShape(file, node.type);
|
|
84
|
+
if (ts.isLiteralTypeNode(node)) {
|
|
85
|
+
const lit = node.literal;
|
|
86
|
+
if (ts.isStringLiteral(lit))
|
|
87
|
+
return { k: "stringLit", text: lit.text };
|
|
88
|
+
if (lit.kind === ts.SyntaxKind.NullKeyword)
|
|
89
|
+
return { k: "absent" };
|
|
90
|
+
return { k: "unsupported", text: node.getText(file) };
|
|
91
|
+
}
|
|
92
|
+
if (ts.isArrayTypeNode(node))
|
|
93
|
+
return { k: "array", elem: typeShape(file, node.elementType) };
|
|
94
|
+
if (ts.isTupleTypeNode(node)) {
|
|
95
|
+
const elems = [];
|
|
96
|
+
for (const e of node.elements) {
|
|
97
|
+
// Named tuple members carry the type under `.type`.
|
|
98
|
+
const t = ts.isNamedTupleMember(e) ? e.type : e;
|
|
99
|
+
elems.push(typeShape(file, t));
|
|
100
|
+
}
|
|
101
|
+
return { k: "tuple", elems };
|
|
102
|
+
}
|
|
103
|
+
if (ts.isUnionTypeNode(node)) {
|
|
104
|
+
return { k: "union", parts: node.types.map((t) => typeShape(file, t)) };
|
|
105
|
+
}
|
|
106
|
+
if (ts.isTypeLiteralNode(node)) {
|
|
107
|
+
let bad = null;
|
|
108
|
+
const fields = shapeOfMembers(file, node.members, (text) => {
|
|
109
|
+
bad = text;
|
|
110
|
+
});
|
|
111
|
+
if (bad !== null)
|
|
112
|
+
return { k: "unsupported", text: bad };
|
|
113
|
+
return { k: "object", fields };
|
|
114
|
+
}
|
|
115
|
+
if (ts.isConditionalTypeNode(node)) {
|
|
116
|
+
return { k: "unsupported", text: `a conditional type (${node.getText(file)})`, computed: "conditional" };
|
|
117
|
+
}
|
|
118
|
+
if (ts.isMappedTypeNode(node)) {
|
|
119
|
+
return { k: "unsupported", text: `a mapped type (${node.getText(file)})`, computed: "mapped" };
|
|
120
|
+
}
|
|
121
|
+
if (ts.isTypeReferenceNode(node)) {
|
|
122
|
+
if (!ts.isIdentifier(node.typeName))
|
|
123
|
+
return { k: "unsupported", text: node.getText(file) };
|
|
124
|
+
const name = node.typeName.text;
|
|
125
|
+
if (name === "Uint8Array" && (node.typeArguments?.length ?? 0) === 0)
|
|
126
|
+
return { k: "bytes" };
|
|
127
|
+
if (name === "Array" && node.typeArguments?.length === 1) {
|
|
128
|
+
return { k: "array", elem: typeShape(file, node.typeArguments[0]) };
|
|
129
|
+
}
|
|
130
|
+
if ((node.typeArguments?.length ?? 0) > 0)
|
|
131
|
+
return { k: "unsupported", text: node.getText(file) };
|
|
132
|
+
return { k: "ref", name };
|
|
133
|
+
}
|
|
134
|
+
return { k: "unsupported", text: node.getText(file) };
|
|
135
|
+
}
|
|
136
|
+
/** Unwrap `expr as const` / parenthesized initializers. */
|
|
137
|
+
function unwrapConst(expr) {
|
|
138
|
+
let e = expr;
|
|
139
|
+
for (;;) {
|
|
140
|
+
if (ts.isAsExpression(e) || ts.isSatisfiesExpression(e)) {
|
|
141
|
+
e = e.expression;
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
144
|
+
if (ts.isParenthesizedExpression(e)) {
|
|
145
|
+
e = e.expression;
|
|
146
|
+
continue;
|
|
147
|
+
}
|
|
148
|
+
return e;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
function stringArray(expr) {
|
|
152
|
+
const e = unwrapConst(expr);
|
|
153
|
+
if (!ts.isArrayLiteralExpression(e))
|
|
154
|
+
return null;
|
|
155
|
+
const out = [];
|
|
156
|
+
for (const el of e.elements) {
|
|
157
|
+
const v = unwrapConst(el);
|
|
158
|
+
if (!ts.isStringLiteral(v))
|
|
159
|
+
return null;
|
|
160
|
+
out.push(v.text);
|
|
161
|
+
}
|
|
162
|
+
return out;
|
|
163
|
+
}
|
|
164
|
+
function envMsgArray(expr) {
|
|
165
|
+
const e = unwrapConst(expr);
|
|
166
|
+
if (!ts.isArrayLiteralExpression(e))
|
|
167
|
+
return null;
|
|
168
|
+
const out = [];
|
|
169
|
+
for (const el of e.elements) {
|
|
170
|
+
const v = unwrapConst(el);
|
|
171
|
+
if (!ts.isObjectLiteralExpression(v))
|
|
172
|
+
return null;
|
|
173
|
+
let env = null;
|
|
174
|
+
let msg = null;
|
|
175
|
+
for (const prop of v.properties) {
|
|
176
|
+
if (!ts.isPropertyAssignment(prop))
|
|
177
|
+
return null;
|
|
178
|
+
const name = propName(prop.name);
|
|
179
|
+
const val = unwrapConst(prop.initializer);
|
|
180
|
+
if (!ts.isStringLiteral(val))
|
|
181
|
+
return null;
|
|
182
|
+
if (name === "env")
|
|
183
|
+
env = val.text;
|
|
184
|
+
else if (name === "msg")
|
|
185
|
+
msg = val.text;
|
|
186
|
+
else
|
|
187
|
+
return null;
|
|
188
|
+
}
|
|
189
|
+
if (env === null || msg === null)
|
|
190
|
+
return null;
|
|
191
|
+
out.push({ env, msg });
|
|
192
|
+
}
|
|
193
|
+
return out;
|
|
194
|
+
}
|
|
195
|
+
/** One mergeable declaration site, `file:line` (1-based line). */
|
|
196
|
+
function siteOf(file, node) {
|
|
197
|
+
return `${file.fileName}:${ts.getLineAndCharacterOfPosition(file, node.getStart()).line + 1}`;
|
|
198
|
+
}
|
|
199
|
+
/** Everything the sidecar projection needs from the program's syntax
|
|
200
|
+
* trees: functions and convention consts from the entry module, type
|
|
201
|
+
* declarations from the whole graph (entry first, other modules in
|
|
202
|
+
* canonical path order), each in statement (declaration) order. Call
|
|
203
|
+
* before the frontend is disposed. */
|
|
204
|
+
export function entryContractFacts(entry, modules = []) {
|
|
205
|
+
const facts = {
|
|
206
|
+
types: [],
|
|
207
|
+
multiSiteTypes: [],
|
|
208
|
+
functions: [],
|
|
209
|
+
modelUnbound: null,
|
|
210
|
+
msgUnbound: null,
|
|
211
|
+
appearanceMsg: null,
|
|
212
|
+
chromeMsg: null,
|
|
213
|
+
envMsgs: null,
|
|
214
|
+
malformedConsts: [],
|
|
215
|
+
};
|
|
216
|
+
// name → every mergeable declaration site, in scan order.
|
|
217
|
+
const sites = new Map();
|
|
218
|
+
const addSite = (name, site) => {
|
|
219
|
+
const list = sites.get(name);
|
|
220
|
+
if (list === undefined)
|
|
221
|
+
sites.set(name, [site]);
|
|
222
|
+
else
|
|
223
|
+
list.push(site);
|
|
224
|
+
};
|
|
225
|
+
const declared = new Set();
|
|
226
|
+
/** One module's exported type declarations (statement order) plus every
|
|
227
|
+
* extra declaration site the merge refusal needs: a non-exported
|
|
228
|
+
* declaration merging with an exported same-name one in the SAME module,
|
|
229
|
+
* a repeated exported declaration (in this module or a later-scanned
|
|
230
|
+
* one — the type table has one namespace), and the type declarations
|
|
231
|
+
* inside `declare module "…"` augmentation blocks. Augmentations are
|
|
232
|
+
* read syntactically — the specifier is not resolved, so a same-name
|
|
233
|
+
* augmentation of ANY module counts as an extra site; that over-refuses
|
|
234
|
+
* only programs already trafficking in colliding contract type names,
|
|
235
|
+
* and the refusal names every site. */
|
|
236
|
+
const collectTypes = (file) => {
|
|
237
|
+
const exportedHere = new Set();
|
|
238
|
+
for (const stmt of file.statements) {
|
|
239
|
+
if ((ts.isInterfaceDeclaration(stmt) || ts.isTypeAliasDeclaration(stmt)) && isExported(stmt)) {
|
|
240
|
+
exportedHere.add(stmt.name.text);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
for (const stmt of file.statements) {
|
|
244
|
+
if (ts.isInterfaceDeclaration(stmt) || ts.isTypeAliasDeclaration(stmt)) {
|
|
245
|
+
const name = stmt.name.text;
|
|
246
|
+
const exported = isExported(stmt);
|
|
247
|
+
// A non-exported declaration matters only when it merges with an
|
|
248
|
+
// exported same-name declaration of its own module; other modules'
|
|
249
|
+
// private types never touch the contract namespace.
|
|
250
|
+
if (!exported && !exportedHere.has(name))
|
|
251
|
+
continue;
|
|
252
|
+
addSite(name, siteOf(file, stmt));
|
|
253
|
+
if (!exported || declared.has(name))
|
|
254
|
+
continue;
|
|
255
|
+
declared.add(name);
|
|
256
|
+
if (ts.isInterfaceDeclaration(stmt)) {
|
|
257
|
+
let bad = null;
|
|
258
|
+
const fields = shapeOfMembers(file, stmt.members, (text) => {
|
|
259
|
+
bad = text;
|
|
260
|
+
});
|
|
261
|
+
const generic = (stmt.typeParameters?.length ?? 0) > 0;
|
|
262
|
+
const heritage = (stmt.heritageClauses?.length ?? 0) > 0;
|
|
263
|
+
facts.types.push({
|
|
264
|
+
name,
|
|
265
|
+
form: "interface",
|
|
266
|
+
shape: bad !== null
|
|
267
|
+
? { k: "unsupported", text: bad }
|
|
268
|
+
: generic
|
|
269
|
+
? { k: "unsupported", text: "a generic interface" }
|
|
270
|
+
: heritage
|
|
271
|
+
? { k: "unsupported", text: "an interface with heritage clauses" }
|
|
272
|
+
: { k: "object", fields },
|
|
273
|
+
loc: locOf(file, stmt),
|
|
274
|
+
});
|
|
275
|
+
}
|
|
276
|
+
else {
|
|
277
|
+
const generic = (stmt.typeParameters?.length ?? 0) > 0;
|
|
278
|
+
facts.types.push({
|
|
279
|
+
name,
|
|
280
|
+
form: "alias",
|
|
281
|
+
shape: generic ? { k: "unsupported", text: "a generic type alias" } : typeShape(file, stmt.type),
|
|
282
|
+
loc: locOf(file, stmt),
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
continue;
|
|
286
|
+
}
|
|
287
|
+
if (ts.isModuleDeclaration(stmt) && ts.isStringLiteral(stmt.name) && stmt.body !== undefined && ts.isModuleBlock(stmt.body)) {
|
|
288
|
+
for (const inner of stmt.body.statements) {
|
|
289
|
+
if (ts.isInterfaceDeclaration(inner) || ts.isTypeAliasDeclaration(inner)) {
|
|
290
|
+
addSite(inner.name.text, siteOf(file, inner));
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
};
|
|
296
|
+
// The entry's declarations anchor first; the rest of the graph follows
|
|
297
|
+
// in bytewise path order — a DECLARATION-SITE order, so reordering
|
|
298
|
+
// import statements or import bindings can never perturb the table.
|
|
299
|
+
collectTypes(entry);
|
|
300
|
+
const others = modules
|
|
301
|
+
.filter((m) => m.fileName !== entry.fileName)
|
|
302
|
+
.sort((a, b) => (a.fileName < b.fileName ? -1 : a.fileName > b.fileName ? 1 : 0));
|
|
303
|
+
for (const m of others)
|
|
304
|
+
collectTypes(m);
|
|
305
|
+
for (const [name, list] of sites) {
|
|
306
|
+
if (list.length > 1)
|
|
307
|
+
facts.multiSiteTypes.push({ name, sites: list });
|
|
308
|
+
}
|
|
309
|
+
for (const stmt of entry.statements) {
|
|
310
|
+
if (ts.isFunctionDeclaration(stmt) && stmt.name !== undefined) {
|
|
311
|
+
if (!isExported(stmt))
|
|
312
|
+
continue;
|
|
313
|
+
if (stmt.body === undefined && facts.functions.some((f) => f.name === stmt.name.text))
|
|
314
|
+
continue; // overload signature
|
|
315
|
+
facts.functions.push({
|
|
316
|
+
name: stmt.name.text,
|
|
317
|
+
params: stmt.parameters.map((p) => ({
|
|
318
|
+
name: ts.isIdentifier(p.name) ? p.name.text : "<pattern>",
|
|
319
|
+
shape: p.type !== undefined ? typeShape(entry, p.type) : null,
|
|
320
|
+
})),
|
|
321
|
+
returns: stmt.type !== undefined ? typeShape(entry, stmt.type) : null,
|
|
322
|
+
generic: (stmt.typeParameters?.length ?? 0) > 0,
|
|
323
|
+
loc: locOf(entry, stmt),
|
|
324
|
+
});
|
|
325
|
+
continue;
|
|
326
|
+
}
|
|
327
|
+
if (ts.isVariableStatement(stmt) && isExported(stmt)) {
|
|
328
|
+
for (const decl of stmt.declarationList.declarations) {
|
|
329
|
+
if (!ts.isIdentifier(decl.name))
|
|
330
|
+
continue;
|
|
331
|
+
const name = decl.name.text;
|
|
332
|
+
if (!CONVENTION_CONSTS.has(name))
|
|
333
|
+
continue;
|
|
334
|
+
const loc = locOf(entry, decl);
|
|
335
|
+
if (decl.initializer === undefined) {
|
|
336
|
+
facts.malformedConsts.push({ name, detail: "has no initializer", loc });
|
|
337
|
+
continue;
|
|
338
|
+
}
|
|
339
|
+
if (name === "appearanceMsg" || name === "chromeMsg") {
|
|
340
|
+
const v = unwrapConst(decl.initializer);
|
|
341
|
+
if (!ts.isStringLiteral(v)) {
|
|
342
|
+
facts.malformedConsts.push({ name, detail: "must be a string literal naming a msg arm", loc });
|
|
343
|
+
continue;
|
|
344
|
+
}
|
|
345
|
+
facts[name] = { value: v.text, loc };
|
|
346
|
+
continue;
|
|
347
|
+
}
|
|
348
|
+
if (name === "envMsgs") {
|
|
349
|
+
const v = envMsgArray(decl.initializer);
|
|
350
|
+
if (v === null) {
|
|
351
|
+
facts.malformedConsts.push({
|
|
352
|
+
name,
|
|
353
|
+
detail: 'must be an array of { env: "NAME", msg: "arm" } object literals with string-literal values',
|
|
354
|
+
loc,
|
|
355
|
+
});
|
|
356
|
+
continue;
|
|
357
|
+
}
|
|
358
|
+
facts.envMsgs = { value: v, loc };
|
|
359
|
+
continue;
|
|
360
|
+
}
|
|
361
|
+
const v = stringArray(decl.initializer);
|
|
362
|
+
if (v === null) {
|
|
363
|
+
facts.malformedConsts.push({ name, detail: "must be an array of string literals", loc });
|
|
364
|
+
continue;
|
|
365
|
+
}
|
|
366
|
+
facts[name === "modelUnbound" ? "modelUnbound" : "msgUnbound"] = { value: v, loc };
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
return facts;
|
|
371
|
+
}
|
|
372
|
+
//# sourceMappingURL=lib-contract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lib-contract.js","sourceRoot":"","sources":["../../src/frontend/lib-contract.ts"],"names":[],"mappings":"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"}
|
|
@@ -3706,7 +3706,11 @@ export function lowerProcessProperty(L, expr) {
|
|
|
3706
3706
|
// (process.features.* — no inspector, not a debug build).
|
|
3707
3707
|
if (!expr.questionDotToken && ts.isPropertyAccessExpression(expr.expression)) {
|
|
3708
3708
|
const container = L.stdlibGlobalMember(expr.expression, "process");
|
|
3709
|
-
if (container === "versions" && expr.name.text === "sqlite") {
|
|
3709
|
+
if (container === "versions" && (expr.name.text === "sqlite" || expr.name.text === "bun" || expr.name.text === "deno")) {
|
|
3710
|
+
// versions.bun / versions.deno are the OTHER-runtime probes (a
|
|
3711
|
+
// formatter's config loader picks its package.json reader by
|
|
3712
|
+
// them): a compiled binary is neither, so both read undefined —
|
|
3713
|
+
// exactly Node's own answer.
|
|
3710
3714
|
return { kind: "unitLit", unit: "undefined", type: UNDEFINED_T, loc: locOf(expr) };
|
|
3711
3715
|
}
|
|
3712
3716
|
if (container === "features") {
|
|
@@ -4740,6 +4744,17 @@ export function lowerNumberStaticCall(L, call, access) {
|
|
|
4740
4744
|
}
|
|
4741
4745
|
const argNode = call.arguments[0];
|
|
4742
4746
|
const arg = L.lowerExpr(argNode);
|
|
4747
|
+
// An ISLAND ('any'-typed) argument evaluates the predicate in the
|
|
4748
|
+
// engine — the statics never coerce, so the engine's answer over the
|
|
4749
|
+
// real value is JS-exact where a static fence would refuse the
|
|
4750
|
+
// editorconfig `(value) => Number.isSafeInteger(value)` shape; the
|
|
4751
|
+
// boolean exits validated like every island boolean.
|
|
4752
|
+
if (arg.type.kind === "jsval") {
|
|
4753
|
+
L.requireDynamicApi(`'Number.${member}'`, call);
|
|
4754
|
+
const numberGlobal = { kind: "jsOp", op: "globalGet", name: "Number", args: [], type: JSVAL, loc };
|
|
4755
|
+
const raw = { kind: "jsOp", op: "callMethod", name: member, args: [numberGlobal, arg], type: JSVAL, loc };
|
|
4756
|
+
return { kind: "jsExit", value: raw, type: BOOL, loc };
|
|
4757
|
+
}
|
|
4743
4758
|
if (arg.type.kind !== "f64") {
|
|
4744
4759
|
L.noLowering(`Number.${member} of '${L.fmt(arg.type)}' values`, argNode, "the Number statics never coerce — a statically non-number argument is constantly false in JS (narrow unions first, or write the constant)");
|
|
4745
4760
|
}
|