@scriptc/compiler 0.3.2 → 0.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ambient/scriptc-node-fallback.d.ts +490 -39
- package/dist/backend/cycle-analysis.js +6 -1
- package/dist/backend/cycle-analysis.js.map +1 -1
- package/dist/backend/llvm/alloc.js +24 -10
- package/dist/backend/llvm/alloc.js.map +1 -1
- package/dist/backend/llvm/alloc.test.js +47 -1
- package/dist/backend/llvm/alloc.test.js.map +1 -1
- package/dist/backend/llvm/array-search.d.ts +8 -0
- package/dist/backend/llvm/array-search.js +52 -0
- package/dist/backend/llvm/array-search.js.map +1 -0
- package/dist/backend/llvm/array-search.test.d.ts +1 -0
- package/dist/backend/llvm/array-search.test.js +72 -0
- package/dist/backend/llvm/array-search.test.js.map +1 -0
- package/dist/backend/llvm/call-lifetimes.d.ts +8 -1
- package/dist/backend/llvm/call-lifetimes.js +33 -11
- package/dist/backend/llvm/call-lifetimes.js.map +1 -1
- package/dist/backend/llvm/call-lifetimes.test.js +54 -0
- package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/classes.js +87 -36
- package/dist/backend/llvm/classes.js.map +1 -1
- package/dist/backend/llvm/common.d.ts +1 -1
- package/dist/backend/llvm/common.js +1 -1
- package/dist/backend/llvm/dense-array-access.d.ts +5 -0
- package/dist/backend/llvm/dense-array-access.js +1 -1
- package/dist/backend/llvm/dense-array-access.js.map +1 -1
- package/dist/backend/llvm/dyn.d.ts +4 -0
- package/dist/backend/llvm/dyn.js +73 -9
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emitter.d.ts +65 -14
- package/dist/backend/llvm/emitter.js +297 -81
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/emitter.test.js +26 -3
- package/dist/backend/llvm/emitter.test.js.map +1 -1
- package/dist/backend/llvm/expr-async.js +52 -1
- package/dist/backend/llvm/expr-async.js.map +1 -1
- package/dist/backend/llvm/expr-bytes.js +11 -0
- package/dist/backend/llvm/expr-bytes.js.map +1 -1
- package/dist/backend/llvm/expr-callbacks.js +16 -2
- package/dist/backend/llvm/expr-callbacks.js.map +1 -1
- package/dist/backend/llvm/expr-calls.js +8 -1
- package/dist/backend/llvm/expr-calls.js.map +1 -1
- package/dist/backend/llvm/expr-containers.js +42 -15
- package/dist/backend/llvm/expr-containers.js.map +1 -1
- package/dist/backend/llvm/expr-dynamic.js +19 -8
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.js +28 -30
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-records.js +8 -4
- package/dist/backend/llvm/expr-records.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.js +35 -32
- package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
- package/dist/backend/llvm/expr-stream-callbacks.d.ts +13 -2
- package/dist/backend/llvm/expr-stream-callbacks.js +80 -5
- package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
- package/dist/backend/llvm/inline-unions.d.ts +48 -0
- package/dist/backend/llvm/inline-unions.js +134 -0
- package/dist/backend/llvm/inline-unions.js.map +1 -0
- package/dist/backend/llvm/inline-unions.test.d.ts +1 -0
- package/dist/backend/llvm/inline-unions.test.js +124 -0
- package/dist/backend/llvm/inline-unions.test.js.map +1 -0
- package/dist/backend/llvm/integer-remainder.d.ts +28 -5
- package/dist/backend/llvm/integer-remainder.js +80 -9
- package/dist/backend/llvm/integer-remainder.js.map +1 -1
- package/dist/backend/llvm/lib-dispatch.js +163 -28
- package/dist/backend/llvm/lib-dispatch.js.map +1 -1
- package/dist/backend/llvm/lib-filesystem.js +125 -7
- package/dist/backend/llvm/lib-filesystem.js.map +1 -1
- package/dist/backend/llvm/lib-network.js +9 -6
- package/dist/backend/llvm/lib-network.js.map +1 -1
- package/dist/backend/llvm/lib-process.js +2 -2
- package/dist/backend/llvm/lib-process.js.map +1 -1
- package/dist/backend/llvm/lib-shared.js +132 -0
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/lib-stream.js +97 -0
- package/dist/backend/llvm/lib-stream.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.js +7 -3
- package/dist/backend/llvm/local-array-reads.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.test.js +6 -3
- package/dist/backend/llvm/local-array-reads.test.js.map +1 -1
- package/dist/backend/llvm/local-union-storage.d.ts +2 -0
- package/dist/backend/llvm/local-union-storage.js +5 -0
- package/dist/backend/llvm/local-union-storage.js.map +1 -1
- package/dist/backend/llvm/local-union-storage.test.js +1 -0
- package/dist/backend/llvm/local-union-storage.test.js.map +1 -1
- package/dist/backend/llvm/loop-array-borrows.d.ts +8 -2
- package/dist/backend/llvm/loop-array-borrows.js +93 -13
- package/dist/backend/llvm/loop-array-borrows.js.map +1 -1
- package/dist/backend/llvm/map-number-lookup.d.ts +20 -0
- package/dist/backend/llvm/map-number-lookup.js +66 -0
- package/dist/backend/llvm/map-number-lookup.js.map +1 -1
- package/dist/backend/llvm/map-number-lookup.test.d.ts +1 -0
- package/dist/backend/llvm/map-number-lookup.test.js +102 -0
- package/dist/backend/llvm/map-number-lookup.test.js.map +1 -0
- package/dist/backend/llvm/map-read-lifetimes.js +1 -0
- package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
- package/dist/backend/llvm/publish.d.ts +4 -0
- package/dist/backend/llvm/publish.js +3 -1
- package/dist/backend/llvm/publish.js.map +1 -1
- package/dist/backend/llvm/record-results.d.ts +8 -5
- package/dist/backend/llvm/record-results.js +20 -12
- package/dist/backend/llvm/record-results.js.map +1 -1
- package/dist/backend/llvm/reference-effects.js +13 -0
- package/dist/backend/llvm/reference-effects.js.map +1 -1
- package/dist/backend/llvm/reference-writes.js +14 -0
- package/dist/backend/llvm/reference-writes.js.map +1 -1
- package/dist/backend/llvm/regions.d.ts +1 -0
- package/dist/backend/llvm/regions.js +12 -7
- package/dist/backend/llvm/regions.js.map +1 -1
- package/dist/backend/llvm/serialized-ir-emission.test.js +2 -0
- package/dist/backend/llvm/serialized-ir-emission.test.js.map +1 -1
- package/dist/backend/llvm/shapes.d.ts +56 -10
- package/dist/backend/llvm/shapes.js +178 -39
- package/dist/backend/llvm/shapes.js.map +1 -1
- package/dist/backend/llvm/shapes.test.js +61 -3
- package/dist/backend/llvm/shapes.test.js.map +1 -1
- package/dist/backend/llvm/stack-objects.js +16 -4
- package/dist/backend/llvm/stack-objects.js.map +1 -1
- package/dist/backend/llvm/stack-objects.test.js +3 -0
- package/dist/backend/llvm/stack-objects.test.js.map +1 -1
- package/dist/backend/llvm/walkers.d.ts +11 -0
- package/dist/backend/llvm/walkers.js +106 -10
- package/dist/backend/llvm/walkers.js.map +1 -1
- package/dist/backend/may-throw.js +9 -4
- package/dist/backend/may-throw.js.map +1 -1
- package/dist/backend/native/contracts.d.ts +2 -2
- package/dist/backend/native/executable.js +14 -3
- package/dist/backend/native/executable.js.map +1 -1
- package/dist/backend/native/runtime-inputs.d.ts +1 -1
- package/dist/backend/native/runtime-inputs.js +1 -0
- package/dist/backend/native/runtime-inputs.js.map +1 -1
- package/dist/backend/native-toolchain.test.js +1 -1
- package/dist/backend/native-toolchain.test.js.map +1 -1
- package/dist/backend/runtime-abi.d.ts +2 -2
- package/dist/backend/runtime-abi.js +2 -2
- package/dist/backend/runtime-pack-targets.test.js +1 -1
- package/dist/backend/runtime-pack.test.js +1 -1
- package/dist/backend/target-diagnostics.js +4 -1
- package/dist/backend/target-diagnostics.js.map +1 -1
- package/dist/backend/target-diagnostics.test.js +4 -1
- package/dist/backend/target-diagnostics.test.js.map +1 -1
- package/dist/compat/fetch-profile.js +4 -4
- package/dist/compat/fetch-profile.js.map +1 -1
- package/dist/contracts/check.js +2 -0
- package/dist/contracts/check.js.map +1 -1
- package/dist/coverage/report.js +1 -1
- package/dist/coverage/report.js.map +1 -1
- package/dist/diagnostics/diagnostic.d.ts +6 -5
- package/dist/diagnostics/diagnostic.js +7 -6
- package/dist/diagnostics/diagnostic.js.map +1 -1
- package/dist/frontend/builtin-modules.d.ts +1 -1
- package/dist/frontend/builtin-modules.js +1 -0
- package/dist/frontend/builtin-modules.js.map +1 -1
- package/dist/frontend/comptime-node.js +2 -2
- package/dist/frontend/comptime-node.js.map +1 -1
- package/dist/frontend/lowering/binding-analysis.d.ts +1 -1
- package/dist/frontend/lowering/binding-analysis.js +1 -1
- package/dist/frontend/lowering/builtins/arguments.d.ts +4 -0
- package/dist/frontend/lowering/builtins/arguments.js +8 -4
- package/dist/frontend/lowering/builtins/arguments.js.map +1 -1
- package/dist/frontend/lowering/builtins/blob.d.ts +20 -0
- package/dist/frontend/lowering/builtins/blob.js +167 -0
- package/dist/frontend/lowering/builtins/blob.js.map +1 -0
- package/dist/frontend/lowering/builtins/child-process-async.d.ts +2 -2
- package/dist/frontend/lowering/builtins/child-process-async.js +2 -2
- package/dist/frontend/lowering/builtins/child-process-methods.js +1 -1
- package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process-sync.js +1 -1
- package/dist/frontend/lowering/builtins/child-process-sync.js.map +1 -1
- package/dist/frontend/lowering/builtins/compression.js +3 -2
- package/dist/frontend/lowering/builtins/compression.js.map +1 -1
- package/dist/frontend/lowering/builtins/crypto.js +415 -120
- package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +10 -0
- package/dist/frontend/lowering/builtins/filesystem-calls.js +89 -1
- package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem.d.ts +16 -7
- package/dist/frontend/lowering/builtins/filesystem.js +97 -15
- package/dist/frontend/lowering/builtins/filesystem.js.map +1 -1
- package/dist/frontend/lowering/builtins/fs-glob.d.ts +23 -0
- package/dist/frontend/lowering/builtins/fs-glob.js +224 -0
- package/dist/frontend/lowering/builtins/fs-glob.js.map +1 -0
- package/dist/frontend/lowering/builtins/key-object.d.ts +13 -0
- package/dist/frontend/lowering/builtins/key-object.js +56 -0
- package/dist/frontend/lowering/builtins/key-object.js.map +1 -0
- package/dist/frontend/lowering/builtins/module-calls.js +44 -11
- package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/performance.d.ts +25 -3
- package/dist/frontend/lowering/builtins/performance.js +340 -5
- package/dist/frontend/lowering/builtins/performance.js.map +1 -1
- package/dist/frontend/lowering/builtins/process.d.ts +2 -2
- package/dist/frontend/lowering/builtins/process.js +107 -14
- package/dist/frontend/lowering/builtins/process.js.map +1 -1
- package/dist/frontend/lowering/builtins/properties.d.ts +0 -7
- package/dist/frontend/lowering/builtins/properties.js +39 -11
- package/dist/frontend/lowering/builtins/properties.js.map +1 -1
- package/dist/frontend/lowering/builtins/readline.d.ts +23 -8
- package/dist/frontend/lowering/builtins/readline.js +266 -90
- package/dist/frontend/lowering/builtins/readline.js.map +1 -1
- package/dist/frontend/lowering/builtins/url.d.ts +8 -0
- package/dist/frontend/lowering/builtins/url.js +36 -0
- package/dist/frontend/lowering/builtins/url.js.map +1 -1
- package/dist/frontend/lowering/call-arguments.js +1 -1
- package/dist/frontend/lowering/call-arguments.js.map +1 -1
- package/dist/frontend/lowering/call-signatures.js +20 -2
- package/dist/frontend/lowering/call-signatures.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +2 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.js +105 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.test.js +1 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -1
- package/dist/frontend/lowering/class-protocol-dispatch.d.ts +45 -0
- package/dist/frontend/lowering/class-protocol-dispatch.js +516 -0
- package/dist/frontend/lowering/class-protocol-dispatch.js.map +1 -0
- package/dist/frontend/lowering/coercions/structural-plans.js +2 -1
- package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
- package/dist/frontend/lowering/coercions/structural.js +3 -3
- package/dist/frontend/lowering/coercions/structural.js.map +1 -1
- package/dist/frontend/lowering/collation-repertoire.js +6 -5
- package/dist/frontend/lowering/collation-repertoire.js.map +1 -1
- package/dist/frontend/lowering/containers/array-callbacks.js +4 -7
- package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
- package/dist/frontend/lowering/containers/array-methods.d.ts +0 -7
- package/dist/frontend/lowering/containers/array-methods.js +43 -2
- package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/bytes.js +38 -26
- package/dist/frontend/lowering/containers/bytes.js.map +1 -1
- package/dist/frontend/lowering/containers/for-of.d.ts +1 -1
- package/dist/frontend/lowering/containers/for-of.js +5 -1
- package/dist/frontend/lowering/containers/for-of.js.map +1 -1
- package/dist/frontend/lowering/containers/indexed-objects.js +1 -1
- package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
- package/dist/frontend/lowering/crypto-tables.d.ts +3 -3
- package/dist/frontend/lowering/crypto-tables.js +77 -12
- package/dist/frontend/lowering/crypto-tables.js.map +1 -1
- package/dist/frontend/lowering/expressions/nullish-assignment.js +10 -0
- package/dist/frontend/lowering/expressions/nullish-assignment.js.map +1 -1
- package/dist/frontend/lowering/expressions/object-literals.js +16 -12
- package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
- package/dist/frontend/lowering/generic-functions.d.ts +2 -2
- package/dist/frontend/lowering/generic-functions.js +2 -2
- package/dist/frontend/lowering/generic-functions.js.map +1 -1
- package/dist/frontend/lowering/http2-constants.js +1 -1
- package/dist/frontend/lowering/lower-array-sort.d.ts +12 -1
- package/dist/frontend/lowering/lower-array-sort.js +561 -191
- package/dist/frontend/lowering/lower-array-sort.js.map +1 -1
- package/dist/frontend/lowering/lower-array-sort.test.js +4 -2
- package/dist/frontend/lowering/lower-array-sort.test.js.map +1 -1
- package/dist/frontend/lowering/lower-assert.js +2 -2
- package/dist/frontend/lowering/lower-async-iteration.d.ts +6 -3
- package/dist/frontend/lowering/lower-async-iteration.js +248 -2
- package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.js +101 -9
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.d.ts +8 -2
- package/dist/frontend/lowering/lower-classes.js +40 -9
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-comptime.d.ts +1 -1
- package/dist/frontend/lowering/lower-comptime.js +4 -4
- package/dist/frontend/lowering/lower-comptime.js.map +1 -1
- package/dist/frontend/lowering/lower-event-target.d.ts +63 -0
- package/dist/frontend/lowering/lower-event-target.js +362 -0
- package/dist/frontend/lowering/lower-event-target.js.map +1 -0
- package/dist/frontend/lowering/lower-expando.js +2 -2
- package/dist/frontend/lowering/lower-exprs.js +112 -22
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-inspect.js +129 -11
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-mixins.js +1 -1
- package/dist/frontend/lowering/lower-modules.d.ts +1 -1
- package/dist/frontend/lowering/lower-modules.js +7 -3
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-namespaces.d.ts +2 -2
- package/dist/frontend/lowering/lower-namespaces.js +2 -2
- package/dist/frontend/lowering/lower-server.js +39 -14
- package/dist/frontend/lowering/lower-server.js.map +1 -1
- package/dist/frontend/lowering/lower-stdlib.d.ts +7 -1
- package/dist/frontend/lowering/lower-stdlib.js +10 -3
- package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.d.ts +2 -2
- package/dist/frontend/lowering/lower-stmts.js +46 -12
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lower-stream.js +234 -22
- package/dist/frontend/lowering/lower-stream.js.map +1 -1
- package/dist/frontend/lowering/lower-timers.js +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +23 -5
- package/dist/frontend/lowering/lowerer.js +245 -41
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/native-ffi.js +2 -2
- package/dist/frontend/lowering/native-ffi.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-records.d.ts +115 -0
- package/dist/frontend/lowering/runtime-optional-records.js +715 -0
- package/dist/frontend/lowering/runtime-optional-records.js.map +1 -0
- package/dist/frontend/lowering/runtime-optional-records.test.d.ts +1 -0
- package/dist/frontend/lowering/runtime-optional-records.test.js +175 -0
- package/dist/frontend/lowering/runtime-optional-records.test.js.map +1 -0
- package/dist/frontend/lowering/surfaces.d.ts +7 -3
- package/dist/frontend/lowering/surfaces.js +273 -22
- package/dist/frontend/lowering/surfaces.js.map +1 -1
- package/dist/frontend/module-syntax.d.ts +1 -1
- package/dist/frontend/module-syntax.js +1 -1
- package/dist/frontend/npm-static-prune.js +1 -1
- package/dist/frontend/npm-static-prune.js.map +1 -1
- package/dist/frontend/npm-static-rewrite-syntax.js +4 -3
- package/dist/frontend/npm-static-rewrite-syntax.js.map +1 -1
- package/dist/frontend/pipeline.js +1 -1
- package/dist/frontend/pipeline.js.map +1 -1
- package/dist/frontend/program.d.ts +3 -3
- package/dist/frontend/program.js +19 -17
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/resolve.js +1 -1
- package/dist/frontend/ts7/adapter.js +1 -1
- package/dist/frontend/ts7/ast-bytes.d.ts +1 -1
- package/dist/frontend/ts7/ast-bytes.js +1 -1
- package/dist/frontend/ts7/semantic-json.d.ts +1 -1
- package/dist/frontend/ts7/semantic-json.js +1 -1
- package/dist/frontend/ts7/semantic-json.js.map +1 -1
- package/dist/frontend/ts7/world-check.js +1 -1
- package/dist/frontend/tsc-codes.js +2 -2
- package/dist/frontend/tsc-codes.js.map +1 -1
- package/dist/frontend/type-mapper.d.ts +16 -1
- package/dist/frontend/type-mapper.js +143 -18
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/index.js +5 -4
- package/dist/index.js.map +1 -1
- package/dist/ir/analysis.d.ts +12 -6
- package/dist/ir/analysis.js +26 -10
- package/dist/ir/analysis.js.map +1 -1
- package/dist/ir/analysis.test.js +15 -3
- package/dist/ir/analysis.test.js.map +1 -1
- package/dist/ir/builtin-effects.js +79 -0
- package/dist/ir/builtin-effects.js.map +1 -1
- package/dist/ir/builtin-signatures.d.ts +1 -1
- package/dist/ir/builtin-signatures.js +291 -38
- package/dist/ir/builtin-signatures.js.map +1 -1
- package/dist/ir/int32-slots.js +1 -0
- package/dist/ir/int32-slots.js.map +1 -1
- package/dist/ir/ir.d.ts +64 -16
- package/dist/ir/ir.js +37 -1
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/runtime-features.js +83 -6
- package/dist/ir/runtime-features.js.map +1 -1
- package/dist/ir/serialize.js +1 -1
- package/dist/ir/serialize.js.map +1 -1
- package/dist/ir/traverse.js +1 -0
- package/dist/ir/traverse.js.map +1 -1
- package/dist/ir/validate.js +100 -9
- package/dist/ir/validate.js.map +1 -1
- package/dist/ir/validate.test.js +60 -0
- package/dist/ir/validate.test.js.map +1 -1
- package/dist/library/fence-eval.d.ts +1 -1
- package/dist/library/fence-eval.js +5 -4
- package/dist/library/fence-eval.js.map +1 -1
- package/dist/library/ir-policy.js +10 -4
- package/dist/library/ir-policy.js.map +1 -1
- package/dist/library/library-profile.js +13 -13
- package/dist/library/library-profile.js.map +1 -1
- package/dist/library/prepare.js +1 -1
- package/dist/library/prepare.js.map +1 -1
- package/dist/library/sidecar.js +3 -3
- package/dist/library/sidecar.js.map +1 -1
- package/dist/native/prepare.js +3 -2
- package/dist/native/prepare.js.map +1 -1
- package/package.json +20 -20
- package/surface-manifest.json +379 -142
|
@@ -33,7 +33,7 @@ export declare function comptimeBakeable(lowerer: Lowerer, t: IrType): boolean;
|
|
|
33
33
|
/** The self-containment fence: every identifier inside the callback must
|
|
34
34
|
* resolve to a declaration INSIDE the callback (its own locals/functions)
|
|
35
35
|
* or to the standard library (whose JS intrinsics exist in the vm; what
|
|
36
|
-
* doesn't — process, setTimeout —
|
|
36
|
+
* doesn't — process, setTimeout — throws a ReferenceError at evaluation).
|
|
37
37
|
* Anything else — module locals, imports, top-level functions — would be a
|
|
38
38
|
* capture, and the evaluation context has no module state to capture from.
|
|
39
39
|
* Type-position references (annotations, `as` targets) are exempt: they
|
|
@@ -119,7 +119,7 @@ export function comptimeBakeable(lowerer, t) {
|
|
|
119
119
|
/** The self-containment fence: every identifier inside the callback must
|
|
120
120
|
* resolve to a declaration INSIDE the callback (its own locals/functions)
|
|
121
121
|
* or to the standard library (whose JS intrinsics exist in the vm; what
|
|
122
|
-
* doesn't — process, setTimeout —
|
|
122
|
+
* doesn't — process, setTimeout — throws a ReferenceError at evaluation).
|
|
123
123
|
* Anything else — module locals, imports, top-level functions — would be a
|
|
124
124
|
* capture, and the evaluation context has no module state to capture from.
|
|
125
125
|
* Type-position references (annotations, `as` targets) are exempt: they
|
|
@@ -156,9 +156,9 @@ export function rejectComptimeCaptures(lowerer, cb) {
|
|
|
156
156
|
}
|
|
157
157
|
// V8 installs console in vm contexts, where calls could no-op
|
|
158
158
|
// at compile time instead of printing at runtime.
|
|
159
|
-
// Rejected so side effects
|
|
160
|
-
// Node-isms (process, setTimeout) don't exist in the
|
|
161
|
-
//
|
|
159
|
+
// Rejected so side effects cannot vanish without a diagnostic;
|
|
160
|
+
// the other Node-isms (process, setTimeout) don't exist in the
|
|
161
|
+
// vm and throw a ReferenceError at evaluation.
|
|
162
162
|
if (node.text === "console" && lowerer.isStdlibSymbol(symbol)) {
|
|
163
163
|
lowerer.unsupported("SC1090", node, "console calls inside comptime callbacks " +
|
|
164
164
|
"(the callback computes a value at compile time — return it and log at runtime)");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lower-comptime.js","sourceRoot":"","sources":["../../../src/frontend/lowering/lower-comptime.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"lower-comptime.js","sourceRoot":"","sources":["../../../src/frontend/lowering/lower-comptime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import * as ts from "../ts7/adapter.js";
|
|
2
|
+
import type { Lowerer } from "./lowerer.js";
|
|
3
|
+
import type { ClassInfo } from "./lower-classes.js";
|
|
4
|
+
import { type IrExpr, type IrStmt, type SrcLoc } from "../../ir/ir.js";
|
|
5
|
+
/** A program that can register EventTarget listeners and declares a class
|
|
6
|
+
* with a handleEvent method lifts `%event.handleEventOf(listener) =
|
|
7
|
+
* listener.handleEvent`, a checked-dynamic read the class property
|
|
8
|
+
* dispatch resolves through each class's compiled members (overrides and
|
|
9
|
+
* own properties included). %main installs it for the engine, which reads
|
|
10
|
+
* a capsule listener's handleEvent through it at every dispatch, as Node
|
|
11
|
+
* does; class views alone carry fields, not methods. Called by the
|
|
12
|
+
* EventTarget lowerings. */
|
|
13
|
+
export declare function noteEventListeners(lowerer: Lowerer, loc: SrcLoc): void;
|
|
14
|
+
/** %main's installation of the handleEvent reader, when one was lifted. */
|
|
15
|
+
export declare function handleEventReaderPrelude(lowerer: Lowerer, loc: SrcLoc): IrStmt[];
|
|
16
|
+
/** The EventTarget methods compiled subclasses inherit. */
|
|
17
|
+
export declare const EVENT_TARGET_API_MEMBERS: ReadonlySet<string>;
|
|
18
|
+
/** Whether `name` is an inherited member (accessor or method) of
|
|
19
|
+
* `info`'s instances. */
|
|
20
|
+
export declare function eventTargetInheritedMember(info: ClassInfo | null | undefined, name: string): boolean;
|
|
21
|
+
/** Every inherited Event member name (the subclass-member fence). */
|
|
22
|
+
export declare const EVENT_API_MEMBERS: ReadonlySet<string>;
|
|
23
|
+
/** Registers the runtime bases as ClassInfos (the emitter story): no
|
|
24
|
+
* decl and no lowerable bodies; super() reaches them through event.*
|
|
25
|
+
* libCalls. `new EventTarget()` takes no arguments; `new Event(type,
|
|
26
|
+
* options)` takes the argument vector as one dyn array, which the runtime
|
|
27
|
+
* validates like Node's constructor. */
|
|
28
|
+
export declare function registerBuiltinEventTargetClasses(lowerer: Lowerer): void;
|
|
29
|
+
/** The runtime base an `extends` expression names (the global EventTarget
|
|
30
|
+
* or Event), or null. */
|
|
31
|
+
export declare function builtinEventTargetBaseOf(lowerer: Lowerer, expr: ts.Expression): ClassInfo | null;
|
|
32
|
+
/** Which runtime base a class roots at, or null. */
|
|
33
|
+
export declare function eventTargetRootOf(info: ClassInfo | null | undefined): "target" | "event" | null;
|
|
34
|
+
/** The inherited member names of a class rooted at a runtime base. */
|
|
35
|
+
export declare function eventTargetApiMembers(info: ClassInfo | null | undefined): ReadonlySet<string> | null;
|
|
36
|
+
/** Whether `name` is an inherited method of a class rooted at a runtime
|
|
37
|
+
* base. */
|
|
38
|
+
export declare function eventTargetApiMethod(info: ClassInfo | null | undefined, name: string): boolean;
|
|
39
|
+
/** super() / super(type, options) into a runtime base. `args` is the
|
|
40
|
+
* completed argument list: nothing for EventTarget, the dyn argument
|
|
41
|
+
* vector for Event. */
|
|
42
|
+
export declare function eventTargetSuperCall(lowerer: Lowerer, base: ClassInfo, thisRef: IrExpr, args: IrExpr[], loc: SrcLoc): IrStmt;
|
|
43
|
+
/** A call of an inherited EventTarget or Event method on a typed receiver
|
|
44
|
+
* of a class rooted at a runtime base. Listener arguments cross as live
|
|
45
|
+
* values (typed `handleEvent` records keep their identity), the rest as
|
|
46
|
+
* checked-dynamic values. */
|
|
47
|
+
export declare function lowerEventTargetMethodCall(lowerer: Lowerer, call: ts.CallExpression, access: ts.PropertyAccessExpression, info: ClassInfo, receiverExpr: IrExpr): IrExpr;
|
|
48
|
+
/** A read of an inherited member on a typed receiver (an Event accessor,
|
|
49
|
+
* or a method read as a value), or null when the access is not one. */
|
|
50
|
+
export declare function lowerEventObjectProperty(lowerer: Lowerer, expr: ts.PropertyAccessExpression): IrExpr | null;
|
|
51
|
+
/** Whether `target` is `returnValue` or `cancelBubble` (the two writable
|
|
52
|
+
* accessors) on a typed receiver of an Event subclass. */
|
|
53
|
+
export declare function isEventWritableAccessor(lowerer: Lowerer, target: ts.PropertyAccessExpression): boolean;
|
|
54
|
+
/** The event.set write of an Event subclass's writable accessor. */
|
|
55
|
+
export declare function eventAccessorWrite(receiver: IrExpr, name: string, value: IrExpr, lowerer: Lowerer, loc: SrcLoc): IrStmt;
|
|
56
|
+
/** The event.get read of an Event subclass's writable accessor, typed as
|
|
57
|
+
* the accessor's boolean. */
|
|
58
|
+
export declare function eventAccessorRead(receiver: IrExpr, name: string, lowerer: Lowerer, loc: SrcLoc): IrExpr;
|
|
59
|
+
/** `event.returnValue = v` / `event.cancelBubble = v` on a typed receiver
|
|
60
|
+
* of an Event subclass, in statement or value position, or null when the
|
|
61
|
+
* target is not one. The receiver evaluates before the value, and the
|
|
62
|
+
* expression's value is the assigned one, whatever the setter does. */
|
|
63
|
+
export declare function lowerEventObjectPropertyWrite(lowerer: Lowerer, target: ts.PropertyAccessExpression, value: ts.Expression): IrExpr | null;
|
|
@@ -0,0 +1,362 @@
|
|
|
1
|
+
/* Compiled subclasses of EventTarget and Event (`class Bus extends
|
|
2
|
+
* EventTarget`, `class Ping extends Event`).
|
|
3
|
+
*
|
|
4
|
+
* Plain `new EventTarget()` / `new Event()` values are checked-dynamic
|
|
5
|
+
* handles over the runtime engine (scr_event_target.c). A program class
|
|
6
|
+
* extending either one roots at a runtime base class (%EventTarget /
|
|
7
|
+
* %Event) whose instance prefix points at the same engine state: super()
|
|
8
|
+
* creates it, and the backend embeds the prefix like the emitter's. The
|
|
9
|
+
* inherited members lower here for typed receivers. Checked-dynamic
|
|
10
|
+
* capsules of the instances are recognized by the runtime, so the
|
|
11
|
+
* engine's own values are the instances themselves: a target's capsule is
|
|
12
|
+
* its listeners' `this` and its events' target, and an Event subclass
|
|
13
|
+
* instance is what its listeners receive. Property reads, writes and
|
|
14
|
+
* method calls on those capsules reach the inherited members through the
|
|
15
|
+
* class property dispatch (class-dynamic-dispatch.ts) and the runtime's
|
|
16
|
+
* capsule hooks.
|
|
17
|
+
*
|
|
18
|
+
* Subclass members spelling an inherited member are fenced: the engine
|
|
19
|
+
* reads its own state (the event's type, the target's listener lists)
|
|
20
|
+
* and never calls an override.
|
|
21
|
+
*/
|
|
22
|
+
import * as ts from "../ts7/adapter.js";
|
|
23
|
+
import { locOf } from "../program.js";
|
|
24
|
+
import { strLit } from "../../ir/build.js";
|
|
25
|
+
import { BOOL, DYN, RUNTIME_EVENT_CLASS, RUNTIME_EVENT_TARGET_CLASS, VOID, } from "../../ir/ir.js";
|
|
26
|
+
const HANDLE_EVENT_READER = "%event.handleEventOf";
|
|
27
|
+
/** A program that can register EventTarget listeners and declares a class
|
|
28
|
+
* with a handleEvent method lifts `%event.handleEventOf(listener) =
|
|
29
|
+
* listener.handleEvent`, a checked-dynamic read the class property
|
|
30
|
+
* dispatch resolves through each class's compiled members (overrides and
|
|
31
|
+
* own properties included). %main installs it for the engine, which reads
|
|
32
|
+
* a capsule listener's handleEvent through it at every dispatch, as Node
|
|
33
|
+
* does; class views alone carry fields, not methods. Called by the
|
|
34
|
+
* EventTarget lowerings. */
|
|
35
|
+
export function noteEventListeners(lowerer, loc) {
|
|
36
|
+
if (lowerer.handleEventReader)
|
|
37
|
+
return;
|
|
38
|
+
const declares = [...lowerer.classes.values()].some((info) => !info.def.runtime && lowerer.findMethodOn(info, "handleEvent") !== null);
|
|
39
|
+
if (!declares)
|
|
40
|
+
return;
|
|
41
|
+
lowerer.handleEventReader = true;
|
|
42
|
+
lowerer.liftedFns.push({
|
|
43
|
+
name: HANDLE_EVENT_READER,
|
|
44
|
+
params: [{ localId: "listener", name: "listener", type: DYN }],
|
|
45
|
+
returnType: DYN,
|
|
46
|
+
locals: [{ id: "listener", name: "listener", type: DYN, mutable: false }],
|
|
47
|
+
body: [
|
|
48
|
+
{
|
|
49
|
+
kind: "return",
|
|
50
|
+
value: {
|
|
51
|
+
kind: "dynKeyGet",
|
|
52
|
+
value: { kind: "varRef", localId: "listener", type: DYN, loc },
|
|
53
|
+
key: strLit("handleEvent", loc),
|
|
54
|
+
type: DYN,
|
|
55
|
+
loc,
|
|
56
|
+
},
|
|
57
|
+
loc,
|
|
58
|
+
},
|
|
59
|
+
],
|
|
60
|
+
loc,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
/** %main's installation of the handleEvent reader, when one was lifted. */
|
|
64
|
+
export function handleEventReaderPrelude(lowerer, loc) {
|
|
65
|
+
if (!lowerer.handleEventReader)
|
|
66
|
+
return [];
|
|
67
|
+
const reader = {
|
|
68
|
+
kind: "dynFrom",
|
|
69
|
+
value: {
|
|
70
|
+
kind: "closure",
|
|
71
|
+
fnName: HANDLE_EVENT_READER,
|
|
72
|
+
captures: [],
|
|
73
|
+
type: { kind: "func", params: [DYN], ret: DYN },
|
|
74
|
+
loc,
|
|
75
|
+
},
|
|
76
|
+
type: DYN,
|
|
77
|
+
loc,
|
|
78
|
+
};
|
|
79
|
+
return [
|
|
80
|
+
{
|
|
81
|
+
kind: "exprStmt",
|
|
82
|
+
expr: { kind: "libCall", fn: "event.handleEventReader", args: [reader], type: VOID, loc },
|
|
83
|
+
loc,
|
|
84
|
+
},
|
|
85
|
+
];
|
|
86
|
+
}
|
|
87
|
+
/** The EventTarget methods compiled subclasses inherit. */
|
|
88
|
+
export const EVENT_TARGET_API_MEMBERS = new Set([
|
|
89
|
+
"addEventListener",
|
|
90
|
+
"removeEventListener",
|
|
91
|
+
"dispatchEvent",
|
|
92
|
+
]);
|
|
93
|
+
/** The Event methods compiled subclasses inherit. */
|
|
94
|
+
const EVENT_API_METHODS = new Set([
|
|
95
|
+
"preventDefault",
|
|
96
|
+
"stopPropagation",
|
|
97
|
+
"stopImmediatePropagation",
|
|
98
|
+
"composedPath",
|
|
99
|
+
"initEvent",
|
|
100
|
+
]);
|
|
101
|
+
/** The Event accessors compiled subclasses inherit (Event.prototype's). */
|
|
102
|
+
const EVENT_API_PROPERTIES = new Set([
|
|
103
|
+
"type",
|
|
104
|
+
"target",
|
|
105
|
+
"srcElement",
|
|
106
|
+
"currentTarget",
|
|
107
|
+
"eventPhase",
|
|
108
|
+
"bubbles",
|
|
109
|
+
"cancelable",
|
|
110
|
+
"composed",
|
|
111
|
+
"defaultPrevented",
|
|
112
|
+
"returnValue",
|
|
113
|
+
"cancelBubble",
|
|
114
|
+
"timeStamp",
|
|
115
|
+
"isTrusted",
|
|
116
|
+
]);
|
|
117
|
+
/** Whether `name` is an inherited member (accessor or method) of
|
|
118
|
+
* `info`'s instances. */
|
|
119
|
+
export function eventTargetInheritedMember(info, name) {
|
|
120
|
+
return eventTargetApiMembers(info)?.has(name) ?? false;
|
|
121
|
+
}
|
|
122
|
+
/** Every inherited Event member name (the subclass-member fence). */
|
|
123
|
+
export const EVENT_API_MEMBERS = new Set([
|
|
124
|
+
...EVENT_API_METHODS,
|
|
125
|
+
...EVENT_API_PROPERTIES,
|
|
126
|
+
]);
|
|
127
|
+
/** Registers the runtime bases as ClassInfos (the emitter story): no
|
|
128
|
+
* decl and no lowerable bodies; super() reaches them through event.*
|
|
129
|
+
* libCalls. `new EventTarget()` takes no arguments; `new Event(type,
|
|
130
|
+
* options)` takes the argument vector as one dyn array, which the runtime
|
|
131
|
+
* validates like Node's constructor. */
|
|
132
|
+
export function registerBuiltinEventTargetClasses(lowerer) {
|
|
133
|
+
const loc = { file: "<builtin>", start: 0, end: 0 };
|
|
134
|
+
const classes = [
|
|
135
|
+
[RUNTIME_EVENT_TARGET_CLASS, "target"],
|
|
136
|
+
[RUNTIME_EVENT_CLASS, "event"],
|
|
137
|
+
];
|
|
138
|
+
for (const [name, kind] of classes) {
|
|
139
|
+
lowerer.classes.set(name, {
|
|
140
|
+
def: { name, runtime: true, fields: [], loc },
|
|
141
|
+
fields: new Map(),
|
|
142
|
+
fieldOrder: [],
|
|
143
|
+
methods: new Map(),
|
|
144
|
+
decl: null,
|
|
145
|
+
builtinEventTarget: kind,
|
|
146
|
+
ctor: null,
|
|
147
|
+
ctorParams: kind === "event" ? [{ type: DYN, mode: "dynRest" }] : [],
|
|
148
|
+
base: null,
|
|
149
|
+
subclasses: [],
|
|
150
|
+
throwingSetters: [],
|
|
151
|
+
staticFields: [],
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
/** The runtime base an `extends` expression names (the global EventTarget
|
|
156
|
+
* or Event), or null. */
|
|
157
|
+
export function builtinEventTargetBaseOf(lowerer, expr) {
|
|
158
|
+
if (lowerer.isStdlibGlobal(expr, "EventTarget"))
|
|
159
|
+
return lowerer.classes.get(RUNTIME_EVENT_TARGET_CLASS) ?? null;
|
|
160
|
+
if (lowerer.isStdlibGlobal(expr, "Event"))
|
|
161
|
+
return lowerer.classes.get(RUNTIME_EVENT_CLASS) ?? null;
|
|
162
|
+
return null;
|
|
163
|
+
}
|
|
164
|
+
/** Which runtime base a class roots at, or null. */
|
|
165
|
+
export function eventTargetRootOf(info) {
|
|
166
|
+
for (let c = info ?? null; c; c = c.base)
|
|
167
|
+
if (c.builtinEventTarget)
|
|
168
|
+
return c.builtinEventTarget;
|
|
169
|
+
return null;
|
|
170
|
+
}
|
|
171
|
+
/** The inherited member names of a class rooted at a runtime base. */
|
|
172
|
+
export function eventTargetApiMembers(info) {
|
|
173
|
+
const root = eventTargetRootOf(info);
|
|
174
|
+
return root === "target" ? EVENT_TARGET_API_MEMBERS : root === "event" ? EVENT_API_MEMBERS : null;
|
|
175
|
+
}
|
|
176
|
+
/** Whether `name` is an inherited method of a class rooted at a runtime
|
|
177
|
+
* base. */
|
|
178
|
+
export function eventTargetApiMethod(info, name) {
|
|
179
|
+
const root = eventTargetRootOf(info);
|
|
180
|
+
return root === "target"
|
|
181
|
+
? EVENT_TARGET_API_MEMBERS.has(name)
|
|
182
|
+
: root === "event" && EVENT_API_METHODS.has(name);
|
|
183
|
+
}
|
|
184
|
+
/** super() / super(type, options) into a runtime base. `args` is the
|
|
185
|
+
* completed argument list: nothing for EventTarget, the dyn argument
|
|
186
|
+
* vector for Event. */
|
|
187
|
+
export function eventTargetSuperCall(lowerer, base, thisRef, args, loc) {
|
|
188
|
+
noteEventListeners(lowerer, loc);
|
|
189
|
+
const receiver = lowerer.upcastTo(thisRef, base.def.name);
|
|
190
|
+
const vector = args[0] ?? { kind: "dynArrLit", elems: [], type: DYN, loc };
|
|
191
|
+
// super(type) with a string needs no argument vector.
|
|
192
|
+
const only = vector.kind === "dynArrLit" && vector.elems.length === 1 ? vector.elems[0] : null;
|
|
193
|
+
const expr = base.builtinEventTarget === "target"
|
|
194
|
+
? { kind: "libCall", fn: "event.targetInit", args: [receiver], type: VOID, loc }
|
|
195
|
+
: only?.kind === "dynFrom" && only.value.type.kind === "string"
|
|
196
|
+
? { kind: "libCall", fn: "event.initType", args: [receiver, only.value], type: VOID, loc }
|
|
197
|
+
: { kind: "libCall", fn: "event.init", args: [receiver, vector], type: VOID, loc };
|
|
198
|
+
return { kind: "exprStmt", expr, loc };
|
|
199
|
+
}
|
|
200
|
+
/** The receiver lowered once: a local or `this` is used as is; anything
|
|
201
|
+
* else evaluates into a hidden local first. */
|
|
202
|
+
function singleReceiver(lowerer, receiver, loc) {
|
|
203
|
+
if (receiver.kind === "varRef")
|
|
204
|
+
return { stmts: [], ref: receiver };
|
|
205
|
+
const local = lowerer.declareHiddenLocal("%eventReceiver", receiver.type);
|
|
206
|
+
return {
|
|
207
|
+
stmts: [{ kind: "varDecl", localId: local.id, init: receiver, loc }],
|
|
208
|
+
ref: { kind: "varRef", localId: local.id, type: receiver.type, loc },
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
function withReceiver(stmts, result, loc) {
|
|
212
|
+
if (stmts.length === 0)
|
|
213
|
+
return result;
|
|
214
|
+
return { kind: "seqExpr", stmts, result, type: result.type, loc };
|
|
215
|
+
}
|
|
216
|
+
/** The dyn result of an inherited member, converted to the type the
|
|
217
|
+
* checker gives the expression (void and checked-dynamic stay as is). */
|
|
218
|
+
function typedResult(lowerer, node, value) {
|
|
219
|
+
const expected = lowerer.mapTypeOf(lowerer.typeOf(node));
|
|
220
|
+
if (!expected || expected.kind === "void" || expected.kind === "dyn")
|
|
221
|
+
return value;
|
|
222
|
+
return lowerer.coerceToExpected(value, expected);
|
|
223
|
+
}
|
|
224
|
+
/** A call of an inherited EventTarget or Event method on a typed receiver
|
|
225
|
+
* of a class rooted at a runtime base. Listener arguments cross as live
|
|
226
|
+
* values (typed `handleEvent` records keep their identity), the rest as
|
|
227
|
+
* checked-dynamic values. */
|
|
228
|
+
export function lowerEventTargetMethodCall(lowerer, call, access, info, receiverExpr) {
|
|
229
|
+
const member = access.name.text;
|
|
230
|
+
const loc = locOf(call);
|
|
231
|
+
if (call.arguments.some(ts.isSpreadElement)) {
|
|
232
|
+
lowerer.noLowering(`${member} with spread arguments`, call);
|
|
233
|
+
}
|
|
234
|
+
const target = eventTargetRootOf(info) === "target";
|
|
235
|
+
if (target)
|
|
236
|
+
noteEventListeners(lowerer, loc);
|
|
237
|
+
const { stmts, ref } = singleReceiver(lowerer, receiverExpr, loc);
|
|
238
|
+
const args = call.arguments.map((arg, index) => target && index === 1 && member !== "dispatchEvent"
|
|
239
|
+
? lowerer.lowerLiveWebValue(arg)
|
|
240
|
+
: lowerer.lowerExprExpecting(arg, DYN));
|
|
241
|
+
const self = () => lowerer.coerceToExpected(ref, DYN);
|
|
242
|
+
if (target && member === "dispatchEvent" && args.length === 1) {
|
|
243
|
+
const dispatched = {
|
|
244
|
+
kind: "libCall",
|
|
245
|
+
fn: "event.targetDispatch",
|
|
246
|
+
args: [ref, self(), args[0]],
|
|
247
|
+
type: BOOL,
|
|
248
|
+
loc,
|
|
249
|
+
};
|
|
250
|
+
return withReceiver(stmts, dispatched, loc);
|
|
251
|
+
}
|
|
252
|
+
const vector = { kind: "dynArrLit", elems: args, type: DYN, loc };
|
|
253
|
+
const value = target
|
|
254
|
+
? {
|
|
255
|
+
kind: "libCall",
|
|
256
|
+
fn: "event.targetCall",
|
|
257
|
+
args: [ref, self(), strLit(member, loc), vector],
|
|
258
|
+
type: DYN,
|
|
259
|
+
loc,
|
|
260
|
+
}
|
|
261
|
+
: {
|
|
262
|
+
kind: "libCall",
|
|
263
|
+
fn: "event.call",
|
|
264
|
+
args: [ref, strLit(member, loc), vector],
|
|
265
|
+
type: DYN,
|
|
266
|
+
loc,
|
|
267
|
+
};
|
|
268
|
+
return typedResult(lowerer, call, withReceiver(stmts, value, loc));
|
|
269
|
+
}
|
|
270
|
+
/** A read of an inherited member on a typed receiver (an Event accessor,
|
|
271
|
+
* or a method read as a value), or null when the access is not one. */
|
|
272
|
+
export function lowerEventObjectProperty(lowerer, expr) {
|
|
273
|
+
if (expr.questionDotToken && !lowerer.chainHandled.has(expr))
|
|
274
|
+
return null;
|
|
275
|
+
const name = expr.name.text;
|
|
276
|
+
const recvT = lowerer.mapTypeOf(lowerer.typeOf(expr.expression));
|
|
277
|
+
if (recvT?.kind !== "object")
|
|
278
|
+
return null;
|
|
279
|
+
const info = lowerer.classes.get(recvT.className);
|
|
280
|
+
if (!eventTargetApiMembers(info)?.has(name))
|
|
281
|
+
return null;
|
|
282
|
+
const loc = locOf(expr);
|
|
283
|
+
const receiver = lowerer.lowerExpr(expr.expression);
|
|
284
|
+
if (receiver.type.kind !== "object")
|
|
285
|
+
return null;
|
|
286
|
+
// Accessors read the event directly; method values come from the
|
|
287
|
+
// capsule view (the prototype's function, run on its `this`).
|
|
288
|
+
const value = EVENT_API_PROPERTIES.has(name)
|
|
289
|
+
? { kind: "libCall", fn: "event.get", args: [receiver, strLit(name, loc)], type: DYN, loc }
|
|
290
|
+
: {
|
|
291
|
+
kind: "dynKeyGet",
|
|
292
|
+
value: lowerer.coerceToExpected(receiver, DYN),
|
|
293
|
+
key: strLit(name, loc),
|
|
294
|
+
type: DYN,
|
|
295
|
+
loc,
|
|
296
|
+
};
|
|
297
|
+
return typedResult(lowerer, expr, value);
|
|
298
|
+
}
|
|
299
|
+
/** Whether `target` is `returnValue` or `cancelBubble` (the two writable
|
|
300
|
+
* accessors) on a typed receiver of an Event subclass. */
|
|
301
|
+
export function isEventWritableAccessor(lowerer, target) {
|
|
302
|
+
const name = target.name.text;
|
|
303
|
+
if (name !== "returnValue" && name !== "cancelBubble")
|
|
304
|
+
return false;
|
|
305
|
+
if (target.questionDotToken)
|
|
306
|
+
return false;
|
|
307
|
+
const recvT = lowerer.mapTypeOf(lowerer.typeOf(target.expression));
|
|
308
|
+
if (recvT?.kind !== "object")
|
|
309
|
+
return false;
|
|
310
|
+
return eventTargetRootOf(lowerer.classes.get(recvT.className)) === "event";
|
|
311
|
+
}
|
|
312
|
+
/** The event.set write of an Event subclass's writable accessor. */
|
|
313
|
+
export function eventAccessorWrite(receiver, name, value, lowerer, loc) {
|
|
314
|
+
return {
|
|
315
|
+
kind: "exprStmt",
|
|
316
|
+
expr: {
|
|
317
|
+
kind: "libCall",
|
|
318
|
+
fn: "event.set",
|
|
319
|
+
args: [receiver, strLit(name, loc), lowerer.coerceToExpected(value, DYN)],
|
|
320
|
+
type: VOID,
|
|
321
|
+
loc,
|
|
322
|
+
},
|
|
323
|
+
loc,
|
|
324
|
+
};
|
|
325
|
+
}
|
|
326
|
+
/** The event.get read of an Event subclass's writable accessor, typed as
|
|
327
|
+
* the accessor's boolean. */
|
|
328
|
+
export function eventAccessorRead(receiver, name, lowerer, loc) {
|
|
329
|
+
return lowerer.coerceToExpected({ kind: "libCall", fn: "event.get", args: [receiver, strLit(name, loc)], type: DYN, loc }, BOOL);
|
|
330
|
+
}
|
|
331
|
+
/** `event.returnValue = v` / `event.cancelBubble = v` on a typed receiver
|
|
332
|
+
* of an Event subclass, in statement or value position, or null when the
|
|
333
|
+
* target is not one. The receiver evaluates before the value, and the
|
|
334
|
+
* expression's value is the assigned one, whatever the setter does. */
|
|
335
|
+
export function lowerEventObjectPropertyWrite(lowerer, target, value) {
|
|
336
|
+
if (!isEventWritableAccessor(lowerer, target))
|
|
337
|
+
return null;
|
|
338
|
+
const loc = locOf(target);
|
|
339
|
+
const receiver = lowerer.lowerExpr(target.expression);
|
|
340
|
+
const receiverLocal = lowerer.declareHiddenLocal("%eventReceiver", receiver.type);
|
|
341
|
+
const receiverRef = {
|
|
342
|
+
kind: "varRef",
|
|
343
|
+
localId: receiverLocal.id,
|
|
344
|
+
type: receiver.type,
|
|
345
|
+
loc,
|
|
346
|
+
};
|
|
347
|
+
const assigned = lowerer.lowerExpr(value);
|
|
348
|
+
const local = lowerer.declareHiddenLocal("%eventAssigned", assigned.type);
|
|
349
|
+
const ref = { kind: "varRef", localId: local.id, type: assigned.type, loc };
|
|
350
|
+
return {
|
|
351
|
+
kind: "seqExpr",
|
|
352
|
+
stmts: [
|
|
353
|
+
{ kind: "varDecl", localId: receiverLocal.id, init: receiver, loc },
|
|
354
|
+
{ kind: "varDecl", localId: local.id, init: assigned, loc },
|
|
355
|
+
eventAccessorWrite(receiverRef, target.name.text, ref, lowerer, loc),
|
|
356
|
+
],
|
|
357
|
+
result: ref,
|
|
358
|
+
type: assigned.type,
|
|
359
|
+
loc,
|
|
360
|
+
};
|
|
361
|
+
}
|
|
362
|
+
//# sourceMappingURL=lower-event-target.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lower-event-target.js","sourceRoot":"","sources":["../../../src/frontend/lowering/lower-event-target.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
* a later write's value);
|
|
22
22
|
* - writes to the READ-ONLY function members (`length`, `name`,
|
|
23
23
|
* `caller`, `arguments`) fence: strict-mode JS (every module) throws
|
|
24
|
-
* TypeError there, and a global slot would
|
|
24
|
+
* TypeError there, and a global slot write would succeed. WRITABLE
|
|
25
25
|
* Function.prototype members (`apply`, `call`, `bind`, `toString`)
|
|
26
26
|
* shadow through an own property in JS and lower like any other member
|
|
27
27
|
* — reads route to the registry, so the shadowed value is what reads
|
|
@@ -39,7 +39,7 @@ function memberOf(members, key) {
|
|
|
39
39
|
}
|
|
40
40
|
/** Function members JS refuses to assign in strict mode (every module is
|
|
41
41
|
* strict): non-writable own properties of functions plus the poisoned
|
|
42
|
-
* caller/arguments pair. A global slot would
|
|
42
|
+
* caller/arguments pair. A global slot write would succeed where Node
|
|
43
43
|
* throws TypeError, so writes fence by name. */
|
|
44
44
|
const READONLY_FN_MEMBERS = new Set(["length", "name", "caller", "arguments", "prototype"]);
|
|
45
45
|
/** The member key of an assignment target / read site: a spelled or
|