@scriptc/compiler 0.1.6 → 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 (116) 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 +45 -1
  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-dynamic.js +10 -0
  32. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  33. package/dist/backend/llvm/lib-filesystem.js +29 -0
  34. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  35. package/dist/backend/llvm/lib-shared.js +8 -0
  36. package/dist/backend/llvm/lib-shared.js.map +1 -1
  37. package/dist/backend/llvm/split.js +4 -1
  38. package/dist/backend/llvm/split.js.map +1 -1
  39. package/dist/backend/llvm/split.test.js +26 -1
  40. package/dist/backend/llvm/split.test.js.map +1 -1
  41. package/dist/backend/native-toolchain.js +58 -8
  42. package/dist/backend/native-toolchain.js.map +1 -1
  43. package/dist/backend/native-toolchain.test.js +10 -0
  44. package/dist/backend/native-toolchain.test.js.map +1 -1
  45. package/dist/backend/source-locations.d.ts +12 -0
  46. package/dist/backend/source-locations.js +32 -0
  47. package/dist/backend/source-locations.js.map +1 -0
  48. package/dist/backend/source-locations.test.d.ts +1 -0
  49. package/dist/backend/source-locations.test.js +16 -0
  50. package/dist/backend/source-locations.test.js.map +1 -0
  51. package/dist/diagnostics/diagnostic.d.ts +4 -0
  52. package/dist/diagnostics/diagnostic.js +12 -0
  53. package/dist/diagnostics/diagnostic.js.map +1 -1
  54. package/dist/executable/executable-cache.js +28 -4
  55. package/dist/executable/executable-cache.js.map +1 -1
  56. package/dist/executable/executable-cache.test.js +23 -0
  57. package/dist/executable/executable-cache.test.js.map +1 -1
  58. package/dist/frontend/arguments-usage.d.ts +6 -0
  59. package/dist/frontend/arguments-usage.js +40 -0
  60. package/dist/frontend/arguments-usage.js.map +1 -0
  61. package/dist/frontend/binding-source.d.ts +4 -0
  62. package/dist/frontend/binding-source.js +18 -0
  63. package/dist/frontend/binding-source.js.map +1 -0
  64. package/dist/frontend/lowering/expressions/object-literals.js +13 -8
  65. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  66. package/dist/frontend/lowering/expressions/optional-chains.d.ts +5 -6
  67. package/dist/frontend/lowering/expressions/optional-chains.js +7 -6
  68. package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
  69. package/dist/frontend/lowering/lower-builtins.js +15 -4
  70. package/dist/frontend/lowering/lower-builtins.js.map +1 -1
  71. package/dist/frontend/lowering/lower-calls.d.ts +2 -9
  72. package/dist/frontend/lowering/lower-calls.js +140 -30
  73. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  74. package/dist/frontend/lowering/lower-exprs.js +116 -16
  75. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  76. package/dist/frontend/lowering/lower-island.d.ts +1 -1
  77. package/dist/frontend/lowering/lower-island.js +1 -1
  78. package/dist/frontend/lowering/lower-modules.js +19 -8
  79. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  80. package/dist/frontend/lowering/lower-stmts.js +4 -37
  81. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  82. package/dist/frontend/lowering/lowerer.js +14 -3
  83. package/dist/frontend/lowering/lowerer.js.map +1 -1
  84. package/dist/frontend/lowering/surfaces.d.ts +1 -1
  85. package/dist/frontend/lowering/surfaces.js +37 -6
  86. package/dist/frontend/lowering/surfaces.js.map +1 -1
  87. package/dist/frontend/program.d.ts +5 -0
  88. package/dist/frontend/program.js +216 -32
  89. package/dist/frontend/program.js.map +1 -1
  90. package/dist/frontend/program.test.d.ts +1 -0
  91. package/dist/frontend/program.test.js +117 -0
  92. package/dist/frontend/program.test.js.map +1 -0
  93. package/dist/frontend/type-mapper.d.ts +4 -2
  94. package/dist/frontend/type-mapper.js +249 -186
  95. package/dist/frontend/type-mapper.js.map +1 -1
  96. package/dist/frontend/type-mapper.test.d.ts +1 -0
  97. package/dist/frontend/type-mapper.test.js +86 -0
  98. package/dist/frontend/type-mapper.test.js.map +1 -0
  99. package/dist/index.d.ts +2 -1
  100. package/dist/index.js +7 -2
  101. package/dist/index.js.map +1 -1
  102. package/dist/ir/analysis.js +4 -2
  103. package/dist/ir/analysis.js.map +1 -1
  104. package/dist/ir/ir.d.ts +18 -12
  105. package/dist/ir/ir.js +3 -1
  106. package/dist/ir/ir.js.map +1 -1
  107. package/dist/ir/validate.js +14 -5
  108. package/dist/ir/validate.js.map +1 -1
  109. package/dist/library/compiler-self-identity.d.ts +1 -1
  110. package/dist/library/compiler-self-identity.js +31 -15
  111. package/dist/library/compiler-self-identity.js.map +1 -1
  112. package/dist/library/compiler-self-identity.test.d.ts +1 -0
  113. package/dist/library/compiler-self-identity.test.js +93 -0
  114. package/dist/library/compiler-self-identity.test.js.map +1 -0
  115. package/package.json +17 -17
  116. package/surface-manifest.json +120 -1
@@ -14,6 +14,7 @@ import { InternalCompilerError } from "../../errors.js";
14
14
  * ("x.0", "x.1" for shadowing); the IR is scope-flat.
15
15
  */
