@scriptc/compiler 0.1.2 → 0.1.3

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 (151) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +59 -14
  2. package/dist/backend/c/async.d.ts +5 -0
  3. package/dist/backend/c/async.js +57 -0
  4. package/dist/backend/c/async.js.map +1 -1
  5. package/dist/backend/c/c-emitter.d.ts +3 -0
  6. package/dist/backend/c/c-emitter.js +15 -8
  7. package/dist/backend/c/c-emitter.js.map +1 -1
  8. package/dist/backend/c/exprs.d.ts +8 -1
  9. package/dist/backend/c/exprs.js +152 -9
  10. package/dist/backend/c/exprs.js.map +1 -1
  11. package/dist/backend/c/shapes.js +15 -13
  12. package/dist/backend/c/shapes.js.map +1 -1
  13. package/dist/backend/c/types.d.ts +4 -0
  14. package/dist/backend/c/types.js +18 -1
  15. package/dist/backend/c/types.js.map +1 -1
  16. package/dist/backend/c/types.test.js +8 -1
  17. package/dist/backend/c/types.test.js.map +1 -1
  18. package/dist/backend/c/walkers.js +32 -11
  19. package/dist/backend/c/walkers.js.map +1 -1
  20. package/dist/backend/json-literal.d.ts +7 -0
  21. package/dist/backend/json-literal.js +17 -0
  22. package/dist/backend/json-literal.js.map +1 -0
  23. package/dist/backend/json-literal.test.d.ts +1 -0
  24. package/dist/backend/json-literal.test.js +17 -0
  25. package/dist/backend/json-literal.test.js.map +1 -0
  26. package/dist/backend/link-plan.d.ts +1 -1
  27. package/dist/backend/link-plan.js +5 -1
  28. package/dist/backend/link-plan.js.map +1 -1
  29. package/dist/backend/llvm/classes.js +8 -7
  30. package/dist/backend/llvm/classes.js.map +1 -1
  31. package/dist/backend/llvm/common.d.ts +4 -0
  32. package/dist/backend/llvm/common.js +6 -0
  33. package/dist/backend/llvm/common.js.map +1 -1
  34. package/dist/backend/llvm/common.test.d.ts +1 -0
  35. package/dist/backend/llvm/common.test.js +9 -0
  36. package/dist/backend/llvm/common.test.js.map +1 -0
  37. package/dist/backend/llvm/dyn.d.ts +4 -0
  38. package/dist/backend/llvm/dyn.js +24 -13
  39. package/dist/backend/llvm/dyn.js.map +1 -1
  40. package/dist/backend/llvm/emitter.js +35 -7
  41. package/dist/backend/llvm/emitter.js.map +1 -1
  42. package/dist/backend/llvm/expr-context.d.ts +4 -0
  43. package/dist/backend/llvm/expr-dynamic.js +9 -0
  44. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  45. package/dist/backend/llvm/expr-primitives.js +8 -0
  46. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  47. package/dist/backend/llvm/expr-records.js +3 -3
  48. package/dist/backend/llvm/expr-records.js.map +1 -1
  49. package/dist/backend/llvm/expr-stream-bridges.js +2 -1
  50. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  51. package/dist/backend/llvm/expr-stream-callbacks.d.ts +3 -0
  52. package/dist/backend/llvm/expr-stream-callbacks.js +53 -0
  53. package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
  54. package/dist/backend/llvm/lib-dispatch.js +22 -0
  55. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  56. package/dist/backend/llvm/lib-process.js +50 -5
  57. package/dist/backend/llvm/lib-process.js.map +1 -1
  58. package/dist/backend/llvm/lib-shared.js +46 -0
  59. package/dist/backend/llvm/lib-shared.js.map +1 -1
  60. package/dist/backend/llvm/shapes.js +10 -8
  61. package/dist/backend/llvm/shapes.js.map +1 -1
  62. package/dist/backend/llvm/walkers.js +7 -5
  63. package/dist/backend/llvm/walkers.js.map +1 -1
  64. package/dist/backend/native-link-info.d.ts +2 -1
  65. package/dist/backend/native-link-info.js +4 -0
  66. package/dist/backend/native-link-info.js.map +1 -1
  67. package/dist/backend/native-link-info.test.js +24 -1
  68. package/dist/backend/native-link-info.test.js.map +1 -1
  69. package/dist/backend/native-toolchain.d.ts +8 -6
  70. package/dist/backend/native-toolchain.js +28 -13
  71. package/dist/backend/native-toolchain.js.map +1 -1
  72. package/dist/backend/native-toolchain.test.js +36 -1
  73. package/dist/backend/native-toolchain.test.js.map +1 -1
  74. package/dist/backend/runtime-pack-targets.test.js +1 -1
  75. package/dist/backend/runtime-pack-targets.test.js.map +1 -1
  76. package/dist/backend/runtime-pack.test.js +1 -0
  77. package/dist/backend/runtime-pack.test.js.map +1 -1
  78. package/dist/backend/targets.d.ts +5 -0
  79. package/dist/backend/targets.js +9 -0
  80. package/dist/backend/targets.js.map +1 -1
  81. package/dist/backend/targets.test.js +6 -1
  82. package/dist/backend/targets.test.js.map +1 -1
  83. package/dist/coverage/surface-manifest.js +1 -0
  84. package/dist/coverage/surface-manifest.js.map +1 -1
  85. package/dist/diagnostics/diagnostic.js +3 -3
  86. package/dist/diagnostics/diagnostic.js.map +1 -1
  87. package/dist/executable/executable-cache.d.ts +1 -0
  88. package/dist/executable/executable-cache.js +1 -0
  89. package/dist/executable/executable-cache.js.map +1 -1
  90. package/dist/executable/executable-cache.test.js +1 -0
  91. package/dist/executable/executable-cache.test.js.map +1 -1
  92. package/dist/frontend/lowering/containers/bytes.d.ts +0 -4
  93. package/dist/frontend/lowering/containers/bytes.js +112 -28
  94. package/dist/frontend/lowering/containers/bytes.js.map +1 -1
  95. package/dist/frontend/lowering/lower-assert.js +16 -10
  96. package/dist/frontend/lowering/lower-assert.js.map +1 -1
  97. package/dist/frontend/lowering/lower-builtins.d.ts +22 -21
  98. package/dist/frontend/lowering/lower-builtins.js +392 -67
  99. package/dist/frontend/lowering/lower-builtins.js.map +1 -1
  100. package/dist/frontend/lowering/lower-calls.d.ts +8 -6
  101. package/dist/frontend/lowering/lower-calls.js +110 -12
  102. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  103. package/dist/frontend/lowering/lower-containers.js +12 -8
  104. package/dist/frontend/lowering/lower-containers.js.map +1 -1
  105. package/dist/frontend/lowering/lower-exprs.js +104 -5
  106. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  107. package/dist/frontend/lowering/lower-inspect.js +7 -0
  108. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  109. package/dist/frontend/lowering/lower-modules.js +8 -0
  110. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  111. package/dist/frontend/lowering/lower-stmts.d.ts +5 -4
  112. package/dist/frontend/lowering/lower-stmts.js +23 -6
  113. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  114. package/dist/frontend/lowering/lowerer.d.ts +4 -4
  115. package/dist/frontend/lowering/lowerer.js +5 -5
  116. package/dist/frontend/lowering/lowerer.js.map +1 -1
  117. package/dist/frontend/lowering/surfaces.d.ts +5 -3
  118. package/dist/frontend/lowering/surfaces.js +33 -13
  119. package/dist/frontend/lowering/surfaces.js.map +1 -1
  120. package/dist/frontend/npm-static-declarations.js +27 -14
  121. package/dist/frontend/npm-static-declarations.js.map +1 -1
  122. package/dist/frontend/npm-static-declarations.test.js +10 -0
  123. package/dist/frontend/npm-static-declarations.test.js.map +1 -1
  124. package/dist/frontend/program.js +18 -2
  125. package/dist/frontend/program.js.map +1 -1
  126. package/dist/frontend/resolve.d.ts +22 -7
  127. package/dist/frontend/resolve.js +83 -22
  128. package/dist/frontend/resolve.js.map +1 -1
  129. package/dist/frontend/resolve.test.js +21 -1
  130. package/dist/frontend/resolve.test.js.map +1 -1
  131. package/dist/frontend/type-mapper.js +52 -10
  132. package/dist/frontend/type-mapper.js.map +1 -1
  133. package/dist/index.js +6 -0
  134. package/dist/index.js.map +1 -1
  135. package/dist/ir/analysis.js +1 -0
  136. package/dist/ir/analysis.js.map +1 -1
  137. package/dist/ir/ir.d.ts +67 -24
  138. package/dist/ir/ir.js +81 -3
  139. package/dist/ir/ir.js.map +1 -1
  140. package/dist/ir/serialize.d.ts +1 -1
  141. package/dist/ir/serialize.js +1 -1
  142. package/dist/ir/validate.js +77 -5
  143. package/dist/ir/validate.js.map +1 -1
  144. package/dist/library/int-infer.test.js +4 -4
  145. package/dist/library/library-cache.d.ts +1 -0
  146. package/dist/library/library-cache.js +1 -0
  147. package/dist/library/library-cache.js.map +1 -1
  148. package/dist/library/library-cache.test.js +18 -5
  149. package/dist/library/library-cache.test.js.map +1 -1
  150. package/package.json +17 -17
  151. package/surface-manifest.json +32 -17
