@scriptc/compiler 0.1.5 → 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 (139) 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 +81 -9
  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-containers.js +28 -2
  32. package/dist/backend/llvm/expr-containers.js.map +1 -1
  33. package/dist/backend/llvm/expr-dynamic.js +10 -0
  34. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  35. package/dist/backend/llvm/lib-filesystem.js +37 -0
  36. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  37. package/dist/backend/llvm/lib-process.js +4 -3
  38. package/dist/backend/llvm/lib-process.js.map +1 -1
  39. package/dist/backend/llvm/lib-shared.js +9 -0
  40. package/dist/backend/llvm/lib-shared.js.map +1 -1
  41. package/dist/backend/llvm/split.js +4 -1
  42. package/dist/backend/llvm/split.js.map +1 -1
  43. package/dist/backend/llvm/split.test.js +26 -1
  44. package/dist/backend/llvm/split.test.js.map +1 -1
  45. package/dist/backend/native-toolchain.js +58 -8
  46. package/dist/backend/native-toolchain.js.map +1 -1
  47. package/dist/backend/native-toolchain.test.js +10 -0
  48. package/dist/backend/native-toolchain.test.js.map +1 -1
  49. package/dist/backend/source-locations.d.ts +12 -0
  50. package/dist/backend/source-locations.js +32 -0
  51. package/dist/backend/source-locations.js.map +1 -0
  52. package/dist/backend/source-locations.test.d.ts +1 -0
  53. package/dist/backend/source-locations.test.js +16 -0
  54. package/dist/backend/source-locations.test.js.map +1 -0
  55. package/dist/coverage/surface-manifest.js +6 -1
  56. package/dist/coverage/surface-manifest.js.map +1 -1
  57. package/dist/diagnostics/diagnostic.d.ts +4 -0
  58. package/dist/diagnostics/diagnostic.js +12 -0
  59. package/dist/diagnostics/diagnostic.js.map +1 -1
  60. package/dist/executable/executable-cache.js +28 -4
  61. package/dist/executable/executable-cache.js.map +1 -1
  62. package/dist/executable/executable-cache.test.js +23 -0
  63. package/dist/executable/executable-cache.test.js.map +1 -1
  64. package/dist/frontend/arguments-usage.d.ts +6 -0
  65. package/dist/frontend/arguments-usage.js +40 -0
  66. package/dist/frontend/arguments-usage.js.map +1 -0
  67. package/dist/frontend/binding-source.d.ts +4 -0
  68. package/dist/frontend/binding-source.js +18 -0
  69. package/dist/frontend/binding-source.js.map +1 -0
  70. package/dist/frontend/lowering/array-indexed-mutation.d.ts +8 -0
  71. package/dist/frontend/lowering/array-indexed-mutation.js +176 -0
  72. package/dist/frontend/lowering/array-indexed-mutation.js.map +1 -0
  73. package/dist/frontend/lowering/containers/string-and-regexp.d.ts +7 -0
  74. package/dist/frontend/lowering/containers/string-and-regexp.js +190 -13
  75. package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
  76. package/dist/frontend/lowering/expressions/object-literals.js +13 -8
  77. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  78. package/dist/frontend/lowering/expressions/optional-chains.d.ts +5 -6
  79. package/dist/frontend/lowering/expressions/optional-chains.js +7 -6
  80. package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
  81. package/dist/frontend/lowering/indexed-comparison.d.ts +6 -0
  82. package/dist/frontend/lowering/indexed-comparison.js +30 -0
  83. package/dist/frontend/lowering/indexed-comparison.js.map +1 -0
  84. package/dist/frontend/lowering/lower-builtins.d.ts +1 -1
  85. package/dist/frontend/lowering/lower-builtins.js +21 -10
  86. package/dist/frontend/lowering/lower-builtins.js.map +1 -1
  87. package/dist/frontend/lowering/lower-calls.d.ts +2 -9
  88. package/dist/frontend/lowering/lower-calls.js +406 -40
  89. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  90. package/dist/frontend/lowering/lower-classes.js +3 -27
  91. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  92. package/dist/frontend/lowering/lower-containers.d.ts +8 -2
  93. package/dist/frontend/lowering/lower-containers.js +454 -104
  94. package/dist/frontend/lowering/lower-containers.js.map +1 -1
  95. package/dist/frontend/lowering/lower-exprs.js +134 -18
  96. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  97. package/dist/frontend/lowering/lower-island.d.ts +1 -1
  98. package/dist/frontend/lowering/lower-island.js +1 -1
  99. package/dist/frontend/lowering/lower-modules.js +19 -8
  100. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  101. package/dist/frontend/lowering/lower-stmts.js +4 -37
  102. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  103. package/dist/frontend/lowering/lowerer.js +14 -3
  104. package/dist/frontend/lowering/lowerer.js.map +1 -1
  105. package/dist/frontend/lowering/surfaces.d.ts +3 -1
  106. package/dist/frontend/lowering/surfaces.js +50 -7
  107. package/dist/frontend/lowering/surfaces.js.map +1 -1
  108. package/dist/frontend/program.d.ts +5 -0
  109. package/dist/frontend/program.js +216 -32
  110. package/dist/frontend/program.js.map +1 -1
  111. package/dist/frontend/program.test.d.ts +1 -0
  112. package/dist/frontend/program.test.js +117 -0
  113. package/dist/frontend/program.test.js.map +1 -0
  114. package/dist/frontend/type-mapper.d.ts +4 -2
  115. package/dist/frontend/type-mapper.js +249 -186
  116. package/dist/frontend/type-mapper.js.map +1 -1
  117. package/dist/frontend/type-mapper.test.d.ts +1 -0
  118. package/dist/frontend/type-mapper.test.js +86 -0
  119. package/dist/frontend/type-mapper.test.js.map +1 -0
  120. package/dist/index.d.ts +2 -1
  121. package/dist/index.js +7 -2
  122. package/dist/index.js.map +1 -1
  123. package/dist/ir/analysis.js +4 -2
  124. package/dist/ir/analysis.js.map +1 -1
  125. package/dist/ir/ir.d.ts +33 -14
  126. package/dist/ir/ir.js +5 -1
  127. package/dist/ir/ir.js.map +1 -1
  128. package/dist/ir/validate.js +57 -31
  129. package/dist/ir/validate.js.map +1 -1
  130. package/dist/ir/validate.test.js +17 -0
  131. package/dist/ir/validate.test.js.map +1 -1
  132. package/dist/library/compiler-self-identity.d.ts +1 -1
  133. package/dist/library/compiler-self-identity.js +31 -15
  134. package/dist/library/compiler-self-identity.js.map +1 -1
  135. package/dist/library/compiler-self-identity.test.d.ts +1 -0
  136. package/dist/library/compiler-self-identity.test.js +93 -0
  137. package/dist/library/compiler-self-identity.test.js.map +1 -0
  138. package/package.json +17 -17
  139. package/surface-manifest.json +155 -4
