@scriptc/compiler 0.2.3 → 0.2.4

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 (135) hide show
  1. package/dist/backend/llvm/borrowed-inputs.d.ts +15 -0
  2. package/dist/backend/llvm/borrowed-inputs.js +28 -0
  3. package/dist/backend/llvm/borrowed-inputs.js.map +1 -0
  4. package/dist/backend/llvm/byte-numbers.d.ts +10 -0
  5. package/dist/backend/llvm/byte-numbers.js +235 -0
  6. package/dist/backend/llvm/byte-numbers.js.map +1 -0
  7. package/dist/backend/llvm/bytes-bounds.d.ts +9 -0
  8. package/dist/backend/llvm/bytes-bounds.js +189 -0
  9. package/dist/backend/llvm/bytes-bounds.js.map +1 -0
  10. package/dist/backend/llvm/call-lifetimes.d.ts +7 -0
  11. package/dist/backend/llvm/call-lifetimes.js +27 -7
  12. package/dist/backend/llvm/call-lifetimes.js.map +1 -1
  13. package/dist/backend/llvm/call-lifetimes.test.js +54 -0
  14. package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
  15. package/dist/backend/llvm/checked-value-lifetimes.d.ts +9 -0
  16. package/dist/backend/llvm/checked-value-lifetimes.js +35 -0
  17. package/dist/backend/llvm/checked-value-lifetimes.js.map +1 -0
  18. package/dist/backend/llvm/counted-loops.d.ts +6 -0
  19. package/dist/backend/llvm/counted-loops.js +28 -0
  20. package/dist/backend/llvm/counted-loops.js.map +1 -0
  21. package/dist/backend/llvm/emitter.d.ts +25 -9
  22. package/dist/backend/llvm/emitter.js +131 -31
  23. package/dist/backend/llvm/emitter.js.map +1 -1
  24. package/dist/backend/llvm/emitter.test.js +4 -4
  25. package/dist/backend/llvm/emitter.test.js.map +1 -1
  26. package/dist/backend/llvm/expr-async.js +3 -2
  27. package/dist/backend/llvm/expr-async.js.map +1 -1
  28. package/dist/backend/llvm/expr-bytes.d.ts +4 -4
  29. package/dist/backend/llvm/expr-bytes.js +68 -35
  30. package/dist/backend/llvm/expr-bytes.js.map +1 -1
  31. package/dist/backend/llvm/expr-calls.js +21 -13
  32. package/dist/backend/llvm/expr-calls.js.map +1 -1
  33. package/dist/backend/llvm/expr-containers.d.ts +2 -1
  34. package/dist/backend/llvm/expr-containers.js +68 -46
  35. package/dist/backend/llvm/expr-containers.js.map +1 -1
  36. package/dist/backend/llvm/expr-context.d.ts +11 -0
  37. package/dist/backend/llvm/expr-control.js +26 -5
  38. package/dist/backend/llvm/expr-control.js.map +1 -1
  39. package/dist/backend/llvm/expr-dynamic.js +32 -30
  40. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  41. package/dist/backend/llvm/expr-primitives.js +55 -22
  42. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  43. package/dist/backend/llvm/expr-records.js +8 -2
  44. package/dist/backend/llvm/expr-records.js.map +1 -1
  45. package/dist/backend/llvm/integer-values.d.ts +10 -0
  46. package/dist/backend/llvm/integer-values.js +41 -0
  47. package/dist/backend/llvm/integer-values.js.map +1 -0
  48. package/dist/backend/llvm/integer-views.d.ts +7 -0
  49. package/dist/backend/llvm/integer-views.js +67 -0
  50. package/dist/backend/llvm/integer-views.js.map +1 -0
  51. package/dist/backend/llvm/integer-views.test.d.ts +1 -0
  52. package/dist/backend/llvm/integer-views.test.js +34 -0
  53. package/dist/backend/llvm/integer-views.test.js.map +1 -0
  54. package/dist/backend/llvm/lib-dispatch.js +3 -1
  55. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  56. package/dist/backend/llvm/lib-filesystem.js +5 -5
  57. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  58. package/dist/backend/llvm/local-array-reads.d.ts +2 -4
  59. package/dist/backend/llvm/local-array-reads.js +4 -91
  60. package/dist/backend/llvm/local-array-reads.js.map +1 -1
  61. package/dist/backend/llvm/local-array-reads.test.js +11 -11
  62. package/dist/backend/llvm/local-array-reads.test.js.map +1 -1
  63. package/dist/backend/llvm/map-read-lifetimes.js +2 -2
  64. package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
  65. package/dist/backend/llvm/map-read-lifetimes.test.js +5 -1
  66. package/dist/backend/llvm/map-read-lifetimes.test.js.map +1 -1
  67. package/dist/backend/llvm/reference-effects.d.ts +22 -0
  68. package/dist/backend/llvm/reference-effects.js +148 -0
  69. package/dist/backend/llvm/reference-effects.js.map +1 -0
  70. package/dist/backend/llvm/reference-effects.test.d.ts +1 -0
  71. package/dist/backend/llvm/reference-effects.test.js +74 -0
  72. package/dist/backend/llvm/reference-effects.test.js.map +1 -0
  73. package/dist/backend/llvm/shapes.d.ts +7 -4
  74. package/dist/backend/llvm/shapes.js +23 -6
  75. package/dist/backend/llvm/shapes.js.map +1 -1
  76. package/dist/backend/llvm/stack-unions.test.js +23 -2
  77. package/dist/backend/llvm/stack-unions.test.js.map +1 -1
  78. package/dist/backend/llvm/string-construction.d.ts +10 -0
  79. package/dist/backend/llvm/string-construction.js +38 -0
  80. package/dist/backend/llvm/string-construction.js.map +1 -0
  81. package/dist/backend/llvm/string-construction.test.d.ts +1 -0
  82. package/dist/backend/llvm/string-construction.test.js +65 -0
  83. package/dist/backend/llvm/string-construction.test.js.map +1 -0
  84. package/dist/backend/llvm/string-lifetimes.d.ts +2 -2
  85. package/dist/backend/llvm/string-lifetimes.js +5 -3
  86. package/dist/backend/llvm/string-lifetimes.js.map +1 -1
  87. package/dist/backend/llvm/string-lifetimes.test.js +19 -10
  88. package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
  89. package/dist/frontend/lowering/collection-ingestion.js +9 -0
  90. package/dist/frontend/lowering/collection-ingestion.js.map +1 -1
  91. package/dist/frontend/lowering/containers/string-and-regexp.js +6 -0
  92. package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
  93. package/dist/frontend/lowering/lower-builtins.js +2 -0
  94. package/dist/frontend/lowering/lower-builtins.js.map +1 -1
  95. package/dist/frontend/lowering/lower-classes.js +3 -3
  96. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  97. package/dist/frontend/lowering/lower-containers.js +12 -34
  98. package/dist/frontend/lowering/lower-containers.js.map +1 -1
  99. package/dist/frontend/lowering/lower-exprs.js +12 -2
  100. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  101. package/dist/frontend/lowering/lowerer.js +10 -3
  102. package/dist/frontend/lowering/lowerer.js.map +1 -1
  103. package/dist/frontend/type-mapper.js +2 -2
  104. package/dist/frontend/type-mapper.js.map +1 -1
  105. package/dist/ir/analysis.js +3 -1
  106. package/dist/ir/analysis.js.map +1 -1
  107. package/dist/ir/byte-numbers.d.ts +20 -0
  108. package/dist/ir/byte-numbers.js +65 -0
  109. package/dist/ir/byte-numbers.js.map +1 -0
  110. package/dist/ir/byte-numbers.test.d.ts +1 -0
  111. package/dist/ir/byte-numbers.test.js +42 -0
  112. package/dist/ir/byte-numbers.test.js.map +1 -0
  113. package/dist/ir/integer-loops.d.ts +19 -0
  114. package/dist/ir/integer-loops.js +107 -1
  115. package/dist/ir/integer-loops.js.map +1 -1
  116. package/dist/ir/integer-loops.test.js +51 -1
  117. package/dist/ir/integer-loops.test.js.map +1 -1
  118. package/dist/ir/integer-ranges.d.ts +8 -6
  119. package/dist/ir/integer-ranges.js +343 -89
  120. package/dist/ir/integer-ranges.js.map +1 -1
  121. package/dist/ir/integer-ranges.test.js +54 -3
  122. package/dist/ir/integer-ranges.test.js.map +1 -1
  123. package/dist/ir/ir.d.ts +8 -5
  124. package/dist/ir/ir.js +16 -5
  125. package/dist/ir/ir.js.map +1 -1
  126. package/dist/ir/validate.js +47 -29
  127. package/dist/ir/validate.js.map +1 -1
  128. package/dist/ir/validate.test.js +20 -0
  129. package/dist/ir/validate.test.js.map +1 -1
  130. package/dist/native/toolchain.js +6 -3
  131. package/dist/native/toolchain.js.map +1 -1
  132. package/dist/native/toolchain.test.js +43 -5
  133. package/dist/native/toolchain.test.js.map +1 -1
  134. package/package.json +20 -20
  135. package/surface-manifest.json +1 -1
