@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.
- package/ambient/scriptc-node-fallback.d.ts +59 -14
- package/dist/backend/c/async.d.ts +5 -0
- package/dist/backend/c/async.js +57 -0
- package/dist/backend/c/async.js.map +1 -1
- package/dist/backend/c/c-emitter.d.ts +3 -0
- package/dist/backend/c/c-emitter.js +15 -8
- package/dist/backend/c/c-emitter.js.map +1 -1
- package/dist/backend/c/exprs.d.ts +8 -1
- package/dist/backend/c/exprs.js +152 -9
- package/dist/backend/c/exprs.js.map +1 -1
- package/dist/backend/c/shapes.js +15 -13
- package/dist/backend/c/shapes.js.map +1 -1
- package/dist/backend/c/types.d.ts +4 -0
- package/dist/backend/c/types.js +18 -1
- package/dist/backend/c/types.js.map +1 -1
- package/dist/backend/c/types.test.js +8 -1
- package/dist/backend/c/types.test.js.map +1 -1
- package/dist/backend/c/walkers.js +32 -11
- package/dist/backend/c/walkers.js.map +1 -1
- package/dist/backend/json-literal.d.ts +7 -0
- package/dist/backend/json-literal.js +17 -0
- package/dist/backend/json-literal.js.map +1 -0
- package/dist/backend/json-literal.test.d.ts +1 -0
- package/dist/backend/json-literal.test.js +17 -0
- package/dist/backend/json-literal.test.js.map +1 -0
- package/dist/backend/link-plan.d.ts +1 -1
- package/dist/backend/link-plan.js +5 -1
- package/dist/backend/link-plan.js.map +1 -1
- package/dist/backend/llvm/classes.js +8 -7
- package/dist/backend/llvm/classes.js.map +1 -1
- package/dist/backend/llvm/common.d.ts +4 -0
- package/dist/backend/llvm/common.js +6 -0
- package/dist/backend/llvm/common.js.map +1 -1
- package/dist/backend/llvm/common.test.d.ts +1 -0
- package/dist/backend/llvm/common.test.js +9 -0
- package/dist/backend/llvm/common.test.js.map +1 -0
- package/dist/backend/llvm/dyn.d.ts +4 -0
- package/dist/backend/llvm/dyn.js +24 -13
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emitter.js +35 -7
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/expr-context.d.ts +4 -0
- package/dist/backend/llvm/expr-dynamic.js +9 -0
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.js +8 -0
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-records.js +3 -3
- package/dist/backend/llvm/expr-records.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.js +2 -1
- package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
- package/dist/backend/llvm/expr-stream-callbacks.d.ts +3 -0
- package/dist/backend/llvm/expr-stream-callbacks.js +53 -0
- package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
- package/dist/backend/llvm/lib-dispatch.js +22 -0
- package/dist/backend/llvm/lib-dispatch.js.map +1 -1
- package/dist/backend/llvm/lib-process.js +50 -5
- package/dist/backend/llvm/lib-process.js.map +1 -1
- package/dist/backend/llvm/lib-shared.js +46 -0
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/shapes.js +10 -8
- package/dist/backend/llvm/shapes.js.map +1 -1
- package/dist/backend/llvm/walkers.js +7 -5
- package/dist/backend/llvm/walkers.js.map +1 -1
- package/dist/backend/native-link-info.d.ts +2 -1
- package/dist/backend/native-link-info.js +4 -0
- package/dist/backend/native-link-info.js.map +1 -1
- package/dist/backend/native-link-info.test.js +24 -1
- package/dist/backend/native-link-info.test.js.map +1 -1
- package/dist/backend/native-toolchain.d.ts +8 -6
- package/dist/backend/native-toolchain.js +28 -13
- package/dist/backend/native-toolchain.js.map +1 -1
- package/dist/backend/native-toolchain.test.js +36 -1
- package/dist/backend/native-toolchain.test.js.map +1 -1
- package/dist/backend/runtime-pack-targets.test.js +1 -1
- package/dist/backend/runtime-pack-targets.test.js.map +1 -1
- package/dist/backend/runtime-pack.test.js +1 -0
- package/dist/backend/runtime-pack.test.js.map +1 -1
- package/dist/backend/targets.d.ts +5 -0
- package/dist/backend/targets.js +9 -0
- package/dist/backend/targets.js.map +1 -1
- package/dist/backend/targets.test.js +6 -1
- package/dist/backend/targets.test.js.map +1 -1
- package/dist/coverage/surface-manifest.js +1 -0
- package/dist/coverage/surface-manifest.js.map +1 -1
- package/dist/diagnostics/diagnostic.js +3 -3
- package/dist/diagnostics/diagnostic.js.map +1 -1
- package/dist/executable/executable-cache.d.ts +1 -0
- package/dist/executable/executable-cache.js +1 -0
- package/dist/executable/executable-cache.js.map +1 -1
- package/dist/executable/executable-cache.test.js +1 -0
- package/dist/executable/executable-cache.test.js.map +1 -1
- package/dist/frontend/lowering/containers/bytes.d.ts +0 -4
- package/dist/frontend/lowering/containers/bytes.js +112 -28
- package/dist/frontend/lowering/containers/bytes.js.map +1 -1
- package/dist/frontend/lowering/lower-assert.js +16 -10
- package/dist/frontend/lowering/lower-assert.js.map +1 -1
- package/dist/frontend/lowering/lower-builtins.d.ts +22 -21
- package/dist/frontend/lowering/lower-builtins.js +392 -67
- package/dist/frontend/lowering/lower-builtins.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.d.ts +8 -6
- package/dist/frontend/lowering/lower-calls.js +110 -12
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-containers.js +12 -8
- package/dist/frontend/lowering/lower-containers.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.js +104 -5
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-inspect.js +7 -0
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.js +8 -0
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.d.ts +5 -4
- package/dist/frontend/lowering/lower-stmts.js +23 -6
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +4 -4
- package/dist/frontend/lowering/lowerer.js +5 -5
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/surfaces.d.ts +5 -3
- package/dist/frontend/lowering/surfaces.js +33 -13
- package/dist/frontend/lowering/surfaces.js.map +1 -1
- package/dist/frontend/npm-static-declarations.js +27 -14
- package/dist/frontend/npm-static-declarations.js.map +1 -1
- package/dist/frontend/npm-static-declarations.test.js +10 -0
- package/dist/frontend/npm-static-declarations.test.js.map +1 -1
- package/dist/frontend/program.js +18 -2
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/resolve.d.ts +22 -7
- package/dist/frontend/resolve.js +83 -22
- package/dist/frontend/resolve.js.map +1 -1
- package/dist/frontend/resolve.test.js +21 -1
- package/dist/frontend/resolve.test.js.map +1 -1
- package/dist/frontend/type-mapper.js +52 -10
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/ir/analysis.js +1 -0
- package/dist/ir/analysis.js.map +1 -1
- package/dist/ir/ir.d.ts +67 -24
- package/dist/ir/ir.js +81 -3
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/serialize.d.ts +1 -1
- package/dist/ir/serialize.js +1 -1
- package/dist/ir/validate.js +77 -5
- package/dist/ir/validate.js.map +1 -1
- package/dist/library/int-infer.test.js +4 -4
- package/dist/library/library-cache.d.ts +1 -0
- package/dist/library/library-cache.js +1 -0
- package/dist/library/library-cache.js.map +1 -1
- package/dist/library/library-cache.test.js +18 -5
- package/dist/library/library-cache.test.js.map +1 -1
- package/package.json +17 -17
- 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;
|
package/dist/backend/llvm/dyn.js
CHANGED
|
@@ -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
|
-
|
|
1211
|
-
if (
|
|
1212
|
-
|
|
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.
|
|
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 @
|
|
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;
|