@@ -62,16 +62,16 @@ import { InternalCompilerError } from "../../errors.js";
62
62
  * lazy-inflate representation as the C debugging backend.
63
63
  */
64
64
  import { deflateRawSync } from "node:zlib";
65
- import { endsWithJump, matchStringSelfConcat } from "../../ir/analysis.js";
65
+ import { endsWithJump, matchStringSelfConcat, streamTypedRefEligible } from "../../ir/analysis.js";
66
66
  import { emitLibraryIdentityLines } from "../library-identity-markers.js";
67
- import { CAUGHT, ffiCallbackType, isFfiContextParam, isRefCounted, isUnitType, moduleEmbedsBuiltin, moduleEmbedsCompressedNpm, moduleUsesChildProcess, moduleUsesDynInvoke, moduleUsesFetch, moduleUsesFsWatch, moduleUsesHttpServer, moduleUsesNet, moduleUsesNodeTest, moduleUsesProcessEvents, moduleUsesStream, moduleUsesTls, moduleUsesTlsCa, NPM_COMPRESS_MIN, POINTER_KINDS, RUNTIME_EMITTER_CLASS, RUNTIME_ERROR_CLASSES, RUNTIME_STREAM_CLASSES, typeKey, VOID } from "../../ir/ir.js";
67
+ import { CAUGHT, ffiCallbackType, isDynTypedRefType, isFfiContextParam, isRefCounted, isUnitType, moduleEmbedsBuiltin, moduleEmbedsCompressedNpm, moduleUsesChildProcess, moduleUsesDynInvoke, moduleUsesFetch, moduleUsesFsWatch, moduleUsesHttpServer, moduleUsesNet, moduleUsesNodeTest, moduleUsesProcessEvents, moduleUsesStream, moduleUsesTls, moduleUsesTlsCa, NPM_COMPRESS_MIN, POINTER_KINDS, RUNTIME_EMITTER_CLASS, RUNTIME_ERROR_CLASSES, RUNTIME_STREAM_CLASSES, typeKey, VOID } from "../../ir/ir.js";
68
68
  import { matchIntegerBytesForLoop } from "../../ir/integer-loops.js";