@@ -0,0 +1,32 @@
1
+ import { type IrFunction, type IrGlobal, type IrLocal, type IrUnionDef, type SrcLoc } from "../../ir/ir.js";
2
+ /** DWARF describes source bindings at their actual native storage locations. */
3
+ export declare class LlvmDebugInfo {
4
+ private readonly pointerBits;
5
+ private readonly unions;
6
+ private readonly nodes;
7
+ private readonly files;
8
+ private readonly locations;
9
+ private readonly scopes;
10
+ private readonly lexicalScopes;
11
+ private readonly types;
12
+ private readonly units;
13
+ private readonly source;
14
+ private readonly version;
15
+ private readonly dwarf;
16
+ constructor(sourceFile: string, sources: ReadonlyMap<string, string>, pointerBits?: number, unions?: readonly IrUnionDef[]);
17
+ private add;
18
+ private file;
19
+ private unit;
20
+ function(fn: IrFunction): string | null;
21
+ private scopeAt;
22
+ private pointer;
23
+ private type;
24
+ local(local: IrLocal, fn: string | null, arg?: number, captured?: boolean): {
25
+ variable: string;
26
+ expression: string;
27
+ location: string;
28
+ } | null;
29
+ global(global: IrGlobal): string | null;
30
+ location(loc: SrcLoc, fn: string | null): string | null;
31
+ render(): string;
32
+ }
@@ -0,0 +1,203 @@
1
+ import { basename, dirname } from "node:path";
2
+ import { isUnitType, typeKey } from "../../ir/ir.js";
3
+ import { SourceLocations } from "../source-locations.js";
4
+ import { mangleFunction } from "../mangle.js";
5
+ /** LLVM metadata strings use UTF-8 byte escapes, including for paths. */
6
+ function quoted(text) {
7
+ return '"' + [...Buffer.from(text)].map((byte) => byte >= 0x20 && byte < 0x7f && byte !== 0x22 && byte !== 0x5c
8
+ ? String.fromCharCode(byte)
9
+ : `\\${byte.toString(16).padStart(2, "0").toUpperCase()}`).join("") + '"';
10
+ }
11
+ /** DWARF describes source bindings at their actual native storage locations. */
12
+ export class LlvmDebugInfo {
13
+ pointerBits;
14
+ unions;
15
+ nodes = [];
16
+ files = new Map();
17
+ locations = new Map();
18
+ scopes = new Map();
19
+ lexicalScopes = new Map();
20
+ types = new Map();
21
+ units = new Map();
22
+ source;
23
+ version;
24
+ dwarf;
25
+ constructor(sourceFile, sources, pointerBits = 64, unions = []) {
26
+ this.pointerBits = pointerBits;
27
+ this.unions = unions;
28
+ this.source = new SourceLocations(sources);
29
+ this.unit(sourceFile);
30
+ this.version = this.add('!{i32 2, !"Debug Info Version", i32 3}');
31
+ this.dwarf = this.add('!{i32 2, !"Dwarf Version", i32 4}');
32
+ }
33
+ add(node) {
34
+ const id = `!${this.nodes.length}`;
35
+ this.nodes.push(`${id} = ${node}`);
36
+ return id;
37
+ }
38
+ file(path) {
39
+ let file = this.files.get(path);
40
+ if (file === undefined) {
41
+ file = this.add(`!DIFile(filename: ${quoted(basename(path))}, directory: ${quoted(dirname(path))})`);
42
+ this.files.set(path, file);
43
+ }
44
+ return file;
45
+ }
46
+ unit(path) {
47
+ // Distinct source modules need distinct CUs even though code generation
48
+ // shares one LLVM module; otherwise debuggers conflate file-local names.
49
+ let unit = this.units.get(path);
50
+ if (unit === undefined) {
51
+ const file = this.file(path);
52
+ const globalList = this.add("!{}");
53
+ const id = this.add(`distinct !DICompileUnit(language: DW_LANG_C11, file: ${file}, producer: "scriptc", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, globals: ${globalList})`);
54
+ unit = { id, globalList, globals: [] };
55
+ this.units.set(path, unit);
56
+ }
57
+ return unit;
58
+ }
59
+ function(fn) {
60
+ const pos = this.source.position(fn.loc);
61
+ if (pos === null)
62
+ return null;
63
+ const file = this.file(pos.file);
64
+ const signature = this.add(`!DISubroutineType(types: ${this.add(`!{${[fn.returnType, ...fn.params.map((p) => p.type)].map((t) => this.type(t)).join(", ")}}`)})`);
65
+ const id = this.add(`distinct !DISubprogram(name: ${quoted(fn.name)}, linkageName: ${quoted(mangleFunction(fn.name))}, scope: ${file}, file: ${file}, line: ${pos.line}, type: ${signature}, scopeLine: ${pos.line}, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition, unit: ${this.unit(pos.file).id})`);
66
+ const scopes = [];
67
+ this.lexicalScopes.set(id, scopes);
68
+ const captures = new Set(fn.captures?.map((c) => c.localId));
69
+ const spans = fn.locals.filter((local) => !captures.has(local.id)).flatMap((local) => local.source ? [local.source.scope] : []);
70
+ // Outer scopes first; declarations in flattened IR still retain their
71
+ // source block, loop, catch, or function scope (including hoisted var).
72
+ spans.sort((a, b) => (b.end - b.start) - (a.end - a.start));
73
+ for (const loc of spans) {
74
+ if (loc.file !== fn.loc.file || (fn.loc.end > fn.loc.start &&
75
+ (loc.start <= fn.loc.start || loc.end > fn.loc.end)))
76
+ continue;
77
+ if (scopes.some((scope) => scope.loc.start === loc.start && scope.loc.end === loc.end))
78
+ continue;
79
+ const start = this.source.position(loc);
80
+ if (start === null)
81
+ continue;
82
+ const parent = this.scopeAt(loc, id);
83
+ scopes.push({ loc, id: this.add(`distinct !DILexicalBlock(scope: ${parent}, file: ${file}, line: ${start.line}, column: ${Math.min(start.column, 65535)})`) });
84
+ }
85
+ return id;
86
+ }
87
+ scopeAt(loc, fn) {
88
+ const scopes = this.lexicalScopes.get(fn) ?? [];
89
+ return scopes.findLast((scope) => scope.loc.file === loc.file && scope.loc.start <= loc.start && loc.end <= scope.loc.end)?.id ?? fn;
90
+ }
91
+ pointer(base) {
92
+ return this.add(`!DIDerivedType(tag: DW_TAG_pointer_type, baseType: ${base}, size: ${this.pointerBits})`);
93
+ }
94
+ type(type) {
95
+ if (type.kind === "void")
96
+ return "null";
97
+ const key = typeKey(type);
98
+ const known = this.types.get(key);
99
+ if (known !== undefined)
100
+ return known;
101
+ let id;
102
+ switch (type.kind) {
103
+ case "f64":
104
+ case "date":
105
+ case "procStream":
106
+ id = this.add(`!DIBasicType(name: ${quoted(type.kind === "f64" ? "number" : type.kind)}, size: 64, encoding: DW_ATE_float)`);
107
+ break;
108
+ case "bool":
109
+ id = this.add('!DIBasicType(name: "boolean", size: 8, encoding: DW_ATE_boolean)');
110
+ break;
111
+ case "string": {
112
+ const size = this.add(`!DIBasicType(name: "size_t", size: ${this.pointerBits}, encoding: DW_ATE_unsigned)`);
113
+ const char = this.add('!DIBasicType(name: "char", size: 8, encoding: DW_ATE_signed_char)');
114
+ const data = this.add(`!DICompositeType(tag: DW_TAG_array_type, baseType: ${char}, elements: ${this.add(`!{${this.add("!DISubrange(count: -1)")}}`)})`);
115
+ const fields = ["rc", "len", "cap", "data"].map((name, i) => this.add(`!DIDerivedType(tag: DW_TAG_member, name: ${quoted(name)}, baseType: ${i === 3 ? data : size}, size: ${i === 3 ? 0 : this.pointerBits}, offset: ${i * this.pointerBits})`));
116
+ id = this.pointer(this.add(`!DICompositeType(tag: DW_TAG_structure_type, name: "ScrStr", size: ${3 * this.pointerBits}, elements: ${this.add(`!{${fields.join(", ")}}`)})`));
117
+ break;
118
+ }
119
+ case "union": {
120
+ const arms = this.unions.find((union) => union.id === type.unionId)?.arms ?? [];
121
+ const tags = arms.map((arm, i) => this.add(`!DIEnumerator(name: ${quoted(typeKey(arm))}, value: ${i}, isUnsigned: true)`));
122
+ const uint = this.add('!DIBasicType(name: "uint32_t", size: 32, encoding: DW_ATE_unsigned)');
123
+ const tag = this.add(`!DICompositeType(tag: DW_TAG_enumeration_type, name: ${quoted(`${type.unionId}_tag`)}, baseType: ${uint}, size: 32, elements: ${this.add(`!{${tags.join(", ")}}`)})`);
124
+ const members = arms.flatMap((arm, i) => isUnitType(arm) ? [] : [this.add(`!DIDerivedType(tag: DW_TAG_member, name: "arm${i}", baseType: ${this.type(arm)}, size: ${arm.kind === "bool" ? 8 : arm.kind === "f64" || arm.kind === "date" ? 64 : this.pointerBits})`)]);
125
+ const slot = this.add(`!DICompositeType(tag: DW_TAG_union_type, name: ${quoted(`${type.unionId}_value`)}, size: 64, elements: ${this.add(`!{${members.join(", ")}}`)})`);
126
+ const offset = this.pointerBits === 32 ? 24 : 40;
127
+ const fields = [
128
+ this.add(`!DIDerivedType(tag: DW_TAG_member, name: "tag", baseType: ${tag}, size: 32, offset: ${this.pointerBits})`),
129
+ this.add(`!DIDerivedType(tag: DW_TAG_member, name: "slot", baseType: ${slot}, size: 64, offset: ${offset * 8})`),
130
+ ];
131
+ id = this.pointer(this.add(`!DICompositeType(tag: DW_TAG_structure_type, name: ${quoted(`ScrUnion_${type.unionId}`)}, size: ${(offset + 8) * 8}, elements: ${this.add(`!{${fields.join(", ")}}`)})`));
132
+ break;
133
+ }
134
+ default:
135
+ // Do not invent object layouts: unsupported visualizations remain
136
+ // typed opaque pointers, never doubles read out of pointer slots.
137
+ id = this.pointer(this.add(`!DICompositeType(tag: DW_TAG_structure_type, name: ${quoted(key)}, flags: DIFlagFwdDecl)`));
138
+ }
139
+ this.types.set(key, id);
140
+ return id;
141
+ }
142
+ local(local, fn, arg = 0, captured = false) {
143
+ if (fn === null || local.source === undefined)
144
+ return null;
145
+ const pos = this.source.position(local.source.loc);
146
+ if (pos === null)
147
+ return null;
148
+ const scope = captured ? fn : this.scopeAt(local.source.scope, fn);
149
+ // Scalar forward captures use an array-backed TDZ box. Expose that
150
+ // exceptional representation opaquely rather than reporting a bad value.
151
+ const opaqueBox = local.boxed && local.tdz && (local.type.kind === "f64" || local.type.kind === "bool" || local.type.kind === "date");
152
+ const type = opaqueBox ? this.pointer(this.add('!DICompositeType(tag: DW_TAG_structure_type, name: "ScrBox", flags: DIFlagFwdDecl)')) : this.type(local.type);
153
+ const variable = this.add(`!DILocalVariable(name: ${quoted(local.name)}, ${arg === 0 ? "" : `arg: ${arg}, `}scope: ${scope}, file: ${this.file(pos.file)}, line: ${pos.line}, type: ${type})`);
154
+ // ScrBox.slot follows rc, kind, and three function pointers, aligned to
155
+ // uint64_t on both the native and wasm32 runtime ABIs.
156
+ const boxOffset = this.pointerBits === 32 ? 24 : 40;
157
+ const expression = local.boxed && !opaqueBox ? `!DIExpression(DW_OP_deref, DW_OP_plus_uconst, ${boxOffset})` : "!DIExpression()";
158
+ const location = this.add(`!DILocation(line: ${pos.line}, column: ${Math.min(pos.column, 65535)}, scope: ${scope})`);
159
+ return { variable, expression, location };
160
+ }
161
+ global(global) {
162
+ if (global.source === undefined)
163
+ return null;
164
+ const pos = this.source.position(global.source.loc);
165
+ if (pos === null)
166
+ return null;
167
+ const file = this.file(pos.file);
168
+ const unit = this.unit(pos.file);
169
+ const variable = this.add(`distinct !DIGlobalVariable(name: ${quoted(global.name)}, scope: ${unit.id}, file: ${file}, line: ${pos.line}, type: ${this.type(global.type)}, isLocal: true, isDefinition: true)`);
170
+ const expression = this.add(`!DIGlobalVariableExpression(var: ${variable}, expr: !DIExpression())`);
171
+ unit.globals.push(expression);
172
+ return expression;
173
+ }
174
+ location(loc, fn) {
175
+ if (fn === null)
176
+ return null;
177
+ const pos = this.source.position(loc);
178
+ if (pos === null)
179
+ return null;
180
+ // Initializers and compiler-generated entry wrappers can span files.
181
+ const lexical = this.scopeAt(loc, fn);
182
+ const scopeKey = `${lexical}:${pos.file}`;
183
+ let scope = this.scopes.get(scopeKey);
184
+ if (scope === undefined) {
185
+ scope = this.add(`!DILexicalBlockFile(scope: ${lexical}, file: ${this.file(pos.file)}, discriminator: 0)`);
186
+ this.scopes.set(scopeKey, scope);
187
+ }
188
+ const key = `${scope}:${pos.line}:${pos.column}`;
189
+ let id = this.locations.get(key);
190
+ if (id === undefined) {
191
+ id = this.add(`!DILocation(line: ${pos.line}, column: ${Math.min(pos.column, 65535)}, scope: ${scope})`);
192
+ this.locations.set(key, id);
193
+ }
194
+ return id;
195
+ }
196
+ render() {
197
+ for (const unit of this.units.values()) {
198
+ this.nodes[Number(unit.globalList.slice(1))] = `${unit.globalList} = !{${unit.globals.join(", ")}}`;
199
+ }
200
+ return [`!llvm.dbg.cu = !{${[...this.units.values()].map((unit) => unit.id).join(", ")}}`, `!llvm.module.flags = !{${this.version}, ${this.dwarf}}`, ...this.nodes].join("\n");
201
+ }
202
+ }
203
+ //# sourceMappingURL=debug-info.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug-info.js","sourceRoot":"","sources":["../../../src/backend/llvm/debug-info.ts"],"names":[],"mappings":"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"}
@@ -2157,7 +2157,7 @@ export class LlDyn {
2157
2157
  B.terminate(`ret ptr ${r}`);
2158
2158
  B.startBlock(lNext);
2159
2159
  }