16
16
  import { resolve } from "node:path";
17
+ import { bindingSource } from "../binding-source.js";
17
18
  import { tsgoPath } from "../dts-paths.js";
18
19
  import * as ts from "../ts7/adapter.js";
19
20
  import { anyOpRequiresDynamicDiag, blockedBindingUseDiag, checkerPanicDiag, componentTypeDiag, isCheckerPanic, genericSignatureTypeDiag, indexSignatureTypeDiag, intersectionTypeDiag, noLoweringDiag, overloadedSignatureTypeDiag, recordShapeMismatchDiag, requiresDynamicApiDiag, requiresDynamicPackageDiag, requiresDynamicTypeDiag, unionMismatchDiag, unsupportedDiag, unsupportedTypeDiag, } from "../../diagnostics/diagnostic.js";
@@ -42,7 +43,7 @@ import { lowerUtilModuleCall } from "./lower-inspect.js";
42
43
  import { lowerComptime, comptimeBakeable, rejectComptimeCaptures, comptimeValueToIr } from "./lower-comptime.js";
43
44
  import { lowerStmts, noteBlockedBindings, isBlockedBinding, lowerScopedBlock, predeclareForwardCapture, predeclareForwardFnDecl, predeclareForwardVar, lowerStmt, lowerVarStatement, lowerDestructuringDecl, lowerDestructuringAssignParts, lowerBindingPattern, lowerJsvalBindingPattern, checkBindingElement, bindPatternTarget, isParseArgsDynCheckerType, lowerVarDeclList, lowerVarDecl, lowerSwitch, lowerTry, lowerExprStatement, lowerForOf, lowerForStatement } from "./lower-stmts.js";
44
45
  import { lowerExpr, maybeNarrow, lowerUnitComparison, lowerNullishCoalesce, lowerCondition, ensureBool, requireTruthyUnion, eqComparableUnion, lowerIntrinsicProperty, lowerArrayLiteral, lowerElementAccess, lowerElementWrite, lowerRecordKeyRead, ensureString, lowerTemplate, lowerAsExpression, lowerPrefixUnary, lowerBinary, lowerCaughtTypeofTest, caughtRead, caughtLocalOf, caughtToString, lowerInstanceOf, lowerRegexLiteral, lowerFieldRead, lowerUnionProperty, fieldTarget, fieldGetExpr, fieldSetStmt, lowerFieldCompound, uniqueSymbolKeyOf } from "./lower-exprs.js";
45
- import { finishOptionalChain, lowerOptionalChain } from "./expressions/optional-chains.js";
46
+ import { finishOptionalChain, isOptionalChainTail, lowerOptionalChain } from "./expressions/optional-chains.js";
46
47
  import { foldedStringKeyOf, lowerDynObjectLiteral, lowerObjectLiteral, lowerShorthandValue, rejectThisInObjectMethod } from "./expressions/object-literals.js";
47
48
  import { lowerRecordFieldCall, lowerObjectMethodCall } from "./lower-calls.js";
48
49
  import { fenceCrossBlockNsRef, nsPathPrefix } from "./lower-namespaces.js";
@@ -3021,7 +3022,16 @@ export class Lowerer {
3021
3022
  if (ts.isCallExpression(node) && ts.isPropertyAccessExpression(node.expression)) {
3022
3023
  const callbackIndices = hofCallbackIndices(node.expression.name.text, node.arguments.length >= 2);
3023
3024
  const receiverNode = node.expression.expression;
3024
- const receiver = this.mapTypeOf(this.typeOf(receiverNode));
3025
+ const receiverTs = this.typeOf(receiverNode);
3026
+ let receiver = this.mapTypeOf(receiverTs);
3027
+ // An array method after an optional-chain guard only runs on the
3028
+ // present receiver. The checker includes the chain's short-circuit
3029
+ // undefined in intermediate call types, so use the same narrowed
3030
+ // receiver the method lowerer sees when promoting HOF callbacks.
3031
+ if (callbackIndices !== null && receiver?.kind === "union" &&
3032
+ (node.expression.questionDotToken !== undefined || isOptionalChainTail(this, node))) {
3033
+ receiver = this.mapTypeOf(this.checker.getNonNullableType(receiverTs));
3034
+ }
3025
3035
  const callback = callbackIndices === null ? undefined : node.arguments[0];
3026
3036
  const tuple = receiver?.kind === "record" && this.shapes.get(receiver.shapeId)?.tuple === true;
3027
3037
  // A JS/evolving-any array may have acquired a precise FLOW type
@@ -8109,7 +8119,7 @@ export class Lowerer {
8109
8119
  const ctx = this.ctx;
8110
8120
  const count = ctx.localCounters.get(name) ?? 0;
8111
8121
  ctx.localCounters.set(name, count + 1);
8112
- const local = { id: `${name}.${count}`, name, type, mutable };
8122
+ const local = { id: `${name}.${count}`, name, type, mutable, source: bindingSource(nameNode) };
8113
8123
  ctx.locals.push(local);
8114
8124
  const symbol = this.checker.getSymbolAtLocation(nameNode);
8115
8125
  if (symbol)
@@ -8473,6 +8483,7 @@ export class Lowerer {
8473
8483
  type: origin.type,
8474
8484
  mutable: origin.mutable,
8475
8485
  boxed: true,
8486
+ ...(origin.source ? { source: origin.source } : {}),
8476
8487
  // TDZ travels with the binding: reads through ANY capture of a
8477
8488
  // forward-captured const must trap while the box is empty.
8478
8489
  ...(origin.tdz ? { tdz: true } : {}),