@scriptc/compiler 0.1.4 → 0.1.6

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 (158) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +75 -11
  2. package/dist/backend/c/c-emitter.d.ts +5 -1
  3. package/dist/backend/c/c-emitter.js +22 -9
  4. package/dist/backend/c/c-emitter.js.map +1 -1
  5. package/dist/backend/c/exprs.d.ts +2 -2
  6. package/dist/backend/c/exprs.js +298 -27
  7. package/dist/backend/c/exprs.js.map +1 -1
  8. package/dist/backend/c/stmts.js +5 -3
  9. package/dist/backend/c/stmts.js.map +1 -1
  10. package/dist/backend/c/types.d.ts +2 -3
  11. package/dist/backend/c/types.js +8 -1
  12. package/dist/backend/c/types.js.map +1 -1
  13. package/dist/backend/c/walkers.js +1 -1
  14. package/dist/backend/c/walkers.js.map +1 -1
  15. package/dist/backend/link-plan.d.ts +1 -0
  16. package/dist/backend/link-plan.js +2 -1
  17. package/dist/backend/link-plan.js.map +1 -1
  18. package/dist/backend/llvm/dyn.js +1 -1
  19. package/dist/backend/llvm/dyn.js.map +1 -1
  20. package/dist/backend/llvm/emitter.js +25 -9
  21. package/dist/backend/llvm/emitter.js.map +1 -1
  22. package/dist/backend/llvm/expr-bytes.d.ts +1 -2
  23. package/dist/backend/llvm/expr-bytes.js +22 -17
  24. package/dist/backend/llvm/expr-bytes.js.map +1 -1
  25. package/dist/backend/llvm/expr-containers.d.ts +1 -0
  26. package/dist/backend/llvm/expr-containers.js +58 -4
  27. package/dist/backend/llvm/expr-containers.js.map +1 -1
  28. package/dist/backend/llvm/expr-context.d.ts +6 -2
  29. package/dist/backend/llvm/expr-primitives.js +22 -7
  30. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  31. package/dist/backend/llvm/lib-filesystem.js +20 -0
  32. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  33. package/dist/backend/llvm/lib-network.js +53 -10
  34. package/dist/backend/llvm/lib-network.js.map +1 -1
  35. package/dist/backend/llvm/lib-process.js +4 -3
  36. package/dist/backend/llvm/lib-process.js.map +1 -1
  37. package/dist/backend/llvm/lib-shared.js +65 -0
  38. package/dist/backend/llvm/lib-shared.js.map +1 -1
  39. package/dist/backend/native-toolchain.d.ts +2 -0
  40. package/dist/backend/native-toolchain.js +2 -1
  41. package/dist/backend/native-toolchain.js.map +1 -1
  42. package/dist/backend/targets.d.ts +3 -0
  43. package/dist/backend/targets.js +13 -0
  44. package/dist/backend/targets.js.map +1 -1
  45. package/dist/coverage/surface-manifest.js +12 -5
  46. package/dist/coverage/surface-manifest.js.map +1 -1
  47. package/dist/executable/executable-cache.d.ts +2 -0
  48. package/dist/executable/executable-cache.js +3 -1
  49. package/dist/executable/executable-cache.js.map +1 -1
  50. package/dist/executable/executable-cache.test.js +3 -3
  51. package/dist/executable/executable-cache.test.js.map +1 -1
  52. package/dist/frontend/lowering/array-indexed-mutation.d.ts +8 -0
  53. package/dist/frontend/lowering/array-indexed-mutation.js +176 -0
  54. package/dist/frontend/lowering/array-indexed-mutation.js.map +1 -0
  55. package/dist/frontend/lowering/containers/bytes.d.ts +1 -1
  56. package/dist/frontend/lowering/containers/bytes.js +6 -5
  57. package/dist/frontend/lowering/containers/bytes.js.map +1 -1
  58. package/dist/frontend/lowering/containers/string-and-regexp.d.ts +14 -6
  59. package/dist/frontend/lowering/containers/string-and-regexp.js +420 -34
  60. package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
  61. package/dist/frontend/lowering/expressions/object-literals.js +8 -0
  62. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  63. package/dist/frontend/lowering/indexed-comparison.d.ts +6 -0
  64. package/dist/frontend/lowering/indexed-comparison.js +30 -0
  65. package/dist/frontend/lowering/indexed-comparison.js.map +1 -0
  66. package/dist/frontend/lowering/lower-builtins.d.ts +5 -6
  67. package/dist/frontend/lowering/lower-builtins.js +24 -16
  68. package/dist/frontend/lowering/lower-builtins.js.map +1 -1
  69. package/dist/frontend/lowering/lower-calls.d.ts +3 -2
  70. package/dist/frontend/lowering/lower-calls.js +522 -89
  71. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  72. package/dist/frontend/lowering/lower-classes.js +5 -29
  73. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  74. package/dist/frontend/lowering/lower-containers.d.ts +15 -11
  75. package/dist/frontend/lowering/lower-containers.js +588 -146
  76. package/dist/frontend/lowering/lower-containers.js.map +1 -1
  77. package/dist/frontend/lowering/lower-exprs.d.ts +12 -0
  78. package/dist/frontend/lowering/lower-exprs.js +145 -11
  79. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  80. package/dist/frontend/lowering/lower-island.js +17 -6
  81. package/dist/frontend/lowering/lower-island.js.map +1 -1
  82. package/dist/frontend/lowering/lower-server.d.ts +2 -4
  83. package/dist/frontend/lowering/lower-server.js +288 -32
  84. package/dist/frontend/lowering/lower-server.js.map +1 -1
  85. package/dist/frontend/lowering/lower-stmts.js +4 -4
  86. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  87. package/dist/frontend/lowering/lowerer.js +37 -2
  88. package/dist/frontend/lowering/lowerer.js.map +1 -1
  89. package/dist/frontend/lowering/optional-arguments.d.ts +9 -1
  90. package/dist/frontend/lowering/optional-arguments.js +67 -1
  91. package/dist/frontend/lowering/optional-arguments.js.map +1 -1
  92. package/dist/frontend/lowering/pairs-snapshot.d.ts +3 -1
  93. package/dist/frontend/lowering/pairs-snapshot.js +12 -4
  94. package/dist/frontend/lowering/pairs-snapshot.js.map +1 -1
  95. package/dist/frontend/lowering/surfaces.d.ts +10 -14
  96. package/dist/frontend/lowering/surfaces.js +50 -28
  97. package/dist/frontend/lowering/surfaces.js.map +1 -1
  98. package/dist/frontend/npm-static-prune.d.ts +6 -0
  99. package/dist/frontend/npm-static-prune.js +203 -0
  100. package/dist/frontend/npm-static-prune.js.map +1 -0
  101. package/dist/frontend/npm-static-prune.test.d.ts +1 -0
  102. package/dist/frontend/npm-static-prune.test.js +48 -0
  103. package/dist/frontend/npm-static-prune.test.js.map +1 -0
  104. package/dist/frontend/npm.js +7 -6
  105. package/dist/frontend/npm.js.map +1 -1
  106. package/dist/frontend/program.js +15 -4
  107. package/dist/frontend/program.js.map +1 -1
  108. package/dist/frontend/provenance.js +8 -3
  109. package/dist/frontend/provenance.js.map +1 -1
  110. package/dist/frontend/type-mapper.js +16 -5
  111. package/dist/frontend/type-mapper.js.map +1 -1
  112. package/dist/index.d.ts +3 -3
  113. package/dist/index.js +13 -41
  114. package/dist/index.js.map +1 -1
  115. package/dist/ir/analysis.d.ts +5 -3
  116. package/dist/ir/analysis.js +25 -11
  117. package/dist/ir/analysis.js.map +1 -1
  118. package/dist/ir/analysis.test.js +50 -2
  119. package/dist/ir/analysis.test.js.map +1 -1
  120. package/dist/ir/constant-tables.d.ts +17 -0
  121. package/dist/ir/constant-tables.js +99 -0
  122. package/dist/ir/constant-tables.js.map +1 -0
  123. package/dist/ir/constant-tables.test.d.ts +1 -0
  124. package/dist/ir/constant-tables.test.js +78 -0
  125. package/dist/ir/constant-tables.test.js.map +1 -0
  126. package/dist/ir/integer-ranges.d.ts +13 -0
  127. package/dist/ir/integer-ranges.js +122 -0
  128. package/dist/ir/integer-ranges.js.map +1 -0
  129. package/dist/ir/integer-ranges.test.d.ts +1 -0
  130. package/dist/ir/integer-ranges.test.js +63 -0
  131. package/dist/ir/integer-ranges.test.js.map +1 -0
  132. package/dist/ir/ir.d.ts +56 -35
  133. package/dist/ir/ir.js +9 -1
  134. package/dist/ir/ir.js.map +1 -1
  135. package/dist/ir/ir.test.js +6 -0
  136. package/dist/ir/ir.test.js.map +1 -1
  137. package/dist/ir/scalar-records.d.ts +8 -0
  138. package/dist/ir/scalar-records.js +216 -0
  139. package/dist/ir/scalar-records.js.map +1 -0
  140. package/dist/ir/scalar-records.test.d.ts +1 -0
  141. package/dist/ir/scalar-records.test.js +142 -0
  142. package/dist/ir/scalar-records.test.js.map +1 -0
  143. package/dist/ir/validate.js +135 -34
  144. package/dist/ir/validate.js.map +1 -1
  145. package/dist/ir/validate.test.d.ts +1 -0
  146. package/dist/ir/validate.test.js +48 -0
  147. package/dist/ir/validate.test.js.map +1 -0
  148. package/dist/library/cache-primitives.d.ts +1 -1
  149. package/dist/library/cache-primitives.js +3 -3
  150. package/dist/library/cache-primitives.js.map +1 -1
  151. package/dist/library/fence-eval.js +11 -4
  152. package/dist/library/fence-eval.js.map +1 -1
  153. package/dist/library/library-cache.js +0 -1
  154. package/dist/library/library-cache.js.map +1 -1
  155. package/dist/library/library-cache.test.js +3 -3
  156. package/dist/library/library-cache.test.js.map +1 -1
  157. package/package.json +17 -17
  158. package/surface-manifest.json +90 -45
