@scriptc/compiler 0.3.4 → 0.3.6
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 +409 -42
- 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 +6 -0
- package/dist/backend/llvm/call-lifetimes.js +19 -0
- package/dist/backend/llvm/call-lifetimes.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 +27 -1
- package/dist/backend/llvm/dense-array-access.js.map +1 -1
- package/dist/backend/llvm/dyn.d.ts +6 -0
- package/dist/backend/llvm/dyn.js +71 -7
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emitter.d.ts +120 -2
- package/dist/backend/llvm/emitter.js +820 -142
- 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.js +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.js +88 -2
- package/dist/backend/llvm/expr-calls.js.map +1 -1
- package/dist/backend/llvm/expr-containers.js +50 -27
- package/dist/backend/llvm/expr-containers.js.map +1 -1
- package/dist/backend/llvm/expr-dispatch.js +1 -0
- package/dist/backend/llvm/expr-dispatch.js.map +1 -1
- package/dist/backend/llvm/expr-dynamic.js +25 -1
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.d.ts +1 -1
- package/dist/backend/llvm/expr-primitives.js +20 -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/lib-datagram.js +14 -0
- package/dist/backend/llvm/lib-datagram.js.map +1 -1
- package/dist/backend/llvm/lib-dispatch.js +32 -1
- package/dist/backend/llvm/lib-dispatch.js.map +1 -1
- package/dist/backend/llvm/lib-filesystem.js +61 -1
- package/dist/backend/llvm/lib-filesystem.js.map +1 -1
- package/dist/backend/llvm/lib-network.js +21 -3
- package/dist/backend/llvm/lib-network.js.map +1 -1
- package/dist/backend/llvm/lib-process.js +34 -0
- package/dist/backend/llvm/lib-process.js.map +1 -1
- package/dist/backend/llvm/lib-shared.js +77 -2
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/lib-test.js +16 -3
- 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 +2 -0
- package/dist/backend/llvm/map-number-lookup.js +1 -1
- package/dist/backend/llvm/map-number-lookup.js.map +1 -1
- package/dist/backend/llvm/map-number-lookup.test.js +10 -11
- package/dist/backend/llvm/map-number-lookup.test.js.map +1 -1
- package/dist/backend/llvm/map-read-lifetimes.d.ts +2 -0
- package/dist/backend/llvm/map-read-lifetimes.js +3 -0
- package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
- package/dist/backend/llvm/map-read-lifetimes.test.js +2 -2
- package/dist/backend/llvm/nullable-unions.d.ts +6 -3
- package/dist/backend/llvm/nullable-unions.js +2 -0
- package/dist/backend/llvm/nullable-unions.js.map +1 -1
- package/dist/backend/llvm/publish.d.ts +16 -0
- package/dist/backend/llvm/publish.js +81 -10
- 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.d.ts +1 -1
- package/dist/backend/llvm/record-results.js +78 -4
- 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 +1 -0
- package/dist/backend/llvm/reference-writes.js.map +1 -1
- package/dist/backend/llvm/shapes.d.ts +12 -3
- package/dist/backend/llvm/shapes.js +23 -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/speculative-integers.d.ts +74 -0
- package/dist/backend/llvm/speculative-integers.js +571 -0
- package/dist/backend/llvm/speculative-integers.js.map +1 -0
- package/dist/backend/llvm/speculative-integers.test.d.ts +1 -0
- package/dist/backend/llvm/speculative-integers.test.js +148 -0
- package/dist/backend/llvm/speculative-integers.test.js.map +1 -0
- 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/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 +2 -0
- package/dist/backend/may-throw.js.map +1 -1
- package/dist/backend/native/contracts.d.ts +2 -1
- package/dist/backend/native/executable.js +6 -1
- 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/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.d.ts +7 -3
- package/dist/backend/runtime-pack.js +12 -6
- package/dist/backend/runtime-pack.js.map +1 -1
- package/dist/backend/runtime-pack.test.js +16 -7
- package/dist/backend/runtime-pack.test.js.map +1 -1
- package/dist/contracts/check.js +1 -0
- package/dist/contracts/check.js.map +1 -1
- package/dist/coverage/surface-manifest.js +3 -3
- package/dist/coverage/surface-manifest.js.map +1 -1
- package/dist/diagnostics/diagnostic.d.ts +1 -1
- package/dist/diagnostics/diagnostic.js +6 -2
- package/dist/diagnostics/diagnostic.js.map +1 -1
- package/dist/frontend/lowering/builtin-calls.js +13 -0
- package/dist/frontend/lowering/builtin-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/callable-aliases.js +82 -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 +9 -0
- package/dist/frontend/lowering/builtins/compression.js +145 -30
- package/dist/frontend/lowering/builtins/compression.js.map +1 -1
- package/dist/frontend/lowering/builtins/crypto.js +12 -1
- package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
- package/dist/frontend/lowering/builtins/errors.js +5 -3
- package/dist/frontend/lowering/builtins/errors.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +6 -0
- package/dist/frontend/lowering/builtins/filesystem-calls.js +16 -0
- package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem.d.ts +8 -0
- package/dist/frontend/lowering/builtins/filesystem.js +199 -2
- 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/hash-stream.d.ts +12 -0
- package/dist/frontend/lowering/builtins/hash-stream.js +80 -0
- package/dist/frontend/lowering/builtins/hash-stream.js.map +1 -0
- package/dist/frontend/lowering/builtins/module-calls.js +17 -3
- package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/process.js +9 -2
- package/dist/frontend/lowering/builtins/process.js.map +1 -1
- package/dist/frontend/lowering/builtins/readline.d.ts +45 -13
- package/dist/frontend/lowering/builtins/readline.js +812 -47
- package/dist/frontend/lowering/builtins/readline.js.map +1 -1
- package/dist/frontend/lowering/builtins/workers.d.ts +4 -0
- package/dist/frontend/lowering/builtins/workers.js +58 -0
- package/dist/frontend/lowering/builtins/workers.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.js +150 -8
- package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/class-protocols.d.ts +55 -0
- package/dist/frontend/lowering/class-protocols.js +735 -0
- package/dist/frontend/lowering/class-protocols.js.map +1 -1
- package/dist/frontend/lowering/containers/array-from-async.d.ts +18 -0
- package/dist/frontend/lowering/containers/array-from-async.js +282 -0
- package/dist/frontend/lowering/containers/array-from-async.js.map +1 -0
- package/dist/frontend/lowering/containers/bytes.js +33 -12
- package/dist/frontend/lowering/containers/bytes.js.map +1 -1
- package/dist/frontend/lowering/containers/collection-grouping.js +2 -1
- package/dist/frontend/lowering/containers/collection-grouping.js.map +1 -1
- package/dist/frontend/lowering/containers/collection-methods.js +27 -23
- package/dist/frontend/lowering/containers/collection-methods.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/divergences.js +188 -15
- package/dist/frontend/lowering/divergences.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.js +129 -25
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.js +46 -1
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-dgram.js +55 -15
- 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 +88 -1
- 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 +239 -71
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-inspect.js +49 -3
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-mock.d.ts +11 -1
- package/dist/frontend/lowering/lower-mock.js +377 -61
- package/dist/frontend/lowering/lower-mock.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.js +1 -0
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-server.d.ts +2 -1
- package/dist/frontend/lowering/lower-server.js +234 -21
- package/dist/frontend/lowering/lower-server.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.js +60 -13
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lower-stream.d.ts +1 -3
- package/dist/frontend/lowering/lower-stream.js +325 -20
- package/dist/frontend/lowering/lower-stream.js.map +1 -1
- package/dist/frontend/lowering/lower-test.js +147 -48
- package/dist/frontend/lowering/lower-test.js.map +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +13 -1
- package/dist/frontend/lowering/lowerer.js +10 -2
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/null-prototype.d.ts +13 -0
- package/dist/frontend/lowering/null-prototype.js +33 -0
- package/dist/frontend/lowering/null-prototype.js.map +1 -0
- 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 +3 -3
- package/dist/frontend/lowering/surfaces.js +59 -5
- package/dist/frontend/lowering/surfaces.js.map +1 -1
- package/dist/frontend/mock-shapes.d.ts +5 -0
- package/dist/frontend/mock-shapes.js +27 -2
- package/dist/frontend/mock-shapes.js.map +1 -1
- package/dist/frontend/program.js +5 -4
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/type-mapper.d.ts +3 -0
- package/dist/frontend/type-mapper.js +148 -4
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/index.js +18 -8
- 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 +258 -13
- 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 +2 -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 +398 -13
- package/dist/ir/int32-slots.js.map +1 -1
- package/dist/ir/int32-slots.test.js +119 -8
- package/dist/ir/int32-slots.test.js.map +1 -1
- package/dist/ir/integer-loop-facts.d.ts +27 -1
- package/dist/ir/integer-loop-facts.js +239 -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 -59
- package/dist/ir/integer-ranges.js.map +1 -1
- package/dist/ir/integer-ranges.test.js +285 -7
- package/dist/ir/integer-ranges.test.js.map +1 -1
- package/dist/ir/ir.d.ts +22 -1
- package/dist/ir/ir.js +4 -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 +3 -1
- package/dist/ir/runtime-features.js +102 -7
- package/dist/ir/runtime-features.js.map +1 -1
- package/dist/ir/runtime-features.test.js +62 -0
- package/dist/ir/runtime-features.test.js.map +1 -1
- package/dist/ir/traverse.js +4 -0
- package/dist/ir/traverse.js.map +1 -1
- package/dist/ir/validate.js +71 -3
- package/dist/ir/validate.js.map +1 -1
- package/dist/ir/validate.test.js +59 -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 +5 -0
- package/dist/library/ir-policy.js.map +1 -1
- package/package.json +20 -20
- package/surface-manifest.json +57 -19
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type IrExpr, type IrType, type SrcLoc } from "../../ir/ir.js";
|
|
2
|
+
import type { Lowerer } from "./lowerer.js";
|
|
3
|
+
/** Records that can have a null prototype: pure index-signature shapes,
|
|
4
|
+
* which Object.groupBy builds with a `nullProto` recordLit. The flag lives
|
|
5
|
+
* on the record's overflow map, so other shapes never carry it. */
|
|
6
|
+
export declare function nullProtoRecordShape(lowerer: Lowerer, t: IrType): (IrType & {
|
|
7
|
+
kind: "record";
|
|
8
|
+
}) | null;
|
|
9
|
+
/** `obj` has a null prototype (`obj` is a borrowed, pure read). */
|
|
10
|
+
export declare function recordNullProtoTest(obj: IrExpr, shapeId: string, loc: SrcLoc): IrExpr;
|
|
11
|
+
/** `value`, or Node's TypeError(message) when `obj` has a null prototype
|
|
12
|
+
* (`obj` is a borrowed, pure read evaluated before `value`). */
|
|
13
|
+
export declare function guardNullProto(obj: IrExpr, shapeId: string, message: string, value: IrExpr, loc: SrcLoc): IrExpr;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { nodeThrowExpr } from "../../ir/build.js";
|
|
2
|
+
import { BOOL } from "../../ir/ir.js";
|
|
3
|
+
/** Records that can have a null prototype: pure index-signature shapes,
|
|
4
|
+
* which Object.groupBy builds with a `nullProto` recordLit. The flag lives
|
|
5
|
+
* on the record's overflow map, so other shapes never carry it. */
|
|
6
|
+
export function nullProtoRecordShape(lowerer, t) {
|
|
7
|
+
if (t.kind !== "record")
|
|
8
|
+
return null;
|
|
9
|
+
const shape = lowerer.shapes.get(t.shapeId);
|
|
10
|
+
return shape !== undefined &&
|
|
11
|
+
shape.indexValue !== undefined &&
|
|
12
|
+
!shape.tuple &&
|
|
13
|
+
shape.fields.length === 0
|
|
14
|
+
? t
|
|
15
|
+
: null;
|
|
16
|
+
}
|
|
17
|
+
/** `obj` has a null prototype (`obj` is a borrowed, pure read). */
|
|
18
|
+
export function recordNullProtoTest(obj, shapeId, loc) {
|
|
19
|
+
return { kind: "recordNullProto", obj, shapeId, type: BOOL, loc };
|
|
20
|
+
}
|
|
21
|
+
/** `value`, or Node's TypeError(message) when `obj` has a null prototype
|
|
22
|
+
* (`obj` is a borrowed, pure read evaluated before `value`). */
|
|
23
|
+
export function guardNullProto(obj, shapeId, message, value, loc) {
|
|
24
|
+
return {
|
|
25
|
+
kind: "ternary",
|
|
26
|
+
cond: recordNullProtoTest(obj, shapeId, loc),
|
|
27
|
+
then: nodeThrowExpr(1, "", message, value.type, loc),
|
|
28
|
+
else_: value,
|
|
29
|
+
type: value.type,
|
|
30
|
+
loc,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=null-prototype.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"null-prototype.js","sourceRoot":"","sources":["../../../src/frontend/lowering/null-prototype.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,IAAI,EAAyC,MAAM,gBAAgB,CAAC;AAG7E;;mEAEmE;AACnE,MAAM,UAAU,oBAAoB,CAClC,OAAgB,EAChB,CAAS;IAET,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACrC,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC5C,OAAO,KAAK,KAAK,SAAS;QACxB,KAAK,CAAC,UAAU,KAAK,SAAS;QAC9B,CAAC,KAAK,CAAC,KAAK;QACZ,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;QACzB,CAAC,CAAC,CAAC;QACH,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,mBAAmB,CAAC,GAAW,EAAE,OAAe,EAAE,GAAW;IAC3E,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AACpE,CAAC;AAED;gEACgE;AAChE,MAAM,UAAU,cAAc,CAC5B,GAAW,EACX,OAAe,EACf,OAAe,EACf,KAAa,EACb,GAAW;IAEX,OAAO;QACL,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,mBAAmB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC;QAC5C,IAAI,EAAE,aAAa,CAAC,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC;QACpD,KAAK,EAAE,KAAK;QACZ,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,GAAG;KACJ,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { IrExpr, IrType, SrcLoc } from "../../ir/ir.js";
|
|
2
|
+
import type { Lowerer } from "./lowerer.js";
|
|
3
|
+
/** Closed declared-field layouts with an ordinary data surface: the targets
|
|
4
|
+
* the checked record builder notes sources for. */
|
|
5
|
+
export declare function recordMayKeepSource(lowerer: Lowerer, t: IrType & {
|
|
6
|
+
kind: "record";
|
|
7
|
+
}): boolean;
|
|
8
|
+
/** `record.sourceHas(value)`: whether this record kept undeclared source
|
|
9
|
+
* properties. */
|
|
10
|
+
export declare function recordSourceTest(value: IrExpr, loc: SrcLoc): IrExpr;
|
|
11
|
+
/** A reflective answer over a record value that branches on its kept
|
|
12
|
+
* source: `staticAnswer` walks the declared fields, `viewAnswer` answers
|
|
13
|
+
* from the live checked view (typed `type`, the static answer's type). The
|
|
14
|
+
* receiver evaluates once. */
|
|
15
|
+
export declare function throughRecordSource(lowerer: Lowerer, receiver: IrExpr, loc: SrcLoc, staticAnswer: (record: IrExpr) => IrExpr, viewAnswer: (view: IrExpr, type: IrType) => IrExpr): IrExpr;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { BOOL, DYN, recordTextCodecClass, shapeHasAccessorSlots } from "../../ir/ir.js";
|
|
2
|
+
import { varRef } from "../../ir/build.js";
|
|
3
|
+
import { isPerfEntryType } from "./builtins/performance.js";
|
|
4
|
+
/** Closed declared-field layouts with an ordinary data surface: the targets
|
|
5
|
+
* the checked record builder notes sources for. */
|
|
6
|
+
export function recordMayKeepSource(lowerer, t) {
|
|
7
|
+
const shape = lowerer.shapes.get(t.shapeId);
|
|
8
|
+
return (shape !== undefined &&
|
|
9
|
+
!shape.tuple &&
|
|
10
|
+
shape.indexValue === undefined &&
|
|
11
|
+
shape.fields.length > 0 &&
|
|
12
|
+
!shapeHasAccessorSlots(shape) &&
|
|
13
|
+
recordTextCodecClass(shape) === null &&
|
|
14
|
+
!isPerfEntryType(lowerer, t) &&
|
|
15
|
+
lowerer.dynConvertible(t));
|
|
16
|
+
}
|
|
17
|
+
/** `record.sourceHas(value)`: whether this record kept undeclared source
|
|
18
|
+
* properties. */
|
|
19
|
+
export function recordSourceTest(value, loc) {
|
|
20
|
+
return { kind: "libCall", fn: "record.sourceHas", args: [value], type: BOOL, loc };
|
|
21
|
+
}
|
|
22
|
+
/** A reflective answer over a record value that branches on its kept
|
|
23
|
+
* source: `staticAnswer` walks the declared fields, `viewAnswer` answers
|
|
24
|
+
* from the live checked view (typed `type`, the static answer's type). The
|
|
25
|
+
* receiver evaluates once. */
|
|
26
|
+
export function throughRecordSource(lowerer, receiver, loc, staticAnswer, viewAnswer) {
|
|
27
|
+
const local = lowerer.declareHiddenLocal("%sourcedRecord", receiver.type);
|
|
28
|
+
const record = () => varRef(local.id, receiver.type, loc);
|
|
29
|
+
const plain = staticAnswer(record());
|
|
30
|
+
const view = { kind: "dynFrom", value: record(), liveRef: true, type: DYN, loc };
|
|
31
|
+
return {
|
|
32
|
+
kind: "seqExpr",
|
|
33
|
+
stmts: [{ kind: "varDecl", localId: local.id, init: receiver, loc }],
|
|
34
|
+
result: {
|
|
35
|
+
kind: "ternary",
|
|
36
|
+
cond: recordSourceTest(record(), loc),
|
|
37
|
+
then: viewAnswer(view, plain.type),
|
|
38
|
+
else_: plain,
|
|
39
|
+
type: plain.type,
|
|
40
|
+
loc,
|
|
41
|
+
},
|
|
42
|
+
type: plain.type,
|
|
43
|
+
loc,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=record-sources.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-sources.js","sourceRoot":"","sources":["../../../src/frontend/lowering/record-sources.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACxF,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE5D;mDACmD;AACnD,MAAM,UAAU,mBAAmB,CAAC,OAAgB,EAAE,CAA8B;IAClF,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC5C,OAAO,CACL,KAAK,KAAK,SAAS;QACnB,CAAC,KAAK,CAAC,KAAK;QACZ,KAAK,CAAC,UAAU,KAAK,SAAS;QAC9B,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;QACvB,CAAC,qBAAqB,CAAC,KAAK,CAAC;QAC7B,oBAAoB,CAAC,KAAK,CAAC,KAAK,IAAI;QACpC,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QAC5B,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAC1B,CAAC;AACJ,CAAC;AAED;iBACiB;AACjB,MAAM,UAAU,gBAAgB,CAAC,KAAa,EAAE,GAAW;IACzD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AACrF,CAAC;AAED;;;8BAG8B;AAC9B,MAAM,UAAU,mBAAmB,CACjC,OAAgB,EAChB,QAAgB,EAChB,GAAW,EACX,YAAwC,EACxC,UAAkD;IAElD,MAAM,KAAK,GAAG,OAAO,CAAC,kBAAkB,CAAC,gBAAgB,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC1E,MAAM,MAAM,GAAG,GAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAClE,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;IACrC,MAAM,IAAI,GAAW,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IACzF,OAAO;QACL,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;QACpE,MAAM,EAAE;YACN,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,gBAAgB,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC;YACrC,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC;YAClC,KAAK,EAAE,KAAK;YACZ,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,GAAG;SACJ;QACD,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,GAAG;KACJ,CAAC;AACJ,CAAC"}
|
|
@@ -88,9 +88,9 @@ export declare const SET_METHODS: Set<string>;
|
|
|
88
88
|
/** The ES2025 Set composition surface (union/intersection/…): desugared
|
|
89
89
|
* to interned helper loops over the set iteration primitives — no user
|
|
90
90
|
* code runs mid-loop, so the walks need no enter/exit bracketing. The
|
|
91
|
-
* lib accepts any ReadonlySetLike argument; only a real Set lowers
|
|
92
|
-
* argument's has/size must be the builtins for the desugar to BE
|
|
93
|
-
* spec's algorithm). */
|
|
91
|
+
* lib accepts any ReadonlySetLike argument; only a real Set or Map lowers
|
|
92
|
+
* (the argument's has/size/keys must be the builtins for the desugar to BE
|
|
93
|
+
* the spec's algorithm). */
|
|
94
94
|
export declare const SET_COMBINE_METHODS: Set<string>;
|
|
95
95
|
export type CompoundOp = "+" | "-" | "*" | "/" | "%" | "**" | "&" | "|" | "^" | "<<" | ">>" | ">>>";
|
|
96
96
|
export declare const COMPOUND_ASSIGN_OPS: Partial<Record<ts.SyntaxKind, CompoundOp>>;
|
|
@@ -461,9 +461,9 @@ export const SET_METHODS = new Set([
|
|
|
461
461
|
/** The ES2025 Set composition surface (union/intersection/…): desugared
|
|
462
462
|
* to interned helper loops over the set iteration primitives — no user
|
|
463
463
|
* code runs mid-loop, so the walks need no enter/exit bracketing. The
|
|
464
|
-
* lib accepts any ReadonlySetLike argument; only a real Set lowers
|
|
465
|
-
* argument's has/size must be the builtins for the desugar to BE
|
|
466
|
-
* spec's algorithm). */
|
|
464
|
+
* lib accepts any ReadonlySetLike argument; only a real Set or Map lowers
|
|
465
|
+
* (the argument's has/size/keys must be the builtins for the desugar to BE
|
|
466
|
+
* the spec's algorithm). */
|
|
467
467
|
export const SET_COMBINE_METHODS = new Set([
|
|
468
468
|
"union",
|
|
469
469
|
"intersection",
|
|
@@ -1033,6 +1033,18 @@ export const BUILTIN_MODULE_FNS = {
|
|
|
1033
1033
|
// opendirSync's options (a literal { bufferSize, encoding: "utf8" })
|
|
1034
1034
|
// lower in lowerBuiltinModuleCall; the row routes the dispatch.
|
|
1035
1035
|
opendirSync: { fn: "fs.opendirSync", params: [STRING, F64], result: DIR_T },
|
|
1036
|
+
// createReadStream/createWriteStream lower in lowerBuiltinModuleCall
|
|
1037
|
+
// (path and options cross as dyn values); the rows route the dispatch.
|
|
1038
|
+
createReadStream: {
|
|
1039
|
+
fn: "fs.createReadStream",
|
|
1040
|
+
params: [DYN, DYN],
|
|
1041
|
+
result: { kind: "object", className: "%Readable" },
|
|
1042
|
+
},
|
|
1043
|
+
createWriteStream: {
|
|
1044
|
+
fn: "fs.createWriteStream",
|
|
1045
|
+
params: [DYN, DYN],
|
|
1046
|
+
result: { kind: "object", className: "%Writable" },
|
|
1047
|
+
},
|
|
1036
1048
|
lstatSync: { fn: "fs.lstatSync", params: [STRING], result: STATS_T },
|
|
1037
1049
|
fstatSync: {
|
|
1038
1050
|
fn: "fs.fstatSync",
|
|
@@ -1070,6 +1082,16 @@ export const BUILTIN_MODULE_FNS = {
|
|
|
1070
1082
|
result: VOID,
|
|
1071
1083
|
valueParams: exactValueParams(DYN, DYN),
|
|
1072
1084
|
},
|
|
1085
|
+
// Options and paths are checked by the runtime (scr_fs_cp_begin).
|
|
1086
|
+
cpSync: {
|
|
1087
|
+
fn: "fs.cpSync",
|
|
1088
|
+
params: [DYN, DYN, DYN],
|
|
1089
|
+
result: VOID,
|
|
1090
|
+
valueParams: [
|
|
1091
|
+
...exactValueParams(DYN, DYN),
|
|
1092
|
+
{ mode: "optional", type: DYN, defaultValue: undefined },
|
|
1093
|
+
],
|
|
1094
|
+
},
|
|
1073
1095
|
symlinkSync: {
|
|
1074
1096
|
fn: "fs.symlinkSync",
|
|
1075
1097
|
params: [DYN, DYN, DYN],
|
|
@@ -1210,6 +1232,15 @@ export const BUILTIN_MODULE_FNS = {
|
|
|
1210
1232
|
result: { kind: "promise", inner: VOID },
|
|
1211
1233
|
valueParams: exactValueParams(DYN, DYN),
|
|
1212
1234
|
},
|
|
1235
|
+
cp: {
|
|
1236
|
+
fn: "fsp.cp",
|
|
1237
|
+
params: [DYN, DYN, DYN],
|
|
1238
|
+
result: { kind: "promise", inner: VOID },
|
|
1239
|
+
valueParams: [
|
|
1240
|
+
...exactValueParams(DYN, DYN),
|
|
1241
|
+
{ mode: "optional", type: DYN, defaultValue: undefined },
|
|
1242
|
+
],
|
|
1243
|
+
},
|
|
1213
1244
|
symlink: {
|
|
1214
1245
|
fn: "fsp.symlink",
|
|
1215
1246
|
params: [DYN, DYN, DYN],
|
|
@@ -1734,6 +1765,9 @@ export const BUILTIN_MODULE_FNS = {
|
|
|
1734
1765
|
* lowering. Cluster metadata describes a directly-run native executable. */
|
|
1735
1766
|
export const BUILTIN_MODULE_CONSTS = {
|
|
1736
1767
|
http: { maxHeaderSize: 16384 },
|
|
1768
|
+
// Node's default protocol range, the TLS 1.2 to 1.3 range the bundled
|
|
1769
|
+
// mbedTLS negotiates
|
|
1770
|
+
tls: { DEFAULT_MIN_VERSION: "TLSv1.2", DEFAULT_MAX_VERSION: "TLSv1.3" },
|
|
1737
1771
|
path: { sep: "/", delimiter: ":" },
|
|
1738
1772
|
"path/posix": { sep: "/", delimiter: ":" },
|
|
1739
1773
|
"path/win32": { sep: "\\", delimiter: ";" },
|
|
@@ -1775,6 +1809,23 @@ export const BUILTIN_MODULE_FN_ALIASES = {
|
|
|
1775
1809
|
// The bytes-data form and the { mode } options form.
|
|
1776
1810
|
writeFileSync: ["fs.writeFileSyncBytes", "fs.writeFileModeSync"],
|
|
1777
1811
|
appendFileSync: ["fs.appendFileSyncBytes"],
|
|
1812
|
+
// The fs stream members (bytesRead/bytesWritten, pending, path, close).
|
|
1813
|
+
createReadStream: [
|
|
1814
|
+
"fs.fsStreamBytes",
|
|
1815
|
+
"fs.fsStreamPending",
|
|
1816
|
+
"fs.fsStreamPath",
|
|
1817
|
+
"fs.fsStreamPropDyn",
|
|
1818
|
+
"fs.fsStreamClose",
|
|
1819
|
+
"fs.fsStreamCloseCb",
|
|
1820
|
+
],
|
|
1821
|
+
createWriteStream: [
|
|
1822
|
+
"fs.fsStreamBytes",
|
|
1823
|
+
"fs.fsStreamPending",
|
|
1824
|
+
"fs.fsStreamPath",
|
|
1825
|
+
"fs.fsStreamPropDyn",
|
|
1826
|
+
"fs.fsStreamClose",
|
|
1827
|
+
"fs.fsStreamCloseCb",
|
|
1828
|
+
],
|
|
1778
1829
|
// The utf8 string overload; the table row is the Buffer-window form.
|
|
1779
1830
|
writeSync: ["fs.writeStrSync"],
|
|
1780
1831
|
// The { recursive, mode } option lowerings.
|
|
@@ -1783,6 +1834,9 @@ export const BUILTIN_MODULE_FN_ALIASES = {
|
|
|
1783
1834
|
rmSync: ["fs.rmOptsSync", "fs.rmRetrySync"],
|
|
1784
1835
|
// The { withFileTypes: true } Dirent form.
|
|
1785
1836
|
readdirSync: ["fs.readdirTypesSync"],
|
|
1837
|
+
// The { throwIfNoEntry } probe form.
|
|
1838
|
+
statSync: ["fs.statProbeSync"],
|
|
1839
|
+
lstatSync: ["fs.lstatProbeSync"],
|
|
1786
1840
|
globSync: ["fs.globTypesSync"],
|
|
1787
1841
|
// The JS-source validation-ladder variant (lowerFsLadderCall): the
|
|
1788
1842
|
// real mkdtemp runs when the options leave utf8 semantics.
|
|
@@ -2547,7 +2601,7 @@ export function builtinModulesArrayLit(loc) {
|
|
|
2547
2601
|
/** Member-specific hints for RECOGNIZED builtin modules whose member has
|
|
2548
2602
|
* no lowering. The default-options one-shot zlib/deflate-raw/gzip codecs
|
|
2549
2603
|
* lower for strings and Buffers; the remaining surface points at them. */
|
|
2550
|
-
const ZLIB_HINT = "the
|
|
2604
|
+
const ZLIB_HINT = "the deflate/inflate, raw, gzip/gunzip, and unzip sync/callback forms with Node's options, crc32, " +
|
|
2551
2605
|
"and the Deflate/Inflate/Gzip/Gunzip/DeflateRaw/InflateRaw/Unzip streams are the lowered zlib surface";
|
|
2552
2606
|
/** Brotli has no codec in the static runtime (zlib is the only vendored
|
|
2553
2607
|
* compression library). */
|
|
@@ -2570,7 +2624,7 @@ export const BUILTIN_MODULE_FENCE_HINTS = {
|
|
|
2570
2624
|
doesNotReject: ASSERT_MODULE_HINTS["doesNotReject"],
|
|
2571
2625
|
},
|
|
2572
2626
|
util: {
|
|
2573
|
-
promisify: "the lowered shapes are const bindings over child_process.execFile and fs
|
|
2627
|
+
promisify: "the lowered shapes are const bindings over child_process.execFile, child_process.exec, setTimeout, setImmediate, stream.finished, stream.pipeline, the zlib callback one-shots and the fs callback functions with an fs/promises counterpart; call the bound function directly",
|
|
2574
2628
|
},
|
|
2575
2629
|
"stream/consumers": {
|
|
2576
2630
|
blob: "collecting a stream into a Blob is not supported yet — " +
|