69
69
  import { allocateFfiCallbackAdapters, hasForeignFfiCallback, hasRetainedFfiCallback } from "../ffi-callbacks.js";
70
70
  import { RUNTIME_ABI_MARKER } from "../runtime-abi.js";
71
71
  import { computeMayThrow } from "../c/may-throw.js";
72
72
  import { mangleArgPack, mangleAsyncSpawn, mangleClassObj, mangleFnClosure, mangleFunction, mangleGenDrop, mangleGenSpawn, mangleGlobal, mangleLocal, mangleRecordStruct, mangleTrampoline, mangleWrapper } from "../mangle.js";
73
73
  import { BlockBuilder } from "./blocks.js";
74
- import { f64Lit, ffiNativeTypeLl } from "./common.js";
74
+ import { f64Lit, ffiNativeTypeLl, llvmCommentText } from "./common.js";
75
75
  import { emitLiteralExpr, emitOperatorExpr, emitStringExpr, emitContainerExpr, emitRecordExpr } from "./expr-primitives.js";
76
76
  import { emitControlExpr } from "./expr-control.js";
77
77
  import { emitCallExpr } from "./expr-calls.js";
@@ -80,7 +80,7 @@ import { emitIntrinsicExpr, emitSerializationExpr, emitAsyncExpr } from "./expr-
80
80
  import { emitJsInteropExpr, emitExpr } from "./expr-dispatch.js";
