@scriptc/compiler 0.0.36 → 0.1.2
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 +52 -22
- package/ambient/scriptc-overrides.d.ts +0 -7
- package/ambient/scriptc.d.ts +3 -2
- package/dist/backend/build-cache.js.map +1 -1
- package/dist/backend/c/async.js +24 -2
- package/dist/backend/c/async.js.map +1 -1
- package/dist/backend/c/c-emitter.d.ts +22 -10
- package/dist/backend/c/c-emitter.js +60 -15
- package/dist/backend/c/c-emitter.js.map +1 -1
- package/dist/backend/c/exprs.js +289 -55
- package/dist/backend/c/exprs.js.map +1 -1
- package/dist/backend/c/island.js.map +1 -1
- package/dist/backend/c/may-throw.js +3 -0
- package/dist/backend/c/may-throw.js.map +1 -1
- package/dist/backend/c/stmts.d.ts +3 -5
- package/dist/backend/c/stmts.js +76 -17
- package/dist/backend/c/stmts.js.map +1 -1
- package/dist/backend/c/types.js.map +1 -1
- package/dist/backend/c/walkers.js +36 -12
- package/dist/backend/c/walkers.js.map +1 -1
- package/dist/backend/external-c.d.ts +33 -0
- package/dist/backend/external-c.js +51 -0
- package/dist/backend/external-c.js.map +1 -0
- package/dist/backend/link-plan.d.ts +37 -0
- package/dist/backend/link-plan.js +26 -0
- package/dist/backend/link-plan.js.map +1 -0
- package/dist/backend/linker.d.ts +22 -0
- package/dist/backend/linker.js +236 -0
- package/dist/backend/linker.js.map +1 -0
- package/dist/backend/llvm/blocks.js.map +1 -1
- package/dist/backend/llvm/dyn.js +63 -3
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emitter.js +132 -26
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/expr-async.js +85 -3
- package/dist/backend/llvm/expr-async.js.map +1 -1
- package/dist/backend/llvm/expr-bytes.js.map +1 -1
- package/dist/backend/llvm/expr-calls.js.map +1 -1
- package/dist/backend/llvm/expr-containers.js +68 -54
- package/dist/backend/llvm/expr-containers.js.map +1 -1
- package/dist/backend/llvm/expr-context.d.ts +2 -1
- package/dist/backend/llvm/expr-control.js.map +1 -1
- package/dist/backend/llvm/expr-dispatch.js +2 -0
- package/dist/backend/llvm/expr-dispatch.js.map +1 -1
- package/dist/backend/llvm/expr-dynamic.js +6 -3
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-island.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.d.ts +1 -1
- package/dist/backend/llvm/expr-primitives.js +20 -0
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-records.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.js +245 -10
- package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
- package/dist/backend/llvm/lib-dispatch.js +2 -0
- package/dist/backend/llvm/lib-dispatch.js.map +1 -1
- package/dist/backend/llvm/lib-shared.js +18 -0
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/lib-stream.js +6 -3
- package/dist/backend/llvm/lib-stream.js.map +1 -1
- package/dist/backend/llvm/split.js.map +1 -1
- package/dist/backend/llvm/unsupported.js.map +1 -1
- package/dist/backend/llvm/walkers.js +31 -4
- package/dist/backend/llvm/walkers.js.map +1 -1
- package/dist/backend/native-codegen.d.ts +8 -1
- package/dist/backend/native-codegen.js +39 -25
- package/dist/backend/native-codegen.js.map +1 -1
- package/dist/backend/native-codegen.test.js +44 -4
- package/dist/backend/native-codegen.test.js.map +1 -1
- package/dist/backend/native-link-info.d.ts +1 -1
- package/dist/backend/native-link-info.js +42 -18
- package/dist/backend/native-link-info.js.map +1 -1
- package/dist/backend/native-toolchain.js.map +1 -1
- package/dist/backend/native-toolchain.test.js +5 -1
- package/dist/backend/native-toolchain.test.js.map +1 -1
- package/dist/backend/runtime-pack-targets.test.d.ts +1 -0
- package/dist/backend/runtime-pack-targets.test.js +54 -0
- package/dist/backend/runtime-pack-targets.test.js.map +1 -0
- package/dist/backend/runtime-pack.d.ts +5 -30
- package/dist/backend/runtime-pack.js +46 -141
- package/dist/backend/runtime-pack.js.map +1 -1
- package/dist/backend/runtime-pack.test.js +49 -14
- package/dist/backend/runtime-pack.test.js.map +1 -1
- package/dist/backend/targets.d.ts +63 -17
- package/dist/backend/targets.js +251 -35
- package/dist/backend/targets.js.map +1 -1
- package/dist/backend/targets.test.js +27 -5
- package/dist/backend/targets.test.js.map +1 -1
- package/dist/backend/vendor-archives.js.map +1 -1
- package/dist/compat/fetch-profile.js +4 -2
- package/dist/compat/fetch-profile.js.map +1 -1
- package/dist/coverage/report.js.map +1 -1
- package/dist/coverage/surface-manifest.js +22 -1
- package/dist/coverage/surface-manifest.js.map +1 -1
- package/dist/diagnostics/diagnostic.d.ts +6 -5
- package/dist/diagnostics/diagnostic.js +7 -6
- package/dist/diagnostics/diagnostic.js.map +1 -1
- package/dist/diagnostics/render.js.map +1 -1
- package/dist/ffi/ffi-manifest.js.map +1 -1
- package/dist/frontend/cjs-lexer.js.map +1 -1
- package/dist/frontend/dts-paths.js.map +1 -1
- package/dist/frontend/input-tracker.d.ts +10 -0
- package/dist/frontend/input-tracker.js +26 -3
- package/dist/frontend/input-tracker.js.map +1 -1
- package/dist/frontend/input-tracker.test.js +8 -1
- package/dist/frontend/input-tracker.test.js.map +1 -1
- package/dist/frontend/lib-contract.js.map +1 -1
- package/dist/frontend/lowering/array-values.d.ts +12 -0
- package/dist/frontend/lowering/array-values.js +76 -0
- package/dist/frontend/lowering/array-values.js.map +1 -0
- package/dist/frontend/lowering/callback-arg.js.map +1 -1
- package/dist/frontend/lowering/containers/bytes.d.ts +35 -0
- package/dist/frontend/lowering/containers/bytes.js +1021 -0
- package/dist/frontend/lowering/containers/bytes.js.map +1 -0
- package/dist/frontend/lowering/containers/string-and-regexp.d.ts +17 -0
- package/dist/frontend/lowering/containers/string-and-regexp.js +345 -0
- package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -0
- package/dist/frontend/lowering/expressions/evaluation-safety.d.ts +13 -0
- package/dist/frontend/lowering/expressions/evaluation-safety.js +76 -0
- package/dist/frontend/lowering/expressions/evaluation-safety.js.map +1 -0
- package/dist/frontend/lowering/expressions/object-literals.d.ts +44 -0
- package/dist/frontend/lowering/expressions/object-literals.js +1815 -0
- package/dist/frontend/lowering/expressions/object-literals.js.map +1 -0
- package/dist/frontend/lowering/expressions/optional-chains.d.ts +31 -0
- package/dist/frontend/lowering/expressions/optional-chains.js +382 -0
- package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -0
- package/dist/frontend/lowering/expressions/try-lower-expression.d.ts +7 -0
- package/dist/frontend/lowering/expressions/try-lower-expression.js +26 -0
- package/dist/frontend/lowering/expressions/try-lower-expression.js.map +1 -0
- package/dist/frontend/lowering/lib-boundary.js +7 -2
- package/dist/frontend/lowering/lib-boundary.js.map +1 -1
- package/dist/frontend/lowering/lower-array-sort.d.ts +22 -0
- package/dist/frontend/lowering/lower-array-sort.js +619 -0
- package/dist/frontend/lowering/lower-array-sort.js.map +1 -0
- package/dist/frontend/lowering/lower-assert.js.map +1 -1
- package/dist/frontend/lowering/lower-async-iteration.d.ts +7 -0
- package/dist/frontend/lowering/lower-async-iteration.js +657 -0
- package/dist/frontend/lowering/lower-async-iteration.js.map +1 -0
- package/dist/frontend/lowering/lower-builtins.d.ts +18 -0
- package/dist/frontend/lowering/lower-builtins.js +379 -48
- package/dist/frontend/lowering/lower-builtins.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.d.ts +16 -8
- package/dist/frontend/lowering/lower-calls.js +667 -91
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.d.ts +7 -13
- package/dist/frontend/lowering/lower-classes.js +128 -35
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-comptime.js.map +1 -1
- package/dist/frontend/lowering/lower-containers.d.ts +1 -47
- package/dist/frontend/lowering/lower-containers.js +779 -2038
- package/dist/frontend/lowering/lower-containers.js.map +1 -1
- package/dist/frontend/lowering/lower-event-emitter.js +51 -5
- package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.d.ts +4 -78
- package/dist/frontend/lowering/lower-exprs.js +1128 -2409
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-generators.d.ts +18 -3
- package/dist/frontend/lowering/lower-generators.js +145 -9
- package/dist/frontend/lowering/lower-generators.js.map +1 -1
- package/dist/frontend/lowering/lower-inspect.js +50 -36
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-island.d.ts +11 -4
- package/dist/frontend/lowering/lower-island.js +47 -10
- package/dist/frontend/lowering/lower-island.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.js +52 -15
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-node-module.d.ts +18 -0
- package/dist/frontend/lowering/lower-node-module.js +302 -0
- package/dist/frontend/lowering/lower-node-module.js.map +1 -0
- package/dist/frontend/lowering/lower-server.js +11 -1
- package/dist/frontend/lowering/lower-server.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.d.ts +5 -24
- package/dist/frontend/lowering/lower-stmts.js +811 -314
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lower-stream.js +4 -4
- package/dist/frontend/lowering/lower-stream.js.map +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +109 -34
- package/dist/frontend/lowering/lowerer.js +1225 -62
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/optional-arguments.d.ts +9 -0
- package/dist/frontend/lowering/optional-arguments.js +57 -0
- package/dist/frontend/lowering/optional-arguments.js.map +1 -0
- package/dist/frontend/lowering/surfaces.d.ts +10 -2
- package/dist/frontend/lowering/surfaces.js +15 -3
- package/dist/frontend/lowering/surfaces.js.map +1 -1
- package/dist/frontend/npm-static-declarations.d.ts +35 -0
- package/dist/frontend/npm-static-declarations.js +506 -0
- package/dist/frontend/npm-static-declarations.js.map +1 -0
- package/dist/frontend/npm-static-declarations.test.d.ts +1 -0
- package/dist/frontend/npm-static-declarations.test.js +122 -0
- package/dist/frontend/npm-static-declarations.test.js.map +1 -0
- package/dist/frontend/npm-static.d.ts +2 -0
- package/dist/frontend/npm-static.js +26 -10
- package/dist/frontend/npm-static.js.map +1 -1
- package/dist/frontend/npm.d.ts +60 -0
- package/dist/frontend/npm.js +38 -4
- package/dist/frontend/npm.js.map +1 -1
- package/dist/frontend/npm.test.d.ts +1 -0
- package/dist/frontend/npm.test.js +50 -0
- package/dist/frontend/npm.test.js.map +1 -0
- package/dist/frontend/program.d.ts +3 -2
- package/dist/frontend/program.js +495 -68
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/resolve.d.ts +10 -2
- package/dist/frontend/resolve.js +90 -14
- package/dist/frontend/resolve.js.map +1 -1
- package/dist/frontend/resolve.test.js +4 -1
- package/dist/frontend/resolve.test.js.map +1 -1
- package/dist/frontend/runtime-resolve.d.ts +22 -0
- package/dist/frontend/runtime-resolve.js +101 -0
- package/dist/frontend/runtime-resolve.js.map +1 -0
- package/dist/frontend/runtime-resolve.test.d.ts +1 -0
- package/dist/frontend/runtime-resolve.test.js +18 -0
- package/dist/frontend/runtime-resolve.test.js.map +1 -0
- package/dist/frontend/ts7/adapter.js +12 -13
- package/dist/frontend/ts7/adapter.js.map +1 -1
- package/dist/frontend/ts7/ast.js.map +1 -1
- package/dist/frontend/ts7/census-check.js +3 -3
- package/dist/frontend/ts7/census-check.js.map +1 -1
- package/dist/frontend/ts7/checker.d.ts +3 -0
- package/dist/frontend/ts7/checker.js +12 -3
- package/dist/frontend/ts7/checker.js.map +1 -1
- package/dist/frontend/ts7/enums.js.map +1 -1
- package/dist/frontend/ts7/program-adapter.js +42 -3
- package/dist/frontend/ts7/program-adapter.js.map +1 -1
- package/dist/frontend/type-mapper.js +120 -7
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.js +50 -28
- package/dist/index.js.map +1 -1
- package/dist/ir/analysis.js.map +1 -1
- package/dist/ir/ir.d.ts +125 -41
- package/dist/ir/ir.js +82 -31
- 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 +127 -95
- package/dist/ir/validate.js.map +1 -1
- package/dist/library/cache-primitives.js.map +1 -1
- package/dist/library/cache-reset.test.js.map +1 -1
- package/dist/library/compiler-self-identity.js.map +1 -1
- package/dist/library/fence-eval.js +3 -1
- package/dist/library/fence-eval.js.map +1 -1
- package/dist/library/int-infer.js +12 -1
- package/dist/library/int-infer.js.map +1 -1
- package/dist/library/int-infer.test.js +4 -4
- package/dist/library/int-infer.test.js.map +1 -1
- package/dist/library/library-cache.test.js +5 -5
- package/dist/library/library-profile.js.map +1 -1
- package/dist/library/sidecar-validate.js.map +1 -1
- package/dist/library/sidecar.js.map +1 -1
- package/dist/startup-cache.d.ts +9 -1
- package/dist/startup-cache.js +16 -1
- package/dist/startup-cache.js.map +1 -1
- package/dist/wasi-paths.js.map +1 -1
- package/package.json +18 -5
- package/surface-manifest.json +64 -8
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
/** Platform-linker invocation for a previously created native link plan.
|
|
2
|
+
*
|
|
3
|
+
* No source file is accepted here. That makes it mechanically impossible
|
|
4
|
+
* for the helper/runtime-pack executable route to compile generated or
|
|
5
|
+
* runtime C as part of linking.
|
|
6
|
+
*/
|
|
7
|
+
import { execFile } from "node:child_process";
|
|
8
|
+
import { createHash, randomUUID } from "node:crypto";
|
|
9
|
+
import { existsSync, realpathSync, statSync } from "node:fs";
|
|
10
|
+
import { mkdtemp, rename, rm, stat } from "node:fs/promises";
|
|
11
|
+
import { delimiter } from "node:path";
|
|
12
|
+
import { basename, dirname, isAbsolute, join, resolve } from "node:path";
|
|
13
|
+
import { promisify } from "node:util";
|
|
14
|
+
import { CcCompileError, nativeArtifactDependenciesStillMatch, parseLinkTraceFiles, subprocessFailureDetail, toolchainEnvironmentCachePolicy, toolchainEnvironmentFingerprint, } from "./native-toolchain.js";
|
|
15
|
+
import { RuntimePackError, stageRuntimePackArtifacts } from "./runtime-pack.js";
|
|
16
|
+
const execFileAsync = promisify(execFile);
|
|
17
|
+
/** The linker (or linker driver) is independent from SCRIPTC_CC. A plain
|
|
18
|
+
* `clang` is the initial macOS driver because it locates the selected SDK and
|
|
19
|
+
* CRT inputs; it receives only objects and archives on this route. */
|
|
20
|
+
export function resolvePlatformLinker(env = process.env, defaultLinker = "clang") {
|
|
21
|
+
return env["SCRIPTC_LINKER"] || defaultLinker;
|
|
22
|
+
}
|
|
23
|
+
/** Exact executable selected for a linker spelling. The object-only route
|
|
24
|
+
* must still invalidate an early executable when a new `clang` appears ahead
|
|
25
|
+
* of an unchanged PATH entry; relying on the string "clang" would restore a
|
|
26
|
+
* binary past a wrapper that injects link inputs. */
|
|
27
|
+
function platformLinkerIdentity(env, linker = resolvePlatformLinker(env)) {
|
|
28
|
+
const hasSeparator = linker.includes("/") || linker.includes("\\");
|
|
29
|
+
const pathEntries = hasSeparator
|
|
30
|
+
? [""]
|
|
31
|
+
: (env["PATH"] ?? "/usr/bin:/bin").split(delimiter);
|
|
32
|
+
const extensions = process.platform === "win32" && !/\.[^/\\]+$/.test(linker)
|
|
33
|
+
? (env["PATHEXT"] ?? ".COM;.EXE;.BAT;.CMD").split(";")
|
|
34
|
+
: [""];
|
|
35
|
+
for (const entry of pathEntries) {
|
|
36
|
+
const base = hasSeparator
|
|
37
|
+
? (isAbsolute(linker) ? linker : resolve(linker))
|
|
38
|
+
: join(entry === "" ? process.cwd() : entry, linker);
|
|
39
|
+
for (const extension of extensions) {
|
|
40
|
+
const candidate = `${base}${extension}`;
|
|
41
|
+
try {
|
|
42
|
+
if (!existsSync(candidate))
|
|
43
|
+
continue;
|
|
44
|
+
const canonical = realpathSync(candidate);
|
|
45
|
+
const info = statSync(canonical);
|
|
46
|
+
if (!info.isFile())
|
|
47
|
+
continue;
|
|
48
|
+
return [canonical, info.dev, info.ino, info.size, info.mtimeMs, info.ctimeMs].join("\0");
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
// Keep searching PATH exactly as process spawning does.
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return `<unresolved:${linker}>`;
|
|
56
|
+
}
|
|
57
|
+
/** Cache-route identity for an object-only platform-link invocation. The
|
|
58
|
+
* complete executable cache additionally records and revalidates the
|
|
59
|
+
* linker's resolved SDK/CRT inputs before it restores an executable. This
|
|
60
|
+
* deliberately performs no synthetic C compilation: the linker receives
|
|
61
|
+
* only the helper-produced program object and runtime-pack artifacts. */
|
|
62
|
+
export async function executableLinkerEnvironmentFingerprint(env = process.env, defaultLinker = "clang") {
|
|
63
|
+
const linker = resolvePlatformLinker(env, defaultLinker);
|
|
64
|
+
const linkerIdentity = platformLinkerIdentity(env);
|
|
65
|
+
let effectiveDriverIdentity;
|
|
66
|
+
try {
|
|
67
|
+
const selected = await execFileAsync(linker, ["-print-prog-name=clang"], {
|
|
68
|
+
env,
|
|
69
|
+
maxBuffer: 16 * 1024 * 1024,
|
|
70
|
+
});
|
|
71
|
+
const selectedDriver = selected.stdout.trim();
|
|
72
|
+
if (selectedDriver === "")
|
|
73
|
+
throw new Error("linker driver reported no effective clang");
|
|
74
|
+
effectiveDriverIdentity = platformLinkerIdentity(env, selectedDriver);
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
// A driver that cannot expose its effective clang may still link correctly,
|
|
78
|
+
// but the trusted default cannot safely address an existing early
|
|
79
|
+
// executable entry. Explicit drivers never publish complete executables,
|
|
80
|
+
// so their own file identity remains a sufficient stable partial-cache key.
|
|
81
|
+
effectiveDriverIdentity = env["SCRIPTC_LINKER"] === undefined
|
|
82
|
+
? `<unavailable:${linker}:${randomUUID()}>`
|
|
83
|
+
: `<unavailable:${linker}>`;
|
|
84
|
+
}
|
|
85
|
+
const hash = createHash("sha256")
|
|
86
|
+
.update("executable-linker-environment-v2\0")
|
|
87
|
+
.update(toolchainEnvironmentFingerprint(env)).update("\0")
|
|
88
|
+
.update(linkerIdentity).update("\0")
|
|
89
|
+
.update(effectiveDriverIdentity).update("\0");
|
|
90
|
+
for (const name of ["PATH", "SCRIPTC_FETCH_CURL", "SCRIPTC_TEST_RUNTIME_SRC_DIR"]) {
|
|
91
|
+
const value = env[name];
|
|
92
|
+
hash.update(name).update(value === undefined ? "\0unset\0" : "\0set\0").update(value ?? "").update("\0");
|
|
93
|
+
}
|
|
94
|
+
return hash.digest("hex");
|
|
95
|
+
}
|
|
96
|
+
/** Whether the object-only linker route can publish a whole executable cache
|
|
97
|
+
* entry. The current proof machinery trusts only the direct default driver;
|
|
98
|
+
* a caller-selected SCRIPTC_LINKER may be a wrapper with hidden inputs. */
|
|
99
|
+
export function platformLinkerSupportsPersistentCache(env = process.env, target) {
|
|
100
|
+
if (target !== undefined && target.platform !== "darwin")
|
|
101
|
+
return false;
|
|
102
|
+
// The Apple system shim is a stable front door to the active SDK/linker;
|
|
103
|
+
// linkNativeExecutable snapshots the selected transitive inputs before it
|
|
104
|
+
// publishes the final cache entry. A PATH wrapper is intentionally opaque.
|
|
105
|
+
return env["SCRIPTC_LINKER"] === undefined &&
|
|
106
|
+
toolchainEnvironmentCachePolicy(env).completeArtifacts &&
|
|
107
|
+
platformLinkerIdentity(env).startsWith("/usr/bin/clang\0");
|
|
108
|
+
}
|
|
109
|
+
async function snapshotDependencies(paths) {
|
|
110
|
+
const { lstat, realpath } = await import("node:fs/promises");
|
|
111
|
+
return Promise.all([...new Set(paths.map((path) => resolve(path)))].sort().map(async (path) => {
|
|
112
|
+
const info = await lstat(path);
|
|
113
|
+
const kind = info.isFile() ? "file" : info.isDirectory() ? "directory" : "symlink";
|
|
114
|
+
const dependency = {
|
|
115
|
+
path,
|
|
116
|
+
kind,
|
|
117
|
+
dev: Number(info.dev), ino: Number(info.ino), size: Number(info.size),
|
|
118
|
+
mtimeMs: Number(info.mtimeMs), ctimeMs: Number(info.ctimeMs),
|
|
119
|
+
};
|
|
120
|
+
if (kind === "symlink") {
|
|
121
|
+
const targetPath = await realpath(path);
|
|
122
|
+
const target = await stat(path);
|
|
123
|
+
const targetKind = target.isFile() ? "file" : target.isDirectory() ? "directory" : null;
|
|
124
|
+
if (targetKind === null)
|
|
125
|
+
throw new Error(`unsupported linker dependency: ${path}`);
|
|
126
|
+
dependency.targetPath = targetPath;
|
|
127
|
+
dependency.targetKind = targetKind;
|
|
128
|
+
dependency.targetDev = Number(target.dev);
|
|
129
|
+
dependency.targetIno = Number(target.ino);
|
|
130
|
+
dependency.targetSize = Number(target.size);
|
|
131
|
+
dependency.targetMtimeMs = Number(target.mtimeMs);
|
|
132
|
+
dependency.targetCtimeMs = Number(target.ctimeMs);
|
|
133
|
+
}
|
|
134
|
+
return dependency;
|
|
135
|
+
}));
|
|
136
|
+
}
|
|
137
|
+
/** Resolve platform SDK/CRT inputs from the actual object-only link line.
|
|
138
|
+
*
|
|
139
|
+
* This intentionally avoids native-toolchain's C-driver probe: the program
|
|
140
|
+
* object and staged runtime pack already give the linker everything it needs
|
|
141
|
+
* for a faithful dry/trace link. Besides keeping the Phase 5 boundary
|
|
142
|
+
* honest, this observes driver options injected only at link time. */
|
|
143
|
+
async function objectLinkerDependencyPaths(linker, args, cwd, excludedRoots) {
|
|
144
|
+
const [reportedLinker, dryRun, trace] = await Promise.all([
|
|
145
|
+
execFileAsync(linker, ["-print-prog-name=ld"], { cwd, maxBuffer: 16 * 1024 * 1024 }),
|
|
146
|
+
execFileAsync(linker, [...args, "-###"], { cwd, maxBuffer: 32 * 1024 * 1024 }),
|
|
147
|
+
execFileAsync(linker, [...args, "-Wl,-t"], { cwd, maxBuffer: 32 * 1024 * 1024 }),
|
|
148
|
+
]);
|
|
149
|
+
const paths = new Set();
|
|
150
|
+
const add = async (candidate) => {
|
|
151
|
+
const path = resolve(cwd, candidate.trim());
|
|
152
|
+
if (path === "")
|
|
153
|
+
return;
|
|
154
|
+
const info = await stat(path).catch(() => null);
|
|
155
|
+
if (info?.isFile())
|
|
156
|
+
paths.add(path);
|
|
157
|
+
};
|
|
158
|
+
await add(reportedLinker.stdout.trim());
|
|
159
|
+
for (const path of await parseLinkTraceFiles(`${dryRun.stdout}\n${dryRun.stderr}`, cwd, cwd, true))
|
|
160
|
+
paths.add(path);
|
|
161
|
+
for (const path of await parseLinkTraceFiles(`${trace.stdout}\n${trace.stderr}`, cwd, cwd))
|
|
162
|
+
paths.add(path);
|
|
163
|
+
const normalizedRoots = excludedRoots.map((root) => resolve(root));
|
|
164
|
+
return [...paths].filter((path) => !normalizedRoots.some((root) => path === root || path.startsWith(`${root}/`) || path.startsWith(`${root}\\`))).sort();
|
|
165
|
+
}
|
|
166
|
+
export async function linkNativeExecutable(plan, options = {}) {
|
|
167
|
+
const explicitLinker = options.linker ?? process.env["SCRIPTC_LINKER"];
|
|
168
|
+
const linker = explicitLinker ?? plan.target.defaultLinker;
|
|
169
|
+
// ld64 derives an ad-hoc signature identifier from the output basename.
|
|
170
|
+
// Keep that basename caller-visible while a private sibling directory gives
|
|
171
|
+
// the link its own inode and preserves an atomic same-filesystem install.
|
|
172
|
+
const privateOutRoot = await mkdtemp(join(dirname(plan.outputPath), ".scriptc-runtime-pack-link-"));
|
|
173
|
+
const privateOut = join(privateOutRoot, basename(plan.outputPath));
|
|
174
|
+
let stagedRoot = null;
|
|
175
|
+
try {
|
|
176
|
+
const staged = await stageRuntimePackArtifacts(plan.runtimePack);
|
|
177
|
+
stagedRoot = staged.root;
|
|
178
|
+
const args = [
|
|
179
|
+
...(explicitLinker === undefined ? plan.target.defaultLinkerArgs : []),
|
|
180
|
+
...plan.driverFlags,
|
|
181
|
+
...plan.inputs.map((input) => staged.replacements.get(input) ?? input),
|
|
182
|
+
...plan.systemLibraries.map((name) => `-l${name}`),
|
|
183
|
+
"-o", privateOut,
|
|
184
|
+
];
|
|
185
|
+
// The pack snapshots bracket both verification passes and private staging;
|
|
186
|
+
// the program-object snapshot begins before helper emission. Snapshot the
|
|
187
|
+
// remaining cache-bearing inputs before the linker consumes them, then
|
|
188
|
+
// require the complete set to remain stable through publication.
|
|
189
|
+
const inheritedDependencies = [
|
|
190
|
+
...plan.runtimePack.sourceDependencies,
|
|
191
|
+
...plan.programObjectDependencies,
|
|
192
|
+
];
|
|
193
|
+
const inheritedDependencyPaths = new Set(inheritedDependencies.map((dependency) => resolve(dependency.path)));
|
|
194
|
+
const additionalDependencyPaths = plan.dependencyPaths.filter((path) => !inheritedDependencyPaths.has(resolve(path)));
|
|
195
|
+
const preLinkDependencies = options.onArtifactReady === undefined ||
|
|
196
|
+
!(await nativeArtifactDependenciesStillMatch(inheritedDependencies).catch(() => false))
|
|
197
|
+
? null
|
|
198
|
+
: await objectLinkerDependencyPaths(linker, args, privateOutRoot, [
|
|
199
|
+
privateOutRoot,
|
|
200
|
+
staged.root,
|
|
201
|
+
...plan.inputs,
|
|
202
|
+
])
|
|
203
|
+
.then(async (toolchain) => [
|
|
204
|
+
...inheritedDependencies,
|
|
205
|
+
...await snapshotDependencies([...toolchain, ...additionalDependencyPaths]),
|
|
206
|
+
])
|
|
207
|
+
.catch(() => null);
|
|
208
|
+
await execFileAsync(linker, args);
|
|
209
|
+
const output = await stat(privateOut);
|
|
210
|
+
if (!output.isFile() || output.size === 0)
|
|
211
|
+
throw new Error("linker produced no executable");
|
|
212
|
+
await rename(privateOut, plan.outputPath).catch(async () => {
|
|
213
|
+
await rm(plan.outputPath, { force: true });
|
|
214
|
+
await rename(privateOut, plan.outputPath);
|
|
215
|
+
});
|
|
216
|
+
if (options.onArtifactReady !== undefined && preLinkDependencies !== null &&
|
|
217
|
+
await nativeArtifactDependenciesStillMatch(preLinkDependencies).catch(() => false)) {
|
|
218
|
+
await options.onArtifactReady({ dependencies: preLinkDependencies }).catch(() => undefined);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
catch (error) {
|
|
222
|
+
if (error instanceof CcCompileError || error instanceof RuntimePackError)
|
|
223
|
+
throw error;
|
|
224
|
+
const detail = subprocessFailureDetail(error);
|
|
225
|
+
throw new CcCompileError(linker, detail, `${linker} failed linking ${basename(plan.outputPath)} from the precompiled runtime pack.\n${detail}`);
|
|
226
|
+
}
|
|
227
|
+
finally {
|
|
228
|
+
await Promise.all([
|
|
229
|
+
rm(privateOutRoot, { recursive: true, force: true }).catch(() => undefined),
|
|
230
|
+
stagedRoot === null
|
|
231
|
+
? Promise.resolve()
|
|
232
|
+
: rm(stagedRoot, { recursive: true, force: true }).catch(() => undefined),
|
|
233
|
+
]);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
//# sourceMappingURL=linker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linker.js","sourceRoot":"","sources":["../../src/backend/linker.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blocks.js","sourceRoot":"","sources":["../../../src/backend/llvm/blocks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;6CAU6C;AAE7C,MAAM,OAAO,YAAY;IACN,MAAM,GAA8D,EAAE,CAAC;IAChF,GAAG,CAA0D;IACrE;;2CAEuC;IAC9B,YAAY,GAAa,EAAE,CAAC;IAC7B,WAAW,GAAG,CAAC,CAAC;IAChB,YAAY,GAAG,CAAC,CAAC;IAEzB;QACE,IAAI,CAAC,GAAG,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QACrD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED,QAAQ,CAAC,IAAY;QACnB,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;IACzC,CAAC;IAED,UAAU,CAAC,KAAa;QACtB,IAAI,CAAC,GAAG,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAC5C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED,IAAI,CAAC,CAAS;QACZ,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI;YAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,GAAG;QACD,OAAO,KAAK,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;IACnC,CAAC;IAED,IAAI;QACF,OAAO,KAAK,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;IACnC,CAAC;IAED,YAAY;QACV,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC;IAChC,CAAC;IAED,SAAS,CAAC,CAAS;QACjB,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI;YAAE,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;IACvD,CAAC;IAED,EAAE,CAAC,KAAa;QACd,IAAI,CAAC,SAAS,CAAC,aAAa,KAAK,EAAE,CAAC,CAAC;IACvC,CAAC;IAED,MAAM,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;QACpC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IACzD,CAAC;IAED;;iCAE6B;IAC7B,WAAW,CACT,GAAW,EACX,QAA+C,EAC/C,
|
|
1
|
+
{"version":3,"file":"blocks.js","sourceRoot":"","sources":["../../../src/backend/llvm/blocks.ts"],"names":[],"mappings":"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"}
|
package/dist/backend/llvm/dyn.js
CHANGED
|
@@ -12,6 +12,10 @@ const DYN_HANDLE_TAG_NUM = {
|
|
|
12
12
|
httpRes: 1,
|
|
13
13
|
netSocket: 2,
|
|
14
14
|
netServer: 3,
|
|
15
|
+
http2Session: 4,
|
|
16
|
+
http2Stream: 5,
|
|
17
|
+
httpClientReq: 6,
|
|
18
|
+
child: 16,
|
|
15
19
|
};
|
|
16
20
|
export const DYN_KIND = {
|
|
17
21
|
NULL: 0,
|
|
@@ -309,6 +313,31 @@ export class LlDyn {
|
|
|
309
313
|
throw new InternalCompilerError(`llvm emitter bug: dynMatch of bytes<${t.elem}>`);
|
|
310
314
|
kindIs(DYN_KIND.BYTES);
|
|
311
315
|
break;
|
|
316
|
+
case "func":
|
|
317
|
+
kindIs(DYN_KIND.FUNC);
|
|
318
|
+
break;
|
|
319
|
+
case "object": {
|
|
320
|
+
if (t.className !== "%Error") {
|
|
321
|
+
// Exact class capsules returned true before materialization.
|
|
322
|
+
// Plain dyn objects carry no class brand.
|
|
323
|
+
B.terminate(`ret i1 false`);
|
|
324
|
+
break;
|
|
325
|
+
}
|
|
326
|
+
const kd = this.kindOf(B, "%d");
|
|
327
|
+
const isObj = B.tmp();
|
|
328
|
+
B.line(`${isObj} = icmp eq i32 ${kd}, ${DYN_KIND.OBJ}`);
|
|
329
|
+
const lObj = B.newLabel("dm.err.obj");
|
|
330
|
+
const lFail = B.newLabel("dm.err.fail");
|
|
331
|
+
B.condBr(isObj, lObj, lFail);
|
|
332
|
+
B.startBlock(lObj);
|
|
333
|
+
const marker = this.objGetLit(B, "%d", "%error");
|
|
334
|
+
const present = B.tmp();
|
|
335
|
+
B.line(`${present} = icmp ne ptr ${marker}, null`);
|
|
336
|
+
B.terminate(`ret i1 ${present}`);
|
|
337
|
+
B.startBlock(lFail);
|
|
338
|
+
B.terminate(`ret i1 false`);
|
|
339
|
+
break;
|
|
340
|
+
}
|
|
312
341
|
case "record": {
|
|
313
342
|
const shape = this.host.recordsById.get(t.shapeId);
|
|
314
343
|
if (!shape)
|
|
@@ -455,8 +484,28 @@ export class LlDyn {
|
|
|
455
484
|
B.terminate(`ret i1 true`);
|
|
456
485
|
break;
|
|
457
486
|
}
|
|
458
|
-
default:
|
|
459
|
-
|
|
487
|
+
default: {
|
|
488
|
+
const h = DYN_HANDLE_KINDS.get(t.kind);
|
|
489
|
+
if (!h)
|
|
490
|
+
throw new LlvmUnsupportedError(`dynMatch:${t.kind}`);
|
|
491
|
+
const kd = this.kindOf(B, "%d");
|
|
492
|
+
const isHandle = B.tmp();
|
|
493
|
+
B.line(`${isHandle} = icmp eq i32 ${kd}, ${DYN_KIND.HANDLE}`);
|
|
494
|
+
const lHandle = B.newLabel("dm.handle");
|
|
495
|
+
const lNo = B.newLabel("dm.handle.no");
|
|
496
|
+
B.condBr(isHandle, lHandle, lNo);
|
|
497
|
+
B.startBlock(lHandle);
|
|
498
|
+
const tagPtr = B.tmp();
|
|
499
|
+
const tag = B.tmp();
|
|
500
|
+
B.line(`${tagPtr} = getelementptr inbounds i8, ptr %d, i64 ${this.abiOffset(24, 20)} ; ->v.handle.tag`);
|
|
501
|
+
B.line(`${tag} = load i32, ptr ${tagPtr}`);
|
|
502
|
+
const matched = B.tmp();
|
|
503
|
+
B.line(`${matched} = icmp eq i32 ${tag}, ${DYN_HANDLE_TAG_NUM[t.kind]}`);
|
|
504
|
+
B.terminate(`ret i1 ${matched}`);
|
|
505
|
+
B.startBlock(lNo);
|
|
506
|
+
B.terminate(`ret i1 false`);
|
|
507
|
+
break;
|
|
508
|
+
}
|
|
460
509
|
}
|
|
461
510
|
this.defs.push(`define internal zeroext i1 @${name}(ptr %d) ${FN_ATTRS} { ; matches ${key}`, B.render(), `}`, ``);
|
|
462
511
|
return name;
|
|
@@ -566,6 +615,13 @@ export class LlDyn {
|
|
|
566
615
|
{ index: 1, type: host.sizeType, name: "length" },
|
|
567
616
|
{ index: 2, type: host.sizeType, name: "capacity" },
|
|
568
617
|
{ index: 7, type: "ptr", name: "data" },
|
|
618
|
+
{ index: 8, type: "ptr", name: "presence" },
|
|
619
|
+
{ index: 9, type: "ptr", name: "sparse slots" },
|
|
620
|
+
{ index: 10, type: host.sizeType, name: "sparse length" },
|
|
621
|
+
{ index: 11, type: host.sizeType, name: "sparse capacity" },
|
|
622
|
+
{ index: 12, type: "ptr", name: "numeric properties" },
|
|
623
|
+
{ index: 13, type: host.sizeType, name: "property length" },
|
|
624
|
+
{ index: 14, type: host.sizeType, name: "property capacity" },
|
|
569
625
|
];
|
|
570
626
|
members.forEach((member) => {
|
|
571
627
|
const cachedPtr = B.tmp();
|
|
@@ -665,7 +721,11 @@ export class LlDyn {
|
|
|
665
721
|
// %error objects rebuild once and cache the pair. The C walker's
|
|
666
722
|
// arm exactly.
|
|
667
723
|
if (t.className !== "%Error") {
|
|
668
|
-
|
|
724
|
+
// Exact class capsules returned before this switch. A plain dyn
|
|
725
|
+
// object cannot acquire a class brand structurally.
|
|
726
|
+
B.line(`call void @scr_dyn_check_fail(ptr %path, ptr ${want}, ptr %d)`);
|
|
727
|
+
B.terminate(`ret ptr null`);
|
|
728
|
+
break;
|
|
669
729
|
}
|
|
670
730
|
const kd = this.kindOf(B, "%d");
|
|
671
731
|
const isObj = B.tmp();
|