@scriptc/compiler 0.0.34 → 0.0.36
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 +7 -6
- package/dist/backend/build-cache.d.ts +44 -0
- package/dist/backend/build-cache.js +241 -0
- package/dist/backend/build-cache.js.map +1 -0
- package/dist/backend/{emission/emit-async.d.ts → c/async.d.ts} +21 -30
- package/dist/backend/{emission/emit-async.js → c/async.js} +270 -286
- package/dist/backend/c/async.js.map +1 -0
- package/dist/backend/{emission/emitter.d.ts → c/c-emitter.d.ts} +6 -23
- package/dist/backend/{emission/emitter.js → c/c-emitter.js} +53 -107
- package/dist/backend/c/c-emitter.js.map +1 -0
- package/dist/backend/c/exprs.d.ts +8 -0
- package/dist/backend/c/exprs.js +7913 -0
- package/dist/backend/c/exprs.js.map +1 -0
- package/dist/backend/{emission/emit-island.d.ts → c/island.d.ts} +5 -5
- package/dist/backend/{emission/emit-island.js → c/island.js} +24 -22
- package/dist/backend/c/island.js.map +1 -0
- package/dist/backend/{emission → c}/may-throw.d.ts +1 -1
- package/dist/backend/{emission → c}/may-throw.js +1 -1
- package/dist/backend/c/may-throw.js.map +1 -0
- package/dist/backend/{emission/emit-shapes.d.ts → c/shapes.d.ts} +19 -19
- package/dist/backend/{emission/emit-shapes.js → c/shapes.js} +78 -87
- package/dist/backend/c/shapes.js.map +1 -0
- package/dist/backend/{emission/emit-stmts.d.ts → c/stmts.d.ts} +12 -12
- package/dist/backend/{emission/emit-stmts.js → c/stmts.js} +377 -343
- package/dist/backend/c/stmts.js.map +1 -0
- package/dist/backend/{emission/emit-types.d.ts → c/types.d.ts} +1 -1
- package/dist/backend/{emission/emit-types.js → c/types.js} +42 -286
- package/dist/backend/c/types.js.map +1 -0
- package/dist/backend/c/types.test.js +25 -0
- package/dist/backend/c/types.test.js.map +1 -0
- package/dist/backend/{emission/emit-walkers.d.ts → c/walkers.d.ts} +19 -41
- package/dist/backend/{emission/emit-walkers.js → c/walkers.js} +238 -298
- package/dist/backend/c/walkers.js.map +1 -0
- package/dist/backend/ffi-callbacks.d.ts +1 -1
- package/dist/backend/ffi-callbacks.js +4 -3
- package/dist/backend/ffi-callbacks.js.map +1 -1
- package/dist/backend/{library-identity.d.ts → library-identity-markers.d.ts} +0 -4
- package/dist/backend/{library-identity.js → library-identity-markers.js} +10 -9
- package/dist/backend/library-identity-markers.js.map +1 -0
- package/dist/backend/llvm/blocks.d.ts +4 -0
- package/dist/backend/llvm/blocks.js +29 -0
- package/dist/backend/llvm/blocks.js.map +1 -1
- package/dist/backend/llvm/classes.d.ts +2 -19
- package/dist/backend/llvm/classes.js +20 -52
- package/dist/backend/llvm/classes.js.map +1 -1
- package/dist/backend/llvm/common.d.ts +4 -0
- package/dist/backend/llvm/common.js +27 -0
- package/dist/backend/llvm/common.js.map +1 -0
- package/dist/backend/llvm/dyn.d.ts +3 -8
- package/dist/backend/llvm/dyn.js +152 -224
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emitter.d.ts +4 -1
- package/dist/backend/llvm/emitter.js +514 -9981
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/expr-async.d.ts +4 -0
- package/dist/backend/llvm/expr-async.js +726 -0
- package/dist/backend/llvm/expr-async.js.map +1 -0
- package/dist/backend/llvm/expr-bytes.d.ts +13 -0
- package/dist/backend/llvm/expr-bytes.js +456 -0
- package/dist/backend/llvm/expr-bytes.js.map +1 -0
- package/dist/backend/llvm/expr-callbacks.d.ts +22 -0
- package/dist/backend/llvm/expr-callbacks.js +520 -0
- package/dist/backend/llvm/expr-callbacks.js.map +1 -0
- package/dist/backend/llvm/expr-calls.d.ts +2 -0
- package/dist/backend/llvm/expr-calls.js +618 -0
- package/dist/backend/llvm/expr-calls.js.map +1 -0
- package/dist/backend/llvm/expr-containers.d.ts +25 -0
- package/dist/backend/llvm/expr-containers.js +623 -0
- package/dist/backend/llvm/expr-containers.js.map +1 -0
- package/dist/backend/llvm/expr-context.d.ts +255 -0
- package/dist/backend/llvm/expr-context.js +2 -0
- package/dist/backend/llvm/expr-context.js.map +1 -0
- package/dist/backend/llvm/expr-control.d.ts +2 -0
- package/dist/backend/llvm/expr-control.js +473 -0
- package/dist/backend/llvm/expr-control.js.map +1 -0
- package/dist/backend/llvm/expr-dispatch.d.ts +4 -0
- package/dist/backend/llvm/expr-dispatch.js +151 -0
- package/dist/backend/llvm/expr-dispatch.js.map +1 -0
- package/dist/backend/llvm/expr-dynamic.d.ts +2 -0
- package/dist/backend/llvm/expr-dynamic.js +810 -0
- package/dist/backend/llvm/expr-dynamic.js.map +1 -0
- package/dist/backend/llvm/expr-island.d.ts +15 -0
- package/dist/backend/llvm/expr-island.js +690 -0
- package/dist/backend/llvm/expr-island.js.map +1 -0
- package/dist/backend/llvm/expr-primitives.d.ts +6 -0
- package/dist/backend/llvm/expr-primitives.js +622 -0
- package/dist/backend/llvm/expr-primitives.js.map +1 -0
- package/dist/backend/llvm/expr-records.d.ts +9 -0
- package/dist/backend/llvm/expr-records.js +299 -0
- package/dist/backend/llvm/expr-records.js.map +1 -0
- package/dist/backend/llvm/expr-stream-bridges.d.ts +13 -0
- package/dist/backend/llvm/expr-stream-bridges.js +396 -0
- package/dist/backend/llvm/expr-stream-bridges.js.map +1 -0
- package/dist/backend/llvm/expr-stream-callbacks.d.ts +12 -0
- package/dist/backend/llvm/expr-stream-callbacks.js +360 -0
- package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -0
- package/dist/backend/llvm/lib-dispatch.d.ts +5 -0
- package/dist/backend/llvm/lib-dispatch.js +267 -0
- package/dist/backend/llvm/lib-dispatch.js.map +1 -0
- package/dist/backend/llvm/lib-filesystem.d.ts +6 -0
- package/dist/backend/llvm/lib-filesystem.js +594 -0
- package/dist/backend/llvm/lib-filesystem.js.map +1 -0
- package/dist/backend/llvm/lib-network.d.ts +2 -0
- package/dist/backend/llvm/lib-network.js +429 -0
- package/dist/backend/llvm/lib-network.js.map +1 -0
- package/dist/backend/llvm/lib-process.d.ts +5 -0
- package/dist/backend/llvm/lib-process.js +585 -0
- package/dist/backend/llvm/lib-process.js.map +1 -0
- package/dist/backend/llvm/lib-shared.d.ts +6 -0
- package/dist/backend/llvm/lib-shared.js +687 -0
- package/dist/backend/llvm/lib-shared.js.map +1 -0
- package/dist/backend/llvm/lib-stream.d.ts +2 -0
- package/dist/backend/llvm/lib-stream.js +470 -0
- package/dist/backend/llvm/lib-stream.js.map +1 -0
- package/dist/backend/llvm/shapes.d.ts +12 -2
- package/dist/backend/llvm/shapes.js +66 -307
- package/dist/backend/llvm/shapes.js.map +1 -1
- package/dist/backend/llvm/shapes.test.js +52 -0
- package/dist/backend/llvm/shapes.test.js.map +1 -0
- package/dist/backend/llvm/split.d.ts +43 -0
- package/dist/backend/llvm/split.js +227 -0
- package/dist/backend/llvm/split.js.map +1 -0
- package/dist/backend/llvm/split.test.d.ts +1 -0
- package/dist/backend/llvm/split.test.js +102 -0
- package/dist/backend/llvm/split.test.js.map +1 -0
- package/dist/backend/llvm/unsupported.d.ts +1 -1
- package/dist/backend/llvm/walkers.d.ts +2 -3
- package/dist/backend/llvm/walkers.js +164 -218
- package/dist/backend/llvm/walkers.js.map +1 -1
- package/dist/backend/native-codegen.d.ts +38 -0
- package/dist/backend/native-codegen.js +261 -0
- package/dist/backend/native-codegen.js.map +1 -0
- package/dist/backend/native-codegen.test.d.ts +1 -0
- package/dist/backend/native-codegen.test.js +188 -0
- package/dist/backend/native-codegen.test.js.map +1 -0
- package/dist/backend/native-link-info.d.ts +96 -0
- package/dist/backend/native-link-info.js +219 -0
- package/dist/backend/native-link-info.js.map +1 -0
- package/dist/backend/native-link-info.test.d.ts +1 -0
- package/dist/backend/native-link-info.test.js +134 -0
- package/dist/backend/native-link-info.test.js.map +1 -0
- package/dist/backend/{cc.d.ts → native-toolchain.d.ts} +139 -47
- package/dist/backend/{cc.js → native-toolchain.js} +1008 -910
- package/dist/backend/native-toolchain.js.map +1 -0
- package/dist/backend/native-toolchain.test.d.ts +1 -0
- package/dist/backend/{cc-cache.test.js → native-toolchain.test.js} +1297 -127
- package/dist/backend/native-toolchain.test.js.map +1 -0
- package/dist/backend/object-localize.js +1 -1
- package/dist/backend/object-localize.test.js +20 -0
- package/dist/backend/object-localize.test.js.map +1 -1
- package/dist/backend/runtime-abi.d.ts +10 -0
- package/dist/backend/runtime-abi.js +11 -0
- package/dist/backend/runtime-abi.js.map +1 -0
- package/dist/backend/runtime-pack.d.ts +137 -0
- package/dist/backend/runtime-pack.js +400 -0
- package/dist/backend/runtime-pack.js.map +1 -0
- package/dist/backend/runtime-pack.test.d.ts +1 -0
- package/dist/backend/runtime-pack.test.js +438 -0
- package/dist/backend/runtime-pack.test.js.map +1 -0
- package/dist/backend/targets.d.ts +30 -0
- package/dist/backend/targets.js +46 -0
- package/dist/backend/targets.js.map +1 -0
- package/dist/backend/targets.test.d.ts +1 -0
- package/dist/backend/targets.test.js +19 -0
- package/dist/backend/targets.test.js.map +1 -0
- package/dist/backend/vendor-archives.d.ts +41 -0
- package/dist/backend/vendor-archives.js +462 -0
- package/dist/backend/vendor-archives.js.map +1 -0
- package/dist/compat/fetch-profile.d.ts +0 -1
- package/dist/compat/fetch-profile.js +0 -1
- package/dist/compat/fetch-profile.js.map +1 -1
- package/dist/coverage/report.js +3 -3
- package/dist/coverage/report.js.map +1 -1
- package/dist/coverage/surface-manifest.js +25 -32
- package/dist/coverage/surface-manifest.js.map +1 -1
- package/dist/diagnostics/diagnostic.d.ts +11 -12
- package/dist/diagnostics/diagnostic.js +19 -17
- package/dist/diagnostics/diagnostic.js.map +1 -1
- package/dist/diagnostics/render.d.ts +1 -1
- package/dist/diagnostics/render.js +1 -1
- package/dist/diagnostics/render.js.map +1 -1
- package/dist/errors.d.ts +5 -0
- package/dist/errors.js +9 -0
- package/dist/errors.js.map +1 -0
- package/dist/executable/executable-cache.d.ts +86 -0
- package/dist/executable/executable-cache.js +398 -0
- package/dist/executable/executable-cache.js.map +1 -0
- package/dist/executable/executable-cache.test.d.ts +1 -0
- package/dist/executable/executable-cache.test.js +300 -0
- package/dist/executable/executable-cache.test.js.map +1 -0
- package/dist/ffi/{profile.d.ts → ffi-manifest.d.ts} +7 -2
- package/dist/ffi/{profile.js → ffi-manifest.js} +2 -1
- package/dist/ffi/ffi-manifest.js.map +1 -0
- package/dist/frontend/builtin-modules.d.ts +21 -0
- package/dist/frontend/builtin-modules.js +82 -0
- package/dist/frontend/builtin-modules.js.map +1 -0
- package/dist/frontend/cjs-lexer.d.ts +7 -0
- package/dist/frontend/cjs-lexer.js +15 -17
- package/dist/frontend/cjs-lexer.js.map +1 -1
- package/dist/frontend/dts-paths.d.ts +26 -0
- package/dist/frontend/dts-paths.js +41 -0
- package/dist/frontend/dts-paths.js.map +1 -0
- package/dist/frontend/input-tracker.d.ts +0 -2
- package/dist/frontend/input-tracker.js +1 -4
- package/dist/frontend/input-tracker.js.map +1 -1
- package/dist/frontend/lib-contract.d.ts +1 -5
- package/dist/frontend/lib-contract.js +1 -1
- package/dist/frontend/lib-contract.js.map +1 -1
- package/dist/frontend/lib-exports.d.ts +1 -1
- package/dist/frontend/lowering/call-position.d.ts +4 -0
- package/dist/frontend/lowering/call-position.js +7 -0
- package/dist/frontend/lowering/call-position.js.map +1 -0
- package/dist/frontend/lowering/callback-arg.d.ts +20 -0
- package/dist/frontend/lowering/callback-arg.js +44 -0
- package/dist/frontend/lowering/callback-arg.js.map +1 -0
- package/dist/frontend/lowering/lib-boundary.d.ts +1 -1
- package/dist/frontend/lowering/lib-boundary.js +34 -34
- package/dist/frontend/lowering/lib-boundary.js.map +1 -1
- package/dist/frontend/lowering/lower-assert.d.ts +3 -3
- package/dist/frontend/lowering/lower-assert.js +214 -241
- package/dist/frontend/lowering/lower-assert.js.map +1 -1
- package/dist/frontend/lowering/lower-builtins.d.ts +74 -146
- package/dist/frontend/lowering/lower-builtins.js +1126 -1234
- package/dist/frontend/lowering/lower-builtins.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.d.ts +56 -188
- package/dist/frontend/lowering/lower-calls.js +1409 -1494
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.d.ts +62 -125
- package/dist/frontend/lowering/lower-classes.js +832 -866
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-comptime.d.ts +5 -12
- package/dist/frontend/lowering/lower-comptime.js +32 -31
- package/dist/frontend/lowering/lower-comptime.js.map +1 -1
- package/dist/frontend/lowering/lower-containers.d.ts +35 -135
- package/dist/frontend/lowering/lower-containers.js +1394 -1715
- package/dist/frontend/lowering/lower-containers.js.map +1 -1
- package/dist/frontend/lowering/lower-dgram.d.ts +3 -7
- package/dist/frontend/lowering/lower-dgram.js +97 -111
- package/dist/frontend/lowering/lower-dgram.js.map +1 -1
- package/dist/frontend/lowering/lower-enums.d.ts +4 -4
- package/dist/frontend/lowering/lower-enums.js +30 -30
- package/dist/frontend/lowering/lower-enums.js.map +1 -1
- package/dist/frontend/lowering/{lower-emitter.d.ts → lower-event-emitter.d.ts} +7 -18
- package/dist/frontend/lowering/{lower-emitter.js → lower-event-emitter.js} +172 -174
- package/dist/frontend/lowering/lower-event-emitter.js.map +1 -0
- package/dist/frontend/lowering/lower-expando.d.ts +5 -5
- package/dist/frontend/lowering/lower-expando.js +40 -40
- package/dist/frontend/lowering/lower-expando.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.d.ts +56 -264
- package/dist/frontend/lowering/lower-exprs.js +1644 -1704
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-generators.d.ts +6 -6
- package/dist/frontend/lowering/lower-generators.js +73 -72
- package/dist/frontend/lowering/lower-generators.js.map +1 -1
- package/dist/frontend/lowering/lower-inspect.d.ts +5 -17
- package/dist/frontend/lowering/lower-inspect.js +236 -238
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-island.d.ts +34 -45
- package/dist/frontend/lowering/lower-island.js +440 -511
- package/dist/frontend/lowering/lower-island.js.map +1 -1
- package/dist/frontend/lowering/lower-mixins.d.ts +7 -10
- package/dist/frontend/lowering/lower-mixins.js +86 -86
- package/dist/frontend/lowering/lower-mixins.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.d.ts +12 -18
- package/dist/frontend/lowering/lower-modules.js +284 -283
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-namespaces.d.ts +23 -49
- package/dist/frontend/lowering/lower-namespaces.js +123 -115
- package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
- package/dist/frontend/lowering/lower-server.d.ts +18 -25
- package/dist/frontend/lowering/lower-server.js +899 -899
- package/dist/frontend/lowering/lower-server.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.d.ts +30 -149
- package/dist/frontend/lowering/lower-stmts.js +1176 -1229
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lower-stream.d.ts +12 -12
- package/dist/frontend/lowering/lower-stream.js +300 -301
- package/dist/frontend/lowering/lower-stream.js.map +1 -1
- package/dist/frontend/lowering/lower-test.d.ts +5 -5
- package/dist/frontend/lowering/lower-test.js +82 -82
- package/dist/frontend/lowering/lower-test.js.map +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +66 -20
- package/dist/frontend/lowering/lowerer.js +421 -198
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/pairs-snapshot.d.ts +11 -0
- package/dist/frontend/lowering/pairs-snapshot.js +85 -0
- package/dist/frontend/lowering/pairs-snapshot.js.map +1 -0
- package/dist/frontend/lowering/static-this.d.ts +6 -0
- package/dist/frontend/lowering/static-this.js +24 -0
- package/dist/frontend/lowering/static-this.js.map +1 -0
- package/dist/frontend/lowering/surfaces.d.ts +14 -33
- package/dist/frontend/lowering/surfaces.js +64 -64
- package/dist/frontend/lowering/surfaces.js.map +1 -1
- package/dist/frontend/npm-static-rewrite.js +6 -28
- package/dist/frontend/npm-static-rewrite.js.map +1 -1
- package/dist/frontend/npm-static.d.ts +0 -10
- package/dist/frontend/npm-static.js +4 -7
- package/dist/frontend/npm-static.js.map +1 -1
- package/dist/frontend/npm.d.ts +0 -24
- package/dist/frontend/npm.js +11 -85
- package/dist/frontend/npm.js.map +1 -1
- package/dist/frontend/program.d.ts +3 -1
- package/dist/frontend/program.js +51 -17
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/provenance-registry.d.ts +0 -2
- package/dist/frontend/provenance-registry.js +0 -10
- package/dist/frontend/provenance-registry.js.map +1 -1
- package/dist/frontend/provenance.js +4 -7
- package/dist/frontend/provenance.js.map +1 -1
- package/dist/frontend/resolve.d.ts +7 -2
- package/dist/frontend/resolve.js +12 -17
- package/dist/frontend/resolve.js.map +1 -1
- package/dist/frontend/resolve.test.d.ts +1 -0
- package/dist/frontend/resolve.test.js +29 -0
- package/dist/frontend/resolve.test.js.map +1 -0
- package/dist/frontend/ts7/adapter.d.ts +2 -2
- package/dist/frontend/ts7/adapter.js +1 -1
- package/dist/frontend/ts7/adapter.js.map +1 -1
- package/dist/frontend/ts7/checker.d.ts +40 -2
- package/dist/frontend/ts7/checker.js +182 -54
- package/dist/frontend/ts7/checker.js.map +1 -1
- package/dist/frontend/ts7/enums.js +2 -1
- package/dist/frontend/ts7/enums.js.map +1 -1
- package/dist/frontend/ts7/{program.js → program-adapter.js} +7 -6
- package/dist/frontend/ts7/program-adapter.js.map +1 -0
- package/dist/frontend/ts7/world-check.d.ts +1 -3
- package/dist/frontend/ts7/world-check.js +3 -1
- package/dist/frontend/ts7/world-check.js.map +1 -1
- package/dist/frontend/tsc-codes.d.ts +8 -0
- package/dist/frontend/tsc-codes.js +109 -0
- package/dist/frontend/tsc-codes.js.map +1 -0
- package/dist/frontend/{types.d.ts → type-mapper.d.ts} +2 -25
- package/dist/frontend/{types.js → type-mapper.js} +31 -52
- package/dist/frontend/type-mapper.js.map +1 -0
- package/dist/frontend/workspace-registry.d.ts +26 -0
- package/dist/frontend/workspace-registry.js +71 -0
- package/dist/frontend/workspace-registry.js.map +1 -0
- package/dist/index.d.ts +115 -30
- package/dist/index.js +650 -146
- package/dist/index.js.map +1 -1
- package/dist/ir/analysis.d.ts +37 -0
- package/dist/ir/analysis.js +118 -0
- package/dist/ir/analysis.js.map +1 -0
- package/dist/ir/analysis.test.d.ts +1 -0
- package/dist/ir/analysis.test.js +21 -0
- package/dist/ir/analysis.test.js.map +1 -0
- package/dist/ir/build.d.ts +9 -0
- package/dist/ir/build.js +33 -0
- package/dist/ir/build.js.map +1 -0
- package/dist/ir/integer-loops.d.ts +1 -1
- package/dist/ir/{nodes.d.ts → ir.d.ts} +60 -26
- package/dist/ir/{nodes.js → ir.js} +173 -141
- package/dist/ir/ir.js.map +1 -0
- package/dist/ir/ir.test.d.ts +1 -0
- package/dist/ir/ir.test.js +17 -0
- package/dist/ir/ir.test.js.map +1 -0
- package/dist/ir/serialize.d.ts +1 -1
- package/dist/ir/serialize.js +2 -1
- package/dist/ir/serialize.js.map +1 -1
- package/dist/ir/validate.d.ts +1 -1
- package/dist/ir/validate.js +16 -5
- package/dist/ir/validate.js.map +1 -1
- package/dist/library/cache-primitives.d.ts +24 -0
- package/dist/library/cache-primitives.js +83 -0
- package/dist/library/cache-primitives.js.map +1 -0
- package/dist/library/cache-reset.test.d.ts +1 -0
- package/dist/library/cache-reset.test.js +47 -0
- package/dist/library/cache-reset.test.js.map +1 -0
- package/dist/library/compiler-self-identity.d.ts +23 -0
- package/dist/library/compiler-self-identity.js +84 -0
- package/dist/library/compiler-self-identity.js.map +1 -0
- package/dist/library/fence-eval.d.ts +3 -1
- package/dist/library/fence-eval.js +5 -1
- package/dist/library/fence-eval.js.map +1 -1
- package/dist/library/int-infer.d.ts +1 -36
- package/dist/library/int-infer.js +17 -17
- package/dist/library/int-infer.js.map +1 -1
- package/dist/library/{early-cache.d.ts → library-cache.d.ts} +1 -1
- package/dist/library/{early-cache.js → library-cache.js} +37 -111
- package/dist/library/library-cache.js.map +1 -0
- package/dist/library/library-cache.test.d.ts +1 -0
- package/dist/library/{early-cache.test.js → library-cache.test.js} +2 -2
- package/dist/library/library-cache.test.js.map +1 -0
- package/dist/library/{profile.d.ts → library-profile.d.ts} +4 -7
- package/dist/library/{profile.js → library-profile.js} +18 -11
- package/dist/library/library-profile.js.map +1 -0
- package/dist/library/semantic-source.js +2 -1
- package/dist/library/semantic-source.js.map +1 -1
- package/dist/library/sidecar.d.ts +5 -2
- package/dist/library/sidecar.js +11 -5
- package/dist/library/sidecar.js.map +1 -1
- package/dist/startup-cache.d.ts +6 -0
- package/dist/startup-cache.js +6 -0
- package/dist/startup-cache.js.map +1 -0
- package/package.json +7 -2
- package/surface-manifest.json +1 -1
- package/dist/backend/cc-cache.test.js.map +0 -1
- package/dist/backend/cc.js.map +0 -1
- package/dist/backend/emission/emit-async.js.map +0 -1
- package/dist/backend/emission/emit-exprs.d.ts +0 -13
- package/dist/backend/emission/emit-exprs.js +0 -7407
- package/dist/backend/emission/emit-exprs.js.map +0 -1
- package/dist/backend/emission/emit-island.js.map +0 -1
- package/dist/backend/emission/emit-shapes.js.map +0 -1
- package/dist/backend/emission/emit-stmts.js.map +0 -1
- package/dist/backend/emission/emit-types.js.map +0 -1
- package/dist/backend/emission/emit-walkers.js.map +0 -1
- package/dist/backend/emission/emitter.js.map +0 -1
- package/dist/backend/emission/may-throw.js.map +0 -1
- package/dist/backend/library-identity.js.map +0 -1
- package/dist/ffi/profile.js.map +0 -1
- package/dist/frontend/lowering/lower-emitter.js.map +0 -1
- package/dist/frontend/shared.d.ts +0 -82
- package/dist/frontend/shared.js +0 -308
- package/dist/frontend/shared.js.map +0 -1
- package/dist/frontend/ts7/program.js.map +0 -1
- package/dist/frontend/types.js.map +0 -1
- package/dist/ir/nodes.js.map +0 -1
- package/dist/library/early-cache.js.map +0 -1
- package/dist/library/early-cache.test.js.map +0 -1
- package/dist/library/profile.js.map +0 -1
- /package/dist/backend/{cc-cache.test.d.ts → c/types.test.d.ts} +0 -0
- /package/dist/{library/early-cache.test.d.ts → backend/llvm/shapes.test.d.ts} +0 -0
- /package/dist/frontend/ts7/{program.d.ts → program-adapter.d.ts} +0 -0
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/** Native-library LLVM IR sharding.
|
|
2
|
+
*
|
|
3
|
+
* The public `.ll` remains the emitter's single canonical module. Native dev
|
|
4
|
+
* builds may compile this equivalent set of smaller modules in parallel, then
|
|
5
|
+
* relocatably merge their objects before archive assembly:
|
|
6
|
+
*
|
|
7
|
+
* - the first shard owns every module-scope global and the first function
|
|
8
|
+
* group; later shards own only function groups;
|
|
9
|
+
* - the shared preamble carries types and declarations into every shard;
|
|
10
|
+
* - generated internal functions/globals are promoted to hidden linkage so
|
|
11
|
+
* references can cross object files; the post-compile relocatable link turns
|
|
12
|
+
* those hidden definitions back into local symbols on every supported object
|
|
13
|
+
* format;
|
|
14
|
+
* - declarations synthesized from definitions make every shard independently
|
|
15
|
+
* valid LLVM IR without changing call signatures.
|
|
16
|
+
*
|
|
17
|
+
* The splitter deliberately accepts only the narrow grammar scriptc emits.
|
|
18
|
+
* An unexpected top-level form returns null and the caller compiles the
|
|
19
|
+
* canonical TU normally — cache optimization must never become correctness.
|
|
20
|
+
*/
|
|
21
|
+
export interface LlvmProgramShard {
|
|
22
|
+
/** Stable source identity used in object cache keys and diagnostics. */
|
|
23
|
+
name: string;
|
|
24
|
+
source: string;
|
|
25
|
+
}
|
|
26
|
+
export interface LlvmProgramSplit {
|
|
27
|
+
shards: LlvmProgramShard[];
|
|
28
|
+
/** Generated definitions promoted for shard linkage. The relocatable merge
|
|
29
|
+
* must demote these while retaining the canonical public definitions. */
|
|
30
|
+
promotedSymbols: string[];
|
|
31
|
+
/** Canonical non-internal definitions that must stay externally visible
|
|
32
|
+
* after the shard objects are relocatably merged. */
|
|
33
|
+
publicSymbols: string[];
|
|
34
|
+
}
|
|
35
|
+
export interface LlvmProgramSplitOptions {
|
|
36
|
+
/** Desired maximum source size per function shard. */
|
|
37
|
+
targetBytes?: number;
|
|
38
|
+
/** Inputs smaller than this keep the single-TU path. */
|
|
39
|
+
minimumBytes?: number;
|
|
40
|
+
}
|
|
41
|
+
export declare function splitLlvmProgram(source: string, options?: LlvmProgramSplitOptions): LlvmProgramSplit | null;
|
|
42
|
+
/** Dev-library policy tuned independently from executable splitting. */
|
|
43
|
+
export declare function splitLlvmLibraryProgram(source: string): LlvmProgramSplit | null;
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
/** Native-library LLVM IR sharding.
|
|
2
|
+
*
|
|
3
|
+
* The public `.ll` remains the emitter's single canonical module. Native dev
|
|
4
|
+
* builds may compile this equivalent set of smaller modules in parallel, then
|
|
5
|
+
* relocatably merge their objects before archive assembly:
|
|
6
|
+
*
|
|
7
|
+
* - the first shard owns every module-scope global and the first function
|
|
8
|
+
* group; later shards own only function groups;
|
|
9
|
+
* - the shared preamble carries types and declarations into every shard;
|
|
10
|
+
* - generated internal functions/globals are promoted to hidden linkage so
|
|
11
|
+
* references can cross object files; the post-compile relocatable link turns
|
|
12
|
+
* those hidden definitions back into local symbols on every supported object
|
|
13
|
+
* format;
|
|
14
|
+
* - declarations synthesized from definitions make every shard independently
|
|
15
|
+
* valid LLVM IR without changing call signatures.
|
|
16
|
+
*
|
|
17
|
+
* The splitter deliberately accepts only the narrow grammar scriptc emits.
|
|
18
|
+
* An unexpected top-level form returns null and the caller compiles the
|
|
19
|
+
* canonical TU normally — cache optimization must never become correctness.
|
|
20
|
+
*/
|
|
21
|
+
const DEFAULT_TARGET_BYTES = 2 * 1024 * 1024;
|
|
22
|
+
const DEFAULT_MINIMUM_BYTES = 4 * 1024 * 1024;
|
|
23
|
+
// Library edits pay a relocatable merge/archive cost after shard compilation,
|
|
24
|
+
// but their stable per-bucket object cache starts winning earlier than the
|
|
25
|
+
// executable lane's whole-program posture. Node 24 Linux profiling across
|
|
26
|
+
// 1.62–3.24MB generated modules found the crossover at roughly 2MB; four
|
|
27
|
+
// function buckets were the best general tradeoff for the 2.15MB target and
|
|
28
|
+
// remained profitable through 3.24MB. Executables retain the defaults above.
|
|
29
|
+
const LIBRARY_TARGET_BYTES = 768 * 1024;
|
|
30
|
+
const LIBRARY_MINIMUM_BYTES = 2 * 1024 * 1024;
|
|
31
|
+
function symbolOf(spelling) {
|
|
32
|
+
const match = /^@([-$._A-Za-z][-$.\w]*)$/.exec(spelling);
|
|
33
|
+
return match?.[1] ?? null;
|
|
34
|
+
}
|
|
35
|
+
function functionDefAt(lines, start) {
|
|
36
|
+
const header = lines[start];
|
|
37
|
+
const match = /^define\s+(internal\s+)?(.+?)\s+(@[-$._A-Za-z][-$.\w]*)\((.*)\)(.*)\{(?:\s*;.*)?$/.exec(header);
|
|
38
|
+
if (!match)
|
|
39
|
+
return null;
|
|
40
|
+
let end = start + 1;
|
|
41
|
+
while (end < lines.length && lines[end] !== "}")
|
|
42
|
+
end++;
|
|
43
|
+
if (end >= lines.length)
|
|
44
|
+
return null;
|
|
45
|
+
const symbol = symbolOf(match[3]);
|
|
46
|
+
if (symbol === null)
|
|
47
|
+
return null;
|
|
48
|
+
const promoted = match[1] !== undefined;
|
|
49
|
+
const linkage = promoted ? "hidden " : "";
|
|
50
|
+
const definitionHeader = promoted ? header.replace(/^define internal /, "define hidden ") : header;
|
|
51
|
+
const source = [definitionHeader, ...lines.slice(start + 1, end + 1)].join("\n");
|
|
52
|
+
// Parameter names are legal on declarations. Preserve the emitted text so
|
|
53
|
+
// attributes, zeroext, and varargs stay byte-exact.
|
|
54
|
+
const declaration = `declare ${linkage}${match[2]} ${match[3]}(${match[4]})${match[5]}`.trimEnd();
|
|
55
|
+
return { def: { source, declaration, symbol, promoted }, end };
|
|
56
|
+
}
|
|
57
|
+
function globalDef(line) {
|
|
58
|
+
const match = /^(@[-$._A-Za-z][-$.\w]*)\s+=\s+(internal\s+)?(thread_local(?:\([^)]*\))?\s+)?(global|constant)\s+(.+)$/.exec(line);
|
|
59
|
+
if (!match)
|
|
60
|
+
return null;
|
|
61
|
+
const symbol = symbolOf(match[1]);
|
|
62
|
+
if (symbol === null)
|
|
63
|
+
return null;
|
|
64
|
+
const promoted = match[2] !== undefined;
|
|
65
|
+
const threadLocal = match[3] === undefined ? "" : `${match[3].trim()} `;
|
|
66
|
+
// The declaration needs only the complete type. Emitted initializers begin
|
|
67
|
+
// after it; the generated LLVM subset uses first-class scalars/pointers or
|
|
68
|
+
// balanced aggregate types, so one small scanner is sufficient.
|
|
69
|
+
const rest = match[5];
|
|
70
|
+
let depth = 0;
|
|
71
|
+
let quote = false;
|
|
72
|
+
let typeEnd = -1;
|
|
73
|
+
for (let i = 0; i < rest.length; i++) {
|
|
74
|
+
const ch = rest[i];
|
|
75
|
+
if (ch === '"' && rest[i - 1] !== "\\")
|
|
76
|
+
quote = !quote;
|
|
77
|
+
if (quote)
|
|
78
|
+
continue;
|
|
79
|
+
if (ch === "{" || ch === "[" || ch === "<" || ch === "(")
|
|
80
|
+
depth++;
|
|
81
|
+
else if (ch === "}" || ch === "]" || ch === ">" || ch === ")")
|
|
82
|
+
depth--;
|
|
83
|
+
else if (ch === " " && depth === 0) {
|
|
84
|
+
typeEnd = i;
|
|
85
|
+
break;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
if (typeEnd < 0)
|
|
89
|
+
return null;
|
|
90
|
+
const type = rest.slice(0, typeEnd);
|
|
91
|
+
return {
|
|
92
|
+
line: promoted ? line.replace(`${match[1]} = internal `, `${match[1]} = hidden `) : line,
|
|
93
|
+
declaration: `${match[1]} = external ${promoted ? "hidden " : ""}${threadLocal}${match[4]} ${type}`,
|
|
94
|
+
symbol,
|
|
95
|
+
promoted,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
function stableBucket(symbol, count) {
|
|
99
|
+
let hash = 0x811c9dc5;
|
|
100
|
+
for (let i = 0; i < symbol.length; i++) {
|
|
101
|
+
hash ^= symbol.charCodeAt(i);
|
|
102
|
+
hash = Math.imul(hash, 0x01000193);
|
|
103
|
+
}
|
|
104
|
+
return (hash >>> 0) % count;
|
|
105
|
+
}
|
|
106
|
+
function chunksOf(functions, targetBytes) {
|
|
107
|
+
const totalBytes = functions.reduce((sum, fn) => sum + Buffer.byteLength(fn.source) + 2, 0);
|
|
108
|
+
// A power-of-two bucket count changes only when the program crosses a wide
|
|
109
|
+
// size band. Ordinary edits therefore keep every function in the same
|
|
110
|
+
// symbol-hash bucket; ceil(total/target) would reshuffle the whole program
|
|
111
|
+
// whenever a small edit happened to add the next bucket.
|
|
112
|
+
const required = Math.max(2, Math.ceil(totalBytes / targetBytes));
|
|
113
|
+
const count = 2 ** Math.ceil(Math.log2(required));
|
|
114
|
+
const chunks = Array.from({ length: count }, () => []);
|
|
115
|
+
for (const fn of functions)
|
|
116
|
+
chunks[stableBucket(fn.symbol, count)].push(fn);
|
|
117
|
+
return chunks.flatMap((chunk, bucket) => chunk.length === 0 ? [] : [{ bucket, functions: chunk }]);
|
|
118
|
+
}
|
|
119
|
+
export function splitLlvmProgram(source, options = {}) {
|
|
120
|
+
const minimumBytes = options.minimumBytes ?? DEFAULT_MINIMUM_BYTES;
|
|
121
|
+
if (Buffer.byteLength(source) < minimumBytes)
|
|
122
|
+
return null;
|
|
123
|
+
const targetBytes = Math.max(64 * 1024, options.targetBytes ?? DEFAULT_TARGET_BYTES);
|
|
124
|
+
const lines = source.split("\n");
|
|
125
|
+
const preamble = [];
|
|
126
|
+
const globals = [];
|
|
127
|
+
const functions = [];
|
|
128
|
+
const trailer = [];
|
|
129
|
+
let sawDefinition = false;
|
|
130
|
+
let inTrailer = false;
|
|
131
|
+
for (let i = 0; i < lines.length; i++) {
|
|
132
|
+
const line = lines[i];
|
|
133
|
+
if (line.startsWith("define ")) {
|
|
134
|
+
if (inTrailer)
|
|
135
|
+
return null;
|
|
136
|
+
const parsed = functionDefAt(lines, i);
|
|
137
|
+
if (parsed === null)
|
|
138
|
+
return null;
|
|
139
|
+
functions.push(parsed.def);
|
|
140
|
+
sawDefinition = true;
|
|
141
|
+
i = parsed.end;
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
144
|
+
if (line.startsWith("@") && line.includes(" = ")) {
|
|
145
|
+
if (inTrailer)
|
|
146
|
+
return null;
|
|
147
|
+
const parsed = globalDef(line);
|
|
148
|
+
if (parsed === null) {
|
|
149
|
+
// External declarations are already valid in every shard.
|
|
150
|
+
if (/^@.+\s+=\s+external\s+/.test(line))
|
|
151
|
+
preamble.push(line);
|
|
152
|
+
else
|
|
153
|
+
return null;
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
// LLVM textual external TLS declarations compile on Darwin, but GNU
|
|
157
|
+
// ELF clang emits the cross-shard reference as non-TLS and `ld -r`
|
|
158
|
+
// correctly refuses the mismatch. Thread-instanced libraries keep
|
|
159
|
+
// the canonical single-TU path until the producer can preserve TLS
|
|
160
|
+
// model metadata portably across object formats.
|
|
161
|
+
if (/\bthread_local(?:\([^)]*\))?\s+global\b/.test(line))
|
|
162
|
+
return null;
|
|
163
|
+
globals.push(parsed);
|
|
164
|
+
sawDefinition = true;
|
|
165
|
+
}
|
|
166
|
+
continue;
|
|
167
|
+
}
|
|
168
|
+
if (line.startsWith("attributes ") || line.startsWith("!"))
|
|
169
|
+
inTrailer = true;
|
|
170
|
+
if (inTrailer)
|
|
171
|
+
trailer.push(line);
|
|
172
|
+
else if (!sawDefinition || line.trim() !== "")
|
|
173
|
+
preamble.push(line);
|
|
174
|
+
}
|
|
175
|
+
if (functions.length < 2)
|
|
176
|
+
return null;
|
|
177
|
+
const chunks = chunksOf(functions, targetBytes);
|
|
178
|
+
if (chunks.length < 2)
|
|
179
|
+
return null;
|
|
180
|
+
const globalDecls = globals.flatMap((global) => global.declaration === null ? [] : [global.declaration]);
|
|
181
|
+
const tail = trailer.length === 0 ? "" : `\n${trailer.join("\n")}`;
|
|
182
|
+
const functionShards = chunks.map(({ bucket, functions: chunk }) => {
|
|
183
|
+
const owned = new Set(chunk);
|
|
184
|
+
const declarations = functions
|
|
185
|
+
.filter((fn) => !owned.has(fn))
|
|
186
|
+
.map((fn) => fn.declaration);
|
|
187
|
+
return {
|
|
188
|
+
name: `program-f${bucket.toString().padStart(3, "0")}.ll`,
|
|
189
|
+
source: [
|
|
190
|
+
[...preamble, ...globalDecls, ...declarations, ""].join("\n"),
|
|
191
|
+
...chunk.map((fn) => fn.source),
|
|
192
|
+
tail,
|
|
193
|
+
].join("\n"),
|
|
194
|
+
};
|
|
195
|
+
});
|
|
196
|
+
// Global initializer changes are common (literal text, generated tables)
|
|
197
|
+
// and should not invalidate an otherwise unrelated function bucket. Keep
|
|
198
|
+
// all module storage in one dedicated shard that declares every function.
|
|
199
|
+
const globalShard = {
|
|
200
|
+
name: "program-globals.ll",
|
|
201
|
+
source: [
|
|
202
|
+
[...preamble, ...functions.map((fn) => fn.declaration), ""].join("\n"),
|
|
203
|
+
...globals.map((global) => global.line),
|
|
204
|
+
tail,
|
|
205
|
+
].join("\n"),
|
|
206
|
+
};
|
|
207
|
+
const shards = [globalShard, ...functionShards];
|
|
208
|
+
return {
|
|
209
|
+
shards,
|
|
210
|
+
promotedSymbols: [
|
|
211
|
+
...globals.filter((global) => global.promoted).map((global) => global.symbol),
|
|
212
|
+
...functions.filter((fn) => fn.promoted).map((fn) => fn.symbol),
|
|
213
|
+
],
|
|
214
|
+
publicSymbols: [
|
|
215
|
+
...globals.filter((global) => !global.promoted).map((global) => global.symbol),
|
|
216
|
+
...functions.filter((fn) => !fn.promoted).map((fn) => fn.symbol),
|
|
217
|
+
],
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
/** Dev-library policy tuned independently from executable splitting. */
|
|
221
|
+
export function splitLlvmLibraryProgram(source) {
|
|
222
|
+
return splitLlvmProgram(source, {
|
|
223
|
+
minimumBytes: LIBRARY_MINIMUM_BYTES,
|
|
224
|
+
targetBytes: LIBRARY_TARGET_BYTES,
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
//# sourceMappingURL=split.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"split.js","sourceRoot":"","sources":["../../../src/backend/llvm/split.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { execFileSync } from "node:child_process";
|
|
2
|
+
import { mkdtemp, readFile, writeFile } from "node:fs/promises";
|
|
3
|
+
import { tmpdir } from "node:os";
|
|
4
|
+
import { join } from "node:path";
|
|
5
|
+
import { afterAll, expect, test } from "vitest";
|
|
6
|
+
import { splitLlvmLibraryProgram, splitLlvmProgram } from "./split.js";
|
|
7
|
+
const scratch = [];
|
|
8
|
+
afterAll(async () => {
|
|
9
|
+
const { rm } = await import("node:fs/promises");
|
|
10
|
+
await Promise.all(scratch.map((path) => rm(path, { recursive: true, force: true })));
|
|
11
|
+
});
|
|
12
|
+
const SAMPLE = `%Pair = type { i64, i64 }
|
|
13
|
+
declare void @runtime(ptr)
|
|
14
|
+
|
|
15
|
+
@hidden_value = internal global i64 7
|
|
16
|
+
@public_value = constant i64 11
|
|
17
|
+
|
|
18
|
+
define internal i64 @left() #0 {
|
|
19
|
+
entry:
|
|
20
|
+
%v = load i64, ptr @hidden_value
|
|
21
|
+
ret i64 %v
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
define internal i64 @right() #0 {
|
|
25
|
+
entry:
|
|
26
|
+
%v = call i64 @left()
|
|
27
|
+
ret i64 %v
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
define i64 @public_entry() #0 {
|
|
31
|
+
entry:
|
|
32
|
+
%a = call i64 @right()
|
|
33
|
+
%b = load i64, ptr @public_value
|
|
34
|
+
%r = add i64 %a, %b
|
|
35
|
+
ret i64 %r
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
attributes #0 = { sanitize_address }
|
|
39
|
+
`;
|
|
40
|
+
test("splits generated LLVM functions and promotes only private cross-shard definitions", () => {
|
|
41
|
+
const split = splitLlvmProgram(SAMPLE, { minimumBytes: 0, targetBytes: 64 * 1024 });
|
|
42
|
+
// The production floor is 64 KiB. Make enough functions to cross it while
|
|
43
|
+
// retaining the readable SAMPLE assertions below.
|
|
44
|
+
expect(split).not.toBeNull();
|
|
45
|
+
expect(splitLlvmProgram(SAMPLE)).toBeNull();
|
|
46
|
+
const large = SAMPLE.replace("define i64 @public_entry", `${Array.from({ length: 80 }, (_, i) => `define internal i64 @pad_${i}() #0 {\nentry:\n ; ${"x".repeat(2048)}\n ret i64 ${i}\n}\n`).join("\n")}\ndefine i64 @public_entry`);
|
|
47
|
+
const actual = splitLlvmProgram(large, { minimumBytes: 0, targetBytes: 64 * 1024 });
|
|
48
|
+
expect(actual).not.toBeNull();
|
|
49
|
+
expect(actual.shards.length).toBeGreaterThan(1);
|
|
50
|
+
expect(actual.promotedSymbols).toContain("hidden_value");
|
|
51
|
+
expect(actual.promotedSymbols).toContain("left");
|
|
52
|
+
expect(actual.promotedSymbols).not.toContain("public_value");
|
|
53
|
+
expect(actual.promotedSymbols).not.toContain("public_entry");
|
|
54
|
+
expect(actual.publicSymbols).toEqual(["public_value", "public_entry"]);
|
|
55
|
+
expect(actual.shards[0].name).toBe("program-globals.ll");
|
|
56
|
+
expect(actual.shards[0].source).toContain("@hidden_value = hidden global i64 7");
|
|
57
|
+
expect(actual.shards.slice(1).every((shard) => shard.source.includes("@hidden_value = external hidden global i64"))).toBe(true);
|
|
58
|
+
expect(actual.shards.some((shard) => !shard.source.includes("define hidden i64 @right() #0") &&
|
|
59
|
+
shard.source.includes("declare hidden i64 @right() #0"))).toBe(true);
|
|
60
|
+
});
|
|
61
|
+
test("thread-local program state conservatively keeps the single-TU path", () => {
|
|
62
|
+
const tls = SAMPLE.replace("@hidden_value = internal global i64 7", "@hidden_value = internal thread_local global i64 7");
|
|
63
|
+
expect(splitLlvmProgram(tls, { minimumBytes: 0, targetBytes: 64 * 1024 })).toBeNull();
|
|
64
|
+
});
|
|
65
|
+
test("dev libraries split at the measured 2MB crossover while executables retain 4MB", () => {
|
|
66
|
+
const body = Array.from({ length: 700 }, (_, i) => `define internal i64 @library_pad_${i}() #0 {\nentry:\n ; ${"x".repeat(3072)}\n ret i64 ${i}\n}\n`).join("\n");
|
|
67
|
+
const source = SAMPLE.replace("define i64 @public_entry", `${body}\ndefine i64 @public_entry`);
|
|
68
|
+
expect(Buffer.byteLength(source)).toBeGreaterThan(2 * 1024 * 1024);
|
|
69
|
+
expect(Buffer.byteLength(source)).toBeLessThan(4 * 1024 * 1024);
|
|
70
|
+
expect(splitLlvmProgram(source)).toBeNull();
|
|
71
|
+
expect(splitLlvmLibraryProgram(source)?.shards).toHaveLength(5);
|
|
72
|
+
const belowCrossover = source.slice(0, Math.floor(1.9 * 1024 * 1024));
|
|
73
|
+
expect(splitLlvmLibraryProgram(belowCrossover)).toBeNull();
|
|
74
|
+
});
|
|
75
|
+
test("every shard compiles and its merged object exposes only canonical public definitions", async () => {
|
|
76
|
+
const body = Array.from({ length: 120 }, (_, i) => `define internal i64 @pad_${i}() #0 {\nentry:\n ; ${"x".repeat(2048)}\n ret i64 ${i}\n}\n`).join("\n");
|
|
77
|
+
const split = splitLlvmProgram(SAMPLE.replace("define i64 @public_entry", `${body}\ndefine i64 @public_entry`), { minimumBytes: 0, targetBytes: 64 * 1024 });
|
|
78
|
+
const dir = await mkdtemp(join(tmpdir(), "scriptc-llvm-split-"));
|
|
79
|
+
scratch.push(dir);
|
|
80
|
+
const objects = [];
|
|
81
|
+
for (const shard of split.shards) {
|
|
82
|
+
const source = join(dir, shard.name);
|
|
83
|
+
const object = `${source}.o`;
|
|
84
|
+
await writeFile(source, shard.source);
|
|
85
|
+
execFileSync("clang", ["-Wno-override-module", "-c", source, "-o", object]);
|
|
86
|
+
objects.push(object);
|
|
87
|
+
}
|
|
88
|
+
const combined = join(dir, "combined.o");
|
|
89
|
+
execFileSync("ld", ["-r", ...objects, "-o", combined]);
|
|
90
|
+
if (process.platform === "linux") {
|
|
91
|
+
const keep = join(dir, "keep.txt");
|
|
92
|
+
await writeFile(keep, "public_entry\npublic_value\n");
|
|
93
|
+
execFileSync("objcopy", [`--keep-global-symbols=${keep}`, combined]);
|
|
94
|
+
}
|
|
95
|
+
const globals = execFileSync("nm", ["-g", combined], { encoding: "utf8" });
|
|
96
|
+
expect(globals).toContain("public_entry");
|
|
97
|
+
expect(globals).toContain("public_value");
|
|
98
|
+
expect(globals).not.toContain("hidden_value");
|
|
99
|
+
expect(globals).not.toContain("left");
|
|
100
|
+
expect((await readFile(combined)).length).toBeGreaterThan(0);
|
|
101
|
+
});
|
|
102
|
+
//# sourceMappingURL=split.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"split.test.js","sourceRoot":"","sources":["../../../src/backend/llvm/split.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { IrType, IrUnionDef } from "../../ir/
|
|
1
|
+
import type { IrType, IrUnionDef } from "../../ir/ir.js";
|
|
2
2
|
import { type ShapeHost } from "./shapes.js";
|
|
3
3
|
/** What the walkers need from the emitter beyond the shape tables: union
|
|
4
4
|
* defs, the undefined-arm probe, interned ScrStr literals (unit-arm
|
|
@@ -6,7 +6,6 @@ import { type ShapeHost } from "./shapes.js";
|
|
|
6
6
|
* scr_error-style label texts). */
|
|
7
7
|
export interface WalkerHost extends ShapeHost {
|
|
8
8
|
readonly unionsById: Map<string, IrUnionDef>;
|
|
9
|
-
undefinedArmTag(t: IrType): number;
|
|
10
9
|
/** `@`-ref of an interned immortal ScrStr literal. */
|
|
11
10
|
internLiteral(text: string): string;
|
|
12
11
|
/** `@`-ref of an interned NUL-terminated byte-array constant. */
|
|
@@ -50,7 +49,7 @@ export declare class LlWalkers {
|
|
|
50
49
|
private emitArrayWriter;
|
|
51
50
|
private emitUnionWriter;
|
|
52
51
|
/** `JSON.stringify(v, null, space)` as a REWRITE of the compact text —
|
|
53
|
-
* Node's gap algorithm exactly (see
|
|
52
|
+
* Node's gap algorithm exactly (see walkers.ts's sc_ji). The indent
|
|
54
53
|
* rides as a NUL-terminated constant + byte length. */
|
|
55
54
|
jsonIndentHelper(): string;
|
|
56
55
|
/** The per-union ToString helper: unit arms return the interned
|