@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
@@ -1,4 +1,8 @@
1
1
  import type { IrFfiCallbackParamClass, IrFfiReturnClass, IrFfiValueParamClass } from "../../ir/ir.js";
2
+ /** User-controlled text embedded after an LLVM `;` comment marker. Preserve
3
+ * ordinary output byte-for-byte, but encode control and line-separator code
4
+ * units so a property name can never inject a line or invalid source byte. */
5
+ export declare function llvmCommentText(text: string): string;
2
6
  export declare function ffiNativeTypeLl(cls: IrFfiCallbackParamClass | IrFfiValueParamClass | IrFfiReturnClass): string;
3
7
  export declare function f64Lit(n: number): string;
4
8
  export declare const F64_INF: string;
@@ -1,4 +1,10 @@
1
1
  import { InternalCompilerError } from "../../errors.js";
2
+ /** User-controlled text embedded after an LLVM `;` comment marker. Preserve
3
+ * ordinary output byte-for-byte, but encode control and line-separator code
4
+ * units so a property name can never inject a line or invalid source byte. */
5
+ export function llvmCommentText(text) {
6
+ return text.replace(/[\u0000-\u001f\u007f-\u009f\u2028\u2029]/g, (char) => `\\u${char.charCodeAt(0).toString(16).padStart(4, "0")}`);
7
+ }
2
8
  export function ffiNativeTypeLl(cls) {
3
9
  switch (cls) {
4
10
  case "f64":
@@ -1 +1 @@
1
- {"version":3,"file":"common.js","sourceRoot":"","sources":["../../../src/backend/llvm/common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAGxD,MAAM,UAAU,eAAe,CAC7B,GAAsE;IAEtE,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,KAAK;YACR,OAAO,QAAQ,CAAC;QAClB,KAAK,MAAM,CAAC;QACZ,KAAK,IAAI;YACP,OAAO,IAAI,CAAC;QACd,KAAK,KAAK,CAAC;QACX,KAAK,KAAK;YACR,OAAO,KAAK,CAAC;QACf,KAAK,SAAS;YACZ,OAAO,KAAK,CAAC;QACf,KAAK,QAAQ,CAAC;QACd,KAAK,OAAO;YACV,MAAM,IAAI,qBAAqB,CAAC,iCAAiC,GAAG,2BAA2B,CAAC,CAAC;QACnG,KAAK,MAAM;YACT,OAAO,MAAM,CAAC;IAClB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,CAAS;IAC9B,MAAM,GAAG,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;IAC/B,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACnC,OAAO,KAAK,CAAC,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;AAC5G,CAAC;AAED,MAAM,CAAC,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC"}
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../../../src/backend/llvm/common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAGxD;;8EAE8E;AAC9E,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,OAAO,IAAI,CAAC,OAAO,CAAC,2CAA2C,EAAE,CAAC,IAAI,EAAE,EAAE,CACxE,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CACzD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,GAAsE;IAEtE,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,KAAK;YACR,OAAO,QAAQ,CAAC;QAClB,KAAK,MAAM,CAAC;QACZ,KAAK,IAAI;YACP,OAAO,IAAI,CAAC;QACd,KAAK,KAAK,CAAC;QACX,KAAK,KAAK;YACR,OAAO,KAAK,CAAC;QACf,KAAK,SAAS;YACZ,OAAO,KAAK,CAAC;QACf,KAAK,QAAQ,CAAC;QACd,KAAK,OAAO;YACV,MAAM,IAAI,qBAAqB,CAAC,iCAAiC,GAAG,2BAA2B,CAAC,CAAC;QACnG,KAAK,MAAM;YACT,OAAO,MAAM,CAAC;IAClB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,CAAS;IAC9B,MAAM,GAAG,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;IAC/B,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACnC,OAAO,KAAK,CAAC,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;AAC5G,CAAC;AAED,MAAM,CAAC,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,9 @@
1
+ import { describe, expect, test } from "vitest";
2
+ import { llvmCommentText } from "./common.js";
3
+ describe("LLVM comment text", () => {
4
+ test("preserves ordinary names and encodes control characters", () => {
5
+ expect(llvmCommentText('quote"slash\\')).toBe('quote"slash\\');
6
+ expect(llvmCommentText("line\n\0tab\tunit\u001f\u007f\u0085\u2028")).toBe("line\\u000a\\u0000tab\\u0009unit\\u001f\\u007f\\u0085\\u2028");
7
+ });
8
+ });
9
+ //# sourceMappingURL=common.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.test.js","sourceRoot":"","sources":["../../../src/backend/llvm/common.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,IAAI,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACnE,MAAM,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC/D,MAAM,CAAC,eAAe,CAAC,2CAA2C,CAAC,CAAC,CAAC,IAAI,CACvE,8DAA8D,CAC/D,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -19,6 +19,10 @@ export declare const DYN_KIND: {
19
19
  * unit instances (undefined-armed dynCheck targets build them). */
20
20
  export interface DynHost extends WalkerHost {
21
21
  unitInstanceRef(unionId: string, tag: number): string;
22
+ liveDynRefAdapter(t: IrType): {
23
+ snapshot: string;
24
+ commit: string;
25
+ };
22
26
  }
23
27
  export declare class LlDyn {
24
28
  private readonly host;
@@ -1,8 +1,9 @@
1
1
  import { InternalCompilerError } from "../../errors.js";
2
- import { DYN_HANDLE_KINDS, isRefCounted, typeKey } from "../../ir/ir.js";
2
+ import { DYN_HANDLE_KINDS, isDynTypedRefType, isRefCounted, typeKey } from "../../ir/ir.js";
3
3
  import { dynDesc, undefinedArmTag } from "../../ir/analysis.js";
4
4
  import { mangleRecordNew, mangleRecordStruct } from "../mangle.js";
5
5
  import { BlockBuilder } from "./blocks.js";
6
+ import { llvmCommentText } from "./common.js";
6
7
  import { arrNewCall, elemAccess, llFieldType, releaseSym, traceAdapter, traceArg, vAdapters } from "./shapes.js";
7
8
  import { LlvmUnsupportedError } from "./unsupported.js";
8
9
  /** ScrDynKind values (scr_runtime.h). */
@@ -166,7 +167,7 @@ export class LlDyn {
166
167
  this.host.declare(`declare ptr @scr_dyn_obj_get(ptr, ptr, ${this.S})`);
167
168
  const t = B.tmp();
168
169
  const len = Buffer.byteLength(key, "utf8");
169
- B.line(`${t} = call ptr @scr_dyn_obj_get(ptr ${d}, ptr ${this.host.cstr(key)}, ${this.S} ${len}) ; .${key}`);
170
+ B.line(`${t} = call ptr @scr_dyn_obj_get(ptr ${d}, ptr ${this.host.cstr(key)}, ${this.S} ${len}) ; .${llvmCommentText(key)}`);
170
171
  return t;
171
172
  }
172
173
  /** Appends an ScrStr's bytes into a ScrJsonBuf (walkers' putScrStr). */
@@ -419,7 +420,7 @@ export class LlDyn {
419
420
  B.startBlock(lCmp);
420
421
  const c = B.tmp();
421
422
  const same = B.tmp();
422
- B.line(`${c} = call i32 @memcmp(ptr ${ent.key}, ptr ${this.host.cstr(f.name)}, ${this.S} ${klen}) ; ${f.name}`);
423
+ B.line(`${c} = call i32 @memcmp(ptr ${ent.key}, ptr ${this.host.cstr(f.name)}, ${this.S} ${klen}) ; ${llvmCommentText(f.name)}`);
423
424
  B.line(`${same} = icmp eq i32 ${c}, 0`);
424
425
  const lNo2 = B.newLabel("dm.kn");
425
426
  const skip = B.newLabel("dm.ks");
@@ -633,7 +634,7 @@ export class LlDyn {
633
634
  : "%ScrArr";
634
635
  B.line(`${cachedPtr} = getelementptr inbounds ${struct}, ptr ${cached}, i64 0, i32 ${member.index}`);
635
636
  B.line(`${checkedPtr} = getelementptr inbounds ${struct}, ptr ${checked}, i64 0, i32 ${member.index}`);
636
- B.line(`${oldValue} = load ${member.type}, ptr ${cachedPtr} ; ${member.name}`);
637
+ B.line(`${oldValue} = load ${member.type}, ptr ${cachedPtr} ; ${llvmCommentText(member.name)}`);
637
638
  B.line(`${newValue} = load ${member.type}, ptr ${checkedPtr}`);
638
639
  B.line(`store ${member.type} ${newValue}, ptr ${cachedPtr}`);
639
640
  B.line(`store ${member.type} ${oldValue}, ptr ${checkedPtr}`);
@@ -787,7 +788,7 @@ export class LlDyn {
787
788
  const storeInto = (fieldName, ft, value) => {
788
789
  const idx = fieldIndex.get(fieldName);
789
790
  const p = B.tmp();
790
- B.line(`${p} = getelementptr inbounds %${struct}, ptr %r0, i64 0, i32 ${idx} ; .${fieldName}`);
791
+ B.line(`${p} = getelementptr inbounds %${struct}, ptr %r0, i64 0, i32 ${idx} ; .${llvmCommentText(fieldName)}`);
791
792
  if (llFieldType(ft) === "i8") {
792
793
  const z = B.tmp();
793
794
  B.line(`${z} = zext i1 ${value} to i8`);
@@ -909,7 +910,7 @@ export class LlDyn {
909
910
  B.startBlock(lCmp);
910
911
  const c = B.tmp();
911
912
  const same = B.tmp();
912
- B.line(`${c} = call i32 @memcmp(ptr ${ent.key}, ptr ${host.cstr(f.name)}, ${host.sizeType} ${klen}) ; ${f.name}`);
913
+ B.line(`${c} = call i32 @memcmp(ptr ${ent.key}, ptr ${host.cstr(f.name)}, ${host.sizeType} ${klen}) ; ${llvmCommentText(f.name)}`);
913
914
  B.line(`${same} = icmp eq i32 ${c}, 0`);
914
915
  const skip = B.newLabel("dcv.ks");
915
916
  const lNo2 = B.newLabel("dcv.kn");
@@ -1207,13 +1208,23 @@ export class LlDyn {
1207
1208
  break;
1208
1209
  }
1209
1210
  case "object": {
1210
- // %Error only (canConvertToDyn's gate): the checked-dynamic tree's error encoding.
1211
- if (t.className !== "%Error") {
1212
- throw new InternalCompilerError(`llvm emitter bug: to-dyn of class ${t.className}`);
1211
+ const className = t.className;
1212
+ if (className === "%Error") {
1213
+ host.declare(`declare ptr @scr_dyn_from_error(ptr)`);
1214
+ const r = B.tmp();
1215
+ B.line(`${r} = call ptr @scr_dyn_from_error(ptr %v)`);
1216
+ B.terminate(`ret ptr ${r}`);
1217
+ break;
1218
+ }
1219
+ if (!isDynTypedRefType(t)) {
1220
+ throw new InternalCompilerError(`llvm emitter bug: to-dyn of runtime class ${className}`);
1213
1221
  }
1214
- host.declare(`declare ptr @scr_dyn_from_error(ptr)`);
1222
+ const adapter = host.liveDynRefAdapter(t);
1223
+ const rc = vAdapters(host, t);
1224
+ const keyLit = host.cstr(typeKey(t));
1225
+ host.declare(`declare ptr @scr_dyn_new_typed_ref(ptr, ptr, ptr, ptr, ${host.sizeType}, ptr, ptr)`);
1215
1226
  const r = B.tmp();
1216
- B.line(`${r} = call ptr @scr_dyn_from_error(ptr %v)`);
1227
+ B.line(`${r} = call ptr @scr_dyn_new_typed_ref(ptr %v, ptr ${rc.retain}, ptr ${rc.release}, ptr ${keyLit}, ${host.sizeType} ${Buffer.byteLength(typeKey(t), "utf8")}, ptr @${adapter.snapshot}, ptr ${adapter.commit})`);
1217
1228
  B.terminate(`ret ptr ${r}`);
1218
1229
  break;
1219
1230
  }
@@ -1245,7 +1256,7 @@ export class LlDyn {
1245
1256
  const fieldIndex = new Map(shape.fields.map((f, i) => [f.name, i + 1]));
1246
1257
  const loadFieldOf = (fname, ft) => {
1247
1258
  const p = B.tmp();
1248
- B.line(`${p} = getelementptr inbounds %${struct}, ptr %v, i64 0, i32 ${fieldIndex.get(fname)} ; .${fname}`);
1259
+ B.line(`${p} = getelementptr inbounds %${struct}, ptr %v, i64 0, i32 ${fieldIndex.get(fname)} ; .${llvmCommentText(fname)}`);
1249
1260
  const raw = B.tmp();
1250
1261
  B.line(`${raw} = load ${llFieldType(ft)}, ptr ${p}`);
1251
1262
  if (llFieldType(ft) !== "i8")
@@ -1311,7 +1322,7 @@ export class LlDyn {
1311
1322
  const fv = loadFieldOf(f.name, f.type);
1312
1323
  const conv = B.tmp();
1313
1324
  B.line(`${conv} = call ptr @${this.toDynHelper(f.type)}(${this.valTy(f.type)} ${fv})`);
1314
- B.line(`call void @scr_dyn_obj_set(ptr ${d}, ptr ${host.cstr(f.name)}, ${host.sizeType} ${klen}, ptr ${conv}) ; ${f.name}`);
1325
+ B.line(`call void @scr_dyn_obj_set(ptr ${d}, ptr ${host.cstr(f.name)}, ${host.sizeType} ${klen}, ptr ${conv}) ; ${llvmCommentText(f.name)}`);
1315
1326
  }
1316
1327
  if (shape.indexValue) {
1317
1328
  const iv = shape.indexValue;