@@ -33,7 +33,7 @@ import * as ts from "../ts7/adapter.js";
33
33
  import { literalValues } from "../literal-values.js";
34
34
  import { discriminantOwners, literalUnionArm } from "../union-discriminants.js";
35
35
  import { anyOpRequiresDynamicDiag, blockedBindingUseDiag, checkerPanicDiag, componentTypeDiag, isCheckerPanic, genericSignatureTypeDiag, indexSignatureTypeDiag, intersectionTypeDiag, noLoweringDiag, overloadedSignatureTypeDiag, recordShapeMismatchDiag, requiresDynamicApiDiag, requiresDynamicPackageDiag, requiresDynamicTypeDiag, unionMismatchDiag, UNSUPPORTED, unsupportedDiag, unsupportedTypeDiag, } from "../../diagnostics/diagnostic.js";
36
- import { arrayOf, BOOL, canAdaptDynFuncTo, canDynCheckTo, canConvertToDyn, canCrossIslandBoundary, canExitIslandToType, canMarshalTypedFuncIntoIsland, DYN, DYN_HANDLE_KINDS, F64, isDynTypedRefType, isJsonSafeType, isJsonStringifySafeType, isSupportedMapKey, isSupportedMapValue, isUndefinedArmedUnion, isUnitType, JSVAL, NULL_T, RUNTIME_ERROR_CLASSES, STRING, typeEquals, UNDEFINED_T, VOID } from "../../ir/ir.js";
36
+ import { arrayOf, BOOL, canAdaptDynFuncTo, canDynCheckTo, canConvertToDyn, canCrossIslandBoundary, canExitIslandToType, canMarshalTypedFuncIntoIsland, DYN, DYN_HANDLE_KINDS, F64, isDynTypedRefType, isJsonSafeType, isJsonStringifySafeType, isPrimitiveCollectionKey, isSupportedMapKey, isSupportedMapValue, isUndefinedArmedUnion, isUnitType, JSVAL, NULL_T, RUNTIME_ERROR_CLASSES, STRING, typeEquals, UNDEFINED_T, VOID } from "../../ir/ir.js";
37
37
  import {} from "../npm.js";