81
81
  import { emitJsMarshal, emitJsOp, emitJsExit, islandAdapter, islandTypedAdapter } from "./expr-island.js";
82
82
  import { dynKind, raceAdapterFor, genResultThunkFor, childExitThunkFor, childExitSignalThunkFor, childDataThunkFor, emitterFixedAdapter, wrapEmitterListener, unwrapNullableClosure, closeBindThunkFor, closeOverrideWrapFor } from "./expr-callbacks.js";
83
- import { streamDataAdapter, streamDoneFnFor, fsRenameThunkFor, streamCbThunkFor } from "./expr-stream-callbacks.js";
83
+ import { streamDataAdapter, streamDoneFnFor, cryptoBytesThunkFor, fsRenameThunkFor, streamCbThunkFor } from "./expr-stream-callbacks.js";
84
84
  import { resolveThunkFor, tagInSet, arrPush, emitArrayCopyLoop, emitStrIntrinsic, emitArrIntrinsic, wrapNullable, emitMapNew, mapSet, emitMapLikeIntrinsic, emitSetNew } from "./expr-containers.js";
85
85
  import { emitBytesReceiver, emitIntegerLoopIndex, emitBytesIndex, emitBytesData, emitBytesLength, emitBytesGet, emitBytesU32, emitBytesSet, emitBytesIntrinsic } from "./expr-bytes.js";
86
86
  import { emitRegexIntrinsic, emitRecordKeyGet, keyedRecordReadInto } from "./expr-records.js";