2160
- // OBJ: the own member (+1) or the undefined singleton.
2160
+ // OBJ: the own member or the inherited builtin Error constructor.
2161
2161
  {
2162
2162
  const isObj = B.tmp();
2163
2163
  B.line(`${isObj} = icmp eq i32 ${kd}, ${DYN_KIND.OBJ}`);
@@ -2165,15 +2165,9 @@ export class LlDyn {
2165
2165
  const lNext = B.newLabel("kg.n");
2166
2166
  B.condBr(isObj, lObj, lNext);
2167
2167
  B.startBlock(lObj);
2168
- host.declare(`declare ptr @scr_dyn_obj_get(ptr, ptr, ${host.sizeType})`);
2169
- const m = B.tmp();
2170
- B.line(`${m} = call ptr @scr_dyn_obj_get(ptr %d, ptr ${kParts.data}, ${host.sizeType} ${kParts.len})`);
2171
- const has = B.tmp();
2172
- B.line(`${has} = icmp ne ptr ${m}, null`);
2173
- const u = this.undef(B);
2174
- const sel = B.tmp();
2175
- B.line(`${sel} = select i1 ${has}, ptr ${m}, ptr ${u}`);
2176
- const r = this.retainDyn(B, sel);
2168
+ host.declare(`declare ptr @scr_dyn_obj_read(ptr, ptr, ${host.sizeType})`);
2169
+ const r = B.tmp();
2170
+ B.line(`${r} = call ptr @scr_dyn_obj_read(ptr %d, ptr ${kParts.data}, ${host.sizeType} ${kParts.len})`);
2177
2171
  B.terminate(`ret ptr ${r}`);
2178
2172
  B.startBlock(lNext);
2179
2173
  }