@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
package/dist/ir/validate.js
CHANGED
|
@@ -1219,6 +1219,7 @@ function validateFunction(fn, functions, ffiByName, classes, records, recordVali
|
|
|
1219
1219
|
case "recordGet":
|
|
1220
1220
|
case "recordKeyGet":
|
|
1221
1221
|
case "recordOvfHas":
|
|
1222
|
+
case "recordNullProto":
|
|
1222
1223
|
case "recordOvfKeys":
|
|
1223
1224
|
case "recordHas":
|
|
1224
1225
|
case "fieldAbsent":
|
|
@@ -2822,6 +2823,20 @@ function validateFunction(fn, functions, ffiByName, classes, records, recordVali
|
|
|
2822
2823
|
isStrictSubclass(returned.className, e.type.className))) {
|
|
2823
2824
|
err(`virtualCall ${e.className}.${e.method} result type mismatch`, e.loc);
|
|
2824
2825
|
}
|
|
2826
|
+
// Closed target sets name distinct implementations at or below the
|
|
2827
|
+
// static class's chain, each an existing method function.
|
|
2828
|
+
if (e.targets !== undefined) {
|
|
2829
|
+
if (e.targets.length < 2 || new Set(e.targets).size !== e.targets.length)
|
|
2830
|
+
err(`virtualCall ${e.className}.${e.method}: targets must be distinct, at least two`, e.loc);
|
|
2831
|
+
for (const target of e.targets) {
|
|
2832
|
+
if (!functions.has(`%${target}.${e.method}`))
|
|
2833
|
+
err(`virtualCall ${e.className}.${e.method}: target ${target} has no implementation`, e.loc);
|
|
2834
|
+
else if (target !== e.className &&
|
|
2835
|
+
!isStrictSubclass(target, e.className) &&
|
|
2836
|
+
!isStrictSubclass(e.className, target))
|
|
2837
|
+
err(`virtualCall ${e.className}.${e.method}: target ${target} is unrelated`, e.loc);
|
|
2838
|
+
}
|
|
2839
|
+
}
|
|
2825
2840
|
break;
|
|
2826
2841
|
}
|
|
2827
2842
|
default: {
|
|
@@ -2842,6 +2857,8 @@ function validateFunction(fn, functions, ffiByName, classes, records, recordVali
|
|
|
2842
2857
|
err(`recordLit of undeclared shape "${e.type.shapeId}"`, e.loc);
|
|
2843
2858
|
break;
|
|
2844
2859
|
}
|
|
2860
|
+
if (e.nullProto && (!shape.indexValue || shape.tuple))
|
|
2861
|
+
err(`recordLit nullProto on ${shape.id}: requires an index-signature record`, e.loc);
|
|
2845
2862
|
const want = recordValidation.get(shape.id).initializationFields;
|
|
2846
2863
|
const seen = new Set();
|
|
2847
2864
|
for (const f of e.fields) {
|
|
@@ -3003,6 +3020,18 @@ function validateFunction(fn, functions, ffiByName, classes, records, recordVali
|
|
|
3003
3020
|
err("recordOvfHas must be bool", e.loc);
|
|
3004
3021
|
break;
|
|
3005
3022
|
}
|
|
3023
|
+
case "recordNullProto": {
|
|
3024
|
+
checkExpr(e.obj);
|
|
3025
|
+
const shape = records.get(e.shapeId);
|
|
3026
|
+
if (!shape)
|
|
3027
|
+
err(`recordNullProto on undeclared shape "${e.shapeId}"`, e.loc);
|
|
3028
|
+
else if (!shape.indexValue || shape.tuple)
|
|
3029
|
+
err(`recordNullProto on ${e.shapeId}: requires an index-signature record`, e.loc);
|
|
3030
|
+
expectType(e.obj, { kind: "record", shapeId: e.shapeId }, "recordNullProto receiver");
|
|
3031
|
+
if (e.type.kind !== "bool")
|
|
3032
|
+
err("recordNullProto must be bool", e.loc);
|
|
3033
|
+
break;
|
|
3034
|
+
}
|
|
3006
3035
|
case "recordOvfKeys": {
|
|
3007
3036
|
checkExpr(e.obj);
|
|
3008
3037
|
const shape = records.get(e.shapeId);
|
|
@@ -3737,6 +3766,18 @@ function validateFunction(fn, functions, ffiByName, classes, records, recordVali
|
|
|
3737
3766
|
}
|
|
3738
3767
|
}
|
|
3739
3768
|
function checkLibValueCall(e) {
|
|
3769
|
+
if (e.fn === "events.once") {
|
|
3770
|
+
const [recv, , boxer, errorBoxer] = e.args;
|
|
3771
|
+
const arrayT = e.type.kind === "promise" ? e.type.inner : null;
|
|
3772
|
+
const boxes = (b) => b?.type.kind === "func" && arrayT !== null && typeEquals(b.type.ret, arrayT);
|
|
3773
|
+
if (recv?.type.kind !== "object" ||
|
|
3774
|
+
arrayT?.kind !== "array" ||
|
|
3775
|
+
!boxes(boxer) ||
|
|
3776
|
+
!boxes(errorBoxer)) {
|
|
3777
|
+
err(`libCall events.once must box its event tuples into the promised array`, e.loc);
|
|
3778
|
+
}
|
|
3779
|
+
return true;
|
|
3780
|
+
}
|
|
3740
3781
|
if (e.fn === "tp.setTimeoutValue" || e.fn === "tp.setImmediateValue") {
|
|
3741
3782
|
const value = e.args[e.fn === "tp.setTimeoutValue" ? 1 : 0];
|
|
3742
3783
|
if (value?.type.kind !== "promise" || !typeEquals(e.type, value.type)) {
|
|
@@ -3866,7 +3907,7 @@ function validateFunction(fn, functions, ffiByName, classes, records, recordVali
|
|
|
3866
3907
|
}
|
|
3867
3908
|
return true;
|
|
3868
3909
|
}
|
|
3869
|
-
if (e.fn === "http.serverOnRequest") {
|
|
3910
|
+
if (e.fn === "http.serverOnRequest" || e.fn === "http.serverOnCheck") {
|
|
3870
3911
|
// The 'request' listener: the same shape as http.createServer's
|
|
3871
3912
|
// handler — void, at most (req, res) in order.
|
|
3872
3913
|
const cbT = e.args[1]?.type;
|
|
@@ -4274,14 +4315,27 @@ function validateFunction(fn, functions, ffiByName, classes, records, recordVali
|
|
|
4274
4315
|
return false;
|
|
4275
4316
|
}
|
|
4276
4317
|
function checkLibFileCall(e) {
|
|
4318
|
+
if (e.fn === "fs.statProbeSync" || e.fn === "fs.lstatProbeSync") {
|
|
4319
|
+
const def = e.type.kind === "union" ? unions.get(e.type.unionId) : undefined;
|
|
4320
|
+
const ok = def &&
|
|
4321
|
+
def.arms.length === 2 &&
|
|
4322
|
+
def.arms.some((a) => a.kind === "stats") &&
|
|
4323
|
+
def.arms.some((a) => a.kind === "undefinedT");
|
|
4324
|
+
if (!ok) {
|
|
4325
|
+
err(`libCall ${e.fn} must return the 'Stats | undefined' union`, e.loc);
|
|
4326
|
+
}
|
|
4327
|
+
return true;
|
|
4328
|
+
}
|
|
4277
4329
|
if (e.fn === "zlib.deflateCb" ||
|
|
4278
4330
|
e.fn === "zlib.inflateCb" ||
|
|
4279
4331
|
e.fn === "zlib.deflateRawCb" ||
|
|
4280
4332
|
e.fn === "zlib.inflateRawCb" ||
|
|
4281
4333
|
e.fn === "zlib.gzipCb" ||
|
|
4282
4334
|
e.fn === "zlib.gunzipCb" ||
|
|
4283
|
-
e.fn === "zlib.unzipCb"
|
|
4284
|
-
|
|
4335
|
+
e.fn === "zlib.unzipCb" ||
|
|
4336
|
+
e.fn === "zlib.cbOpts" ||
|
|
4337
|
+
e.fn === "zlib.cbOptsDyn") {
|
|
4338
|
+
const cbT = e.args[e.fn.startsWith("zlib.cbOpts") ? 3 : 1]?.type;
|
|
4285
4339
|
let ok = cbT?.kind === "func" && cbT.ret.kind === "void" && cbT.params.length <= 2;
|
|
4286
4340
|
if (ok && cbT?.kind === "func" && cbT.params.length >= 1) {
|
|
4287
4341
|
const error = cbT.params[0];
|
|
@@ -4709,6 +4763,12 @@ function validateFunction(fn, functions, ffiByName, classes, records, recordVali
|
|
|
4709
4763
|
}
|
|
4710
4764
|
return true;
|
|
4711
4765
|
}
|
|
4766
|
+
if (e.fn === "crypto.hashStream" || e.fn === "crypto.hashStreamPiped") {
|
|
4767
|
+
const value = e.args[0]?.type.kind;
|
|
4768
|
+
if (value !== "cryptoHash" && value !== "cryptoHmac")
|
|
4769
|
+
err(`libCall ${e.fn} argument must be a Hash or Hmac`, e.loc);
|
|
4770
|
+
return true;
|
|
4771
|
+
}
|
|
4712
4772
|
if (e.fn === "crypto.timingSafeEqual") {
|
|
4713
4773
|
if (e.args[0]?.type.kind !== "bytes" || e.args[1]?.type.kind !== "bytes")
|
|
4714
4774
|
err(`libCall ${e.fn} arguments must be views`, e.loc);
|
|
@@ -5094,6 +5154,14 @@ function validateFunction(fn, functions, ffiByName, classes, records, recordVali
|
|
|
5094
5154
|
}
|
|
5095
5155
|
return true;
|
|
5096
5156
|
}
|
|
5157
|
+
if (e.fn === "readable.fromIter" || e.fn === "readable.fromAsyncIter") {
|
|
5158
|
+
if (e.args[0]?.type.kind !== "dyn" ||
|
|
5159
|
+
e.args[1]?.kind !== "numLit" ||
|
|
5160
|
+
!isStreamObject(e.type)) {
|
|
5161
|
+
err(`libCall ${e.fn} must take an iterator object and the flags`, e.loc);
|
|
5162
|
+
}
|
|
5163
|
+
return true;
|
|
5164
|
+
}
|
|
5097
5165
|
if (e.fn === "readable.fromArr" || e.fn === "readable.fromDyn") {
|
|
5098
5166
|
// No receiver: the source leads; the result is the class.
|
|
5099
5167
|
const src = e.fn === "readable.fromArr" ? "array" : "dyn";
|