@@ -2034,6 +2034,9 @@ class LlEmitter {
2034
2034
  else if (arm.kind === "string") {
2035
2035
  valueName = this.unionPeek(v.name);
2036
2036
  }
2037
+ else if (arm.kind === "bigint") {
2038
+ valueName = this.unionPeek(v.name);
2039
+ }
2037
2040
  const truthy = this.truthyOf(arm.kind, valueName, true);
2038
2041
  B.line(`store i1 ${truthy}, ptr ${slot}`);
2039
2042
  B.br(join);
@@ -2074,6 +2077,12 @@ class LlEmitter {
2074
2077
  B.line(`${truthy} = icmp ne ${this.sizeType} ${len}, 0`);
2075
2078
  return truthy;
2076
2079
  }
2080
+ case "bigint": {
2081
+ this.declare(`declare zeroext i1 @scr_bigint_truthy(ptr)`);
2082
+ const truthy = B.tmp();
2083
+ B.line(`${truthy} = call zeroext i1 @scr_bigint_truthy(ptr ${valueName})`);
2084
+ return truthy;
2085
+ }
2077
2086
  case "date":
2078
2087
  return "true";
2079
2088
  case "array":
@@ -2094,8 +2103,11 @@ class LlEmitter {
2094
2103
  case "spawnRes":
2095
2104
  case "child":
2096
2105
  case "childStream":
2106
+ case "childWriter":
2097
2107
  case "generator":
2098
- case "fsWatcher": {
2108
+ case "fsWatcher":
2109
+ case "cryptoHash":
2110
+ case "cryptoHmac": {
2099
2111
  if (unionArm)
2100
2112
  return "true";
2101
2113
  const truthy = B.tmp();
@@ -2911,7 +2923,7 @@ class LlEmitter {
2911
2923
  for (const f of shape.fields) {
2912
2924
  const lit = this.internLiteral(f.name);
2913
2925
  const hit = B.tmp();
2914
- B.line(`${hit} = call zeroext i1 @scr_str_eq(ptr ${key.name}, ptr ${lit}) ; ${f.name}`);
2926
+ B.line(`${hit} = call zeroext i1 @scr_str_eq(ptr ${key.name}, ptr ${lit}) ; ${llvmCommentText(f.name)}`);
2915
2927
  const lh = B.newLabel("rks.h");
2916
2928
  const ln = B.newLabel("rks.n");
2917
2929
  B.condBr(hit, lh, ln);
@@ -2967,7 +2979,7 @@ class LlEmitter {
2967
2979
  // typeEquals(f.type, iv) — the frontend fences everything else.
2968
2980
  const lit = this.internLiteral(f.name);
2969
2981
  const hit = B.tmp();
2970
- B.line(`${hit} = call zeroext i1 @scr_str_eq(ptr ${key.name}, ptr ${lit}) ; ${f.name}`);
2982
+ B.line(`${hit} = call zeroext i1 @scr_str_eq(ptr ${key.name}, ptr ${lit}) ; ${llvmCommentText(f.name)}`);
2971
2983
  const lh = B.newLabel("rks.h");
2972
2984
  const ln = B.newLabel("rks.n");
2973
2985
  B.condBr(hit, lh, ln);
@@ -3810,6 +3822,9 @@ class LlEmitter {
3810
3822
  fsRenameThunkFor(cbT) {
3811
3823
  return fsRenameThunkFor(this.expressionContext(), cbT);
3812
3824
  }
3825
+ cryptoBytesThunkFor(cbT) {
3826
+ return cryptoBytesThunkFor(this.expressionContext(), cbT);
3827
+ }
3813
3828
  streamCbThunkFor(kind, cbT) {
3814
3829
  return streamCbThunkFor(this.expressionContext(), kind, cbT);
3815
3830
  }
@@ -3888,6 +3903,19 @@ class LlEmitter {
3888
3903
  streamTypedRefCommitAdapter(t, snapshot) {
3889
3904
  return streamTypedRefCommitAdapter(this.expressionContext(), t, snapshot);
3890
3905
  }
3906
+ liveDynRefAdapter(t) {
3907
+ const key = typeKey(t);
3908
+ const existing = this.liveDynRefAdapters.get(key);
3909
+ if (existing)
3910
+ return existing;
3911
+ if (!streamTypedRefEligible(t) && !isDynTypedRefType(t)) {
3912
+ throw new InternalCompilerError(`llvm emitter bug: live dyn ref of ${key}`);
3913
+ }
3914
+ const prefix = `sc_ldr_${this.liveDynRefAdapters.size}`;
3915
+ const adapter = streamTypedRefMaterializeAdapter(this.expressionContext(), t, { prefix, adapters: new Map() }, `${prefix}_materialize`);
3916
+ this.liveDynRefAdapters.set(key, adapter);
3917
+ return adapter;
3918
+ }
3891
3919
  liveDynUnionRefAdapter(t) {
3892
3920
  return liveDynUnionRefAdapter(this.expressionContext(), t);
3893
3921
  }