38
38
  import { provenanceActive } from "../provenance-registry.js";
39
39
  import { ambientDtsPath, canonicalBuiltinModule, cjsExportAssignmentOf, cjsExportDiscardReason, fallbackDtsPath, isCjsExportTableLiteral, isCjsJsFile, isJsSourceFile, isNodeEsmFile, isNodeTypesPath, locOf, orderedImportsOf, overridesDtsPath, npmStaticDepSf7, requireSpecOf, resolveImport, workspacePackageOfPath, } from "../program.js";
@@ -8083,9 +8083,17 @@ export class Lowerer {
8083
8083
  literal = literal.expression;
8084
8084
  // Fresh literals have no previous outer identity to preserve. Build them
8085
8085
  // for their storage layout, just as ordinary contextual literals do.
8086
- if (ts.isObjectLiteralExpression(literal) || ts.isArrayLiteralExpression(literal) || expected.kind === "f64" || expected.kind === "string") {
8086
+ if (ts.isObjectLiteralExpression(literal) || ts.isArrayLiteralExpression(literal) ||
8087
+ isPrimitiveCollectionKey(expected, expected.kind === "union" ? this.unions.get(expected.unionId)?.arms : undefined)) {
8087
8088
  return this.lowerExprExpecting(node, expected);
8088
8089
  }
8090
+ const value = this.lowerExpr(node);
8091
+ const valueArms = value.type.kind === "union" ? this.unions.get(value.type.unionId)?.arms ?? [] : [value.type];
8092
+ // Primitive checks and reboxing preserve values, including tag-only
8093
+ // null/undefined keys. Identity restrictions apply only to references.
8094
+ if (valueArms.length > 0 && valueArms.every((arm) => isPrimitiveCollectionKey(arm))) {
8095
+ return this.coerceInto(node, value, expected);
8096
+ }
8089
8097
  // Assertions can perform their own conversion before slot coercion.
8090
8098
  // Inspect the assertion chain so a width copy cannot hide behind its
8091
8099
  // already-converted result type. Union-arm checks only unwrap a box.
@@ -8100,7 +8108,6 @@ export class Lowerer {
8100
8108
  }
8101
8109
  asserted = asserted.expression;
8102
8110
  }
8103
- const value = this.lowerExpr(node);
8104
8111
  const source = (value.type.kind === "union" ? this.unions.get(value.type.unionId)?.arms ?? [] : [value.type]).filter((type) => !isUnitType(type));
8105
8112
  const target = expected.kind === "union" ? this.unions.get(expected.unionId)?.arms ?? [] : [expected];
8106
8113
  const preservesIdentity = source.length > 0 && source.every((from) => target.some((to) => typeEquals(from, to) || (from.kind === "object" && to.kind === "object" && this.isSubclassOf(from.className, to.className))));