@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
package/dist/backend/llvm/dyn.js
CHANGED
|
@@ -1,17 +1,19 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { InternalCompilerError } from "../../errors.js";
|
|
2
|
+
import { DYN_HANDLE_KINDS, isRefCounted, typeKey } from "../../ir/ir.js";
|
|
3
|
+
import { dynDesc, undefinedArmTag } from "../../ir/analysis.js";
|
|
2
4
|
import { mangleRecordNew, mangleRecordStruct } from "../mangle.js";
|
|
3
5
|
import { BlockBuilder } from "./blocks.js";
|
|
4
6
|
import { arrNewCall, elemAccess, llFieldType, releaseSym, traceAdapter, traceArg, vAdapters } from "./shapes.js";
|
|
5
7
|
import { LlvmUnsupportedError } from "./unsupported.js";
|
|
6
8
|
/** ScrDynKind values (scr_runtime.h). */
|
|
7
9
|
/** ScrDynHandleTag numeric values (scr_runtime.h's enum order). */
|
|
8
|
-
|
|
10
|
+
const DYN_HANDLE_TAG_NUM = {
|
|
9
11
|
httpReq: 0,
|
|
10
12
|
httpRes: 1,
|
|
11
13
|
netSocket: 2,
|
|
12
14
|
netServer: 3,
|
|
13
15
|
};
|
|
14
|
-
export const
|
|
16
|
+
export const DYN_KIND = {
|
|
15
17
|
NULL: 0,
|
|
16
18
|
BOOL: 1,
|
|
17
19
|
NUM: 2,
|
|
@@ -237,47 +239,7 @@ export class LlDyn {
|
|
|
237
239
|
B.terminate(`ret ${dummy}`);
|
|
238
240
|
B.startBlock(lk);
|
|
239
241
|
}
|
|
240
|
-
/* ──
|
|
241
|
-
/** Short human description of a dynCheck target for error messages. */
|
|
242
|
-
dynDesc(t) {
|
|
243
|
-
switch (t.kind) {
|
|
244
|
-
case "f64":
|
|
245
|
-
return "number";
|
|
246
|
-
case "string":
|
|
247
|
-
return "string";
|
|
248
|
-
case "bool":
|
|
249
|
-
return "boolean";
|
|
250
|
-
case "record":
|
|
251
|
-
return this.host.recordsById.get(t.shapeId)?.tuple ? "array" : "object";
|
|
252
|
-
case "array":
|
|
253
|
-
return "array";
|
|
254
|
-
case "nullT":
|
|
255
|
-
return "null";
|
|
256
|
-
case "undefinedT":
|
|
257
|
-
return "undefined";
|
|
258
|
-
case "dyn":
|
|
259
|
-
return "unknown";
|
|
260
|
-
case "bytes":
|
|
261
|
-
return "Uint8Array";
|
|
262
|
-
case "object":
|
|
263
|
-
return t.className.replace(/^%/, "");
|
|
264
|
-
case "union": {
|
|
265
|
-
const def = this.host.unionsById.get(t.unionId);
|
|
266
|
-
if (!def)
|
|
267
|
-
throw new Error(`llvm emitter bug: dynDesc of unknown union ${t.unionId}`);
|
|
268
|
-
return def.arms.map((a) => this.dynDesc(a)).join(" | ");
|
|
269
|
-
}
|
|
270
|
-
case "func":
|
|
271
|
-
return "function";
|
|
272
|
-
default: {
|
|
273
|
-
const h = DYN_HANDLE_KINDS.get(t.kind);
|
|
274
|
-
if (h)
|
|
275
|
-
return h.cls;
|
|
276
|
-
throw new Error(`llvm emitter bug: dynDesc of non-JSON type ${t.kind}`);
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
/* ── dynMatchHelper (emit-walkers.ts, ported) ──────────────────────── */
|
|
242
|
+
/* ── dynMatchHelper (walkers.ts, ported) ──────────────────────── */
|
|
281
243
|
/** `sc_dm_<n>(ptr d) -> i1` — does this dyn fit T? Never throws. */
|
|
282
244
|
dynMatchHelper(t) {
|
|
283
245
|
const key = typeKey(t);
|
|
@@ -303,7 +265,7 @@ export class LlDyn {
|
|
|
303
265
|
this.host.declare(`declare void @scr_dyn_release_v(ptr)`);
|
|
304
266
|
const kind = this.kindOf(B, "%d");
|
|
305
267
|
const capsule = B.tmp();
|
|
306
|
-
B.line(`${capsule} = icmp eq i32 ${kind}, ${
|
|
268
|
+
B.line(`${capsule} = icmp eq i32 ${kind}, ${DYN_KIND.TYPED_REF}`);
|
|
307
269
|
const lCapsule = B.newLabel("dm.tr.mat");
|
|
308
270
|
const lPlain = B.newLabel("dm.tr.plain");
|
|
309
271
|
B.condBr(capsule, lCapsule, lPlain);
|
|
@@ -324,19 +286,19 @@ export class LlDyn {
|
|
|
324
286
|
};
|
|
325
287
|
switch (t.kind) {
|
|
326
288
|
case "f64":
|
|
327
|
-
kindIs(
|
|
289
|
+
kindIs(DYN_KIND.NUM);
|
|
328
290
|
break;
|
|
329
291
|
case "string":
|
|
330
|
-
kindIs(
|
|
292
|
+
kindIs(DYN_KIND.STR);
|
|
331
293
|
break;
|
|
332
294
|
case "bool":
|
|
333
|
-
kindIs(
|
|
295
|
+
kindIs(DYN_KIND.BOOL);
|
|
334
296
|
break;
|
|
335
297
|
case "nullT":
|
|
336
|
-
kindIs(
|
|
298
|
+
kindIs(DYN_KIND.NULL);
|
|
337
299
|
break;
|
|
338
300
|
case "undefinedT":
|
|
339
|
-
kindIs(
|
|
301
|
+
kindIs(DYN_KIND.UNDEF);
|
|
340
302
|
break;
|
|
341
303
|
case "dyn":
|
|
342
304
|
// An `unknown` target: every dyn value fits, undefined included.
|
|
@@ -344,20 +306,20 @@ export class LlDyn {
|
|
|
344
306
|
break;
|
|
345
307
|
case "bytes":
|
|
346
308
|
if (t.elem !== "u8")
|
|
347
|
-
throw new
|
|
348
|
-
kindIs(
|
|
309
|
+
throw new InternalCompilerError(`llvm emitter bug: dynMatch of bytes<${t.elem}>`);
|
|
310
|
+
kindIs(DYN_KIND.BYTES);
|
|
349
311
|
break;
|
|
350
312
|
case "record": {
|
|
351
313
|
const shape = this.host.recordsById.get(t.shapeId);
|
|
352
314
|
if (!shape)
|
|
353
|
-
throw new
|
|
315
|
+
throw new InternalCompilerError(`llvm emitter bug: dynCheck of unknown shape ${t.shapeId}`);
|
|
354
316
|
const fail = B.newLabel("dm.f");
|
|
355
317
|
const kd = this.kindOf(B, "%d");
|
|
356
318
|
// A tuple matches a JSON ARRAY of EXACTLY its arity, positionally.
|
|
357
319
|
if (shape.tuple) {
|
|
358
320
|
const byIndex = [...shape.fields].sort((a, b) => Number(a.name) - Number(b.name));
|
|
359
321
|
const isArr = B.tmp();
|
|
360
|
-
B.line(`${isArr} = icmp eq i32 ${kd}, ${
|
|
322
|
+
B.line(`${isArr} = icmp eq i32 ${kd}, ${DYN_KIND.ARR}`);
|
|
361
323
|
const l1 = B.newLabel("dm.a");
|
|
362
324
|
B.condBr(isArr, l1, fail);
|
|
363
325
|
B.startBlock(l1);
|
|
@@ -382,7 +344,7 @@ export class LlDyn {
|
|
|
382
344
|
break;
|
|
383
345
|
}
|
|
384
346
|
const isObj = B.tmp();
|
|
385
|
-
B.line(`${isObj} = icmp eq i32 ${kd}, ${
|
|
347
|
+
B.line(`${isObj} = icmp eq i32 ${kd}, ${DYN_KIND.OBJ}`);
|
|
386
348
|
const l0 = B.newLabel("dm.o");
|
|
387
349
|
B.condBr(isObj, l0, fail);
|
|
388
350
|
B.startBlock(l0);
|
|
@@ -395,7 +357,7 @@ export class LlDyn {
|
|
|
395
357
|
B.line(`${has} = icmp ne ptr ${m}, null`);
|
|
396
358
|
const lTest = B.newLabel("dm.t");
|
|
397
359
|
const lNext = B.newLabel("dm.n");
|
|
398
|
-
if (
|
|
360
|
+
if (undefinedArmTag(f.type, this.host.unionsById) >= 0) {
|
|
399
361
|
// Optional-flavored field: a MISSING key is the undefined arm
|
|
400
362
|
// (a match); a PRESENT key must fit the union as usual.
|
|
401
363
|
B.condBr(has, lTest, lNext);
|
|
@@ -456,7 +418,7 @@ export class LlDyn {
|
|
|
456
418
|
const fail = B.newLabel("dm.f");
|
|
457
419
|
const kd = this.kindOf(B, "%d");
|
|
458
420
|
const isArr = B.tmp();
|
|
459
|
-
B.line(`${isArr} = icmp eq i32 ${kd}, ${
|
|
421
|
+
B.line(`${isArr} = icmp eq i32 ${kd}, ${DYN_KIND.ARR}`);
|
|
460
422
|
const l0 = B.newLabel("dm.a");
|
|
461
423
|
B.condBr(isArr, l0, fail);
|
|
462
424
|
B.startBlock(l0);
|
|
@@ -478,7 +440,7 @@ export class LlDyn {
|
|
|
478
440
|
case "union": {
|
|
479
441
|
const def = this.host.unionsById.get(t.unionId);
|
|
480
442
|
if (!def)
|
|
481
|
-
throw new
|
|
443
|
+
throw new InternalCompilerError(`llvm emitter bug: dynCheck of unknown union ${t.unionId}`);
|
|
482
444
|
// Arms in canonical order; any full match answers true.
|
|
483
445
|
const yes = B.newLabel("dm.y");
|
|
484
446
|
for (const arm of def.arms) {
|
|
@@ -499,7 +461,7 @@ export class LlDyn {
|
|
|
499
461
|
this.defs.push(`define internal zeroext i1 @${name}(ptr %d) ${FN_ATTRS} { ; matches ${key}`, B.render(), `}`, ``);
|
|
500
462
|
return name;
|
|
501
463
|
}
|
|
502
|
-
/* ── dynCheckHelper (
|
|
464
|
+
/* ── dynCheckHelper (walkers.ts, ported) ──────────────────────── */
|
|
503
465
|
/** `sc_dc_<n>(ptr d, ptr path) -> T` — validate the checked-dynamic tree against T and
|
|
504
466
|
* BUILD the typed value (+1), or throw the catchable path-annotated
|
|
505
467
|
* TypeError and return a dummy with the pending flag set. */
|
|
@@ -514,7 +476,7 @@ export class LlDyn {
|
|
|
514
476
|
const retTy = this.valTy(t);
|
|
515
477
|
const dummy = retTy === "double" ? `double ${f64Lit(0)}` : retTy === "i1" ? "i1 false" : "ptr null";
|
|
516
478
|
host.declare(`declare void @scr_dyn_check_fail(ptr, ptr, ptr)`);
|
|
517
|
-
const want = host.cstr(
|
|
479
|
+
const want = host.cstr(dynDesc(t, this.host.recordsById, this.host.unionsById));
|
|
518
480
|
const B = new BlockBuilder();
|
|
519
481
|
if (isRefCounted(t) && t.kind !== "dyn") {
|
|
520
482
|
host.declare(`declare zeroext i1 @scr_dyn_typed_ref_is(ptr, ptr, ${host.sizeType})`);
|
|
@@ -537,7 +499,7 @@ export class LlDyn {
|
|
|
537
499
|
const rc = vAdapters(host, t);
|
|
538
500
|
const kind = this.kindOf(B, "%d");
|
|
539
501
|
const capsule = B.tmp();
|
|
540
|
-
B.line(`${capsule} = icmp eq i32 ${kind}, ${
|
|
502
|
+
B.line(`${capsule} = icmp eq i32 ${kind}, ${DYN_KIND.TYPED_REF}`);
|
|
541
503
|
const lCapsule = B.newLabel("dc.tr.cap");
|
|
542
504
|
const lPlain = B.newLabel("dc.tr.plain");
|
|
543
505
|
B.condBr(capsule, lCapsule, lPlain);
|
|
@@ -566,7 +528,7 @@ export class LlDyn {
|
|
|
566
528
|
? host.recordsById.get(t.shapeId)
|
|
567
529
|
: undefined;
|
|
568
530
|
if (t.kind === "record" && !shape) {
|
|
569
|
-
throw new
|
|
531
|
+
throw new InternalCompilerError(`llvm emitter bug: cached typed-ref cast of unknown shape ${t.shapeId}`);
|
|
570
532
|
}
|
|
571
533
|
const lOk = B.newLabel("dc.tr.ok");
|
|
572
534
|
const lBad = B.newLabel("dc.tr.bad");
|
|
@@ -654,19 +616,19 @@ export class LlDyn {
|
|
|
654
616
|
};
|
|
655
617
|
switch (t.kind) {
|
|
656
618
|
case "f64": {
|
|
657
|
-
requireKind(
|
|
619
|
+
requireKind(DYN_KIND.NUM, "dc");
|
|
658
620
|
const v = this.payloadOf(B, "%d", "double");
|
|
659
621
|
B.terminate(`ret double ${v}`);
|
|
660
622
|
break;
|
|
661
623
|
}
|
|
662
624
|
case "bool": {
|
|
663
|
-
requireKind(
|
|
625
|
+
requireKind(DYN_KIND.BOOL, "dc");
|
|
664
626
|
const v = this.boolOf(B, "%d");
|
|
665
627
|
B.terminate(`ret i1 ${v}`);
|
|
666
628
|
break;
|
|
667
629
|
}
|
|
668
630
|
case "string": {
|
|
669
|
-
requireKind(
|
|
631
|
+
requireKind(DYN_KIND.STR, "dc");
|
|
670
632
|
host.declare(`declare ptr @scr_str_retain_v(ptr)`);
|
|
671
633
|
const s = this.payloadOf(B, "%d", "ptr");
|
|
672
634
|
const r = B.tmp();
|
|
@@ -685,8 +647,8 @@ export class LlDyn {
|
|
|
685
647
|
case "bytes": {
|
|
686
648
|
// `u as Uint8Array`: kind check, then a fresh COPY out.
|
|
687
649
|
if (t.elem !== "u8")
|
|
688
|
-
throw new
|
|
689
|
-
requireKind(
|
|
650
|
+
throw new InternalCompilerError(`llvm emitter bug: dynCheck of bytes<${t.elem}>`);
|
|
651
|
+
requireKind(DYN_KIND.BYTES, "dc");
|
|
690
652
|
host.declare(`declare ptr @scr_dyn_bytes_copy_out(ptr)`);
|
|
691
653
|
const r = B.tmp();
|
|
692
654
|
B.line(`${r} = call ptr @scr_dyn_bytes_copy_out(ptr %d)`);
|
|
@@ -703,11 +665,11 @@ export class LlDyn {
|
|
|
703
665
|
// %error objects rebuild once and cache the pair. The C walker's
|
|
704
666
|
// arm exactly.
|
|
705
667
|
if (t.className !== "%Error") {
|
|
706
|
-
throw new
|
|
668
|
+
throw new InternalCompilerError(`llvm emitter bug: dynCheck of class ${t.className} (only %Error extracts from the checked-dynamic tree)`);
|
|
707
669
|
}
|
|
708
670
|
const kd = this.kindOf(B, "%d");
|
|
709
671
|
const isObj = B.tmp();
|
|
710
|
-
B.line(`${isObj} = icmp eq i32 ${kd}, ${
|
|
672
|
+
B.line(`${isObj} = icmp eq i32 ${kd}, ${DYN_KIND.OBJ}`);
|
|
711
673
|
const lObj = B.newLabel("dce.o");
|
|
712
674
|
const lFail = B.newLabel("dce.f");
|
|
713
675
|
B.condBr(isObj, lObj, lFail);
|
|
@@ -730,7 +692,7 @@ export class LlDyn {
|
|
|
730
692
|
case "record": {
|
|
731
693
|
const shape = host.recordsById.get(t.shapeId);
|
|
732
694
|
if (!shape)
|
|
733
|
-
throw new
|
|
695
|
+
throw new InternalCompilerError(`llvm emitter bug: dynCheck of unknown shape ${t.shapeId}`);
|
|
734
696
|
const struct = mangleRecordStruct(t.shapeId);
|
|
735
697
|
const fieldIndex = new Map(shape.fields.map((f, i) => [f.name, i + 1]));
|
|
736
698
|
const releaseR = () => {
|
|
@@ -779,7 +741,7 @@ export class LlDyn {
|
|
|
779
741
|
if (shape.tuple) {
|
|
780
742
|
const byIndex = [...shape.fields].sort((a, b) => Number(a.name) - Number(b.name));
|
|
781
743
|
const arityWant = host.cstr(`array of length ${byIndex.length}`);
|
|
782
|
-
requireKind(
|
|
744
|
+
requireKind(DYN_KIND.ARR, "dct");
|
|
783
745
|
const len = this.lenOf(B, "%d");
|
|
784
746
|
const lenOk = B.tmp();
|
|
785
747
|
B.line(`${lenOk} = icmp eq ${host.sizeType} ${len}, ${byIndex.length}`);
|
|
@@ -803,11 +765,11 @@ export class LlDyn {
|
|
|
803
765
|
B.terminate(`ret ptr %r0`);
|
|
804
766
|
break;
|
|
805
767
|
}
|
|
806
|
-
requireKind(
|
|
768
|
+
requireKind(DYN_KIND.OBJ, "dcr");
|
|
807
769
|
B.line(`%r0 = call ptr @${mangleRecordNew(t.shapeId)}()`);
|
|
808
770
|
for (const f of shape.fields) {
|
|
809
|
-
const fieldWant = host.cstr(
|
|
810
|
-
const utag = f.type.kind === "union" ?
|
|
771
|
+
const fieldWant = host.cstr(dynDesc(f.type, this.host.recordsById, this.host.unionsById));
|
|
772
|
+
const utag = f.type.kind === "union" ? undefinedArmTag(f.type, host.unionsById) : -1;
|
|
811
773
|
const m = this.objGetLit(B, "%d", f.name);
|
|
812
774
|
if (f.type.kind === "dyn") {
|
|
813
775
|
// An `unknown` field: a present key passes through, a missing
|
|
@@ -931,7 +893,7 @@ export class LlDyn {
|
|
|
931
893
|
case "array": {
|
|
932
894
|
const elem = t.elem;
|
|
933
895
|
const c = this.dynCheckHelper(elem);
|
|
934
|
-
requireKind(
|
|
896
|
+
requireKind(DYN_KIND.ARR, "dca");
|
|
935
897
|
const n = this.lenOf(B, "%d");
|
|
936
898
|
const a = B.tmp();
|
|
937
899
|
B.line(`${a} = ${arrNewCall(host, elem, n)}`);
|
|
@@ -967,7 +929,7 @@ export class LlDyn {
|
|
|
967
929
|
case "union": {
|
|
968
930
|
const def = host.unionsById.get(t.unionId);
|
|
969
931
|
if (!def)
|
|
970
|
-
throw new
|
|
932
|
+
throw new InternalCompilerError(`llvm emitter bug: dynCheck of unknown union ${t.unionId}`);
|
|
971
933
|
// Arms in CANONICAL order, first FULL match wins. The matched
|
|
972
934
|
// arm's builder can no longer fail.
|
|
973
935
|
def.arms.forEach((arm, i) => {
|
|
@@ -1022,7 +984,7 @@ export class LlDyn {
|
|
|
1022
984
|
const rc = vAdapters(host, t);
|
|
1023
985
|
const kind = this.kindOf(B, "%d");
|
|
1024
986
|
const capsule = B.tmp();
|
|
1025
|
-
B.line(`${capsule} = icmp eq i32 ${kind}, ${
|
|
987
|
+
B.line(`${capsule} = icmp eq i32 ${kind}, ${DYN_KIND.TYPED_REF}`);
|
|
1026
988
|
const lCapsule = B.newLabel("dcu.cap");
|
|
1027
989
|
const lFail = B.newLabel("dcu.fail");
|
|
1028
990
|
B.condBr(capsule, lCapsule, lFail);
|
|
@@ -1090,7 +1052,7 @@ export class LlDyn {
|
|
|
1090
1052
|
// caps[0] obj-box owns the dyn value (untraced).
|
|
1091
1053
|
const adapter = this.dynFuncAdapterHelper(t);
|
|
1092
1054
|
const sigLit = host.cstr(key);
|
|
1093
|
-
requireKind(
|
|
1055
|
+
requireKind(DYN_KIND.FUNC, "dcf");
|
|
1094
1056
|
host.declare(`declare i32 @strcmp(ptr, ptr)`);
|
|
1095
1057
|
const sigp = B.tmp();
|
|
1096
1058
|
const sig = B.tmp();
|
|
@@ -1148,7 +1110,7 @@ export class LlDyn {
|
|
|
1148
1110
|
this.defs.push(`define internal ${retTy === "i1" ? "zeroext i1" : retTy} @${name}(ptr %d, ptr %path) ${FN_ATTRS} { ; check ${key}`, B.render(), `}`, ``);
|
|
1149
1111
|
return name;
|
|
1150
1112
|
}
|
|
1151
|
-
/* ── toDynHelper (
|
|
1113
|
+
/* ── toDynHelper (walkers.ts, ported) ─────────────────────────── */
|
|
1152
1114
|
/** `sc_td_<n>(<T> v) -> ptr` — build a fresh dyn value from a
|
|
1153
1115
|
* static one (+1), DEEP-COPYING composites. Borrows the operand.
|
|
1154
1116
|
* Never throws. */
|
|
@@ -1187,7 +1149,7 @@ export class LlDyn {
|
|
|
1187
1149
|
case "object": {
|
|
1188
1150
|
// %Error only (canConvertToDyn's gate): the checked-dynamic tree's error encoding.
|
|
1189
1151
|
if (t.className !== "%Error") {
|
|
1190
|
-
throw new
|
|
1152
|
+
throw new InternalCompilerError(`llvm emitter bug: to-dyn of class ${t.className}`);
|
|
1191
1153
|
}
|
|
1192
1154
|
host.declare(`declare ptr @scr_dyn_from_error(ptr)`);
|
|
1193
1155
|
const r = B.tmp();
|
|
@@ -1208,7 +1170,7 @@ export class LlDyn {
|
|
|
1208
1170
|
}
|
|
1209
1171
|
case "bytes": {
|
|
1210
1172
|
if (t.elem !== "u8")
|
|
1211
|
-
throw new
|
|
1173
|
+
throw new InternalCompilerError(`llvm emitter bug: to-dyn of bytes<${t.elem}>`);
|
|
1212
1174
|
host.declare(`declare ptr @scr_dyn_new_bytes_copy(ptr)`);
|
|
1213
1175
|
const r = B.tmp();
|
|
1214
1176
|
B.line(`${r} = call ptr @scr_dyn_new_bytes_copy(ptr %v)`);
|
|
@@ -1218,7 +1180,7 @@ export class LlDyn {
|
|
|
1218
1180
|
case "record": {
|
|
1219
1181
|
const shape = host.recordsById.get(t.shapeId);
|
|
1220
1182
|
if (!shape)
|
|
1221
|
-
throw new
|
|
1183
|
+
throw new InternalCompilerError(`llvm emitter bug: to-dyn of unknown shape ${t.shapeId}`);
|
|
1222
1184
|
const struct = mangleRecordStruct(t.shapeId);
|
|
1223
1185
|
const fieldIndex = new Map(shape.fields.map((f, i) => [f.name, i + 1]));
|
|
1224
1186
|
const loadFieldOf = (fname, ft) => {
|
|
@@ -1306,71 +1268,54 @@ export class LlDyn {
|
|
|
1306
1268
|
const len = B.tmp();
|
|
1307
1269
|
B.line(`${ks} = call ptr @scr_map_keys_js_order(ptr ${ovf})`);
|
|
1308
1270
|
B.line(`${len} = call double @scr_arr_len(ptr ${ks})`);
|
|
1309
|
-
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
|
|
1313
|
-
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
|
|
1320
|
-
|
|
1321
|
-
|
|
1322
|
-
|
|
1323
|
-
|
|
1324
|
-
|
|
1325
|
-
|
|
1326
|
-
|
|
1327
|
-
|
|
1328
|
-
|
|
1329
|
-
|
|
1330
|
-
|
|
1331
|
-
|
|
1332
|
-
|
|
1333
|
-
|
|
1334
|
-
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
|
|
1338
|
-
val = B.tmp();
|
|
1339
|
-
B.line(`${val} = trunc i8 ${raw} to i1`);
|
|
1271
|
+
B.countedLoop(len, (i) => {
|
|
1272
|
+
const k = B.tmp();
|
|
1273
|
+
B.line(`${k} = call ptr @scr_arr_get_ref(ptr ${ks}, double ${i}) ; key (+1)`);
|
|
1274
|
+
const { len: klen, data: kdata } = this.strParts(B, k);
|
|
1275
|
+
if (iv.kind === "f64" || iv.kind === "bool") {
|
|
1276
|
+
const outTy = iv.kind === "f64" ? "double" : "i8";
|
|
1277
|
+
const outSlot = B.slot();
|
|
1278
|
+
B.entryAllocas.push(`${outSlot} = alloca ${outTy}`);
|
|
1279
|
+
B.line(`store ${outTy} ${iv.kind === "f64" ? f64Lit(0) : "0"}, ptr ${outSlot}`);
|
|
1280
|
+
host.declare(`declare zeroext i1 @scr_map_get_str_${iv.kind === "f64" ? "f64" : "bool"}(ptr, ptr, ptr)`);
|
|
1281
|
+
const found = B.tmp();
|
|
1282
|
+
B.line(`${found} = call zeroext i1 @scr_map_get_str_${iv.kind === "f64" ? "f64" : "bool"}(ptr ${ovf}, ptr ${k}, ptr ${outSlot})`);
|
|
1283
|
+
const raw = B.tmp();
|
|
1284
|
+
B.line(`${raw} = load ${outTy}, ptr ${outSlot}`);
|
|
1285
|
+
let val = raw;
|
|
1286
|
+
if (iv.kind === "bool") {
|
|
1287
|
+
val = B.tmp();
|
|
1288
|
+
B.line(`${val} = trunc i8 ${raw} to i1`);
|
|
1289
|
+
}
|
|
1290
|
+
const boxed = B.tmp();
|
|
1291
|
+
if (iv.kind === "f64") {
|
|
1292
|
+
host.declare(`declare ptr @scr_dyn_new_num(double)`);
|
|
1293
|
+
B.line(`${boxed} = call ptr @scr_dyn_new_num(double ${val})`);
|
|
1294
|
+
}
|
|
1295
|
+
else {
|
|
1296
|
+
host.declare(`declare ptr @scr_dyn_new_bool(i1 zeroext)`);
|
|
1297
|
+
B.line(`${boxed} = call ptr @scr_dyn_new_bool(i1 ${val})`);
|
|
1298
|
+
}
|
|
1299
|
+
B.line(`call void @scr_dyn_obj_set(ptr ${d}, ptr ${kdata}, ${host.sizeType} ${klen}, ptr ${boxed})`);
|
|
1340
1300
|
}
|
|
1341
|
-
|
|
1342
|
-
|
|
1343
|
-
host.declare(`declare ptr @
|
|
1344
|
-
|
|
1301
|
+
else if (iv.kind === "dyn") {
|
|
1302
|
+
// get_str_ref returns +1 — exactly the ownership obj_set takes.
|
|
1303
|
+
host.declare(`declare ptr @scr_map_get_str_ref(ptr, ptr)`);
|
|
1304
|
+
const hit = B.tmp();
|
|
1305
|
+
B.line(`${hit} = call ptr @scr_map_get_str_ref(ptr ${ovf}, ptr ${k})`);
|
|
1306
|
+
B.line(`call void @scr_dyn_obj_set(ptr ${d}, ptr ${kdata}, ${host.sizeType} ${klen}, ptr ${hit})`);
|
|
1345
1307
|
}
|
|
1346
1308
|
else {
|
|
1347
|
-
host.declare(`declare ptr @
|
|
1348
|
-
|
|
1309
|
+
host.declare(`declare ptr @scr_map_get_str_ref(ptr, ptr)`);
|
|
1310
|
+
const hit = B.tmp();
|
|
1311
|
+
B.line(`${hit} = call ptr @scr_map_get_str_ref(ptr ${ovf}, ptr ${k})`);
|
|
1312
|
+
const conv = B.tmp();
|
|
1313
|
+
B.line(`${conv} = call ptr @${this.toDynHelper(iv)}(ptr ${hit})`);
|
|
1314
|
+
B.line(`call void @scr_dyn_obj_set(ptr ${d}, ptr ${kdata}, ${host.sizeType} ${klen}, ptr ${conv})`);
|
|
1315
|
+
B.line(`call void ${releaseSym(host, iv)}(ptr ${hit})`);
|
|
1349
1316
|
}
|
|
1350
|
-
B.line(`call void @
|
|
1351
|
-
}
|
|
1352
|
-
else if (iv.kind === "dyn") {
|
|
1353
|
-
// get_str_ref returns +1 — exactly the ownership obj_set takes.
|
|
1354
|
-
host.declare(`declare ptr @scr_map_get_str_ref(ptr, ptr)`);
|
|
1355
|
-
const hit = B.tmp();
|
|
1356
|
-
B.line(`${hit} = call ptr @scr_map_get_str_ref(ptr ${ovf}, ptr ${k})`);
|
|
1357
|
-
B.line(`call void @scr_dyn_obj_set(ptr ${d}, ptr ${kdata}, ${host.sizeType} ${klen}, ptr ${hit})`);
|
|
1358
|
-
}
|
|
1359
|
-
else {
|
|
1360
|
-
host.declare(`declare ptr @scr_map_get_str_ref(ptr, ptr)`);
|
|
1361
|
-
const hit = B.tmp();
|
|
1362
|
-
B.line(`${hit} = call ptr @scr_map_get_str_ref(ptr ${ovf}, ptr ${k})`);
|
|
1363
|
-
const conv = B.tmp();
|
|
1364
|
-
B.line(`${conv} = call ptr @${this.toDynHelper(iv)}(ptr ${hit})`);
|
|
1365
|
-
B.line(`call void @scr_dyn_obj_set(ptr ${d}, ptr ${kdata}, ${host.sizeType} ${klen}, ptr ${conv})`);
|
|
1366
|
-
B.line(`call void ${releaseSym(host, iv)}(ptr ${hit})`);
|
|
1367
|
-
}
|
|
1368
|
-
B.line(`call void @scr_str_release(ptr ${k})`);
|
|
1369
|
-
const i2 = B.tmp();
|
|
1370
|
-
B.line(`${i2} = fadd double ${i}, ${f64Lit(1)}`);
|
|
1371
|
-
B.line(`store double ${i2}, ptr ${iSlot}`);
|
|
1372
|
-
B.br(lc);
|
|
1373
|
-
B.startBlock(le);
|
|
1317
|
+
B.line(`call void @scr_str_release(ptr ${k})`);
|
|
1318
|
+
});
|
|
1374
1319
|
B.line(`call void @scr_arr_release(ptr ${ks})`);
|
|
1375
1320
|
}
|
|
1376
1321
|
if (cyclicRec)
|
|
@@ -1394,51 +1339,34 @@ export class LlDyn {
|
|
|
1394
1339
|
B.line(`${d} = call ptr @scr_dyn_new_arr()`);
|
|
1395
1340
|
const len = B.tmp();
|
|
1396
1341
|
B.line(`${len} = call double @scr_arr_len(ptr %v)`);
|
|
1397
|
-
|
|
1398
|
-
|
|
1399
|
-
|
|
1400
|
-
|
|
1401
|
-
|
|
1402
|
-
|
|
1403
|
-
|
|
1404
|
-
|
|
1405
|
-
|
|
1406
|
-
|
|
1407
|
-
|
|
1408
|
-
|
|
1409
|
-
|
|
1410
|
-
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
|
|
1414
|
-
host.declare(`declare ${elem.kind === "bool" ? "zeroext i1" : accTy} @scr_arr_get_${acc}(ptr, double)`);
|
|
1415
|
-
const e = B.tmp();
|
|
1416
|
-
B.line(`${e} = call ${accTy} @scr_arr_get_${acc}(ptr %v, double ${i})`);
|
|
1417
|
-
const boxed = B.tmp();
|
|
1418
|
-
if (elem.kind === "f64") {
|
|
1419
|
-
host.declare(`declare ptr @scr_dyn_new_num(double)`);
|
|
1420
|
-
B.line(`${boxed} = call ptr @scr_dyn_new_num(double ${e})`);
|
|
1342
|
+
B.countedLoop(len, (i) => {
|
|
1343
|
+
if (elem.kind === "f64" || elem.kind === "bool") {
|
|
1344
|
+
const acc = elem.kind;
|
|
1345
|
+
const accTy = elem.kind === "f64" ? "double" : "i1";
|
|
1346
|
+
host.declare(`declare ${elem.kind === "bool" ? "zeroext i1" : accTy} @scr_arr_get_${acc}(ptr, double)`);
|
|
1347
|
+
const e = B.tmp();
|
|
1348
|
+
B.line(`${e} = call ${accTy} @scr_arr_get_${acc}(ptr %v, double ${i})`);
|
|
1349
|
+
const boxed = B.tmp();
|
|
1350
|
+
if (elem.kind === "f64") {
|
|
1351
|
+
host.declare(`declare ptr @scr_dyn_new_num(double)`);
|
|
1352
|
+
B.line(`${boxed} = call ptr @scr_dyn_new_num(double ${e})`);
|
|
1353
|
+
}
|
|
1354
|
+
else {
|
|
1355
|
+
host.declare(`declare ptr @scr_dyn_new_bool(i1 zeroext)`);
|
|
1356
|
+
B.line(`${boxed} = call ptr @scr_dyn_new_bool(i1 ${e})`);
|
|
1357
|
+
}
|
|
1358
|
+
B.line(`call void @scr_dyn_arr_push(ptr ${d}, ptr ${boxed})`);
|
|
1421
1359
|
}
|
|
1422
1360
|
else {
|
|
1423
|
-
host.declare(`declare ptr @
|
|
1424
|
-
|
|
1361
|
+
host.declare(`declare ptr @scr_arr_get_ref(ptr, double)`);
|
|
1362
|
+
const e = B.tmp();
|
|
1363
|
+
B.line(`${e} = call ptr @scr_arr_get_ref(ptr %v, double ${i}) ; +1`);
|
|
1364
|
+
const conv = B.tmp();
|
|
1365
|
+
B.line(`${conv} = call ptr @${this.toDynHelper(elem)}(ptr ${e})`);
|
|
1366
|
+
B.line(`call void @scr_dyn_arr_push(ptr ${d}, ptr ${conv})`);
|
|
1367
|
+
B.line(`call void ${releaseSym(host, elem)}(ptr ${e})`);
|
|
1425
1368
|
}
|
|
1426
|
-
|
|
1427
|
-
}
|
|
1428
|
-
else {
|
|
1429
|
-
host.declare(`declare ptr @scr_arr_get_ref(ptr, double)`);
|
|
1430
|
-
const e = B.tmp();
|
|
1431
|
-
B.line(`${e} = call ptr @scr_arr_get_ref(ptr %v, double ${i}) ; +1`);
|
|
1432
|
-
const conv = B.tmp();
|
|
1433
|
-
B.line(`${conv} = call ptr @${this.toDynHelper(elem)}(ptr ${e})`);
|
|
1434
|
-
B.line(`call void @scr_dyn_arr_push(ptr ${d}, ptr ${conv})`);
|
|
1435
|
-
B.line(`call void ${releaseSym(host, elem)}(ptr ${e})`);
|
|
1436
|
-
}
|
|
1437
|
-
const i2 = B.tmp();
|
|
1438
|
-
B.line(`${i2} = fadd double ${i}, ${f64Lit(1)}`);
|
|
1439
|
-
B.line(`store double ${i2}, ptr ${iSlot}`);
|
|
1440
|
-
B.br(lc);
|
|
1441
|
-
B.startBlock(le);
|
|
1369
|
+
});
|
|
1442
1370
|
if (cyclicArr)
|
|
1443
1371
|
B.line(`call void @scr_dyn_from_leave()`);
|
|
1444
1372
|
B.terminate(`ret ptr ${d}`);
|
|
@@ -1447,7 +1375,7 @@ export class LlDyn {
|
|
|
1447
1375
|
case "union": {
|
|
1448
1376
|
const def = host.unionsById.get(t.unionId);
|
|
1449
1377
|
if (!def)
|
|
1450
|
-
throw new
|
|
1378
|
+
throw new InternalCompilerError(`llvm emitter bug: to-dyn of unknown union ${t.unionId}`);
|
|
1451
1379
|
const tagp = B.tmp();
|
|
1452
1380
|
const tag = B.tmp();
|
|
1453
1381
|
B.line(`${tagp} = getelementptr inbounds %ScrUnion, ptr %v, i64 0, i32 1`);
|
|
@@ -1555,7 +1483,7 @@ export class LlDyn {
|
|
|
1555
1483
|
return name;
|
|
1556
1484
|
}
|
|
1557
1485
|
/** The checked-dynamic tree-promise settle adapter for one fulfillment payload type —
|
|
1558
|
-
* promiseDynAdapterHelper (
|
|
1486
|
+
* promiseDynAdapterHelper (walkers.ts), ported:
|
|
1559
1487
|
* `void sc_pda_<n>(ptr %dst, ptr %src)` reads src's fulfilled payload
|
|
1560
1488
|
* by its compile-time kind, converts it to a dyn value, and fulfills
|
|
1561
1489
|
* dst with it (scr_dyn_new_promise_adapting's callback; rejections
|
|
@@ -1661,11 +1589,11 @@ export class LlDyn {
|
|
|
1661
1589
|
const kd = this.kindOf(B, "%d");
|
|
1662
1590
|
const done = B.newLabel("ds.d");
|
|
1663
1591
|
const labels = new Map();
|
|
1664
|
-
for (const k of [
|
|
1592
|
+
for (const k of [DYN_KIND.NULL, DYN_KIND.BOOL, DYN_KIND.NUM, DYN_KIND.STR, DYN_KIND.ARR, DYN_KIND.OBJ, DYN_KIND.UNDEF, DYN_KIND.BYTES, DYN_KIND.FUNC, DYN_KIND.HANDLE, DYN_KIND.PROMISE, DYN_KIND.JSVAL, DYN_KIND.TYPED_REF]) {
|
|
1665
1593
|
labels.set(k, B.newLabel(`ds.k${k}`));
|
|
1666
1594
|
}
|
|
1667
1595
|
B.terminate(`switch i32 ${kd}, label %${done} [ ${[...labels].map(([k, l]) => `i32 ${k}, label %${l}`).join(" ")} ]`);
|
|
1668
|
-
B.startBlock(labels.get(
|
|
1596
|
+
B.startBlock(labels.get(DYN_KIND.JSVAL));
|
|
1669
1597
|
{
|
|
1670
1598
|
// Island-held: the engine's own ToString (a bridged failure
|
|
1671
1599
|
// leaves the exception pending and appends nothing).
|
|
@@ -1673,7 +1601,7 @@ export class LlDyn {
|
|
|
1673
1601
|
B.line(`call void @scr_dyn_isl_tostr_buf(ptr %b, ptr %d)`);
|
|
1674
1602
|
B.br(done);
|
|
1675
1603
|
}
|
|
1676
|
-
B.startBlock(labels.get(
|
|
1604
|
+
B.startBlock(labels.get(DYN_KIND.TYPED_REF));
|
|
1677
1605
|
{
|
|
1678
1606
|
host.declare(`declare ptr @scr_dyn_typed_ref_materialize(ptr)`);
|
|
1679
1607
|
host.declare(`declare void @scr_dyn_release_v(ptr)`);
|
|
@@ -1683,13 +1611,13 @@ export class LlDyn {
|
|
|
1683
1611
|
B.line(`call void @scr_dyn_release_v(ptr ${materialized})`);
|
|
1684
1612
|
B.br(done);
|
|
1685
1613
|
}
|
|
1686
|
-
B.startBlock(labels.get(
|
|
1614
|
+
B.startBlock(labels.get(DYN_KIND.UNDEF));
|
|
1687
1615
|
this.puts(B, "%b", "undefined");
|
|
1688
1616
|
B.br(done);
|
|
1689
|
-
B.startBlock(labels.get(
|
|
1617
|
+
B.startBlock(labels.get(DYN_KIND.NULL));
|
|
1690
1618
|
this.puts(B, "%b", "null");
|
|
1691
1619
|
B.br(done);
|
|
1692
|
-
B.startBlock(labels.get(
|
|
1620
|
+
B.startBlock(labels.get(DYN_KIND.BOOL));
|
|
1693
1621
|
{
|
|
1694
1622
|
const bv = this.boolOf(B, "%d");
|
|
1695
1623
|
const s = B.tmp();
|
|
@@ -1697,7 +1625,7 @@ export class LlDyn {
|
|
|
1697
1625
|
B.line(`call void @scr_jb_puts(ptr %b, ptr ${s})`);
|
|
1698
1626
|
B.br(done);
|
|
1699
1627
|
}
|
|
1700
|
-
B.startBlock(labels.get(
|
|
1628
|
+
B.startBlock(labels.get(DYN_KIND.NUM));
|
|
1701
1629
|
{
|
|
1702
1630
|
// String(n): NaN/Infinity spelled out, not the JSON null.
|
|
1703
1631
|
const x = this.payloadOf(B, "%d", "double");
|
|
@@ -1707,13 +1635,13 @@ export class LlDyn {
|
|
|
1707
1635
|
B.line(`call void @scr_str_release(ptr ${s})`);
|
|
1708
1636
|
B.br(done);
|
|
1709
1637
|
}
|
|
1710
|
-
B.startBlock(labels.get(
|
|
1638
|
+
B.startBlock(labels.get(DYN_KIND.STR));
|
|
1711
1639
|
{
|
|
1712
1640
|
const s = this.payloadOf(B, "%d", "ptr");
|
|
1713
1641
|
this.putScrStr(B, "%b", s);
|
|
1714
1642
|
B.br(done);
|
|
1715
1643
|
}
|
|
1716
|
-
B.startBlock(labels.get(
|
|
1644
|
+
B.startBlock(labels.get(DYN_KIND.ARR));
|
|
1717
1645
|
{
|
|
1718
1646
|
// Array.prototype.toString: join(",") — null/undefined ELEMENTS
|
|
1719
1647
|
// print empty (unlike top level), nested arrays flatten.
|
|
@@ -1734,8 +1662,8 @@ export class LlDyn {
|
|
|
1734
1662
|
const isU = B.tmp();
|
|
1735
1663
|
const isN = B.tmp();
|
|
1736
1664
|
const unit = B.tmp();
|
|
1737
|
-
B.line(`${isU} = icmp eq i32 ${ek}, ${
|
|
1738
|
-
B.line(`${isN} = icmp eq i32 ${ek}, ${
|
|
1665
|
+
B.line(`${isU} = icmp eq i32 ${ek}, ${DYN_KIND.UNDEF}`);
|
|
1666
|
+
B.line(`${isN} = icmp eq i32 ${ek}, ${DYN_KIND.NULL}`);
|
|
1739
1667
|
B.line(`${unit} = or i1 ${isU}, ${isN}`);
|
|
1740
1668
|
const lSkip = B.newLabel("ds.sk");
|
|
1741
1669
|
const lRec = B.newLabel("ds.rc");
|
|
@@ -1747,7 +1675,7 @@ export class LlDyn {
|
|
|
1747
1675
|
});
|
|
1748
1676
|
B.br(done);
|
|
1749
1677
|
}
|
|
1750
|
-
B.startBlock(labels.get(
|
|
1678
|
+
B.startBlock(labels.get(DYN_KIND.OBJ));
|
|
1751
1679
|
{
|
|
1752
1680
|
// The checked-dynamic tree's error encoding renders Error.prototype.toString;
|
|
1753
1681
|
// plain objects are "[object Object]".
|
|
@@ -1776,7 +1704,7 @@ export class LlDyn {
|
|
|
1776
1704
|
B.startBlock(lt);
|
|
1777
1705
|
const k = this.kindOf(B, m);
|
|
1778
1706
|
const isStr = B.tmp();
|
|
1779
|
-
B.line(`${isStr} = icmp eq i32 ${k}, ${
|
|
1707
|
+
B.line(`${isStr} = icmp eq i32 ${k}, ${DYN_KIND.STR}`);
|
|
1780
1708
|
const ls = B.newLabel(`${hint}.s`);
|
|
1781
1709
|
B.condBr(isStr, ls, lj);
|
|
1782
1710
|
B.startBlock(ls);
|
|
@@ -1839,7 +1767,7 @@ export class LlDyn {
|
|
|
1839
1767
|
putIf(ems, "ds.pm");
|
|
1840
1768
|
B.br(done);
|
|
1841
1769
|
}
|
|
1842
|
-
B.startBlock(labels.get(
|
|
1770
|
+
B.startBlock(labels.get(DYN_KIND.BYTES));
|
|
1843
1771
|
{
|
|
1844
1772
|
// Buffer-flavored values coerce utf8; plain Uint8Array joins
|
|
1845
1773
|
// its elements.
|
|
@@ -1894,7 +1822,7 @@ export class LlDyn {
|
|
|
1894
1822
|
});
|
|
1895
1823
|
B.br(done);
|
|
1896
1824
|
}
|
|
1897
|
-
B.startBlock(labels.get(
|
|
1825
|
+
B.startBlock(labels.get(DYN_KIND.FUNC));
|
|
1898
1826
|
{
|
|
1899
1827
|
// Function.prototype.toString: the native-code form.
|
|
1900
1828
|
this.puts(B, "%b", "function ");
|
|
@@ -1914,10 +1842,10 @@ export class LlDyn {
|
|
|
1914
1842
|
this.puts(B, "%b", "() { [native code] }");
|
|
1915
1843
|
B.br(done);
|
|
1916
1844
|
}
|
|
1917
|
-
B.startBlock(labels.get(
|
|
1845
|
+
B.startBlock(labels.get(DYN_KIND.HANDLE));
|
|
1918
1846
|
this.puts(B, "%b", "[object Object]");
|
|
1919
1847
|
B.br(done);
|
|
1920
|
-
B.startBlock(labels.get(
|
|
1848
|
+
B.startBlock(labels.get(DYN_KIND.PROMISE));
|
|
1921
1849
|
// Object.prototype.toString with the Promise @@toStringTag.
|
|
1922
1850
|
this.puts(B, "%b", "[object Promise]");
|
|
1923
1851
|
B.br(done);
|
|
@@ -1930,7 +1858,7 @@ export class LlDyn {
|
|
|
1930
1858
|
const B = new BlockBuilder();
|
|
1931
1859
|
const kd = this.kindOf(B, "%d");
|
|
1932
1860
|
const isStr = B.tmp();
|
|
1933
|
-
B.line(`${isStr} = icmp eq i32 ${kd}, ${
|
|
1861
|
+
B.line(`${isStr} = icmp eq i32 ${kd}, ${DYN_KIND.STR}`);
|
|
1934
1862
|
const lFast = B.newLabel("ds.f");
|
|
1935
1863
|
const lSlow = B.newLabel("ds.s");
|
|
1936
1864
|
B.condBr(isStr, lFast, lSlow);
|
|
@@ -1952,7 +1880,7 @@ export class LlDyn {
|
|
|
1952
1880
|
}
|
|
1953
1881
|
return name;
|
|
1954
1882
|
}
|
|
1955
|
-
/* ── caughtToDyn (
|
|
1883
|
+
/* ── caughtToDyn (walkers.ts, ported) ─────────────────────────── */
|
|
1956
1884
|
/** A catch binding flowing into an `unknown` slot: the typed→unknown
|
|
1957
1885
|
* deep-copy stance over the exception snapshot's runtime kind. */
|
|
1958
1886
|
caughtToDynHelper() {
|
|
@@ -2085,8 +2013,8 @@ export class LlDyn {
|
|
|
2085
2013
|
const isU = B.tmp();
|
|
2086
2014
|
const isN = B.tmp();
|
|
2087
2015
|
const unit = B.tmp();
|
|
2088
|
-
B.line(`${isU} = icmp eq i32 ${kd}, ${
|
|
2089
|
-
B.line(`${isN} = icmp eq i32 ${kd}, ${
|
|
2016
|
+
B.line(`${isU} = icmp eq i32 ${kd}, ${DYN_KIND.UNDEF}`);
|
|
2017
|
+
B.line(`${isN} = icmp eq i32 ${kd}, ${DYN_KIND.NULL}`);
|
|
2090
2018
|
B.line(`${unit} = or i1 ${isU}, ${isN}`);
|
|
2091
2019
|
const lUnit = B.newLabel("kg.u");
|
|
2092
2020
|
const lNext = B.newLabel("kg.n");
|
|
@@ -2127,7 +2055,7 @@ export class LlDyn {
|
|
|
2127
2055
|
// ordinary property reads while the capsule itself keeps identity.
|
|
2128
2056
|
{
|
|
2129
2057
|
const isTyped = B.tmp();
|
|
2130
|
-
B.line(`${isTyped} = icmp eq i32 ${kd}, ${
|
|
2058
|
+
B.line(`${isTyped} = icmp eq i32 ${kd}, ${DYN_KIND.TYPED_REF}`);
|
|
2131
2059
|
const lTyped = B.newLabel("kg.tr");
|
|
2132
2060
|
const lNext = B.newLabel("kg.n");
|
|
2133
2061
|
B.condBr(isTyped, lTyped, lNext);
|
|
@@ -2147,7 +2075,7 @@ export class LlDyn {
|
|
|
2147
2075
|
// scalar-normalized — the routed keyed read that retired the fence.
|
|
2148
2076
|
{
|
|
2149
2077
|
const isJv = B.tmp();
|
|
2150
|
-
B.line(`${isJv} = icmp eq i32 ${kd}, ${
|
|
2078
|
+
B.line(`${isJv} = icmp eq i32 ${kd}, ${DYN_KIND.JSVAL}`);
|
|
2151
2079
|
const lJv = B.newLabel("kg.jv");
|
|
2152
2080
|
const lNext = B.newLabel("kg.n");
|
|
2153
2081
|
B.condBr(isJv, lJv, lNext);
|
|
@@ -2161,7 +2089,7 @@ export class LlDyn {
|
|
|
2161
2089
|
// OBJ: the own member (+1) or the undefined singleton.
|
|
2162
2090
|
{
|
|
2163
2091
|
const isObj = B.tmp();
|
|
2164
|
-
B.line(`${isObj} = icmp eq i32 ${kd}, ${
|
|
2092
|
+
B.line(`${isObj} = icmp eq i32 ${kd}, ${DYN_KIND.OBJ}`);
|
|
2165
2093
|
const lObj = B.newLabel("kg.ob");
|
|
2166
2094
|
const lNext = B.newLabel("kg.n");
|
|
2167
2095
|
B.condBr(isObj, lObj, lNext);
|
|
@@ -2181,7 +2109,7 @@ export class LlDyn {
|
|
|
2181
2109
|
// HANDLE: the tag's modeled properties through the installed ops.
|
|
2182
2110
|
{
|
|
2183
2111
|
const isH = B.tmp();
|
|
2184
|
-
B.line(`${isH} = icmp eq i32 ${kd}, ${
|
|
2112
|
+
B.line(`${isH} = icmp eq i32 ${kd}, ${DYN_KIND.HANDLE}`);
|
|
2185
2113
|
const lH = B.newLabel("kg.h");
|
|
2186
2114
|
const lNext = B.newLabel("kg.n");
|
|
2187
2115
|
B.condBr(isH, lH, lNext);
|
|
@@ -2290,7 +2218,7 @@ export class LlDyn {
|
|
|
2290
2218
|
// BYTES: .length and canonical-index byte reads answer like Node.
|
|
2291
2219
|
{
|
|
2292
2220
|
const isB = B.tmp();
|
|
2293
|
-
B.line(`${isB} = icmp eq i32 ${kd}, ${
|
|
2221
|
+
B.line(`${isB} = icmp eq i32 ${kd}, ${DYN_KIND.BYTES}`);
|
|
2294
2222
|
const lB = B.newLabel("kg.by");
|
|
2295
2223
|
const lNext = B.newLabel("kg.n");
|
|
2296
2224
|
B.condBr(isB, lB, lNext);
|
|
@@ -2339,7 +2267,7 @@ export class LlDyn {
|
|
|
2339
2267
|
// FUNC: own props (defineProperties writes), then name/length.
|
|
2340
2268
|
{
|
|
2341
2269
|
const isF = B.tmp();
|
|
2342
|
-
B.line(`${isF} = icmp eq i32 ${kd}, ${
|
|
2270
|
+
B.line(`${isF} = icmp eq i32 ${kd}, ${DYN_KIND.FUNC}`);
|
|
2343
2271
|
const lF = B.newLabel("kg.fn");
|
|
2344
2272
|
const lNext = B.newLabel("kg.n");
|
|
2345
2273
|
B.condBr(isF, lF, lNext);
|
|
@@ -2363,8 +2291,8 @@ export class LlDyn {
|
|
|
2363
2291
|
const isA = B.tmp();
|
|
2364
2292
|
const isS = B.tmp();
|
|
2365
2293
|
const either = B.tmp();
|
|
2366
|
-
B.line(`${isA} = icmp eq i32 ${kd}, ${
|
|
2367
|
-
B.line(`${isS} = icmp eq i32 ${kd}, ${
|
|
2294
|
+
B.line(`${isA} = icmp eq i32 ${kd}, ${DYN_KIND.ARR}`);
|
|
2295
|
+
B.line(`${isS} = icmp eq i32 ${kd}, ${DYN_KIND.STR}`);
|
|
2368
2296
|
B.line(`${either} = or i1 ${isA}, ${isS}`);
|
|
2369
2297
|
const lAS = B.newLabel("kg.as");
|
|
2370
2298
|
const lNext = B.newLabel("kg.n");
|
|
@@ -2462,8 +2390,8 @@ export class LlDyn {
|
|
|
2462
2390
|
const isU = B.tmp();
|
|
2463
2391
|
const isN = B.tmp();
|
|
2464
2392
|
const unit = B.tmp();
|
|
2465
|
-
B.line(`${isU} = icmp eq i32 ${kd}, ${
|
|
2466
|
-
B.line(`${isN} = icmp eq i32 ${kd}, ${
|
|
2393
|
+
B.line(`${isU} = icmp eq i32 ${kd}, ${DYN_KIND.UNDEF}`);
|
|
2394
|
+
B.line(`${isN} = icmp eq i32 ${kd}, ${DYN_KIND.NULL}`);
|
|
2467
2395
|
B.line(`${unit} = or i1 ${isU}, ${isN}`);
|
|
2468
2396
|
const lThrow = B.newLabel("ddc.t");
|
|
2469
2397
|
const lOk = B.newLabel("ddc.o");
|
|
@@ -2526,7 +2454,7 @@ export class LlDyn {
|
|
|
2526
2454
|
// Typed stream capsules iterate their cached, refreshed dyn view.
|
|
2527
2455
|
{
|
|
2528
2456
|
const isTyped = B.tmp();
|
|
2529
|
-
B.line(`${isTyped} = icmp eq i32 ${kd}, ${
|
|
2457
|
+
B.line(`${isTyped} = icmp eq i32 ${kd}, ${DYN_KIND.TYPED_REF}`);
|
|
2530
2458
|
const lTyped = B.newLabel("din.tr");
|
|
2531
2459
|
const lNext = B.newLabel("din.nt");
|
|
2532
2460
|
B.condBr(isTyped, lTyped, lNext);
|
|
@@ -2546,7 +2474,7 @@ export class LlDyn {
|
|
|
2546
2474
|
// dyn-routing-ops).
|
|
2547
2475
|
{
|
|
2548
2476
|
const isJv = B.tmp();
|
|
2549
|
-
B.line(`${isJv} = icmp eq i32 ${kd}, ${
|
|
2477
|
+
B.line(`${isJv} = icmp eq i32 ${kd}, ${DYN_KIND.JSVAL}`);
|
|
2550
2478
|
const lJv = B.newLabel("din.jv");
|
|
2551
2479
|
const lNotJv = B.newLabel("din.njv");
|
|
2552
2480
|
B.condBr(isJv, lJv, lNotJv);
|
|
@@ -2562,9 +2490,9 @@ export class LlDyn {
|
|
|
2562
2490
|
const okB = B.tmp();
|
|
2563
2491
|
const ok01 = B.tmp();
|
|
2564
2492
|
const ok = B.tmp();
|
|
2565
|
-
B.line(`${okA} = icmp eq i32 ${kd}, ${
|
|
2566
|
-
B.line(`${okS} = icmp eq i32 ${kd}, ${
|
|
2567
|
-
B.line(`${okB} = icmp eq i32 ${kd}, ${
|
|
2493
|
+
B.line(`${okA} = icmp eq i32 ${kd}, ${DYN_KIND.ARR}`);
|
|
2494
|
+
B.line(`${okS} = icmp eq i32 ${kd}, ${DYN_KIND.STR}`);
|
|
2495
|
+
B.line(`${okB} = icmp eq i32 ${kd}, ${DYN_KIND.BYTES}`);
|
|
2568
2496
|
B.line(`${ok01} = or i1 ${okA}, ${okS}`);
|
|
2569
2497
|
B.line(`${ok} = or i1 ${ok01}, ${okB}`);
|
|
2570
2498
|
const lGo = B.newLabel("din.g");
|
|
@@ -2582,7 +2510,7 @@ export class LlDyn {
|
|
|
2582
2510
|
const lF = B.newLabel("din.f");
|
|
2583
2511
|
const lDef = B.newLabel("din.d");
|
|
2584
2512
|
const lTail = B.newLabel("din.e");
|
|
2585
|
-
B.terminate(`switch i32 ${kd}, label %${lDef} [ i32 ${
|
|
2513
|
+
B.terminate(`switch i32 ${kd}, label %${lDef} [ i32 ${DYN_KIND.UNDEF}, label %${lU} i32 ${DYN_KIND.NULL}, label %${lN} i32 ${DYN_KIND.BOOL}, label %${lB2} i32 ${DYN_KIND.NUM}, label %${lNum} i32 ${DYN_KIND.FUNC}, label %${lF} ]`);
|
|
2586
2514
|
B.startBlock(lU);
|
|
2587
2515
|
this.puts(B, buf, "undefined");
|
|
2588
2516
|
B.br(lTail);
|