@scriptc/compiler 0.3.3 → 0.3.5
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 +844 -36
- package/dist/backend/cycle-mutability.d.ts +5 -0
- package/dist/backend/cycle-mutability.js +62 -3
- package/dist/backend/cycle-mutability.js.map +1 -1
- package/dist/backend/executable-features.js +1 -0
- package/dist/backend/executable-features.js.map +1 -1
- package/dist/backend/library-pack.js +1 -0
- package/dist/backend/library-pack.js.map +1 -1
- package/dist/backend/llvm/array-search.js +1 -1
- package/dist/backend/llvm/array-search.js.map +1 -1
- package/dist/backend/llvm/call-lifetimes.d.ts +11 -1
- package/dist/backend/llvm/call-lifetimes.js +30 -3
- package/dist/backend/llvm/call-lifetimes.js.map +1 -1
- package/dist/backend/llvm/call-lifetimes.test.js +31 -1
- package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/common.d.ts +5 -0
- package/dist/backend/llvm/common.js +7 -0
- package/dist/backend/llvm/common.js.map +1 -1
- package/dist/backend/llvm/constant-callbacks.d.ts +2 -21
- package/dist/backend/llvm/constant-callbacks.js +36 -219
- package/dist/backend/llvm/constant-callbacks.js.map +1 -1
- package/dist/backend/llvm/constant-callbacks.test.js +22 -0
- package/dist/backend/llvm/constant-callbacks.test.js.map +1 -1
- package/dist/backend/llvm/dense-array-access.d.ts +9 -0
- package/dist/backend/llvm/dense-array-access.js +29 -3
- package/dist/backend/llvm/dense-array-access.js.map +1 -1
- package/dist/backend/llvm/dyn.d.ts +46 -1
- package/dist/backend/llvm/dyn.js +218 -33
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emitter.d.ts +87 -1
- package/dist/backend/llvm/emitter.js +568 -61
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/expr-async.js +17 -7
- package/dist/backend/llvm/expr-async.js.map +1 -1
- package/dist/backend/llvm/expr-bytes.d.ts +9 -0
- package/dist/backend/llvm/expr-bytes.js +159 -64
- package/dist/backend/llvm/expr-bytes.js.map +1 -1
- package/dist/backend/llvm/expr-callbacks.d.ts +11 -0
- package/dist/backend/llvm/expr-callbacks.js +53 -0
- package/dist/backend/llvm/expr-callbacks.js.map +1 -1
- package/dist/backend/llvm/expr-calls.d.ts +3 -1
- package/dist/backend/llvm/expr-calls.js +137 -3
- package/dist/backend/llvm/expr-calls.js.map +1 -1
- package/dist/backend/llvm/expr-containers.js +63 -29
- package/dist/backend/llvm/expr-containers.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.js +9 -1
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.js +4 -0
- package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
- package/dist/backend/llvm/integer-clones.d.ts +103 -0
- package/dist/backend/llvm/integer-clones.js +1336 -0
- package/dist/backend/llvm/integer-clones.js.map +1 -0
- package/dist/backend/llvm/integer-clones.test.d.ts +1 -0
- package/dist/backend/llvm/integer-clones.test.js +219 -0
- package/dist/backend/llvm/integer-clones.test.js.map +1 -0
- package/dist/backend/llvm/intern-tables.test.d.ts +1 -0
- package/dist/backend/llvm/intern-tables.test.js +77 -0
- package/dist/backend/llvm/intern-tables.test.js.map +1 -0
- package/dist/backend/llvm/lib-datagram.js +24 -0
- package/dist/backend/llvm/lib-datagram.js.map +1 -1
- package/dist/backend/llvm/lib-dispatch.js +96 -1
- package/dist/backend/llvm/lib-dispatch.js.map +1 -1
- package/dist/backend/llvm/lib-filesystem.js +51 -0
- package/dist/backend/llvm/lib-filesystem.js.map +1 -1
- package/dist/backend/llvm/lib-network.js +16 -0
- package/dist/backend/llvm/lib-network.js.map +1 -1
- package/dist/backend/llvm/lib-process.js +24 -0
- package/dist/backend/llvm/lib-process.js.map +1 -1
- package/dist/backend/llvm/lib-shared.d.ts +5 -0
- package/dist/backend/llvm/lib-shared.js +114 -3
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/lib-stream.js +87 -0
- package/dist/backend/llvm/lib-stream.js.map +1 -1
- package/dist/backend/llvm/lib-test.js +9 -0
- package/dist/backend/llvm/lib-test.js.map +1 -1
- package/dist/backend/llvm/lib-tls.js +6 -0
- package/dist/backend/llvm/lib-tls.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.js +1 -1
- package/dist/backend/llvm/local-array-reads.js.map +1 -1
- package/dist/backend/llvm/map-entry-fusion.d.ts +28 -0
- package/dist/backend/llvm/map-entry-fusion.js +233 -0
- package/dist/backend/llvm/map-entry-fusion.js.map +1 -0
- package/dist/backend/llvm/map-entry-fusion.test.d.ts +1 -0
- package/dist/backend/llvm/map-entry-fusion.test.js +183 -0
- package/dist/backend/llvm/map-entry-fusion.test.js.map +1 -0
- package/dist/backend/llvm/map-number-lookup.d.ts +6 -0
- package/dist/backend/llvm/map-number-lookup.js +23 -1
- package/dist/backend/llvm/map-number-lookup.js.map +1 -1
- package/dist/backend/llvm/map-number-lookup.test.js +60 -5
- package/dist/backend/llvm/map-number-lookup.test.js.map +1 -1
- package/dist/backend/llvm/map-read-lifetimes.d.ts +11 -0
- package/dist/backend/llvm/map-read-lifetimes.js +92 -1
- package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
- package/dist/backend/llvm/map-read-lifetimes.test.js +131 -3
- package/dist/backend/llvm/map-read-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/publish.d.ts +21 -0
- package/dist/backend/llvm/publish.js +101 -11
- package/dist/backend/llvm/publish.js.map +1 -1
- package/dist/backend/llvm/publish.test.d.ts +1 -0
- package/dist/backend/llvm/publish.test.js +94 -0
- package/dist/backend/llvm/publish.test.js.map +1 -0
- package/dist/backend/llvm/record-results.js +76 -2
- package/dist/backend/llvm/record-results.js.map +1 -1
- package/dist/backend/llvm/record-sources.d.ts +7 -0
- package/dist/backend/llvm/record-sources.js +14 -0
- package/dist/backend/llvm/record-sources.js.map +1 -0
- package/dist/backend/llvm/reference-writes.js +5 -2
- package/dist/backend/llvm/reference-writes.js.map +1 -1
- package/dist/backend/llvm/regions.d.ts +4 -1
- package/dist/backend/llvm/regions.js +12 -3
- package/dist/backend/llvm/regions.js.map +1 -1
- package/dist/backend/llvm/shapes.d.ts +9 -3
- package/dist/backend/llvm/shapes.js +18 -14
- package/dist/backend/llvm/shapes.js.map +1 -1
- package/dist/backend/llvm/shapes.test.js +5 -3
- package/dist/backend/llvm/shapes.test.js.map +1 -1
- package/dist/backend/llvm/string-lifetimes.test.js +75 -1
- package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/string-reads.js +2 -2
- package/dist/backend/llvm/string-reads.js.map +1 -1
- package/dist/backend/llvm/string-slices.js +2 -2
- package/dist/backend/llvm/string-slices.js.map +1 -1
- package/dist/backend/llvm/walkers.d.ts +17 -0
- package/dist/backend/llvm/walkers.js +123 -0
- package/dist/backend/llvm/walkers.js.map +1 -1
- package/dist/backend/may-throw.js +4 -0
- package/dist/backend/may-throw.js.map +1 -1
- package/dist/backend/native/contracts.d.ts +5 -1
- package/dist/backend/native/executable.js +16 -6
- 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-codegen-core.d.ts +4 -4
- package/dist/backend/native-codegen-core.js +4 -6
- package/dist/backend/native-codegen-core.js.map +1 -1
- package/dist/backend/native-codegen.test.js +7 -8
- package/dist/backend/native-codegen.test.js.map +1 -1
- package/dist/backend/native-link-info-core.d.ts +3 -0
- package/dist/backend/native-link-info-core.js.map +1 -1
- package/dist/backend/publication.js +3 -1
- package/dist/backend/publication.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 +2 -1
- package/dist/backend/runtime-pack-targets.test.js.map +1 -1
- package/dist/backend/runtime-pack.test.js +2 -1
- package/dist/backend/runtime-pack.test.js.map +1 -1
- package/dist/backend/target-diagnostics.js +7 -0
- package/dist/backend/target-diagnostics.js.map +1 -1
- package/dist/backend/warm-cache.js +1 -0
- package/dist/backend/warm-cache.js.map +1 -1
- package/dist/executable/executable-cache.d.ts +1 -0
- package/dist/executable/executable-cache.js +1 -0
- package/dist/executable/executable-cache.js.map +1 -1
- package/dist/executable/executable-cache.test.js +1 -0
- package/dist/executable/executable-cache.test.js.map +1 -1
- package/dist/frontend/experimental-import.d.ts +5 -1
- package/dist/frontend/experimental-import.js +28 -3
- package/dist/frontend/experimental-import.js.map +1 -1
- package/dist/frontend/lowering/assert-instances.d.ts +38 -0
- package/dist/frontend/lowering/assert-instances.js +269 -0
- package/dist/frontend/lowering/assert-instances.js.map +1 -0
- package/dist/frontend/lowering/builtin-calls.js +3 -0
- package/dist/frontend/lowering/builtin-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/callable-aliases.js +54 -8
- package/dist/frontend/lowering/builtins/callable-aliases.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process-async.d.ts +8 -6
- package/dist/frontend/lowering/builtins/child-process-async.js +45 -29
- package/dist/frontend/lowering/builtins/child-process-async.js.map +1 -1
- package/dist/frontend/lowering/builtins/compression.d.ts +18 -0
- package/dist/frontend/lowering/builtins/compression.js +175 -2
- package/dist/frontend/lowering/builtins/compression.js.map +1 -1
- package/dist/frontend/lowering/builtins/constants.js +7 -2
- package/dist/frontend/lowering/builtins/constants.js.map +1 -1
- package/dist/frontend/lowering/builtins/crypto.d.ts +6 -0
- package/dist/frontend/lowering/builtins/crypto.js +111 -1
- package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
- package/dist/frontend/lowering/builtins/errors.js +23 -0
- package/dist/frontend/lowering/builtins/errors.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +2 -0
- package/dist/frontend/lowering/builtins/filesystem-calls.js +5 -0
- package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem.js +60 -0
- package/dist/frontend/lowering/builtins/filesystem.js.map +1 -1
- package/dist/frontend/lowering/builtins/fs-streams.d.ts +26 -0
- package/dist/frontend/lowering/builtins/fs-streams.js +131 -0
- package/dist/frontend/lowering/builtins/fs-streams.js.map +1 -0
- package/dist/frontend/lowering/builtins/module-calls.js +5 -1
- package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/timers.d.ts +3 -0
- package/dist/frontend/lowering/builtins/timers.js +109 -23
- package/dist/frontend/lowering/builtins/timers.js.map +1 -1
- package/dist/frontend/lowering/call-signatures.js +6 -0
- package/dist/frontend/lowering/call-signatures.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.js +216 -20
- package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/containers/bytes.js +33 -12
- package/dist/frontend/lowering/containers/bytes.js.map +1 -1
- package/dist/frontend/lowering/devirtualize.js +20 -7
- package/dist/frontend/lowering/devirtualize.js.map +1 -1
- package/dist/frontend/lowering/intern-tables.d.ts +13 -0
- package/dist/frontend/lowering/intern-tables.js +536 -0
- package/dist/frontend/lowering/intern-tables.js.map +1 -0
- package/dist/frontend/lowering/lower-assert.js +700 -61
- package/dist/frontend/lowering/lower-assert.js.map +1 -1
- package/dist/frontend/lowering/lower-async-iteration.js +11 -2
- package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.js +75 -6
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.d.ts +3 -0
- package/dist/frontend/lowering/lower-classes.js +43 -0
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-dgram.js +132 -67
- package/dist/frontend/lowering/lower-dgram.js.map +1 -1
- package/dist/frontend/lowering/lower-event-emitter.d.ts +9 -1
- package/dist/frontend/lowering/lower-event-emitter.js +78 -0
- package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.d.ts +4 -0
- package/dist/frontend/lowering/lower-exprs.js +144 -58
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-inspect.d.ts +6 -0
- package/dist/frontend/lowering/lower-inspect.js +138 -39
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-mock.d.ts +11 -0
- package/dist/frontend/lowering/lower-mock.js +504 -0
- package/dist/frontend/lowering/lower-mock.js.map +1 -0
- package/dist/frontend/lowering/lower-modules.js +7 -0
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-server.d.ts +4 -0
- package/dist/frontend/lowering/lower-server.js +448 -30
- package/dist/frontend/lowering/lower-server.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.js +35 -8
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lower-stream.d.ts +10 -6
- package/dist/frontend/lowering/lower-stream.js +794 -27
- package/dist/frontend/lowering/lower-stream.js.map +1 -1
- package/dist/frontend/lowering/lower-test.js +86 -8
- package/dist/frontend/lowering/lower-test.js.map +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +25 -1
- package/dist/frontend/lowering/lowerer.js +74 -9
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/pairs-snapshot.d.ts +6 -0
- package/dist/frontend/lowering/pairs-snapshot.js +49 -0
- package/dist/frontend/lowering/pairs-snapshot.js.map +1 -1
- package/dist/frontend/lowering/record-sources.d.ts +15 -0
- package/dist/frontend/lowering/record-sources.js +46 -0
- package/dist/frontend/lowering/record-sources.js.map +1 -0
- package/dist/frontend/lowering/surfaces.d.ts +4 -0
- package/dist/frontend/lowering/surfaces.js +94 -16
- package/dist/frontend/lowering/surfaces.js.map +1 -1
- package/dist/frontend/lowering/zlib-constants.d.ts +1 -0
- package/dist/frontend/lowering/zlib-constants.js +181 -0
- package/dist/frontend/lowering/zlib-constants.js.map +1 -0
- package/dist/frontend/mock-shapes.d.ts +10 -0
- package/dist/frontend/mock-shapes.js +76 -0
- package/dist/frontend/mock-shapes.js.map +1 -0
- package/dist/frontend/pipeline.js +5 -3
- package/dist/frontend/pipeline.js.map +1 -1
- package/dist/frontend/program.js +6 -1
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/resolve.d.ts +4 -0
- package/dist/frontend/resolve.js +14 -0
- package/dist/frontend/resolve.js.map +1 -1
- package/dist/frontend/tsc-codes.js +1 -0
- package/dist/frontend/tsc-codes.js.map +1 -1
- package/dist/frontend/type-mapper.d.ts +8 -0
- package/dist/frontend/type-mapper.js +155 -9
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/ir/analysis.d.ts +10 -0
- package/dist/ir/analysis.js +35 -0
- package/dist/ir/analysis.js.map +1 -1
- package/dist/ir/analysis.test.js +69 -1
- package/dist/ir/analysis.test.js.map +1 -1
- package/dist/ir/builtin-effects.js +72 -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 +238 -15
- package/dist/ir/builtin-signatures.js.map +1 -1
- package/dist/ir/capture-values.d.ts +107 -0
- package/dist/ir/capture-values.js +850 -0
- package/dist/ir/capture-values.js.map +1 -0
- package/dist/ir/capture-values.test.d.ts +1 -0
- package/dist/ir/capture-values.test.js +268 -0
- package/dist/ir/capture-values.test.js.map +1 -0
- package/dist/ir/field-values.d.ts +16 -0
- package/dist/ir/field-values.js +128 -0
- package/dist/ir/field-values.js.map +1 -0
- package/dist/ir/field-values.test.d.ts +1 -0
- package/dist/ir/field-values.test.js +160 -0
- package/dist/ir/field-values.test.js.map +1 -0
- package/dist/ir/final-fields.d.ts +4 -1
- package/dist/ir/final-fields.js +11 -3
- package/dist/ir/final-fields.js.map +1 -1
- package/dist/ir/function-references.test.js +1 -1
- package/dist/ir/function-references.test.js.map +1 -1
- package/dist/ir/init-only-globals.d.ts +16 -0
- package/dist/ir/init-only-globals.js +121 -0
- package/dist/ir/init-only-globals.js.map +1 -0
- package/dist/ir/init-only-globals.test.d.ts +1 -0
- package/dist/ir/init-only-globals.test.js +115 -0
- package/dist/ir/init-only-globals.test.js.map +1 -0
- package/dist/ir/initializer-bindings.d.ts +18 -1
- package/dist/ir/initializer-bindings.js +91 -1
- package/dist/ir/initializer-bindings.js.map +1 -1
- package/dist/ir/initializer-bindings.test.js +57 -2
- package/dist/ir/initializer-bindings.test.js.map +1 -1
- package/dist/ir/int32-slots.d.ts +22 -0
- package/dist/ir/int32-slots.js +376 -13
- package/dist/ir/int32-slots.js.map +1 -1
- package/dist/ir/int32-slots.test.js +91 -8
- package/dist/ir/int32-slots.test.js.map +1 -1
- package/dist/ir/integer-loop-facts.d.ts +19 -1
- package/dist/ir/integer-loop-facts.js +155 -7
- package/dist/ir/integer-loop-facts.js.map +1 -1
- package/dist/ir/integer-ranges.d.ts +8 -5
- package/dist/ir/integer-ranges.js +147 -55
- package/dist/ir/integer-ranges.js.map +1 -1
- package/dist/ir/integer-ranges.test.js +225 -7
- package/dist/ir/integer-ranges.test.js.map +1 -1
- package/dist/ir/ir.d.ts +29 -2
- package/dist/ir/ir.js +17 -0
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/property-bags.d.ts +14 -0
- package/dist/ir/property-bags.js +121 -0
- package/dist/ir/property-bags.js.map +1 -0
- package/dist/ir/receiver-readers.d.ts +21 -0
- package/dist/ir/receiver-readers.js +217 -0
- package/dist/ir/receiver-readers.js.map +1 -0
- package/dist/ir/runtime-features.d.ts +1 -0
- package/dist/ir/runtime-features.js +34 -2
- package/dist/ir/runtime-features.js.map +1 -1
- package/dist/ir/validate.js +221 -5
- package/dist/ir/validate.js.map +1 -1
- package/dist/ir/validate.test.js +21 -0
- package/dist/ir/validate.test.js.map +1 -1
- package/dist/library/int-infer.js +3 -0
- package/dist/library/int-infer.js.map +1 -1
- package/dist/library/ir-policy.js +1 -0
- package/dist/library/ir-policy.js.map +1 -1
- package/dist/native/cli.js +1 -0
- package/dist/native/cli.js.map +1 -1
- package/dist/native/compiler.js +1 -3
- package/dist/native/compiler.js.map +1 -1
- package/dist/native/prepare.js +1 -0
- package/dist/native/prepare.js.map +1 -1
- package/dist/native/sanitizer.test.js +1 -0
- package/dist/native/sanitizer.test.js.map +1 -1
- package/package.json +20 -20
- package/surface-manifest.json +896 -49
|
@@ -10,6 +10,7 @@ import { lowerKeyObjectInstanceof } from "./builtins/key-object.js";
|
|
|
10
10
|
import { STATS_TYPE_TESTS } from "./builtins/filesystem.js";
|
|
11
11
|
import { threadsImportOf } from "../threads-import.js";
|
|
12
12
|
import { experimentalImportOf, lifetimeRegionMemberOf } from "../experimental-import.js";
|
|
13
|
+
import { lowerInternTableProperty } from "./intern-tables.js";
|
|
13
14
|
import { dynUndefinedExpr, nodeThrowExpr, numLit, strLit, varRef } from "../../ir/build.js";
|
|
14
15
|
import { InternalCompilerError } from "../../errors.js";
|
|
15
16
|
import { SYMBOL_T } from "../../ir/ir.js";
|
|
@@ -21,7 +22,9 @@ import { literalUnionArm } from "../union-discriminants.js";
|
|
|
21
22
|
* comparisons, nullish coalescing and optional chains, conditions and
|
|
22
23
|
* ToBoolean/ToString coercion helpers, and field/element reads and writes
|
|
23
24
|
* (FieldTarget). */
|
|
25
|
+
import { isFsStreamMember, lowerFsStreamProperty } from "./builtins/fs-streams.js";
|
|
24
26
|
import * as ts from "../ts7/adapter.js";
|
|
27
|
+
import { isZlibStreamMember, lowerZlibStreamBytesWritten } from "./builtins/compression.js";
|
|
25
28
|
import { constituentTypes } from "../ts7/checker.js";
|
|
26
29
|
import { dirname } from "node:path";
|
|
27
30
|
import * as posix from "node:path/posix";
|
|
@@ -597,6 +600,7 @@ function lowerExprInner(lowerer, expr) {
|
|
|
597
600
|
const sym = lowerer.resolveValueSymbol(expr);
|
|
598
601
|
const projection = sym ? lowerer.staticCallables.get(sym) : undefined;
|
|
599
602
|
if (projection?.kind === "promisified-exec-file" ||
|
|
603
|
+
projection?.kind === "promisified-exec" ||
|
|
600
604
|
projection?.kind === "promisified-builtin") {
|
|
601
605
|
lowerer.unsupported("SC1090", expr, `a promisified builtin as a value (call '${expr.text}' directly)`);
|
|
602
606
|
}
|
|
@@ -861,6 +865,8 @@ function lowerExprInner(lowerer, expr) {
|
|
|
861
865
|
lowerer.noLowering("publish (@scriptc/threads) as a value", expr, "call publish(value) directly");
|
|
862
866
|
if (experimentalImportOf(lowerer.program, expr) === "LifetimeRegion")
|
|
863
867
|
lowerer.noLowering("LifetimeRegion (@scriptc/experimental) as a value", expr, "construct regions with new LifetimeRegion()");
|
|
868
|
+
if (experimentalImportOf(lowerer.program, expr) === "InternTable")
|
|
869
|
+
lowerer.noLowering("InternTable (@scriptc/experimental) as a value", expr, 'open tables with new InternTable("name")');
|
|
864
870
|
}
|
|
865
871
|
{
|
|
866
872
|
const bi = lowerer.builtinImportOf(expr);
|
|
@@ -1433,6 +1439,11 @@ function lowerExprInner(lowerer, expr) {
|
|
|
1433
1439
|
if (member !== null)
|
|
1434
1440
|
lowerer.noLowering(`LifetimeRegion.${member} (@scriptc/experimental) as a value`, expr, `call region.${member}(${member === "run" ? "fn" : ""}) directly`);
|
|
1435
1441
|
}
|
|
1442
|
+
{
|
|
1443
|
+
const table = lowerInternTableProperty(lowerer, expr);
|
|
1444
|
+
if (table)
|
|
1445
|
+
return table;
|
|
1446
|
+
}
|
|
1436
1447
|
// Expando statics may still be absent even when JS inference sees
|
|
1437
1448
|
// the eventual assignment's scalar type. Preserve the checked value.
|
|
1438
1449
|
const staticField = lowerStaticFieldRead(lowerer, expr);
|
|
@@ -4157,6 +4168,8 @@ export function lowerIntrinsicProperty(lowerer, expr) {
|
|
|
4157
4168
|
const numberMember = lowerer.stdlibGlobalMember(expr, "Number");
|
|
4158
4169
|
if (numberMember === "parseInt" || numberMember === "parseFloat")
|
|
4159
4170
|
return lowerNumberParserValue(lowerer, numberMember, locOf(expr));
|
|
4171
|
+
if (lowerer.stdlibGlobalMember(expr, "Buffer") === "poolSize")
|
|
4172
|
+
return { kind: "libCall", fn: "buffer.poolSize", args: [], type: F64, loc: locOf(expr) };
|
|
4160
4173
|
if (lowerer.stdlibGlobalMember(expr, "Buffer") === "isBuffer")
|
|
4161
4174
|
return lowerCheckedPredicateValue(lowerer, "Buffer.isBuffer", "buffer", locOf(expr));
|
|
4162
4175
|
if (lowerer.stdlibGlobalMember(expr, "Date") === "now")
|
|
@@ -6334,6 +6347,21 @@ function tupleLiteralIndex(node) {
|
|
|
6334
6347
|
* change the target or the value used by the operator. The expression yields
|
|
6335
6348
|
* the computed value before a typed array or Buffer coerces it for storage. */
|
|
6336
6349
|
export function lowerElementCompound(lowerer, expr, op) {
|
|
6350
|
+
const lowered = lowerElementCompoundParts(lowerer, expr, op, false);
|
|
6351
|
+
if (!lowered.expr)
|
|
6352
|
+
throw new InternalCompilerError("a compound element value lowered to statements");
|
|
6353
|
+
return lowered.expr;
|
|
6354
|
+
}
|
|
6355
|
+
/** `a[i] op= rhs` in statement position: a string array append becomes the
|
|
6356
|
+
* canonical `a[i] = a[i] + rhs` store (receiver and index saved first),
|
|
6357
|
+
* which the backend appends in place; other forms keep the value path. */
|
|
6358
|
+
export function lowerElementCompoundStatement(lowerer, expr, op) {
|
|
6359
|
+
const lowered = lowerElementCompoundParts(lowerer, expr, op, true);
|
|
6360
|
+
if (lowered.stmts)
|
|
6361
|
+
return { kind: "block", body: lowered.stmts, loc: locOf(expr) };
|
|
6362
|
+
return { kind: "exprStmt", expr: lowered.expr, loc: locOf(expr) };
|
|
6363
|
+
}
|
|
6364
|
+
function lowerElementCompoundParts(lowerer, expr, op, statement) {
|
|
6337
6365
|
const target = expr.left;
|
|
6338
6366
|
fenceNodeModuleMutation(lowerer, target, "assignment");
|
|
6339
6367
|
const loc = locOf(expr);
|
|
@@ -6368,7 +6396,7 @@ export function lowerElementCompound(lowerer, expr, op) {
|
|
|
6368
6396
|
},
|
|
6369
6397
|
loc,
|
|
6370
6398
|
});
|
|
6371
|
-
return { kind: "seqExpr", stmts, result: value, type: DYN, loc };
|
|
6399
|
+
return { expr: { kind: "seqExpr", stmts, result: value, type: DYN, loc }, stmts: null };
|
|
6372
6400
|
}
|
|
6373
6401
|
const receiverType = checked.type.kind === "array" || checked.type.kind === "bytes"
|
|
6374
6402
|
? checked.type
|
|
@@ -6426,6 +6454,27 @@ export function lowerElementCompound(lowerer, expr, op) {
|
|
|
6426
6454
|
const valueType = elementType.kind === "union" && lowerer.armTag(elementType.unionId, UNDEFINED_T) >= 0
|
|
6427
6455
|
? lowerer.stripUndefinedArm(elementType)
|
|
6428
6456
|
: elementType;
|
|
6457
|
+
if (statement &&
|
|
6458
|
+
op === "+" &&
|
|
6459
|
+
receiver.type.kind === "array" &&
|
|
6460
|
+
receiver.type.elem.kind === "string") {
|
|
6461
|
+
// Receiver, index, old element (read inside the concat), rhs, write.
|
|
6462
|
+
const appended = {
|
|
6463
|
+
kind: "strConcat",
|
|
6464
|
+
left: oldValue,
|
|
6465
|
+
right: lowerer.ensureString(rhs, expr.right),
|
|
6466
|
+
type: STRING,
|
|
6467
|
+
loc,
|
|
6468
|
+
};
|
|
6469
|
+
return {
|
|
6470
|
+
expr: null,
|
|
6471
|
+
stmts: [
|
|
6472
|
+
{ kind: "varDecl", localId: receiverLocal.id, init: receiver, loc },
|
|
6473
|
+
{ kind: "varDecl", localId: indexLocal.id, init: index, loc },
|
|
6474
|
+
{ kind: "arraySet", arr: receiverRef(), index: indexRef(), value: appended, loc },
|
|
6475
|
+
],
|
|
6476
|
+
};
|
|
6477
|
+
}
|
|
6429
6478
|
let computed;
|
|
6430
6479
|
if (op === "+" && valueType.kind === "string") {
|
|
6431
6480
|
computed = {
|
|
@@ -6448,17 +6497,18 @@ export function lowerElementCompound(lowerer, expr, op) {
|
|
|
6448
6497
|
}
|
|
6449
6498
|
else if (valueType.kind === "dyn" && isJsSourceFile(expr.getSourceFile())) {
|
|
6450
6499
|
const left = lowerer.coerceToExpected(oldRef(), DYN), right = lowerer.coerceToExpected(rhs, DYN);
|
|
6451
|
-
|
|
6452
|
-
|
|
6453
|
-
|
|
6454
|
-
|
|
6455
|
-
|
|
6456
|
-
|
|
6457
|
-
|
|
6458
|
-
|
|
6500
|
+
computed = dynCompoundValue(op, left, right, loc);
|
|
6501
|
+
}
|
|
6502
|
+
else if (rhs.type.kind === "dyn" &&
|
|
6503
|
+
receiver.type.kind === "array" &&
|
|
6504
|
+
lowerer.dynConvertible(oldValue.type) &&
|
|
6505
|
+
lowerer.dynConvertible(valueType)) {
|
|
6506
|
+
// An untyped right operand: the expanded `a[i] = a[i] op rhs`, checked
|
|
6507
|
+
// back into the element type.
|
|
6508
|
+
computed = lowerer.coerceInto(expr, dynCompoundValue(op, lowerer.coerceToExpected(oldRef(), DYN), lowerer.coerceToExpected(rhs, DYN), loc), valueType);
|
|
6459
6509
|
}
|
|
6460
6510
|
else {
|
|
6461
|
-
lowerer.
|
|
6511
|
+
compoundUnsupported(lowerer, expr, op, oldValue.type, rhs.type);
|
|
6462
6512
|
}
|
|
6463
6513
|
const resultLocal = lowerer.declareHiddenLocal("%compoundResult", computed.type);
|
|
6464
6514
|
const resultRef = () => varRef(resultLocal.id, computed.type, loc);
|
|
@@ -6466,17 +6516,20 @@ export function lowerElementCompound(lowerer, expr, op) {
|
|
|
6466
6516
|
? arrayValueStore(lowerer, receiverRef(), indexRef(), resultRef(), receiver.type.elem, loc)
|
|
6467
6517
|
: { kind: "bytesSet", arr: receiverRef(), index: indexRef(), value: resultRef(), loc };
|
|
6468
6518
|
return {
|
|
6469
|
-
|
|
6470
|
-
|
|
6471
|
-
|
|
6472
|
-
|
|
6473
|
-
|
|
6474
|
-
|
|
6475
|
-
|
|
6476
|
-
|
|
6477
|
-
|
|
6478
|
-
|
|
6479
|
-
|
|
6519
|
+
expr: {
|
|
6520
|
+
kind: "seqExpr",
|
|
6521
|
+
stmts: [
|
|
6522
|
+
{ kind: "varDecl", localId: receiverLocal.id, init: receiver, loc },
|
|
6523
|
+
{ kind: "varDecl", localId: indexLocal.id, init: index, loc },
|
|
6524
|
+
{ kind: "varDecl", localId: oldLocal.id, init: oldValue, loc },
|
|
6525
|
+
{ kind: "varDecl", localId: resultLocal.id, init: computed, loc },
|
|
6526
|
+
write,
|
|
6527
|
+
],
|
|
6528
|
+
result: resultRef(),
|
|
6529
|
+
type: computed.type,
|
|
6530
|
+
loc,
|
|
6531
|
+
},
|
|
6532
|
+
stmts: null,
|
|
6480
6533
|
};
|
|
6481
6534
|
}
|
|
6482
6535
|
/** ToString of one stabilized `string[]` element read for `+=`: a missing
|
|
@@ -7468,7 +7521,7 @@ export function lowerPrefixUnary(lowerer, expr) {
|
|
|
7468
7521
|
? { kind: "dynCheck", value: raw, type: F64, loc }
|
|
7469
7522
|
: lowerOptionalNumber(lowerer, raw, loc, expr.operand);
|
|
7470
7523
|
if (operand.type.kind !== "f64")
|
|
7471
|
-
lowerer
|
|
7524
|
+
operatorUnsupported(lowerer, expr, "-", [raw.type]);
|
|
7472
7525
|
if (operand.kind === "numLit")
|
|
7473
7526
|
return { ...operand, value: -operand.value, loc };
|
|
7474
7527
|
return { kind: "unary", op: "-", operand, type: F64, loc };
|
|
@@ -7486,7 +7539,7 @@ export function lowerPrefixUnary(lowerer, expr) {
|
|
|
7486
7539
|
}
|
|
7487
7540
|
const operand = lowerOptionalNumber(lowerer, raw, loc, expr.operand);
|
|
7488
7541
|
if (operand.type.kind !== "f64")
|
|
7489
|
-
lowerer
|
|
7542
|
+
operatorUnsupported(lowerer, expr, "+", [raw.type]);
|
|
7490
7543
|
return operand;
|
|
7491
7544
|
}
|
|
7492
7545
|
case ts.SyntaxKind.ExclamationToken: {
|
|
@@ -7515,7 +7568,7 @@ export function lowerPrefixUnary(lowerer, expr) {
|
|
|
7515
7568
|
// otherwise numeric slot to the checked-dynamic tree.
|
|
7516
7569
|
const operand = lowerOptionalNumber(lowerer, raw, loc, expr.operand);
|
|
7517
7570
|
if (operand.type.kind !== "f64")
|
|
7518
|
-
lowerer
|
|
7571
|
+
operatorUnsupported(lowerer, expr, "~", [raw.type]);
|
|
7519
7572
|
return { kind: "unary", op: "~", operand, type: F64, loc };
|
|
7520
7573
|
}
|
|
7521
7574
|
case ts.SyntaxKind.PlusPlusToken:
|
|
@@ -7772,7 +7825,7 @@ export function lowerIncDecTarget(lowerer, expr, target, prefix) {
|
|
|
7772
7825
|
};
|
|
7773
7826
|
}
|
|
7774
7827
|
if (target.type.kind !== "f64")
|
|
7775
|
-
lowerer
|
|
7828
|
+
operatorUnsupported(lowerer, expr, op === "+" ? "++" : "--", [target.type]);
|
|
7776
7829
|
return { kind: "incDec", op, prefix, localId: target.id, type: F64, loc };
|
|
7777
7830
|
}
|
|
7778
7831
|
/** Whether a lowered statement can live inside a seqExpr. These statements
|
|
@@ -7865,26 +7918,51 @@ export function lowerCompoundValueToTarget(lowerer, expr, compound, target) {
|
|
|
7865
7918
|
if (numericRead.type.kind === "f64" && numericRhs.type.kind === "f64") {
|
|
7866
7919
|
return lowerer.coerceInto(expr, { kind: "bin", op: compound, left: numericRead, right: numericRhs, type: F64, loc }, target.type);
|
|
7867
7920
|
}
|
|
7921
|
+
// An untyped operand: exactly the expanded `x = x op rhs` — the runtime
|
|
7922
|
+
// operator on both values, then the checked conversion into the
|
|
7923
|
+
// target's declared type (a string result for a number target throws the
|
|
7924
|
+
// catchable TypeError, as the expanded assignment does).
|
|
7868
7925
|
if ((target.type.kind === "dyn" || rhs.type.kind === "dyn") &&
|
|
7869
|
-
isJsSourceFile(expr.getSourceFile())
|
|
7926
|
+
(isJsSourceFile(expr.getSourceFile()) ||
|
|
7927
|
+
(lowerer.dynConvertible(read.type) && lowerer.dynConvertible(rhs.type)))) {
|
|
7870
7928
|
const left = lowerer.coerceInto(expr.left, read, DYN);
|
|
7871
7929
|
const right = lowerer.coerceInto(expr.right, rhs, DYN);
|
|
7872
|
-
|
|
7873
|
-
const computed = {
|
|
7874
|
-
kind: "libCall",
|
|
7875
|
-
fn: compound === "+" ? "dyn.add" : numeric ? "dyn.arithmetic" : "dyn.bitwise",
|
|
7876
|
-
args: compound === "+"
|
|
7877
|
-
? [left, right]
|
|
7878
|
-
: [left, right, { kind: "strLit", value: compound, type: STRING, loc }],
|
|
7879
|
-
type: DYN,
|
|
7880
|
-
loc,
|
|
7881
|
-
};
|
|
7882
|
-
return lowerer.coerceInto(expr, computed, target.type);
|
|
7930
|
+
return lowerer.coerceInto(expr, dynCompoundValue(compound, left, right, loc), target.type);
|
|
7883
7931
|
}
|
|
7884
7932
|
const bigint = bigintCompoundValue(compound, read, rhs, loc);
|
|
7885
7933
|
if (bigint)
|
|
7886
7934
|
return bigint;
|
|
7887
|
-
lowerer.
|
|
7935
|
+
compoundUnsupported(lowerer, expr, compound, read.type, rhs.type);
|
|
7936
|
+
}
|
|
7937
|
+
/** The runtime operator of a compound assignment over two checked-dynamic
|
|
7938
|
+
* operands (Node's ToPrimitive/ToNumeric order lives in the runtime). */
|
|
7939
|
+
function dynCompoundValue(op, left, right, loc) {
|
|
7940
|
+
const numeric = ["-", "*", "/", "%", "**"].includes(op);
|
|
7941
|
+
return {
|
|
7942
|
+
kind: "libCall",
|
|
7943
|
+
fn: op === "+" ? "dyn.add" : numeric ? "dyn.arithmetic" : "dyn.bitwise",
|
|
7944
|
+
args: op === "+" ? [left, right] : [left, right, strLit(op, loc)],
|
|
7945
|
+
type: DYN,
|
|
7946
|
+
loc,
|
|
7947
|
+
};
|
|
7948
|
+
}
|
|
7949
|
+
/** An operand type in an SC1043 message: checked-dynamic values (`any`,
|
|
7950
|
+
* `unknown`) are "untyped", everything else its quoted type. */
|
|
7951
|
+
function operandText(lowerer, t) {
|
|
7952
|
+
return t.kind === "dyn" ? "untyped" : `'${lowerer.fmt(t)}'`;
|
|
7953
|
+
}
|
|
7954
|
+
/** SC1043 for a compound assignment whose operand types have no lowering,
|
|
7955
|
+
* naming the operator and both types rather than the comparison wording. */
|
|
7956
|
+
function compoundUnsupported(lowerer, node, op, target, value) {
|
|
7957
|
+
lowerer.unsupported("SC1043", node, `compound '${op}=' assignments of ${operandText(lowerer, value)} values to ${operandText(lowerer, target)} targets`);
|
|
7958
|
+
}
|
|
7959
|
+
/** SC1043 for an arithmetic, unary or update operator whose operand types
|
|
7960
|
+
* have no lowering (comparisons keep the registry wording). */
|
|
7961
|
+
function operatorUnsupported(lowerer, node, op, operands) {
|
|
7962
|
+
const [first, second] = operands;
|
|
7963
|
+
lowerer.unsupported("SC1043", node, second === undefined
|
|
7964
|
+
? `'${op}' operations on ${operandText(lowerer, first)} values`
|
|
7965
|
+
: `'${op}' operations on ${operandText(lowerer, first)} and ${operandText(lowerer, second)} values`);
|
|
7888
7966
|
}
|
|
7889
7967
|
/** Equality of two NaN-coded values (nan-coded-reads.ts), each of which may
|
|
7890
7968
|
* stand for undefined and never holds a genuine NaN: Node's undefined equals
|
|
@@ -8773,7 +8851,7 @@ export function lowerBinary(lowerer, expr) {
|
|
|
8773
8851
|
};
|
|
8774
8852
|
}
|
|
8775
8853
|
}
|
|
8776
|
-
lowerer
|
|
8854
|
+
operatorUnsupported(lowerer, expr, "+", [left.type, right.type]);
|
|
8777
8855
|
break;
|
|
8778
8856
|
case ts.SyntaxKind.MinusToken:
|
|
8779
8857
|
case ts.SyntaxKind.AsteriskToken:
|
|
@@ -8781,7 +8859,7 @@ export function lowerBinary(lowerer, expr) {
|
|
|
8781
8859
|
case ts.SyntaxKind.PercentToken:
|
|
8782
8860
|
case ts.SyntaxKind.AsteriskAsteriskToken: {
|
|
8783
8861
|
if (!bothNum)
|
|
8784
|
-
lowerer.
|
|
8862
|
+
operatorUnsupported(lowerer, expr, ts.tokenToString(op) ?? "?", [left.type, right.type]);
|
|
8785
8863
|
const binOp = op === ts.SyntaxKind.MinusToken
|
|
8786
8864
|
? "-"
|
|
8787
8865
|
: op === ts.SyntaxKind.AsteriskToken
|
|
@@ -8811,7 +8889,7 @@ export function lowerBinary(lowerer, expr) {
|
|
|
8811
8889
|
case ts.SyntaxKind.GreaterThanGreaterThanToken:
|
|
8812
8890
|
case ts.SyntaxKind.GreaterThanGreaterThanGreaterThanToken: {
|
|
8813
8891
|
if (!bothNum)
|
|
8814
|
-
lowerer.
|
|
8892
|
+
operatorUnsupported(lowerer, expr, ts.tokenToString(op) ?? "?", [left.type, right.type]);
|
|
8815
8893
|
const bitOp = op === ts.SyntaxKind.AmpersandToken
|
|
8816
8894
|
? "&"
|
|
8817
8895
|
: op === ts.SyntaxKind.BarToken
|
|
@@ -10524,10 +10602,12 @@ export function lowerInstanceOf(lowerer, expr, loc) {
|
|
|
10524
10602
|
if (left.type.kind === "union") {
|
|
10525
10603
|
const unionId = left.type.unionId;
|
|
10526
10604
|
const arms = lowerer.unions.get(unionId)?.arms;
|
|
10527
|
-
// Ordinary records and scalar values do not carry a class
|
|
10528
|
-
//
|
|
10605
|
+
// Ordinary records, arrays and scalar values do not carry a class
|
|
10606
|
+
// prototype (no program class extends Array). Dynamic/opaque runtime
|
|
10607
|
+
// objects keep their existing instanceof fences.
|
|
10529
10608
|
if (arms?.every((arm) => arm.kind === "object" ||
|
|
10530
10609
|
arm.kind === "record" ||
|
|
10610
|
+
arm.kind === "array" ||
|
|
10531
10611
|
arm.kind === "f64" ||
|
|
10532
10612
|
arm.kind === "string" ||
|
|
10533
10613
|
arm.kind === "bool" ||
|
|
@@ -10586,6 +10666,10 @@ export function lowerInstanceOf(lowerer, expr, loc) {
|
|
|
10586
10666
|
}
|
|
10587
10667
|
return { kind: "call", callee: helper, args: [left], type: BOOL, loc };
|
|
10588
10668
|
}
|
|
10669
|
+
// A class arm could hold an instance: the test cannot be decided
|
|
10670
|
+
// statically.
|
|
10671
|
+
if (arms?.some((arm) => arm.kind === "object"))
|
|
10672
|
+
lowerer.unsupported("SC1090", expr, "'instanceof' on a union of class instances and values without a class prototype test");
|
|
10589
10673
|
}
|
|
10590
10674
|
if (left.type.kind !== "object") {
|
|
10591
10675
|
return readsClassAfter(lowerer, target, expr.right, [{ kind: "exprStmt", expr: left, loc }], {
|
|
@@ -13134,7 +13218,7 @@ function lowerFieldCompoundValue(lowerer, access, op, rhsNode, loc) {
|
|
|
13134
13218
|
? { kind: "dynCheck", value: rhs, type: F64, loc: rhs.loc }
|
|
13135
13219
|
: lowerOptionalNumber(lowerer, rhs, loc);
|
|
13136
13220
|
if (numericRhs.type.kind !== "f64")
|
|
13137
|
-
lowerer
|
|
13221
|
+
compoundUnsupported(lowerer, access, op, F64, numericRhs.type);
|
|
13138
13222
|
const value = save({ kind: "bin", op, left: cur, right: numericRhs, type: F64, loc }, "%compoundResult");
|
|
13139
13223
|
const boxed = { kind: "dynFrom", value, type: DYN, loc };
|
|
13140
13224
|
body.push({
|
|
@@ -13195,22 +13279,16 @@ function lowerFieldCompoundValue(lowerer, access, op, rhsNode, loc) {
|
|
|
13195
13279
|
else if (bigintValue) {
|
|
13196
13280
|
value = bigintValue;
|
|
13197
13281
|
}
|
|
13198
|
-
else if (target.fieldType.kind === "dyn" && isJsSourceFile(access.getSourceFile()))
|
|
13199
|
-
|
|
13200
|
-
|
|
13201
|
-
|
|
13202
|
-
|
|
13203
|
-
|
|
13204
|
-
|
|
13205
|
-
args: op === "+"
|
|
13206
|
-
? [left, right]
|
|
13207
|
-
: [left, right, { kind: "strLit", value: op, type: STRING, loc }],
|
|
13208
|
-
type: DYN,
|
|
13209
|
-
loc,
|
|
13210
|
-
};
|
|
13282
|
+
else if ((target.fieldType.kind === "dyn" && isJsSourceFile(access.getSourceFile())) ||
|
|
13283
|
+
// An untyped right operand: the expanded `o.f = o.f op rhs`; the field
|
|
13284
|
+
// write below checks the result into the declared field type.
|
|
13285
|
+
(rhs.type.kind === "dyn" &&
|
|
13286
|
+
lowerer.dynConvertible(read.type) &&
|
|
13287
|
+
lowerer.dynConvertible(target.fieldType))) {
|
|
13288
|
+
value = dynCompoundValue(op, lowerer.coerceToExpected(read, DYN), lowerer.coerceToExpected(rhs, DYN), loc);
|
|
13211
13289
|
}
|
|
13212
13290
|
else {
|
|
13213
|
-
lowerer.
|
|
13291
|
+
compoundUnsupported(lowerer, access, op, read.type, rhs.type);
|
|
13214
13292
|
}
|
|
13215
13293
|
if (storedString && rhs.type.kind === "string" && read.kind === "varRef" && appended !== null) {
|
|
13216
13294
|
// The field gives up its value before the concat (no code runs in
|
|
@@ -13248,6 +13326,14 @@ function lowerStreamObjectProperty(lowerer, expr) {
|
|
|
13248
13326
|
const info = lowerer.classes.get(recvT.className);
|
|
13249
13327
|
if (!info || streamSidesOf(lowerer, info) === null)
|
|
13250
13328
|
return null;
|
|
13329
|
+
if (expr.name.text === "bytesWritten" && isZlibStreamMember(lowerer, expr)) {
|
|
13330
|
+
return lowerZlibStreamBytesWritten(lowerer, expr);
|
|
13331
|
+
}
|
|
13332
|
+
if (isFsStreamMember(lowerer, expr)) {
|
|
13333
|
+
const member = lowerFsStreamProperty(lowerer, expr);
|
|
13334
|
+
if (member)
|
|
13335
|
+
return member;
|
|
13336
|
+
}
|
|
13251
13337
|
return lowerStreamProperty(lowerer, expr, info);
|
|
13252
13338
|
}
|
|
13253
13339
|
/** The primitive-constructor closure (`String`/`Number`/`Boolean` as a
|