@scriptc/compiler 0.0.35 → 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/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.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} +54 -34
- package/dist/backend/{cc.js → native-toolchain.js} +231 -810
- 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} +214 -6
- package/dist/backend/native-toolchain.test.js.map +1 -0
- package/dist/backend/object-localize.js +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/{early-cache.d.ts → executable-cache.d.ts} +2 -2
- package/dist/executable/{early-cache.js → executable-cache.js} +36 -98
- package/dist/executable/executable-cache.js.map +1 -0
- package/dist/executable/executable-cache.test.d.ts +1 -0
- package/dist/executable/{early-cache.test.js → executable-cache.test.js} +3 -3
- package/dist/executable/executable-cache.test.js.map +1 -0
- package/dist/ffi/{profile.js → ffi-manifest.js} +1 -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 +1124 -1232
- 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 +1397 -1492
- 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 +1384 -1700
- 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 +1624 -1696
- 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 +437 -508
- 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 +85 -85
- 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 +1175 -1228
- 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 +60 -20
- package/dist/frontend/lowering/lowerer.js +191 -117
- 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 +63 -63
- 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 +9 -4
- 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.js +2 -36
- 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} +12 -11
- 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 +112 -30
- package/dist/index.js +512 -126
- 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} +54 -26
- package/dist/ir/{nodes.js → ir.js} +145 -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 +10 -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/{implementation-identity.js → compiler-self-identity.js} +1 -1
- 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} +34 -89
- 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 +3 -3
- package/dist/startup-cache.js +2 -2
- package/dist/startup-cache.js.map +1 -1
- package/package.json +6 -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/executable/early-cache.js.map +0 -1
- package/dist/executable/early-cache.test.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/implementation-identity.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/{executable/early-cache.test.d.ts → backend/llvm/shapes.test.d.ts} +0 -0
- /package/dist/{library/early-cache.test.d.ts → backend/native-codegen.test.d.ts} +0 -0
- /package/dist/ffi/{profile.d.ts → ffi-manifest.d.ts} +0 -0
- /package/dist/frontend/ts7/{program.d.ts → program-adapter.d.ts} +0 -0
- /package/dist/library/{implementation-identity.d.ts → compiler-self-identity.d.ts} +0 -0
|
@@ -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
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { InternalCompilerError } from "../../errors.js";
|
|
2
|
+
import { isRefCounted, typeKey } from "../../ir/ir.js";
|
|
2
3
|
import { mangleRecordStruct } from "../mangle.js";
|
|
3
4
|
import { BlockBuilder } from "./blocks.js";
|
|
4
5
|
import { llFieldType, releaseSym, traceAdapter } from "./shapes.js";
|
|
5
6
|
import { LlvmUnsupportedError } from "./unsupported.js";
|
|
7
|
+
import { undefinedArmTag } from "../../ir/analysis.js";
|
|
6
8
|
/** Exact double literal (the emitter's f64Lit — duplicated to avoid a
|
|
7
9
|
* cyclic import; both spell every bit pattern identically). */
|
|
8
10
|
function f64Lit(n) {
|
|
@@ -180,11 +182,11 @@ export class LlWalkers {
|
|
|
180
182
|
emitRecordWriter(B, shapeId) {
|
|
181
183
|
const shape = this.host.recordsById.get(shapeId);
|
|
182
184
|
if (!shape)
|
|
183
|
-
throw new
|
|
185
|
+
throw new InternalCompilerError(`llvm emitter bug: jsonStringify of unknown shape ${shapeId}`);
|
|
184
186
|
const fieldIndex = new Map(shape.fields.map((f, i) => [f.name, i + 1]));
|
|
185
187
|
// CYCLE-CAPABLE shapes bracket the walk with the circular-detection
|
|
186
188
|
// stack; edge labels stamp before members whose walk can re-enter —
|
|
187
|
-
//
|
|
189
|
+
// walkers.ts's contract, ported.
|
|
188
190
|
const cyclic = traceAdapter(this.host, { kind: "record", shapeId }) !== null;
|
|
189
191
|
const edgeable = (ft) => cyclic && traceAdapter(this.host, ft) !== null;
|
|
190
192
|
if (cyclic)
|
|
@@ -213,11 +215,11 @@ export class LlWalkers {
|
|
|
213
215
|
const order = shape.declaredOrder ?? shape.fields.map((f) => f.name);
|
|
214
216
|
const inOrder = new Set(order);
|
|
215
217
|
if (shape.fields.some((f) => !inOrder.has(f.name) && !f.name.startsWith("%"))) {
|
|
216
|
-
throw new
|
|
218
|
+
throw new InternalCompilerError(`llvm emitter bug: declaredOrder of shape ${shapeId} omits a non-internal field`);
|
|
217
219
|
}
|
|
218
220
|
const byName = new Map(shape.fields.map((f) => [f.name, f]));
|
|
219
221
|
const emitFields = order.map((n) => byName.get(n)).filter((f) => f !== undefined);
|
|
220
|
-
const droppable = emitFields.some((f) =>
|
|
222
|
+
const droppable = emitFields.some((f) => undefinedArmTag(f.type, this.host.unionsById) >= 0) || !!shape.indexValue;
|
|
221
223
|
this.putc(B, "%b", "123"); // '{'
|
|
222
224
|
if (!droppable) {
|
|
223
225
|
emitFields.forEach((f, i) => {
|
|
@@ -245,7 +247,7 @@ export class LlWalkers {
|
|
|
245
247
|
B.line(`store i1 false, ptr ${first}`);
|
|
246
248
|
};
|
|
247
249
|
for (const f of emitFields) {
|
|
248
|
-
const utag =
|
|
250
|
+
const utag = undefinedArmTag(f.type, this.host.unionsById);
|
|
249
251
|
const v = this.loadField(B, "%v", shapeId, fieldIndex.get(f.name), f.type);
|
|
250
252
|
let skip = null;
|
|
251
253
|
if (utag >= 0) {
|
|
@@ -293,110 +295,90 @@ export class LlWalkers {
|
|
|
293
295
|
const len = B.tmp();
|
|
294
296
|
B.line(`${ks} = call ptr @scr_map_keys_js_order(ptr ${ovf})`);
|
|
295
297
|
B.line(`${len} = call double @scr_arr_len(ptr ${ks})`);
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
B.entryAllocas.push(`${outSlot} = alloca ${outTy}`);
|
|
319
|
-
B.line(`store ${outTy} ${iv.kind === "f64" ? f64Lit(0) : "0"}, ptr ${outSlot}`);
|
|
320
|
-
host.declare(`declare zeroext i1 @scr_map_get_str_${iv.kind === "f64" ? "f64" : "bool"}(ptr, ptr, ptr)`);
|
|
321
|
-
const found = B.tmp();
|
|
322
|
-
B.line(`${found} = call zeroext i1 @scr_map_get_str_${iv.kind === "f64" ? "f64" : "bool"}(ptr ${ovf}, ptr ${k}, ptr ${outSlot})`);
|
|
323
|
-
const raw = B.tmp();
|
|
324
|
-
B.line(`${raw} = load ${outTy}, ptr ${outSlot}`);
|
|
325
|
-
if (iv.kind === "bool") {
|
|
326
|
-
val = B.tmp();
|
|
327
|
-
B.line(`${val} = trunc i8 ${raw} to i1`);
|
|
298
|
+
B.countedLoop(len, (i, next) => {
|
|
299
|
+
const k = B.tmp();
|
|
300
|
+
B.line(`${k} = call ptr @scr_arr_get_ref(ptr ${ks}, double ${i}) ; key (+1)`);
|
|
301
|
+
// The entry value, type-directed off the overflow VALUE type.
|
|
302
|
+
let val;
|
|
303
|
+
if (iv.kind === "f64" || iv.kind === "bool") {
|
|
304
|
+
const outTy = iv.kind === "f64" ? "double" : "i8";
|
|
305
|
+
const outSlot = B.slot();
|
|
306
|
+
B.entryAllocas.push(`${outSlot} = alloca ${outTy}`);
|
|
307
|
+
B.line(`store ${outTy} ${iv.kind === "f64" ? f64Lit(0) : "0"}, ptr ${outSlot}`);
|
|
308
|
+
host.declare(`declare zeroext i1 @scr_map_get_str_${iv.kind === "f64" ? "f64" : "bool"}(ptr, ptr, ptr)`);
|
|
309
|
+
const found = B.tmp();
|
|
310
|
+
B.line(`${found} = call zeroext i1 @scr_map_get_str_${iv.kind === "f64" ? "f64" : "bool"}(ptr ${ovf}, ptr ${k}, ptr ${outSlot})`);
|
|
311
|
+
const raw = B.tmp();
|
|
312
|
+
B.line(`${raw} = load ${outTy}, ptr ${outSlot}`);
|
|
313
|
+
if (iv.kind === "bool") {
|
|
314
|
+
val = B.tmp();
|
|
315
|
+
B.line(`${val} = trunc i8 ${raw} to i1`);
|
|
316
|
+
}
|
|
317
|
+
else {
|
|
318
|
+
val = raw;
|
|
319
|
+
}
|
|
328
320
|
}
|
|
329
321
|
else {
|
|
330
|
-
|
|
322
|
+
host.declare(`declare ptr @scr_map_get_str_ref(ptr, ptr)`);
|
|
323
|
+
val = B.tmp();
|
|
324
|
+
B.line(`${val} = call ptr @scr_map_get_str_ref(ptr ${ovf}, ptr ${k}) ; value (+1)`);
|
|
331
325
|
}
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
326
|
+
// Undefined-valued entries drop, exactly the optional-field rule: a
|
|
327
|
+
// dyn value whose dyn kind follows its size_t RC word (enum
|
|
328
|
+
// member 6 — scr_runtime.h's ScrDynKind), or a union holding its
|
|
329
|
+
// undefined arm.
|
|
330
|
+
let skipUndef = null;
|
|
331
|
+
if (iv.kind === "dyn") {
|
|
332
|
+
const kp = B.tmp();
|
|
333
|
+
const kd = B.tmp();
|
|
334
|
+
const isu = B.tmp();
|
|
335
|
+
B.line(`${kp} = getelementptr inbounds i8, ptr ${val}, i64 ${this.abiOffset(8, 4)} ; ->kind`);
|
|
336
|
+
B.line(`${kd} = load i32, ptr ${kp}`);
|
|
337
|
+
B.line(`${isu} = icmp eq i32 ${kd}, 6 ; SCR_DYN_UNDEF (NULL is 0 — null members DO serialize)`);
|
|
338
|
+
skipUndef = isu;
|
|
339
|
+
}
|
|
340
|
+
else if (undefinedArmTag(iv, this.host.unionsById) >= 0) {
|
|
341
|
+
const tag = this.unionTag(B, val);
|
|
342
|
+
const isu = B.tmp();
|
|
343
|
+
B.line(`${isu} = icmp eq i32 ${tag}, ${undefinedArmTag(iv, this.host.unionsById)}`);
|
|
344
|
+
skipUndef = isu;
|
|
345
|
+
}
|
|
346
|
+
if (skipUndef !== null) {
|
|
347
|
+
const ld = B.newLabel("ovf.d");
|
|
348
|
+
const write = B.newLabel("ovf.w");
|
|
349
|
+
B.condBr(skipUndef, ld, write);
|
|
350
|
+
B.startBlock(ld);
|
|
351
|
+
if (isRefCounted(iv))
|
|
352
|
+
B.line(`call void ${releaseSym(host, iv)}(ptr ${val})`);
|
|
353
|
+
B.line(`call void @scr_str_release(ptr ${k})`);
|
|
354
|
+
B.br(next);
|
|
355
|
+
B.startBlock(write);
|
|
356
|
+
}
|
|
357
|
+
// The comma dance over the shared `first` flag.
|
|
358
|
+
{
|
|
359
|
+
const isf = B.tmp();
|
|
360
|
+
const lcm = B.newLabel("ovf.cm");
|
|
361
|
+
const lj = B.newLabel("ovf.cj");
|
|
362
|
+
B.line(`${isf} = load i1, ptr ${first}`);
|
|
363
|
+
B.condBr(isf, lj, lcm);
|
|
364
|
+
B.startBlock(lcm);
|
|
365
|
+
this.putc(B, "%b", "44"); // ','
|
|
366
|
+
B.br(lj);
|
|
367
|
+
B.startBlock(lj);
|
|
368
|
+
B.line(`store i1 false, ptr ${first}`);
|
|
369
|
+
}
|
|
370
|
+
host.declare(`declare void @scr_jb_put_json_str(ptr, ptr)`);
|
|
371
|
+
B.line(`call void @scr_jb_put_json_str(ptr %b, ptr ${k})`);
|
|
372
|
+
this.putc(B, "%b", "58"); // ':'
|
|
373
|
+
if (edgeKeys) {
|
|
374
|
+
this.host.declare(`declare void @scr_jb_edge_key(ptr, ptr)`);
|
|
375
|
+
B.line(`call void @scr_jb_edge_key(ptr %b, ptr ${k})`);
|
|
376
|
+
}
|
|
377
|
+
B.line(`call void @${this.jsonWriteHelper(iv)}(ptr %b, ${this.valTy(iv)} ${val})`);
|
|
378
|
+
B.line(`call void @scr_str_release(ptr ${k})`);
|
|
363
379
|
if (isRefCounted(iv))
|
|
364
380
|
B.line(`call void ${releaseSym(host, iv)}(ptr ${val})`);
|
|
365
|
-
|
|
366
|
-
B.br(ln);
|
|
367
|
-
B.startBlock(write);
|
|
368
|
-
}
|
|
369
|
-
// The comma dance over the shared `first` flag.
|
|
370
|
-
{
|
|
371
|
-
const isf = B.tmp();
|
|
372
|
-
const lcm = B.newLabel("ovf.cm");
|
|
373
|
-
const lj = B.newLabel("ovf.cj");
|
|
374
|
-
B.line(`${isf} = load i1, ptr ${first}`);
|
|
375
|
-
B.condBr(isf, lj, lcm);
|
|
376
|
-
B.startBlock(lcm);
|
|
377
|
-
this.putc(B, "%b", "44"); // ','
|
|
378
|
-
B.br(lj);
|
|
379
|
-
B.startBlock(lj);
|
|
380
|
-
B.line(`store i1 false, ptr ${first}`);
|
|
381
|
-
}
|
|
382
|
-
host.declare(`declare void @scr_jb_put_json_str(ptr, ptr)`);
|
|
383
|
-
B.line(`call void @scr_jb_put_json_str(ptr %b, ptr ${k})`);
|
|
384
|
-
this.putc(B, "%b", "58"); // ':'
|
|
385
|
-
if (edgeKeys) {
|
|
386
|
-
this.host.declare(`declare void @scr_jb_edge_key(ptr, ptr)`);
|
|
387
|
-
B.line(`call void @scr_jb_edge_key(ptr %b, ptr ${k})`);
|
|
388
|
-
}
|
|
389
|
-
B.line(`call void @${this.jsonWriteHelper(iv)}(ptr %b, ${this.valTy(iv)} ${val})`);
|
|
390
|
-
B.line(`call void @scr_str_release(ptr ${k})`);
|
|
391
|
-
if (isRefCounted(iv))
|
|
392
|
-
B.line(`call void ${releaseSym(host, iv)}(ptr ${val})`);
|
|
393
|
-
B.br(ln);
|
|
394
|
-
B.startBlock(ln);
|
|
395
|
-
const i2 = B.tmp();
|
|
396
|
-
B.line(`${i2} = fadd double ${i}, ${f64Lit(1)}`);
|
|
397
|
-
B.line(`store double ${i2}, ptr ${iSlot}`);
|
|
398
|
-
B.br(lc);
|
|
399
|
-
B.startBlock(le);
|
|
381
|
+
});
|
|
400
382
|
host.declare(`declare void @scr_arr_release(ptr)`);
|
|
401
383
|
B.line(`call void @scr_arr_release(ptr ${ks})`);
|
|
402
384
|
}
|
|
@@ -411,55 +393,38 @@ export class LlWalkers {
|
|
|
411
393
|
this.putc(B, "%b", "91"); // '['
|
|
412
394
|
const len = B.tmp();
|
|
413
395
|
B.line(`${len} = call double @scr_arr_len(ptr %v)`);
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
const v = B.tmp();
|
|
447
|
-
B.line(`${v} = call ${accTy} @scr_arr_get_${acc}(ptr %v, double ${i})`);
|
|
448
|
-
B.line(`call void @${w}(ptr %b, ${accTy} ${v})`);
|
|
449
|
-
}
|
|
450
|
-
else {
|
|
451
|
-
// _get_ref returns +1; release after writing.
|
|
452
|
-
host.declare(`declare ptr @scr_arr_get_ref(ptr, double)`);
|
|
453
|
-
const v = B.tmp();
|
|
454
|
-
B.line(`${v} = call ptr @scr_arr_get_ref(ptr %v, double ${i})`);
|
|
455
|
-
B.line(`call void @${w}(ptr %b, ptr ${v})`);
|
|
456
|
-
B.line(`call void ${releaseSym(host, elem)}(ptr ${v})`);
|
|
457
|
-
}
|
|
458
|
-
const i2 = B.tmp();
|
|
459
|
-
B.line(`${i2} = fadd double ${i}, ${f64Lit(1)}`);
|
|
460
|
-
B.line(`store double ${i2}, ptr ${iSlot}`);
|
|
461
|
-
B.br(lc);
|
|
462
|
-
B.startBlock(le);
|
|
396
|
+
B.countedLoop(len, (i) => {
|
|
397
|
+
const nz = B.tmp();
|
|
398
|
+
const lcm = B.newLabel("jwa.cm");
|
|
399
|
+
const lj = B.newLabel("jwa.cj");
|
|
400
|
+
B.line(`${nz} = fcmp ogt double ${i}, ${f64Lit(0)}`);
|
|
401
|
+
B.condBr(nz, lcm, lj);
|
|
402
|
+
B.startBlock(lcm);
|
|
403
|
+
this.putc(B, "%b", "44"); // ','
|
|
404
|
+
B.br(lj);
|
|
405
|
+
B.startBlock(lj);
|
|
406
|
+
if (cyclic) {
|
|
407
|
+
const idx = B.tmp();
|
|
408
|
+
B.line(`${idx} = fptoui double ${i} to ${this.S}`);
|
|
409
|
+
this.jbEdgeIdx(B, idx);
|
|
410
|
+
}
|
|
411
|
+
if (elem.kind === "f64" || elem.kind === "bool") {
|
|
412
|
+
const acc = elem.kind;
|
|
413
|
+
const accTy = elem.kind === "f64" ? "double" : "i1";
|
|
414
|
+
host.declare(`declare ${elem.kind === "bool" ? "zeroext i1" : accTy} @scr_arr_get_${acc}(ptr, double)`);
|
|
415
|
+
const v = B.tmp();
|
|
416
|
+
B.line(`${v} = call ${accTy} @scr_arr_get_${acc}(ptr %v, double ${i})`);
|
|
417
|
+
B.line(`call void @${w}(ptr %b, ${accTy} ${v})`);
|
|
418
|
+
}
|
|
419
|
+
else {
|
|
420
|
+
// _get_ref returns +1; release after writing.
|
|
421
|
+
host.declare(`declare ptr @scr_arr_get_ref(ptr, double)`);
|
|
422
|
+
const v = B.tmp();
|
|
423
|
+
B.line(`${v} = call ptr @scr_arr_get_ref(ptr %v, double ${i})`);
|
|
424
|
+
B.line(`call void @${w}(ptr %b, ptr ${v})`);
|
|
425
|
+
B.line(`call void ${releaseSym(host, elem)}(ptr ${v})`);
|
|
426
|
+
}
|
|
427
|
+
});
|
|
463
428
|
this.putc(B, "%b", "93"); // ']'
|
|
464
429
|
if (cyclic)
|
|
465
430
|
this.jbLeave(B);
|
|
@@ -467,7 +432,7 @@ export class LlWalkers {
|
|
|
467
432
|
emitUnionWriter(B, unionId) {
|
|
468
433
|
const def = this.host.unionsById.get(unionId);
|
|
469
434
|
if (!def)
|
|
470
|
-
throw new
|
|
435
|
+
throw new InternalCompilerError(`llvm emitter bug: jsonStringify of unknown union ${unionId}`);
|
|
471
436
|
const tag = this.unionTag(B, "%v");
|
|
472
437
|
const bad = B.newLabel("jwu.bad");
|
|
473
438
|
const done = B.newLabel("jwu.d");
|
|
@@ -516,7 +481,7 @@ export class LlWalkers {
|
|
|
516
481
|
}
|
|
517
482
|
/* ── the pretty-print re-indenter (jsonIndentHelper, ported) ──────────── */
|
|
518
483
|
/** `JSON.stringify(v, null, space)` as a REWRITE of the compact text —
|
|
519
|
-
* Node's gap algorithm exactly (see
|
|
484
|
+
* Node's gap algorithm exactly (see walkers.ts's sc_ji). The indent
|
|
520
485
|
* rides as a NUL-terminated constant + byte length. */
|
|
521
486
|
jsonIndentHelper() {
|
|
522
487
|
if (this.indentFn)
|
|
@@ -698,7 +663,7 @@ export class LlWalkers {
|
|
|
698
663
|
return existing;
|
|
699
664
|
const def = this.host.unionsById.get(unionId);
|
|
700
665
|
if (!def)
|
|
701
|
-
throw new
|
|
666
|
+
throw new InternalCompilerError(`llvm emitter bug: ToString of unknown union ${unionId}`);
|
|
702
667
|
const name = `sc_us_${this.unionToStrFns.size}`;
|
|
703
668
|
this.unionToStrFns.set(unionId, name);
|
|
704
669
|
const host = this.host;
|
|
@@ -767,7 +732,7 @@ export class LlWalkers {
|
|
|
767
732
|
return existing;
|
|
768
733
|
const def = this.host.unionsById.get(unionId);
|
|
769
734
|
if (!def)
|
|
770
|
-
throw new
|
|
735
|
+
throw new InternalCompilerError(`llvm emitter bug: join of unknown union ${unionId}`);
|
|
771
736
|
const name = `sc_uj_${this.unionJoinFns.size}`;
|
|
772
737
|
this.unionJoinFns.set(unionId, name);
|
|
773
738
|
const toStr = this.unionToStrHelper(unionId);
|
|
@@ -781,72 +746,53 @@ export class LlWalkers {
|
|
|
781
746
|
host.declare(`declare void @scr_str_release(ptr)`);
|
|
782
747
|
const B = new BlockBuilder();
|
|
783
748
|
const buf = "%jb";
|
|
784
|
-
|
|
785
|
-
B.entryAllocas.push(`${buf} = alloca %ScrJsonBuf`, `${iSlot} = alloca double`);
|
|
749
|
+
B.entryAllocas.push(`${buf} = alloca %ScrJsonBuf`);
|
|
786
750
|
B.line(`call void @scr_jb_init(ptr ${buf})`);
|
|
787
|
-
B.line(`store double ${f64Lit(0)}, ptr ${iSlot}`);
|
|
788
751
|
const len = B.tmp();
|
|
789
752
|
B.line(`${len} = call double @scr_arr_len(ptr %a)`);
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
for (const t of unitTags) {
|
|
819
|
-
const cnd = B.tmp();
|
|
820
|
-
B.line(`${cnd} = icmp eq i32 ${tag}, ${t}`);
|
|
821
|
-
if (acc === "") {
|
|
822
|
-
acc = cnd;
|
|
823
|
-
}
|
|
824
|
-
else {
|
|
825
|
-
const o = B.tmp();
|
|
826
|
-
B.line(`${o} = or i1 ${acc}, ${cnd}`);
|
|
827
|
-
acc = o;
|
|
753
|
+
B.countedLoop(len, (i, next) => {
|
|
754
|
+
// `if (i) put sep bytes` — separators between elements only.
|
|
755
|
+
const nz = B.tmp();
|
|
756
|
+
const lsep = B.newLabel("uj.s");
|
|
757
|
+
const lel = B.newLabel("uj.v");
|
|
758
|
+
B.line(`${nz} = fcmp ogt double ${i}, ${f64Lit(0)}`);
|
|
759
|
+
B.condBr(nz, lsep, lel);
|
|
760
|
+
B.startBlock(lsep);
|
|
761
|
+
this.putScrStr(B, buf, "%sep");
|
|
762
|
+
B.br(lel);
|
|
763
|
+
B.startBlock(lel);
|
|
764
|
+
const u = B.tmp();
|
|
765
|
+
B.line(`${u} = call ptr @scr_arr_get_ref(ptr %a, double ${i}) ; element (+1)`);
|
|
766
|
+
if (unitTags.length > 0) {
|
|
767
|
+
// Nullish arms print empty, exactly JS's join.
|
|
768
|
+
const tag = this.unionTag(B, u);
|
|
769
|
+
let acc = "";
|
|
770
|
+
for (const t of unitTags) {
|
|
771
|
+
const cnd = B.tmp();
|
|
772
|
+
B.line(`${cnd} = icmp eq i32 ${tag}, ${t}`);
|
|
773
|
+
if (acc === "") {
|
|
774
|
+
acc = cnd;
|
|
775
|
+
}
|
|
776
|
+
else {
|
|
777
|
+
const o = B.tmp();
|
|
778
|
+
B.line(`${o} = or i1 ${acc}, ${cnd}`);
|
|
779
|
+
acc = o;
|
|
780
|
+
}
|
|
828
781
|
}
|
|
782
|
+
const lskip = B.newLabel("uj.k");
|
|
783
|
+
const lwrite = B.newLabel("uj.w");
|
|
784
|
+
B.condBr(acc, lskip, lwrite);
|
|
785
|
+
B.startBlock(lskip);
|
|
786
|
+
B.line(`call void @scr_union_release(ptr ${u})`);
|
|
787
|
+
B.br(next);
|
|
788
|
+
B.startBlock(lwrite);
|
|
829
789
|
}
|
|
830
|
-
const
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
B.
|
|
790
|
+
const s = B.tmp();
|
|
791
|
+
B.line(`${s} = call ptr @${toStr}(ptr ${u})`);
|
|
792
|
+
this.putScrStr(B, buf, s);
|
|
793
|
+
B.line(`call void @scr_str_release(ptr ${s})`);
|
|
834
794
|
B.line(`call void @scr_union_release(ptr ${u})`);
|
|
835
|
-
|
|
836
|
-
B.startBlock(lwrite);
|
|
837
|
-
}
|
|
838
|
-
const s = B.tmp();
|
|
839
|
-
B.line(`${s} = call ptr @${toStr}(ptr ${u})`);
|
|
840
|
-
this.putScrStr(B, buf, s);
|
|
841
|
-
B.line(`call void @scr_str_release(ptr ${s})`);
|
|
842
|
-
B.line(`call void @scr_union_release(ptr ${u})`);
|
|
843
|
-
B.br(ln);
|
|
844
|
-
B.startBlock(ln);
|
|
845
|
-
const i2 = B.tmp();
|
|
846
|
-
B.line(`${i2} = fadd double ${i}, ${f64Lit(1)}`);
|
|
847
|
-
B.line(`store double ${i2}, ptr ${iSlot}`);
|
|
848
|
-
B.br(lc);
|
|
849
|
-
B.startBlock(le);
|
|
795
|
+
});
|
|
850
796
|
const r = B.tmp();
|
|
851
797
|
B.line(`${r} = call ptr @scr_jb_finish(ptr ${buf})`);
|
|
852
798
|
B.terminate(`ret ptr ${r}`);
|