@scriptc/compiler 0.1.5 → 0.1.7
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/ambient/scriptc-node-fallback.d.ts +0 -1
- package/ambient/scriptc.d.ts +13 -5
- package/dist/backend/c/c-emitter.d.ts +5 -0
- package/dist/backend/c/c-emitter.js +15 -0
- package/dist/backend/c/c-emitter.js.map +1 -1
- package/dist/backend/c/exprs.js +81 -9
- package/dist/backend/c/exprs.js.map +1 -1
- package/dist/backend/c/stmts.js +25 -1
- package/dist/backend/c/stmts.js.map +1 -1
- package/dist/backend/c/walkers.js +2 -3
- package/dist/backend/c/walkers.js.map +1 -1
- package/dist/backend/debug-symbols.d.ts +8 -0
- package/dist/backend/debug-symbols.js +52 -0
- package/dist/backend/debug-symbols.js.map +1 -0
- package/dist/backend/link-plan.d.ts +1 -0
- package/dist/backend/link-plan.js +2 -0
- package/dist/backend/link-plan.js.map +1 -1
- package/dist/backend/linker.js +8 -0
- package/dist/backend/linker.js.map +1 -1
- package/dist/backend/llvm/blocks.d.ts +2 -0
- package/dist/backend/llvm/blocks.js +18 -2
- package/dist/backend/llvm/blocks.js.map +1 -1
- package/dist/backend/llvm/debug-info.d.ts +32 -0
- package/dist/backend/llvm/debug-info.js +203 -0
- package/dist/backend/llvm/debug-info.js.map +1 -0
- package/dist/backend/llvm/dyn.js +4 -10
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emitter.d.ts +2 -0
- package/dist/backend/llvm/emitter.js +49 -4
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/expr-containers.js +28 -2
- package/dist/backend/llvm/expr-containers.js.map +1 -1
- package/dist/backend/llvm/expr-dynamic.js +10 -0
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/lib-filesystem.js +37 -0
- package/dist/backend/llvm/lib-filesystem.js.map +1 -1
- package/dist/backend/llvm/lib-process.js +4 -3
- package/dist/backend/llvm/lib-process.js.map +1 -1
- package/dist/backend/llvm/lib-shared.js +9 -0
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/split.js +4 -1
- package/dist/backend/llvm/split.js.map +1 -1
- package/dist/backend/llvm/split.test.js +26 -1
- package/dist/backend/llvm/split.test.js.map +1 -1
- package/dist/backend/native-toolchain.js +58 -8
- package/dist/backend/native-toolchain.js.map +1 -1
- package/dist/backend/native-toolchain.test.js +10 -0
- package/dist/backend/native-toolchain.test.js.map +1 -1
- package/dist/backend/source-locations.d.ts +12 -0
- package/dist/backend/source-locations.js +32 -0
- package/dist/backend/source-locations.js.map +1 -0
- package/dist/backend/source-locations.test.d.ts +1 -0
- package/dist/backend/source-locations.test.js +16 -0
- package/dist/backend/source-locations.test.js.map +1 -0
- package/dist/coverage/surface-manifest.js +6 -1
- package/dist/coverage/surface-manifest.js.map +1 -1
- package/dist/diagnostics/diagnostic.d.ts +4 -0
- package/dist/diagnostics/diagnostic.js +12 -0
- package/dist/diagnostics/diagnostic.js.map +1 -1
- package/dist/executable/executable-cache.js +28 -4
- package/dist/executable/executable-cache.js.map +1 -1
- package/dist/executable/executable-cache.test.js +23 -0
- package/dist/executable/executable-cache.test.js.map +1 -1
- package/dist/frontend/arguments-usage.d.ts +6 -0
- package/dist/frontend/arguments-usage.js +40 -0
- package/dist/frontend/arguments-usage.js.map +1 -0
- package/dist/frontend/binding-source.d.ts +4 -0
- package/dist/frontend/binding-source.js +18 -0
- package/dist/frontend/binding-source.js.map +1 -0
- package/dist/frontend/lowering/array-indexed-mutation.d.ts +8 -0
- package/dist/frontend/lowering/array-indexed-mutation.js +176 -0
- package/dist/frontend/lowering/array-indexed-mutation.js.map +1 -0
- package/dist/frontend/lowering/containers/string-and-regexp.d.ts +7 -0
- package/dist/frontend/lowering/containers/string-and-regexp.js +190 -13
- package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
- package/dist/frontend/lowering/expressions/object-literals.js +13 -8
- package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/optional-chains.d.ts +5 -6
- package/dist/frontend/lowering/expressions/optional-chains.js +7 -6
- package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
- package/dist/frontend/lowering/indexed-comparison.d.ts +6 -0
- package/dist/frontend/lowering/indexed-comparison.js +30 -0
- package/dist/frontend/lowering/indexed-comparison.js.map +1 -0
- package/dist/frontend/lowering/lower-builtins.d.ts +1 -1
- package/dist/frontend/lowering/lower-builtins.js +21 -10
- package/dist/frontend/lowering/lower-builtins.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.d.ts +2 -9
- package/dist/frontend/lowering/lower-calls.js +406 -40
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.js +3 -27
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-containers.d.ts +8 -2
- package/dist/frontend/lowering/lower-containers.js +454 -104
- package/dist/frontend/lowering/lower-containers.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.js +134 -18
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-island.d.ts +1 -1
- package/dist/frontend/lowering/lower-island.js +1 -1
- package/dist/frontend/lowering/lower-modules.js +19 -8
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.js +4 -37
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lowerer.js +14 -3
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/surfaces.d.ts +3 -1
- package/dist/frontend/lowering/surfaces.js +50 -7
- package/dist/frontend/lowering/surfaces.js.map +1 -1
- package/dist/frontend/program.d.ts +5 -0
- package/dist/frontend/program.js +216 -32
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/program.test.d.ts +1 -0
- package/dist/frontend/program.test.js +117 -0
- package/dist/frontend/program.test.js.map +1 -0
- package/dist/frontend/type-mapper.d.ts +4 -2
- package/dist/frontend/type-mapper.js +249 -186
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/frontend/type-mapper.test.d.ts +1 -0
- package/dist/frontend/type-mapper.test.js +86 -0
- package/dist/frontend/type-mapper.test.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.js +7 -2
- package/dist/index.js.map +1 -1
- package/dist/ir/analysis.js +4 -2
- package/dist/ir/analysis.js.map +1 -1
- package/dist/ir/ir.d.ts +33 -14
- package/dist/ir/ir.js +5 -1
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/validate.js +57 -31
- package/dist/ir/validate.js.map +1 -1
- package/dist/ir/validate.test.js +17 -0
- package/dist/ir/validate.test.js.map +1 -1
- package/dist/library/compiler-self-identity.d.ts +1 -1
- package/dist/library/compiler-self-identity.js +31 -15
- package/dist/library/compiler-self-identity.js.map +1 -1
- package/dist/library/compiler-self-identity.test.d.ts +1 -0
- package/dist/library/compiler-self-identity.test.js +93 -0
- package/dist/library/compiler-self-identity.test.js.map +1 -0
- package/package.json +17 -17
- package/surface-manifest.json +155 -4
package/dist/ir/validate.js
CHANGED
|
@@ -86,6 +86,7 @@ export const LIB_FN_SIGS = {
|
|
|
86
86
|
"dyn.toString": { argTypes: [DYN, STRING, STRING], result: STRING },
|
|
87
87
|
"dyn.defineProps": { argTypes: [DYN, DYN], result: DYN },
|
|
88
88
|
"dyn.typeof": { argTypes: [DYN], result: STRING },
|
|
89
|
+
"dyn.objectTag": { argTypes: [DYN], result: STRING },
|
|
89
90
|
"module.registryInit": { argTypes: [F64], result: VOID },
|
|
90
91
|
"module.define": { argTypes: [F64, STRING, STRING, STRING, arrayOf(STRING), BOOL], result: VOID },
|
|
91
92
|
"module.enter": { argTypes: [F64], result: VOID },
|
|
@@ -203,20 +204,31 @@ export const LIB_FN_SIGS = {
|
|
|
203
204
|
"math.trunc": { argTypes: [F64], result: F64 },
|
|
204
205
|
"math.ceil": { argTypes: [F64], result: F64 },
|
|
205
206
|
"math.sin": { argTypes: [F64], result: F64 },
|
|
207
|
+
"math.sinh": { argTypes: [F64], result: F64 },
|
|
206
208
|
"math.cos": { argTypes: [F64], result: F64 },
|
|
209
|
+
"math.cosh": { argTypes: [F64], result: F64 },
|
|
207
210
|
"math.tan": { argTypes: [F64], result: F64 },
|
|
211
|
+
"math.tanh": { argTypes: [F64], result: F64 },
|
|
208
212
|
"math.asin": { argTypes: [F64], result: F64 },
|
|
213
|
+
"math.asinh": { argTypes: [F64], result: F64 },
|
|
209
214
|
"math.acos": { argTypes: [F64], result: F64 },
|
|
215
|
+
"math.acosh": { argTypes: [F64], result: F64 },
|
|
210
216
|
"math.atan": { argTypes: [F64], result: F64 },
|
|
217
|
+
"math.atanh": { argTypes: [F64], result: F64 },
|
|
211
218
|
"math.cbrt": { argTypes: [F64], result: F64 },
|
|
219
|
+
"math.clz32": { argTypes: [F64], result: F64 },
|
|
212
220
|
"math.sign": { argTypes: [F64], result: F64 },
|
|
213
221
|
"math.exp": { argTypes: [F64], result: F64 },
|
|
222
|
+
"math.expm1": { argTypes: [F64], result: F64 },
|
|
223
|
+
"math.fround": { argTypes: [F64], result: F64 },
|
|
214
224
|
"math.sqrt": { argTypes: [F64], result: F64 },
|
|
215
225
|
"math.log": { argTypes: [F64], result: F64 },
|
|
226
|
+
"math.log1p": { argTypes: [F64], result: F64 },
|
|
216
227
|
"math.log2": { argTypes: [F64], result: F64 },
|
|
217
228
|
"math.log10": { argTypes: [F64], result: F64 },
|
|
218
229
|
"math.atan2": { argTypes: [F64, F64], result: F64 },
|
|
219
230
|
"math.pow": { argTypes: [F64, F64], result: F64 },
|
|
231
|
+
"math.imul": { argTypes: [F64, F64], result: F64 },
|
|
220
232
|
"math.min": { argTypes: [F64, F64], result: F64 },
|
|
221
233
|
"math.max": { argTypes: [F64, F64], result: F64 },
|
|
222
234
|
"math.random": { argTypes: [], result: F64 },
|
|
@@ -1320,6 +1332,7 @@ export const LIB_FN_SIGS = {
|
|
|
1320
1332
|
// Like process.envGet: the result is the module's interned
|
|
1321
1333
|
// `number | undefined` union — checked by arms in the libCall case.
|
|
1322
1334
|
"process.columns": { argTypes: [F64], result: VOID },
|
|
1335
|
+
"process.rows": { argTypes: [F64], result: VOID },
|
|
1323
1336
|
"process.stdinDestroy": { argTypes: [], result: VOID },
|
|
1324
1337
|
"process.stdinSetRawMode": { argTypes: [BOOL], result: VOID },
|
|
1325
1338
|
// Arg 0 is a packed f64[] OR a bytes value (the spread-typed-array
|
|
@@ -1617,11 +1630,9 @@ export function validateModule(mod) {
|
|
|
1617
1630
|
}
|
|
1618
1631
|
seen.add(f.name);
|
|
1619
1632
|
// Unit kinds (undefinedT/nullT) exist only as union arms — a BARE
|
|
1620
|
-
// unit field is as malformed as a void one. dyn
|
|
1621
|
-
//
|
|
1622
|
-
|
|
1623
|
-
if (f.type.kind === "void" || f.type.kind === "jsval" ||
|
|
1624
|
-
isUnitType(f.type)) {
|
|
1633
|
+
// unit field is as malformed as a void one. dyn and jsval slots
|
|
1634
|
+
// are valid; both are refcounted values held by the record shape.
|
|
1635
|
+
if (f.type.kind === "void" || isUnitType(f.type)) {
|
|
1625
1636
|
errors.push({ message: `record ${rec.id}: field "${f.name}" is ${f.type.kind}`, loc: noLoc });
|
|
1626
1637
|
}
|
|
1627
1638
|
if (f.type.kind === "record" && !new Set((mod.records ?? []).map((r) => r.id)).has(f.type.shapeId)) {
|
|
@@ -2735,34 +2746,49 @@ function validateFunction(fn, functions, ffiByName, classes, records, unions, gl
|
|
|
2735
2746
|
? { argTypes: [e.receiver.type], result: F64 }
|
|
2736
2747
|
: e.method === "nextPresent" || e.method === "getNumber"
|
|
2737
2748
|
? { argTypes: [F64], result: F64 }
|
|
2738
|
-
: e.method === "
|
|
2739
|
-
? { argTypes: [
|
|
2740
|
-
: e.method === "
|
|
2741
|
-
? { argTypes: [
|
|
2742
|
-
: e.method === "
|
|
2743
|
-
? { argTypes: [elem], result:
|
|
2744
|
-
: e.method === "
|
|
2745
|
-
? { argTypes: [
|
|
2746
|
-
: e.method === "
|
|
2747
|
-
? { argTypes: [
|
|
2748
|
-
: e.method === "
|
|
2749
|
-
? { argTypes: [], result: e.receiver.type }
|
|
2750
|
-
: e.method === "
|
|
2749
|
+
: e.method === "indexEq"
|
|
2750
|
+
? { argTypes: [F64, e.receiver.type, F64], result: BOOL }
|
|
2751
|
+
: e.method === "pop"
|
|
2752
|
+
? { argTypes: [], result: e.type } // union-checked below
|
|
2753
|
+
: e.method === "indexOf"
|
|
2754
|
+
? { argTypes: [elem], result: F64 }
|
|
2755
|
+
: e.method === "includes"
|
|
2756
|
+
? { argTypes: [elem], result: BOOL }
|
|
2757
|
+
: e.method === "join"
|
|
2758
|
+
? { argTypes: [STRING], result: STRING }
|
|
2759
|
+
: e.method === "slice"
|
|
2760
|
+
? { argTypes: [F64, F64], result: e.receiver.type }
|
|
2761
|
+
: e.method === "toReversed"
|
|
2751
2762
|
? { argTypes: [], result: e.receiver.type }
|
|
2752
|
-
: e.method === "
|
|
2753
|
-
? { argTypes: [
|
|
2754
|
-
: e.method === "
|
|
2755
|
-
? { argTypes: [F64,
|
|
2756
|
-
: e.method === "
|
|
2757
|
-
? { argTypes: [F64], result: e.receiver.type }
|
|
2758
|
-
: e.method === "
|
|
2759
|
-
? { argTypes: [F64
|
|
2760
|
-
: e.method === "
|
|
2761
|
-
? { argTypes: [], result: e.type }
|
|
2762
|
-
:
|
|
2763
|
+
: e.method === "reverse"
|
|
2764
|
+
? { argTypes: [], result: e.receiver.type }
|
|
2765
|
+
: e.method === "toSpliced"
|
|
2766
|
+
? { argTypes: [F64, F64, e.receiver.type], result: e.receiver.type }
|
|
2767
|
+
: e.method === "with"
|
|
2768
|
+
? { argTypes: [F64, elem], result: e.receiver.type }
|
|
2769
|
+
: e.method === "withUndefined"
|
|
2770
|
+
? { argTypes: [F64], result: e.receiver.type }
|
|
2771
|
+
: e.method === "splice"
|
|
2772
|
+
? { argTypes: [F64, F64], result: e.receiver.type }
|
|
2773
|
+
: e.method === "spliceInsert"
|
|
2774
|
+
? { argTypes: [F64, F64, e.receiver.type], result: e.receiver.type }
|
|
2775
|
+
: e.method === "flatCopy" || e.method === "flatOne"
|
|
2776
|
+
? { argTypes: [e.type], result: e.type }
|
|
2777
|
+
: e.method === "shift"
|
|
2778
|
+
? { argTypes: [], result: e.type } // union-checked below
|
|
2779
|
+
: { argTypes: [], result: F64 }; // length
|
|
2763
2780
|
if (e.method === "getNumber" && elem.kind !== "f64") {
|
|
2764
2781
|
err(`arrIntrinsic getNumber requires f64 elements, got ${elem.kind}`, e.loc);
|
|
2765
2782
|
}
|
|
2783
|
+
if (e.method === "indexEq" && elem.kind !== "f64" && elem.kind !== "bool" && elem.kind !== "string") {
|
|
2784
|
+
err(`arrIntrinsic indexEq requires primitive elements, got ${elem.kind}`, e.loc);
|
|
2785
|
+
}
|
|
2786
|
+
if (e.method === "flatCopy" && !typeEquals(e.type, e.receiver.type)) {
|
|
2787
|
+
err("arrIntrinsic flatCopy result must match its receiver", e.loc);
|
|
2788
|
+
}
|
|
2789
|
+
if (e.method === "flatOne" && (elem.kind !== "array" || !typeEquals(e.type, elem))) {
|
|
2790
|
+
err("arrIntrinsic flatOne result must match the nested array type", e.loc);
|
|
2791
|
+
}
|
|
2766
2792
|
if (e.method === "join" &&
|
|
2767
2793
|
elem.kind !== "f64" && elem.kind !== "string" && elem.kind !== "bool" &&
|
|
2768
2794
|
!(elem.kind === "union" &&
|
|
@@ -4015,7 +4041,7 @@ function validateFunction(fn, functions, ffiByName, classes, records, unions, gl
|
|
|
4015
4041
|
}
|
|
4016
4042
|
break;
|
|
4017
4043
|
}
|
|
4018
|
-
if (e.fn === "process.columns") {
|
|
4044
|
+
if (e.fn === "process.columns" || e.fn === "process.rows") {
|
|
4019
4045
|
// Result is the module's interned `number | undefined` union.
|
|
4020
4046
|
const def = e.type.kind === "union" ? unions.get(e.type.unionId) : undefined;
|
|
4021
4047
|
const ok = def &&
|
|
@@ -4023,7 +4049,7 @@ function validateFunction(fn, functions, ffiByName, classes, records, unions, gl
|
|
|
4023
4049
|
def.arms[0].kind === "f64" &&
|
|
4024
4050
|
def.arms[1].kind === "undefinedT";
|
|
4025
4051
|
if (!ok) {
|
|
4026
|
-
err(`libCall
|
|
4052
|
+
err(`libCall ${e.fn} must return the 'number | undefined' union`, e.loc);
|
|
4027
4053
|
}
|
|
4028
4054
|
break;
|
|
4029
4055
|
}
|