@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.
Files changed (139) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +0 -1
  2. package/ambient/scriptc.d.ts +13 -5
  3. package/dist/backend/c/c-emitter.d.ts +5 -0
  4. package/dist/backend/c/c-emitter.js +15 -0
  5. package/dist/backend/c/c-emitter.js.map +1 -1
  6. package/dist/backend/c/exprs.js +81 -9
  7. package/dist/backend/c/exprs.js.map +1 -1
  8. package/dist/backend/c/stmts.js +25 -1
  9. package/dist/backend/c/stmts.js.map +1 -1
  10. package/dist/backend/c/walkers.js +2 -3
  11. package/dist/backend/c/walkers.js.map +1 -1
  12. package/dist/backend/debug-symbols.d.ts +8 -0
  13. package/dist/backend/debug-symbols.js +52 -0
  14. package/dist/backend/debug-symbols.js.map +1 -0
  15. package/dist/backend/link-plan.d.ts +1 -0
  16. package/dist/backend/link-plan.js +2 -0
  17. package/dist/backend/link-plan.js.map +1 -1
  18. package/dist/backend/linker.js +8 -0
  19. package/dist/backend/linker.js.map +1 -1
  20. package/dist/backend/llvm/blocks.d.ts +2 -0
  21. package/dist/backend/llvm/blocks.js +18 -2
  22. package/dist/backend/llvm/blocks.js.map +1 -1
  23. package/dist/backend/llvm/debug-info.d.ts +32 -0
  24. package/dist/backend/llvm/debug-info.js +203 -0
  25. package/dist/backend/llvm/debug-info.js.map +1 -0
  26. package/dist/backend/llvm/dyn.js +4 -10
  27. package/dist/backend/llvm/dyn.js.map +1 -1
  28. package/dist/backend/llvm/emitter.d.ts +2 -0
  29. package/dist/backend/llvm/emitter.js +49 -4
  30. package/dist/backend/llvm/emitter.js.map +1 -1
  31. package/dist/backend/llvm/expr-containers.js +28 -2
  32. package/dist/backend/llvm/expr-containers.js.map +1 -1
  33. package/dist/backend/llvm/expr-dynamic.js +10 -0
  34. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  35. package/dist/backend/llvm/lib-filesystem.js +37 -0
  36. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  37. package/dist/backend/llvm/lib-process.js +4 -3
  38. package/dist/backend/llvm/lib-process.js.map +1 -1
  39. package/dist/backend/llvm/lib-shared.js +9 -0
  40. package/dist/backend/llvm/lib-shared.js.map +1 -1
  41. package/dist/backend/llvm/split.js +4 -1
  42. package/dist/backend/llvm/split.js.map +1 -1
  43. package/dist/backend/llvm/split.test.js +26 -1
  44. package/dist/backend/llvm/split.test.js.map +1 -1
  45. package/dist/backend/native-toolchain.js +58 -8
  46. package/dist/backend/native-toolchain.js.map +1 -1
  47. package/dist/backend/native-toolchain.test.js +10 -0
  48. package/dist/backend/native-toolchain.test.js.map +1 -1
  49. package/dist/backend/source-locations.d.ts +12 -0
  50. package/dist/backend/source-locations.js +32 -0
  51. package/dist/backend/source-locations.js.map +1 -0
  52. package/dist/backend/source-locations.test.d.ts +1 -0
  53. package/dist/backend/source-locations.test.js +16 -0
  54. package/dist/backend/source-locations.test.js.map +1 -0
  55. package/dist/coverage/surface-manifest.js +6 -1
  56. package/dist/coverage/surface-manifest.js.map +1 -1
  57. package/dist/diagnostics/diagnostic.d.ts +4 -0
  58. package/dist/diagnostics/diagnostic.js +12 -0
  59. package/dist/diagnostics/diagnostic.js.map +1 -1
  60. package/dist/executable/executable-cache.js +28 -4
  61. package/dist/executable/executable-cache.js.map +1 -1
  62. package/dist/executable/executable-cache.test.js +23 -0
  63. package/dist/executable/executable-cache.test.js.map +1 -1
  64. package/dist/frontend/arguments-usage.d.ts +6 -0
  65. package/dist/frontend/arguments-usage.js +40 -0
  66. package/dist/frontend/arguments-usage.js.map +1 -0
  67. package/dist/frontend/binding-source.d.ts +4 -0
  68. package/dist/frontend/binding-source.js +18 -0
  69. package/dist/frontend/binding-source.js.map +1 -0
  70. package/dist/frontend/lowering/array-indexed-mutation.d.ts +8 -0
  71. package/dist/frontend/lowering/array-indexed-mutation.js +176 -0
  72. package/dist/frontend/lowering/array-indexed-mutation.js.map +1 -0
  73. package/dist/frontend/lowering/containers/string-and-regexp.d.ts +7 -0
  74. package/dist/frontend/lowering/containers/string-and-regexp.js +190 -13
  75. package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
  76. package/dist/frontend/lowering/expressions/object-literals.js +13 -8
  77. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  78. package/dist/frontend/lowering/expressions/optional-chains.d.ts +5 -6
  79. package/dist/frontend/lowering/expressions/optional-chains.js +7 -6
  80. package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
  81. package/dist/frontend/lowering/indexed-comparison.d.ts +6 -0
  82. package/dist/frontend/lowering/indexed-comparison.js +30 -0
  83. package/dist/frontend/lowering/indexed-comparison.js.map +1 -0
  84. package/dist/frontend/lowering/lower-builtins.d.ts +1 -1
  85. package/dist/frontend/lowering/lower-builtins.js +21 -10
  86. package/dist/frontend/lowering/lower-builtins.js.map +1 -1
  87. package/dist/frontend/lowering/lower-calls.d.ts +2 -9
  88. package/dist/frontend/lowering/lower-calls.js +406 -40
  89. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  90. package/dist/frontend/lowering/lower-classes.js +3 -27
  91. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  92. package/dist/frontend/lowering/lower-containers.d.ts +8 -2
  93. package/dist/frontend/lowering/lower-containers.js +454 -104
  94. package/dist/frontend/lowering/lower-containers.js.map +1 -1
  95. package/dist/frontend/lowering/lower-exprs.js +134 -18
  96. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  97. package/dist/frontend/lowering/lower-island.d.ts +1 -1
  98. package/dist/frontend/lowering/lower-island.js +1 -1
  99. package/dist/frontend/lowering/lower-modules.js +19 -8
  100. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  101. package/dist/frontend/lowering/lower-stmts.js +4 -37
  102. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  103. package/dist/frontend/lowering/lowerer.js +14 -3
  104. package/dist/frontend/lowering/lowerer.js.map +1 -1
  105. package/dist/frontend/lowering/surfaces.d.ts +3 -1
  106. package/dist/frontend/lowering/surfaces.js +50 -7
  107. package/dist/frontend/lowering/surfaces.js.map +1 -1
  108. package/dist/frontend/program.d.ts +5 -0
  109. package/dist/frontend/program.js +216 -32
  110. package/dist/frontend/program.js.map +1 -1
  111. package/dist/frontend/program.test.d.ts +1 -0
  112. package/dist/frontend/program.test.js +117 -0
  113. package/dist/frontend/program.test.js.map +1 -0
  114. package/dist/frontend/type-mapper.d.ts +4 -2
  115. package/dist/frontend/type-mapper.js +249 -186
  116. package/dist/frontend/type-mapper.js.map +1 -1
  117. package/dist/frontend/type-mapper.test.d.ts +1 -0
  118. package/dist/frontend/type-mapper.test.js +86 -0
  119. package/dist/frontend/type-mapper.test.js.map +1 -0
  120. package/dist/index.d.ts +2 -1
  121. package/dist/index.js +7 -2
  122. package/dist/index.js.map +1 -1
  123. package/dist/ir/analysis.js +4 -2
  124. package/dist/ir/analysis.js.map +1 -1
  125. package/dist/ir/ir.d.ts +33 -14
  126. package/dist/ir/ir.js +5 -1
  127. package/dist/ir/ir.js.map +1 -1
  128. package/dist/ir/validate.js +57 -31
  129. package/dist/ir/validate.js.map +1 -1
  130. package/dist/ir/validate.test.js +17 -0
  131. package/dist/ir/validate.test.js.map +1 -1
  132. package/dist/library/compiler-self-identity.d.ts +1 -1
  133. package/dist/library/compiler-self-identity.js +31 -15
  134. package/dist/library/compiler-self-identity.js.map +1 -1
  135. package/dist/library/compiler-self-identity.test.d.ts +1 -0
  136. package/dist/library/compiler-self-identity.test.js +93 -0
  137. package/dist/library/compiler-self-identity.test.js.map +1 -0
  138. package/package.json +17 -17
  139. package/surface-manifest.json +155 -4
