@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.
Files changed (75) hide show
  1. package/dist/backend/emission/emit-exprs.js +47 -1
  2. package/dist/backend/emission/emit-exprs.js.map +1 -1
  3. package/dist/backend/emission/emit-island.js +9 -1
  4. package/dist/backend/emission/emit-island.js.map +1 -1
  5. package/dist/backend/emission/emit-stmts.js +3 -1
  6. package/dist/backend/emission/emit-stmts.js.map +1 -1
  7. package/dist/backend/emission/emit-walkers.js +22 -8
  8. package/dist/backend/emission/emit-walkers.js.map +1 -1
  9. package/dist/backend/emission/emitter.js +12 -1
  10. package/dist/backend/emission/emitter.js.map +1 -1
  11. package/dist/backend/emission/may-throw.js +4 -3
  12. package/dist/backend/emission/may-throw.js.map +1 -1
  13. package/dist/backend/llvm/emitter.js +105 -9
  14. package/dist/backend/llvm/emitter.js.map +1 -1
  15. package/dist/diagnostics/diagnostic.d.ts +49 -1
  16. package/dist/diagnostics/diagnostic.js +119 -5
  17. package/dist/diagnostics/diagnostic.js.map +1 -1
  18. package/dist/frontend/lib-contract.d.ts +114 -0
  19. package/dist/frontend/lib-contract.js +372 -0
  20. package/dist/frontend/lib-contract.js.map +1 -0
  21. package/dist/frontend/lowering/lower-builtins.js +16 -1
  22. package/dist/frontend/lowering/lower-builtins.js.map +1 -1
  23. package/dist/frontend/lowering/lower-calls.d.ts +47 -7
  24. package/dist/frontend/lowering/lower-calls.js +560 -36
  25. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  26. package/dist/frontend/lowering/lower-classes.d.ts +14 -1
  27. package/dist/frontend/lowering/lower-classes.js +85 -15
  28. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  29. package/dist/frontend/lowering/lower-containers.js +43 -1
  30. package/dist/frontend/lowering/lower-containers.js.map +1 -1
  31. package/dist/frontend/lowering/lower-emitter.js +1 -1
  32. package/dist/frontend/lowering/lower-emitter.js.map +1 -1
  33. package/dist/frontend/lowering/lower-exprs.d.ts +26 -3
  34. package/dist/frontend/lowering/lower-exprs.js +474 -44
  35. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  36. package/dist/frontend/lowering/lower-island.d.ts +7 -0
  37. package/dist/frontend/lowering/lower-island.js +71 -10
  38. package/dist/frontend/lowering/lower-island.js.map +1 -1
  39. package/dist/frontend/lowering/lower-mixins.d.ts +1 -1
  40. package/dist/frontend/lowering/lower-mixins.js +1 -1
  41. package/dist/frontend/lowering/lower-modules.js +95 -4
  42. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  43. package/dist/frontend/lowering/lower-stmts.js +430 -44
  44. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  45. package/dist/frontend/lowering/lowerer.d.ts +19 -3
  46. package/dist/frontend/lowering/lowerer.js +188 -11
  47. package/dist/frontend/lowering/lowerer.js.map +1 -1
  48. package/dist/frontend/types.d.ts +28 -1
  49. package/dist/frontend/types.js +300 -8
  50. package/dist/frontend/types.js.map +1 -1
  51. package/dist/index.d.ts +11 -2
  52. package/dist/index.js +96 -7
  53. package/dist/index.js.map +1 -1
  54. package/dist/ir/nodes.d.ts +48 -2
  55. package/dist/ir/nodes.js +103 -3
  56. package/dist/ir/nodes.js.map +1 -1
  57. package/dist/ir/validate.js +35 -6
  58. package/dist/ir/validate.js.map +1 -1
  59. package/dist/library/profile.d.ts +53 -3
  60. package/dist/library/profile.js +143 -12
  61. package/dist/library/profile.js.map +1 -1
  62. package/dist/library/sidecar-validate.d.ts +4 -0
  63. package/dist/library/sidecar-validate.js +506 -0
  64. package/dist/library/sidecar-validate.js.map +1 -0
  65. package/dist/library/sidecar.d.ts +191 -0
  66. package/dist/library/sidecar.js +687 -0
  67. package/dist/library/sidecar.js.map +1 -0
  68. package/dist/library/trap-teaching.d.ts +11 -0
  69. package/dist/library/trap-teaching.js +49 -0
  70. package/dist/library/trap-teaching.js.map +1 -0
  71. package/dist/library/wyhash.d.ts +12 -0
  72. package/dist/library/wyhash.js +116 -0
  73. package/dist/library/wyhash.js.map +1 -0
  74. package/package.json +2 -2
  75. 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
  }