@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
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import * as ts from "../ts7/adapter.js";
|
|
2
|
+
import { type IrExpr, type IrType } from "../../ir/ir.js";
|
|
3
|
+
import type { Lowerer } from "./lowerer.js";
|
|
4
|
+
export declare function isMockContextType(lowerer: Lowerer, type: IrType): boolean;
|
|
5
|
+
/** mock.fn(original, implementation?) and t.mock.fn(...). */
|
|
6
|
+
export declare function lowerMockFn(lowerer: Lowerer, call: ts.CallExpression, what: string): IrExpr;
|
|
7
|
+
/** `fn.mock.calls`: a copy of the log, as Node's getter returns. Null for
|
|
8
|
+
* other reads. */
|
|
9
|
+
export declare function lowerMockContextProperty(lowerer: Lowerer, expr: ts.PropertyAccessExpression): IrExpr | null;
|
|
10
|
+
/** The fn.mock context's methods. Null for other receivers. */
|
|
11
|
+
export declare function lowerMockContextCall(lowerer: Lowerer, call: ts.CallExpression, access: ts.PropertyAccessExpression): IrExpr | null;
|
|
@@ -0,0 +1,504 @@
|
|
|
1
|
+
/* node:test's mock functions (Node 24.22, lib/internal/test_runner/mock):
|
|
2
|
+
* mock.fn and t.mock.fn, and the fn.mock context's calls, callCount,
|
|
3
|
+
* mockImplementation, mockImplementationOnce, resetCalls and restore.
|
|
4
|
+
*
|
|
5
|
+
* mock.fn(original, implementation?) lowers to the hybrid record
|
|
6
|
+
* { %call: wrapper, mock: context } (mock-shapes.ts). The wrapper is a
|
|
7
|
+
* closure over the context, lifted once per context type: it takes the
|
|
8
|
+
* one-time implementation registered for this call index, or the current
|
|
9
|
+
* one, calls it, and appends { arguments, error, result, this } to the
|
|
10
|
+
* calls log before returning or rethrowing. The context's mutating
|
|
11
|
+
* methods are lifted helpers of the same type. */
|
|
12
|
+
import * as ts from "../ts7/adapter.js";
|
|
13
|
+
import { BOOL, CAUGHT, DYN, F64, UNDEFINED_T, VOID, typeKey, } from "../../ir/ir.js";
|
|
14
|
+
import { countedFor, dynUndefinedExpr, numLit, varRef } from "../../ir/build.js";
|
|
15
|
+
import { locOf } from "../program.js";
|
|
16
|
+
/** The context record's parts, or null when `type` is not a mock context
|
|
17
|
+
* (mock-shapes.ts). */
|
|
18
|
+
function mockContextFields(lowerer, type) {
|
|
19
|
+
if (type.kind !== "record")
|
|
20
|
+
return null;
|
|
21
|
+
const shape = lowerer.shapes.get(type.shapeId);
|
|
22
|
+
const field = (name) => shape?.fields.find((f) => f.name === name)?.type;
|
|
23
|
+
const impl = field("%impl");
|
|
24
|
+
const once = field("%once");
|
|
25
|
+
const calls = field("calls");
|
|
26
|
+
if (impl?.kind !== "func" ||
|
|
27
|
+
once?.kind !== "array" ||
|
|
28
|
+
calls?.kind !== "array" ||
|
|
29
|
+
field("%original") === undefined)
|
|
30
|
+
return null;
|
|
31
|
+
const call = calls.elem;
|
|
32
|
+
const callShape = call.kind === "record" ? lowerer.shapes.get(call.shapeId) : undefined;
|
|
33
|
+
const result = callShape?.fields.find((f) => f.name === "result")?.type;
|
|
34
|
+
const args = callShape?.fields.find((f) => f.name === "arguments")?.type;
|
|
35
|
+
if (!result || !args)
|
|
36
|
+
return null;
|
|
37
|
+
return { fn: impl, call, calls, once, onceEntry: once.elem, result, args };
|
|
38
|
+
}
|
|
39
|
+
export function isMockContextType(lowerer, type) {
|
|
40
|
+
return mockContextFields(lowerer, type) !== null;
|
|
41
|
+
}
|
|
42
|
+
const recordGet = (obj, field, type, loc) => ({
|
|
43
|
+
kind: "recordGet",
|
|
44
|
+
obj,
|
|
45
|
+
shapeId: obj.type.shapeId,
|
|
46
|
+
field,
|
|
47
|
+
type,
|
|
48
|
+
loc,
|
|
49
|
+
});
|
|
50
|
+
const recordSet = (obj, field, value, loc) => ({
|
|
51
|
+
kind: "recordSet",
|
|
52
|
+
obj,
|
|
53
|
+
shapeId: obj.type.shapeId,
|
|
54
|
+
field,
|
|
55
|
+
value,
|
|
56
|
+
loc,
|
|
57
|
+
});
|
|
58
|
+
const length = (arr, loc) => ({
|
|
59
|
+
kind: "arrIntrinsic",
|
|
60
|
+
method: "length",
|
|
61
|
+
receiver: arr,
|
|
62
|
+
args: [],
|
|
63
|
+
type: F64,
|
|
64
|
+
loc,
|
|
65
|
+
});
|
|
66
|
+
const local = (id, name, type, mutable = false) => ({
|
|
67
|
+
id,
|
|
68
|
+
name,
|
|
69
|
+
type,
|
|
70
|
+
mutable,
|
|
71
|
+
});
|
|
72
|
+
/** Lifts one function per (context type, role), cached on the lowerer. */
|
|
73
|
+
function liftOnce(lowerer, ctxType, role, build) {
|
|
74
|
+
const key = `mock.${role}:${ctxType.shapeId}`;
|
|
75
|
+
const existing = lowerer.assertHelpers.get(key);
|
|
76
|
+
if (existing)
|
|
77
|
+
return existing;
|
|
78
|
+
const name = `%mock.${role}.${lowerer.assertHelpers.size}`;
|
|
79
|
+
lowerer.assertHelpers.set(key, name);
|
|
80
|
+
build(name);
|
|
81
|
+
return name;
|
|
82
|
+
}
|
|
83
|
+
/** `%mock.wrap.N(ctx)`: the closure that records each call into ctx. */
|
|
84
|
+
function mockWrapperFactory(lowerer, ctxType, loc) {
|
|
85
|
+
return liftOnce(lowerer, ctxType, "wrap", (name) => {
|
|
86
|
+
const { fn, call, calls, once, onceEntry, result, args } = mockContextFields(lowerer, ctxType);
|
|
87
|
+
const impl = `${name}.impl`;
|
|
88
|
+
const ctx = () => varRef("ctx.0", ctxType, loc);
|
|
89
|
+
const params = fn.params.map((type, i) => ({ localId: `p${i}.0`, name: `p${i}`, type }));
|
|
90
|
+
const paramRefs = () => params.map((p) => varRef(p.localId, p.type, loc));
|
|
91
|
+
const argumentsValue = () => fn.rest
|
|
92
|
+
? paramRefs()[0]
|
|
93
|
+
: {
|
|
94
|
+
kind: "recordLit",
|
|
95
|
+
fields: paramRefs().map((value, i) => ({ name: String(i), value })),
|
|
96
|
+
type: args,
|
|
97
|
+
loc,
|
|
98
|
+
};
|
|
99
|
+
const record = (resultValue, error) => ({
|
|
100
|
+
kind: "exprStmt",
|
|
101
|
+
expr: {
|
|
102
|
+
kind: "arrIntrinsic",
|
|
103
|
+
method: "push",
|
|
104
|
+
receiver: recordGet(ctx(), "calls", calls, loc),
|
|
105
|
+
args: [
|
|
106
|
+
{
|
|
107
|
+
kind: "recordLit",
|
|
108
|
+
fields: [
|
|
109
|
+
{ name: "arguments", value: argumentsValue() },
|
|
110
|
+
{ name: "error", value: error },
|
|
111
|
+
{ name: "result", value: resultValue },
|
|
112
|
+
{ name: "this", value: dynUndefinedExpr(loc) },
|
|
113
|
+
],
|
|
114
|
+
type: call,
|
|
115
|
+
loc,
|
|
116
|
+
},
|
|
117
|
+
],
|
|
118
|
+
type: F64,
|
|
119
|
+
loc,
|
|
120
|
+
},
|
|
121
|
+
loc,
|
|
122
|
+
});
|
|
123
|
+
const voidReturn = fn.ret.kind === "void" || fn.ret.kind === "undefinedT";
|
|
124
|
+
// The result slot: a checked-dynamic undefined for void functions, R
|
|
125
|
+
// when R already admits undefined, else the `R | undefined` union.
|
|
126
|
+
const asResult = (value) => {
|
|
127
|
+
if (result.kind === "dyn")
|
|
128
|
+
return dynUndefinedExpr(loc);
|
|
129
|
+
if (value !== null && result.kind === "union" && value.type.kind !== "union")
|
|
130
|
+
return {
|
|
131
|
+
kind: "unionWrap",
|
|
132
|
+
unionId: result.unionId,
|
|
133
|
+
tag: lowerer.armTag(result.unionId, value.type),
|
|
134
|
+
value,
|
|
135
|
+
type: result,
|
|
136
|
+
loc,
|
|
137
|
+
};
|
|
138
|
+
if (value !== null)
|
|
139
|
+
return value;
|
|
140
|
+
const unionId = result.unionId;
|
|
141
|
+
return {
|
|
142
|
+
kind: "unionWrap",
|
|
143
|
+
unionId,
|
|
144
|
+
tag: lowerer.armTag(unionId, UNDEFINED_T),
|
|
145
|
+
value: { kind: "unitLit", unit: "undefined", type: UNDEFINED_T, loc },
|
|
146
|
+
type: result,
|
|
147
|
+
loc,
|
|
148
|
+
};
|
|
149
|
+
};
|
|
150
|
+
const invoke = {
|
|
151
|
+
kind: "callValue",
|
|
152
|
+
callee: varRef("f.0", fn, loc),
|
|
153
|
+
args: paramRefs(),
|
|
154
|
+
type: fn.ret,
|
|
155
|
+
loc,
|
|
156
|
+
};
|
|
157
|
+
const tryBody = voidReturn
|
|
158
|
+
? [
|
|
159
|
+
{ kind: "exprStmt", expr: invoke, loc },
|
|
160
|
+
record(asResult(null), dynUndefinedExpr(loc)),
|
|
161
|
+
{ kind: "return", value: null, loc },
|
|
162
|
+
]
|
|
163
|
+
: [
|
|
164
|
+
{ kind: "varDecl", localId: "r.0", init: invoke, loc },
|
|
165
|
+
record(asResult(varRef("r.0", fn.ret, loc)), dynUndefinedExpr(loc)),
|
|
166
|
+
{ kind: "return", value: varRef("r.0", fn.ret, loc), loc },
|
|
167
|
+
];
|
|
168
|
+
const catchBody = [
|
|
169
|
+
record(asResult(null), {
|
|
170
|
+
kind: "caughtToDyn",
|
|
171
|
+
value: varRef("e.0", CAUGHT, loc),
|
|
172
|
+
type: DYN,
|
|
173
|
+
loc,
|
|
174
|
+
}),
|
|
175
|
+
{ kind: "rethrow", localId: "e.0", loc },
|
|
176
|
+
];
|
|
177
|
+
const onceArray = () => recordGet(ctx(), "%once", once, loc);
|
|
178
|
+
const entry = (j) => ({
|
|
179
|
+
kind: "arrayGet",
|
|
180
|
+
arr: onceArray(),
|
|
181
|
+
index: j,
|
|
182
|
+
type: onceEntry,
|
|
183
|
+
loc,
|
|
184
|
+
});
|
|
185
|
+
// The one-time implementation for this call index, used once.
|
|
186
|
+
const pickOnce = countedFor(loc, length(onceArray(), loc), (j) => [
|
|
187
|
+
{
|
|
188
|
+
kind: "if",
|
|
189
|
+
cond: {
|
|
190
|
+
kind: "bin",
|
|
191
|
+
op: "===",
|
|
192
|
+
left: recordGet(entry(j), "at", F64, loc),
|
|
193
|
+
right: varRef("n.0", F64, loc),
|
|
194
|
+
type: BOOL,
|
|
195
|
+
loc,
|
|
196
|
+
},
|
|
197
|
+
then: [
|
|
198
|
+
{ kind: "assign", localId: "f.0", value: recordGet(entry(j), "fn", fn, loc), loc },
|
|
199
|
+
{
|
|
200
|
+
kind: "exprStmt",
|
|
201
|
+
expr: {
|
|
202
|
+
kind: "arrIntrinsic",
|
|
203
|
+
method: "splice",
|
|
204
|
+
receiver: onceArray(),
|
|
205
|
+
args: [j, numLit(1, loc)],
|
|
206
|
+
type: once,
|
|
207
|
+
loc,
|
|
208
|
+
},
|
|
209
|
+
loc,
|
|
210
|
+
},
|
|
211
|
+
],
|
|
212
|
+
else_: null,
|
|
213
|
+
loc,
|
|
214
|
+
},
|
|
215
|
+
]);
|
|
216
|
+
lowerer.liftedFns.push({
|
|
217
|
+
name: impl,
|
|
218
|
+
params,
|
|
219
|
+
returnType: fn.ret,
|
|
220
|
+
captures: [{ localId: "ctx.0", name: "ctx", type: ctxType }],
|
|
221
|
+
locals: [
|
|
222
|
+
...params.map((p) => local(p.localId, p.name, p.type)),
|
|
223
|
+
{ ...local("ctx.0", "ctx", ctxType), boxed: true },
|
|
224
|
+
local("n.0", "index", F64),
|
|
225
|
+
local("f.0", "implementation", fn, true),
|
|
226
|
+
local("i.0", "entry", F64, true),
|
|
227
|
+
...(voidReturn ? [] : [local("r.0", "result", fn.ret)]),
|
|
228
|
+
local("e.0", "error", CAUGHT),
|
|
229
|
+
],
|
|
230
|
+
body: [
|
|
231
|
+
{
|
|
232
|
+
kind: "varDecl",
|
|
233
|
+
localId: "n.0",
|
|
234
|
+
init: length(recordGet(ctx(), "calls", calls, loc), loc),
|
|
235
|
+
loc,
|
|
236
|
+
},
|
|
237
|
+
{ kind: "varDecl", localId: "f.0", init: recordGet(ctx(), "%impl", fn, loc), loc },
|
|
238
|
+
pickOnce,
|
|
239
|
+
{ kind: "tryCatch", tryBody, catchBody, catchLocalId: "e.0", finallyBody: null, loc },
|
|
240
|
+
],
|
|
241
|
+
loc,
|
|
242
|
+
});
|
|
243
|
+
lowerer.liftedFns.push({
|
|
244
|
+
name,
|
|
245
|
+
params: [{ localId: "ctx.0", name: "ctx", type: ctxType }],
|
|
246
|
+
returnType: fn,
|
|
247
|
+
locals: [{ ...local("ctx.0", "ctx", ctxType), boxed: true }],
|
|
248
|
+
body: [
|
|
249
|
+
{
|
|
250
|
+
kind: "return",
|
|
251
|
+
value: { kind: "closure", fnName: impl, captures: ["ctx.0"], type: fn, loc },
|
|
252
|
+
loc,
|
|
253
|
+
},
|
|
254
|
+
],
|
|
255
|
+
loc,
|
|
256
|
+
});
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
/** A VOID helper over the context: `%mock.<role>.N(ctx, ...extra)`. */
|
|
260
|
+
function mockHelper(lowerer, ctxType, role, extra, body, loc) {
|
|
261
|
+
return liftOnce(lowerer, ctxType, role, (name) => {
|
|
262
|
+
const ctx = () => varRef("ctx.0", ctxType, loc);
|
|
263
|
+
lowerer.liftedFns.push({
|
|
264
|
+
name,
|
|
265
|
+
params: [
|
|
266
|
+
{ localId: "ctx.0", name: "ctx", type: ctxType },
|
|
267
|
+
...extra.map((e) => ({ localId: e.id, name: e.name, type: e.type })),
|
|
268
|
+
],
|
|
269
|
+
returnType: VOID,
|
|
270
|
+
locals: [
|
|
271
|
+
local("ctx.0", "ctx", ctxType),
|
|
272
|
+
...extra.map((e) => local(e.id, e.name, e.type, true)),
|
|
273
|
+
local("i.0", "entry", F64, true),
|
|
274
|
+
],
|
|
275
|
+
body: [...body(ctx, loc), { kind: "return", value: null, loc }],
|
|
276
|
+
loc,
|
|
277
|
+
});
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
/** mock.fn(original, implementation?) and t.mock.fn(...). */
|
|
281
|
+
export function lowerMockFn(lowerer, call, what) {
|
|
282
|
+
const loc = locOf(call);
|
|
283
|
+
const mockType = lowerer.mapTypeOf(lowerer.typeOf(call));
|
|
284
|
+
const shape = mockType?.kind === "record" ? lowerer.shapes.get(mockType.shapeId) : undefined;
|
|
285
|
+
const ctxType = shape?.fields.find((f) => f.name === "mock")?.type;
|
|
286
|
+
if (!mockType ||
|
|
287
|
+
!shape ||
|
|
288
|
+
shape.fields.length !== 2 ||
|
|
289
|
+
!shape.fields.some((f) => f.name === "%call") ||
|
|
290
|
+
!ctxType ||
|
|
291
|
+
!isMockContextType(lowerer, ctxType)) {
|
|
292
|
+
lowerer.noLowering(`${what} of this function type`, call, "mock functions lower for functions with fixed parameters, or a single rest array parameter");
|
|
293
|
+
}
|
|
294
|
+
const { fn, calls, once, result } = mockContextFields(lowerer, ctxType);
|
|
295
|
+
if (fn.ret.kind === "union" && typeKey(result) !== typeKey(fn.ret)) {
|
|
296
|
+
lowerer.noLowering(`${what} of a function returning '${lowerer.fmt(fn.ret)}'`, call, "a union return type needs an undefined arm here (the calls log records undefined for calls that throw)");
|
|
297
|
+
}
|
|
298
|
+
const args = call.arguments;
|
|
299
|
+
if (args.length === 0 || args.length > 2 || args.some(ts.isSpreadElement)) {
|
|
300
|
+
lowerer.noLowering(`${what} with ${args.length} arguments`, call, "the supported forms are mock.fn(original) and mock.fn(original, implementation); mock.fn() and mock options have no lowering");
|
|
301
|
+
}
|
|
302
|
+
const stmts = [];
|
|
303
|
+
const originalLocal = lowerer.declareHiddenLocal("%mockOriginal", fn);
|
|
304
|
+
stmts.push({
|
|
305
|
+
kind: "varDecl",
|
|
306
|
+
localId: originalLocal.id,
|
|
307
|
+
init: lowerer.lowerExprExpecting(args[0], fn),
|
|
308
|
+
loc,
|
|
309
|
+
});
|
|
310
|
+
const implementation = args.length === 2
|
|
311
|
+
? lowerer.lowerExprExpecting(args[1], fn)
|
|
312
|
+
: varRef(originalLocal.id, fn, loc);
|
|
313
|
+
const ctxLocal = lowerer.declareHiddenLocal("%mockContext", ctxType);
|
|
314
|
+
stmts.push({
|
|
315
|
+
kind: "varDecl",
|
|
316
|
+
localId: ctxLocal.id,
|
|
317
|
+
init: {
|
|
318
|
+
kind: "recordLit",
|
|
319
|
+
fields: [
|
|
320
|
+
{ name: "%impl", value: implementation },
|
|
321
|
+
{ name: "%once", value: { kind: "arrayLit", elems: [], type: once, loc } },
|
|
322
|
+
{ name: "%original", value: varRef(originalLocal.id, fn, loc) },
|
|
323
|
+
{ name: "calls", value: { kind: "arrayLit", elems: [], type: calls, loc } },
|
|
324
|
+
],
|
|
325
|
+
type: ctxType,
|
|
326
|
+
loc,
|
|
327
|
+
},
|
|
328
|
+
loc,
|
|
329
|
+
});
|
|
330
|
+
const factory = mockWrapperFactory(lowerer, ctxType, loc);
|
|
331
|
+
return {
|
|
332
|
+
kind: "seqExpr",
|
|
333
|
+
stmts,
|
|
334
|
+
result: {
|
|
335
|
+
kind: "recordLit",
|
|
336
|
+
fields: [
|
|
337
|
+
{
|
|
338
|
+
name: "%call",
|
|
339
|
+
value: {
|
|
340
|
+
kind: "call",
|
|
341
|
+
callee: factory,
|
|
342
|
+
args: [varRef(ctxLocal.id, ctxType, loc)],
|
|
343
|
+
type: fn,
|
|
344
|
+
loc,
|
|
345
|
+
},
|
|
346
|
+
},
|
|
347
|
+
{ name: "mock", value: varRef(ctxLocal.id, ctxType, loc) },
|
|
348
|
+
],
|
|
349
|
+
type: mockType,
|
|
350
|
+
loc,
|
|
351
|
+
},
|
|
352
|
+
type: mockType,
|
|
353
|
+
loc,
|
|
354
|
+
};
|
|
355
|
+
}
|
|
356
|
+
/** `fn.mock.calls`: a copy of the log, as Node's getter returns. Null for
|
|
357
|
+
* other reads. */
|
|
358
|
+
export function lowerMockContextProperty(lowerer, expr) {
|
|
359
|
+
if (expr.questionDotToken || expr.name.text !== "calls")
|
|
360
|
+
return null;
|
|
361
|
+
const receiverType = lowerer.mapTypeOf(lowerer.typeOf(expr.expression));
|
|
362
|
+
if (!receiverType || !isMockContextType(lowerer, receiverType))
|
|
363
|
+
return null;
|
|
364
|
+
const { calls } = mockContextFields(lowerer, receiverType);
|
|
365
|
+
const loc = locOf(expr);
|
|
366
|
+
return {
|
|
367
|
+
kind: "arrIntrinsic",
|
|
368
|
+
method: "slice",
|
|
369
|
+
receiver: recordGet(lowerer.lowerExpr(expr.expression), "calls", calls, loc),
|
|
370
|
+
args: [],
|
|
371
|
+
type: calls,
|
|
372
|
+
loc,
|
|
373
|
+
};
|
|
374
|
+
}
|
|
375
|
+
/** The fn.mock context's methods. Null for other receivers. */
|
|
376
|
+
export function lowerMockContextCall(lowerer, call, access) {
|
|
377
|
+
const ctxType = lowerer.mapTypeOf(lowerer.typeOf(access.expression));
|
|
378
|
+
if (!ctxType || !isMockContextType(lowerer, ctxType))
|
|
379
|
+
return null;
|
|
380
|
+
const { fn, calls, once, onceEntry } = mockContextFields(lowerer, ctxType);
|
|
381
|
+
const loc = locOf(call);
|
|
382
|
+
const member = access.name.text;
|
|
383
|
+
const args = call.arguments;
|
|
384
|
+
const arity = (min, max = min) => {
|
|
385
|
+
if (args.length < min || args.length > max || args.some(ts.isSpreadElement))
|
|
386
|
+
lowerer.noLowering(`MockFunctionContext.${member} with ${args.length} arguments`, call);
|
|
387
|
+
};
|
|
388
|
+
const helperCall = (helper, extra) => ({
|
|
389
|
+
kind: "call",
|
|
390
|
+
callee: helper,
|
|
391
|
+
args: [lowerer.lowerExpr(access.expression), ...extra],
|
|
392
|
+
type: VOID,
|
|
393
|
+
loc,
|
|
394
|
+
});
|
|
395
|
+
switch (member) {
|
|
396
|
+
case "callCount":
|
|
397
|
+
arity(0);
|
|
398
|
+
return length(recordGet(lowerer.lowerExpr(access.expression), "calls", calls, loc), loc);
|
|
399
|
+
case "mockImplementation": {
|
|
400
|
+
arity(1);
|
|
401
|
+
const helper = mockHelper(lowerer, ctxType, "setImplementation", [{ id: "f.0", name: "implementation", type: fn }], (ctx) => [recordSet(ctx(), "%impl", varRef("f.0", fn, loc), loc)], loc);
|
|
402
|
+
return helperCall(helper, [lowerer.lowerExprExpecting(args[0], fn)]);
|
|
403
|
+
}
|
|
404
|
+
case "mockImplementationOnce": {
|
|
405
|
+
arity(1, 2);
|
|
406
|
+
// onCall defaults to the next call: the log's length (NaN marks the
|
|
407
|
+
// default). A later registration for the same index replaces it, as
|
|
408
|
+
// Node's Map does.
|
|
409
|
+
const helper = mockHelper(lowerer, ctxType, "setImplementationOnce", [
|
|
410
|
+
{ id: "f.0", name: "implementation", type: fn },
|
|
411
|
+
{ id: "at.0", name: "onCall", type: F64 },
|
|
412
|
+
], (ctx) => {
|
|
413
|
+
const at = () => varRef("at.0", F64, loc);
|
|
414
|
+
const onceArray = () => recordGet(ctx(), "%once", once, loc);
|
|
415
|
+
return [
|
|
416
|
+
{
|
|
417
|
+
kind: "if",
|
|
418
|
+
cond: { kind: "bin", op: "!==", left: at(), right: at(), type: BOOL, loc },
|
|
419
|
+
then: [
|
|
420
|
+
{
|
|
421
|
+
kind: "assign",
|
|
422
|
+
localId: "at.0",
|
|
423
|
+
value: length(recordGet(ctx(), "calls", calls, loc), loc),
|
|
424
|
+
loc,
|
|
425
|
+
},
|
|
426
|
+
],
|
|
427
|
+
else_: null,
|
|
428
|
+
loc,
|
|
429
|
+
},
|
|
430
|
+
countedFor(loc, length(onceArray(), loc), (j) => [
|
|
431
|
+
{
|
|
432
|
+
kind: "if",
|
|
433
|
+
cond: {
|
|
434
|
+
kind: "bin",
|
|
435
|
+
op: "===",
|
|
436
|
+
left: recordGet({ kind: "arrayGet", arr: onceArray(), index: j, type: onceEntry, loc }, "at", F64, loc),
|
|
437
|
+
right: at(),
|
|
438
|
+
type: BOOL,
|
|
439
|
+
loc,
|
|
440
|
+
},
|
|
441
|
+
then: [
|
|
442
|
+
{
|
|
443
|
+
kind: "exprStmt",
|
|
444
|
+
expr: {
|
|
445
|
+
kind: "arrIntrinsic",
|
|
446
|
+
method: "splice",
|
|
447
|
+
receiver: onceArray(),
|
|
448
|
+
args: [j, numLit(1, loc)],
|
|
449
|
+
type: once,
|
|
450
|
+
loc,
|
|
451
|
+
},
|
|
452
|
+
loc,
|
|
453
|
+
},
|
|
454
|
+
],
|
|
455
|
+
else_: null,
|
|
456
|
+
loc,
|
|
457
|
+
},
|
|
458
|
+
]),
|
|
459
|
+
{
|
|
460
|
+
kind: "exprStmt",
|
|
461
|
+
expr: {
|
|
462
|
+
kind: "arrIntrinsic",
|
|
463
|
+
method: "push",
|
|
464
|
+
receiver: onceArray(),
|
|
465
|
+
args: [
|
|
466
|
+
{
|
|
467
|
+
kind: "recordLit",
|
|
468
|
+
fields: [
|
|
469
|
+
{ name: "at", value: at() },
|
|
470
|
+
{ name: "fn", value: varRef("f.0", fn, loc) },
|
|
471
|
+
],
|
|
472
|
+
type: onceEntry,
|
|
473
|
+
loc,
|
|
474
|
+
},
|
|
475
|
+
],
|
|
476
|
+
type: F64,
|
|
477
|
+
loc,
|
|
478
|
+
},
|
|
479
|
+
loc,
|
|
480
|
+
},
|
|
481
|
+
];
|
|
482
|
+
}, loc);
|
|
483
|
+
return helperCall(helper, [
|
|
484
|
+
lowerer.lowerExprExpecting(args[0], fn),
|
|
485
|
+
args.length === 2 ? lowerer.lowerExprExpecting(args[1], F64) : numLit(NaN, loc),
|
|
486
|
+
]);
|
|
487
|
+
}
|
|
488
|
+
case "resetCalls": {
|
|
489
|
+
arity(0);
|
|
490
|
+
const helper = mockHelper(lowerer, ctxType, "resetCalls", [], (ctx) => [
|
|
491
|
+
recordSet(ctx(), "calls", { kind: "arrayLit", elems: [], type: calls, loc }, loc),
|
|
492
|
+
], loc);
|
|
493
|
+
return helperCall(helper, []);
|
|
494
|
+
}
|
|
495
|
+
case "restore": {
|
|
496
|
+
arity(0);
|
|
497
|
+
const helper = mockHelper(lowerer, ctxType, "restore", [], (ctx) => [recordSet(ctx(), "%impl", recordGet(ctx(), "%original", fn, loc), loc)], loc);
|
|
498
|
+
return helperCall(helper, []);
|
|
499
|
+
}
|
|
500
|
+
default:
|
|
501
|
+
return lowerer.noLowering(`MockFunctionContext.${member}`, call, "calls, callCount, mockImplementation, mockImplementationOnce, resetCalls and restore are the supported mock context members");
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
//# sourceMappingURL=lower-mock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lower-mock.js","sourceRoot":"","sources":["../../../src/frontend/lowering/lower-mock.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,6 +28,7 @@ import { funcTypeFromParamShapes, registerOverloadedCallableAlias } from "./call
|
|
|
28
28
|
import { jsBindingHasOpenWrites, hasJsTypeAnnotation, isVarDeclared, numericIteratorSourceOf, provenanceElidedConstDecl, } from "./lower-stmts.js";
|
|
29
29
|
import { objectFactoryGlobalType } from "./object-factory-new.js";
|
|
30
30
|
import { streamClassAliasDecl } from "./lower-stream.js";
|
|
31
|
+
import { isAssertClassNew } from "./assert-instances.js";
|
|
31
32
|
import { stdlibGlobalAliasDecl, stdlibGlobalAliasNameOf, stdlibGlobalNameOf } from "./surfaces.js";
|
|
32
33
|
import { isNativeBuiltinValueInitializer } from "./lower-builtin-values.js";
|
|
33
34
|
import { collectNamespaceStmt, nsMemberIdentOf, nsPathPrefix, trapDeclRootOf, } from "./lower-namespaces.js";
|
|
@@ -1631,6 +1632,12 @@ export function collectGlobals(lowerer, sf, topStmts) {
|
|
|
1631
1632
|
// test).
|
|
1632
1633
|
if (isConst && streamClassAliasDecl(lowerer, decl.name, decl.initializer))
|
|
1633
1634
|
continue;
|
|
1635
|
+
// `new Assert(...)`: a static instance has no global storage, and any
|
|
1636
|
+
// other instance is refused where its declaration lowers.
|
|
1637
|
+
if (decl.initializer !== undefined &&
|
|
1638
|
+
ts.isNewExpression(stripTypeCasts(decl.initializer)) &&
|
|
1639
|
+
isAssertClassNew(lowerer, stripTypeCasts(decl.initializer)))
|
|
1640
|
+
continue;
|
|
1634
1641
|
// `const process = globalThis.process` at file scope: a stdlib-
|
|
1635
1642
|
// global snapshot — alias plumbing, no global storage (see
|
|
1636
1643
|
// stdlibGlobalAliasDecl; the statement lowering skips it by the
|