@@ -18,7 +18,7 @@ import { builtinModuleFnOf, FS_READDIR_DOCUMENTED_OPTIONS, FS_WATCH_DOCUMENTED_O
18
18
  import { lowerAbsenceProbe } from "./lower-exprs.js";
19
19
  import { conditionalSpreadOf, lowerDynObjectLiteral } from "./expressions/object-literals.js";
20
20
  import { isSafeToDiscard } from "./expressions/evaluation-safety.js";
21
- import { defaultAfterUndefined, lowerStaticallyUndefinedArgument } from "./optional-arguments.js";
21
+ import { defaultAfterUndefined, lowerOptionalArgument, lowerStaticallyUndefinedArgument, lowerStringSearchArgument } from "./optional-arguments.js";
22
22
  import { HTTP2_CONSTANTS } from "./http2-constants.js";
23
23
  import { CRYPTO_CIPHERS, CRYPTO_CONSTANTS, CRYPTO_CURVES, CRYPTO_HASHES } from "./crypto-tables.js";
24
24
  import { generatorMeta, timerStyleCallback } from "./lower-calls.js";
@@ -4206,6 +4206,9 @@ export function lowerJsonMethodCall(lowerer, call, access) {
4206
4206
  }
4207
4207
  if (member === "stringify") {
4208
4208
  const indent = stringifySpaceIndent(lowerer, call);
4209
+ if (call.arguments.length === 0) {
4210
+ return lowerer.wrappedUndefined(lowerer.withUndefinedArm(STRING), loc);
4211
+ }
4209
4212
  const argNode = call.arguments[0];
4210
4213
  const value = lowerer.lowerExpr(argNode);
4211
4214
  const optionalString = lowerOptionalStringifyRoot(lowerer, value, indent, loc);
@@ -6037,7 +6040,7 @@ export function lowerFsConstantsProperty(lowerer, expr) {
6037
6040
  /** `process.stdin/stdout/stderr.isTTY` → isatty(3) on the stream's fd
6038
6041
  * (a REAL boolean: Node's non-TTY streams expose `undefined` here — the
6039
6042
  * documented divergence; truthiness tests, the actual usage, agree), and
6040
- * `process.stdout/stderr.columns` → ioctl(TIOCGWINSZ) on the fd, with
6043
+ * `process.stdout/stderr.columns/rows` → ioctl(TIOCGWINSZ) on the fd, with
6041
6044
  * Node's non-TTY answer intact: the read is `number | undefined` and a
6042
6045
  * non-TTY (or ioctl-refusing) stream yields the undefined arm. The
6043
6046
  * receiver match sees through parens and as-casts to the SYMBOL —
@@ -6052,7 +6055,7 @@ export function lowerProcessStreamProperty(lowerer, expr) {
6052
6055
  if (expr.questionDotToken)
6053
6056
  return null;
6054
6057
  const member = expr.name.text;
6055
- if (member !== "isTTY" && member !== "columns")
6058
+ if (member !== "isTTY" && member !== "columns" && member !== "rows")
6056
6059
  return null;
6057
6060
  let recv = expr.expression;
6058
6061
  while (ts.isParenthesizedExpression(recv) || ts.isAsExpression(recv) || ts.isTypeAssertion(recv))
@@ -6086,17 +6089,17 @@ export function lowerProcessStreamProperty(lowerer, expr) {
6086
6089
  return { kind: "libCall", fn: "process.isTTY", args: [fd], type: BOOL, loc };
6087
6090
  }
6088
6091
  if (stream === "stdin")
6089
- return null; // no columns on a ReadStream — generic fences apply
6092
+ return null; // no geometry on a ReadStream — generic fences apply
6090
6093
  const declared = lowerer.mapTypeOf(lowerer.typeOf(expr));
6091
6094
  const want = lowerer.withUndefinedArm(F64);
6092
6095
  // JS files skip the annotation fence: there is no annotation to fix —
6093
6096
  // the read IS Node's `number | undefined` and lowers to exactly that
6094
6097
  // (commander's `isTTY ? columns : undefined` help-width probes).
6095
6098
  if ((!declared || typeKey(declared) !== typeKey(want)) && !isJsSourceFile(expr.getSourceFile())) {
6096
- lowerer.noLowering(`process.${stream}.columns as a plain number`, expr, "on a non-TTY stream Node's .columns is undefined — type the read to admit it: " +
6097
- `(process.${stream} as typeof process.${stream} & { columns?: number }).columns`);
6099
+ lowerer.noLowering(`process.${stream}.${member} as a plain number`, expr, `on a non-TTY stream Node's .${member} is undefined — type the read to admit it: ` +
6100
+ `(process.${stream} as typeof process.${stream} & { ${member}?: number }).${member}`);
6098
6101
  }
6099
- return { kind: "libCall", fn: "process.columns", args: [fd], type: want, loc };
6102
+ return { kind: "libCall", fn: member === "rows" ? "process.rows" : "process.columns", args: [fd], type: want, loc };
6100
6103
  }
6101
6104
  /** `process.argv` / `process.platform` / `process.pid` property READS
6102
6105
  * lower to zero-arg libCalls (argv returns +1 on one interned array —
@@ -7467,7 +7470,7 @@ export function lowerDateCall(lowerer, call, access) {
7467
7470
  if (name === "toISOString") {
7468
7471
  return { kind: "libCall", fn: "date.toISOStringValue", args: [receiver], type: STRING, loc };
7469
7472
  }
7470
- const fn = DATE_GETTER_FNS[name];
7473
+ const fn = own(DATE_GETTER_FNS, name);
7471
7474
  if (fn !== undefined) {
7472
7475
  return { kind: "libCall", fn, args: [receiver], type: F64, loc };
7473
7476
  }
@@ -7828,11 +7831,10 @@ export function lowerStringStaticCall(lowerer, call, access) {
7828
7831
  const packed = { kind: "arrayLit", elems, type: arrayOf(F64), loc };
7829
7832
  return { kind: "libCall", fn: "string.fromCharCode", args: [packed], type: STRING, loc };
7830
7833
  }
7831
- /** `s.lastIndexOf(needle)` on string receivers — a libCall rather than a
7832
- * strIntrinsic, but the same UTF-16 index semantics as
7833
- * indexOf. The lib's fromIndex parameter has no lowering (Node clamps
7834
- * it with ToIntegerOrInfinity; nothing in the corpus wants it) and
7835
- * fences per site. Null for non-string receivers / other members. */
7834
+ /** `s.lastIndexOf(searchValue?, position?)` on string receivers, using UTF-16
7835
+ * indices. An omitted search value searches for "undefined". Omitted or undefined positions clamp to the string's end;
7836
+ * MAX_SAFE_INTEGER has the same effect for every representable string.
7837
+ * Null for non-string receivers and other members. */
7836
7838
  export function lowerStringLastIndexOfCall(lowerer, call, access) {
7837
7839
  if (call.questionDotToken || access.questionDotToken)
7838
7840
  return null;
@@ -7843,12 +7845,18 @@ export function lowerStringLastIndexOfCall(lowerer, call, access) {
7843
7845
  if (!lowerer.isStdlibMember(access))
7844
7846
  return null;
7845
7847
  const loc = locOf(call);
7846
- if (call.arguments.length !== 1) {
7847
- lowerer.noLowering("lastIndexOf with a fromIndex argument", call, "the one-argument form lowers");
7848
+ if (call.arguments.length > 2 || call.arguments.some(ts.isSpreadElement)) {
7849
+ lowerer.noLowering("lastIndexOf with this argument shape", call, "pass no arguments, or a search value with an optional numeric position");
7848
7850
  }
7849
7851
  const receiver = lowerer.lowerExprExpecting(access.expression, STRING);
7852
+ const positionNode = call.arguments[1];
7853
+ if (!positionNode) {
7854
+ const needle = lowerStringSearchArgument(lowerer, call.arguments[0], loc);
7855
+ return { kind: "libCall", fn: "string.lastIndexOf", args: [receiver, needle], type: F64, loc };
7856
+ }
7850
7857
  const needle = lowerer.lowerExprExpecting(call.arguments[0], STRING);
7851
- return { kind: "libCall", fn: "string.lastIndexOf", args: [receiver, needle], type: F64, loc };
7858
+ const position = lowerOptionalArgument(lowerer, positionNode, F64, numLit(Number.MAX_SAFE_INTEGER, loc));
7859
+ return { kind: "libCall", fn: "string.lastIndexOfFrom", args: [receiver, needle, position], type: F64, loc };
7852
7860
  }
7853
7861
  /** `Promise.race([...])` on THE Promise global: the entries lower
7854
7862
  * individually (the array never materializes — promise-element arrays