@@ -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 fields are VALID
1621
- // (`[string, unknown]` entries tuples, `{ v: unknown }` records):
1622
- // the slot holds a dyn value with the overflow map's plumbing.
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 === "pop"
2739
- ? { argTypes: [], result: e.type } // union-checked below
2740
- : e.method === "indexOf"
2741
- ? { argTypes: [elem], result: F64 }
2742
- : e.method === "includes"
2743
- ? { argTypes: [elem], result: BOOL }
2744
- : e.method === "join"
2745
- ? { argTypes: [STRING], result: STRING }
2746
- : e.method === "slice"
2747
- ? { argTypes: [F64, F64], result: e.receiver.type }
2748
- : e.method === "toReversed"
2749
- ? { argTypes: [], result: e.receiver.type }
2750
- : e.method === "reverse"
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 === "toSpliced"
2753
- ? { argTypes: [F64, F64, e.receiver.type], result: e.receiver.type }
2754
- : e.method === "with"
2755
- ? { argTypes: [F64, elem], result: e.receiver.type }
2756
- : e.method === "withUndefined"
2757
- ? { argTypes: [F64], result: e.receiver.type }
2758
- : e.method === "splice"
2759
- ? { argTypes: [F64, F64], result: e.receiver.type }
2760
- : e.method === "shift"
2761
- ? { argTypes: [], result: e.type } // union-checked below
2762
- : { argTypes: [], result: F64 }; // length
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 process.columns must return the 'number | undefined' union`, e.loc);
4052
+ err(`libCall ${e.fn} must return the 'number | undefined' union`, e.loc);
4027
4053
  }
4028
4054
  break;
4029
4055
  }