@scriptc/compiler 0.1.2 → 0.1.4
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 +258 -64
- package/dist/backend/c/async.d.ts +30 -0
- package/dist/backend/c/async.js +224 -0
- package/dist/backend/c/async.js.map +1 -1
- package/dist/backend/c/c-emitter.d.ts +13 -0
- package/dist/backend/c/c-emitter.js +28 -9
- package/dist/backend/c/c-emitter.js.map +1 -1
- package/dist/backend/c/exprs.d.ts +8 -1
- package/dist/backend/c/exprs.js +445 -60
- package/dist/backend/c/exprs.js.map +1 -1
- package/dist/backend/c/shapes.js +15 -13
- package/dist/backend/c/shapes.js.map +1 -1
- package/dist/backend/c/types.d.ts +4 -0
- package/dist/backend/c/types.js +20 -1
- package/dist/backend/c/types.js.map +1 -1
- package/dist/backend/c/types.test.js +8 -1
- package/dist/backend/c/types.test.js.map +1 -1
- package/dist/backend/c/walkers.js +32 -11
- package/dist/backend/c/walkers.js.map +1 -1
- package/dist/backend/json-literal.d.ts +7 -0
- package/dist/backend/json-literal.js +17 -0
- package/dist/backend/json-literal.js.map +1 -0
- package/dist/backend/json-literal.test.d.ts +1 -0
- package/dist/backend/json-literal.test.js +17 -0
- package/dist/backend/json-literal.test.js.map +1 -0
- package/dist/backend/link-plan.d.ts +2 -1
- package/dist/backend/link-plan.js +6 -1
- package/dist/backend/link-plan.js.map +1 -1
- package/dist/backend/llvm/classes.js +8 -7
- package/dist/backend/llvm/classes.js.map +1 -1
- package/dist/backend/llvm/common.d.ts +4 -0
- package/dist/backend/llvm/common.js +6 -0
- package/dist/backend/llvm/common.js.map +1 -1
- package/dist/backend/llvm/common.test.d.ts +1 -0
- package/dist/backend/llvm/common.test.js +9 -0
- package/dist/backend/llvm/common.test.js.map +1 -0
- package/dist/backend/llvm/dyn.d.ts +4 -0
- package/dist/backend/llvm/dyn.js +24 -13
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emitter.js +54 -12
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/expr-bytes.d.ts +1 -1
- package/dist/backend/llvm/expr-bytes.js +8 -8
- package/dist/backend/llvm/expr-bytes.js.map +1 -1
- package/dist/backend/llvm/expr-callbacks.d.ts +9 -0
- package/dist/backend/llvm/expr-callbacks.js +125 -0
- package/dist/backend/llvm/expr-callbacks.js.map +1 -1
- package/dist/backend/llvm/expr-context.d.ts +18 -2
- 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 +9 -0
- 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 +38 -9
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.test.d.ts +1 -0
- package/dist/backend/llvm/expr-primitives.test.js +38 -0
- package/dist/backend/llvm/expr-primitives.test.js.map +1 -0
- package/dist/backend/llvm/expr-records.js +3 -3
- package/dist/backend/llvm/expr-records.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.js +2 -1
- package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
- package/dist/backend/llvm/expr-stream-callbacks.d.ts +6 -0
- package/dist/backend/llvm/expr-stream-callbacks.js +122 -0
- package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
- package/dist/backend/llvm/lib-dispatch.js +22 -0
- package/dist/backend/llvm/lib-dispatch.js.map +1 -1
- package/dist/backend/llvm/lib-filesystem.js +68 -10
- package/dist/backend/llvm/lib-filesystem.js.map +1 -1
- package/dist/backend/llvm/lib-network.js +18 -2
- package/dist/backend/llvm/lib-network.js.map +1 -1
- package/dist/backend/llvm/lib-process.js +206 -11
- package/dist/backend/llvm/lib-process.js.map +1 -1
- package/dist/backend/llvm/lib-shared.js +82 -0
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/lib-stream.js +23 -0
- package/dist/backend/llvm/lib-stream.js.map +1 -1
- package/dist/backend/llvm/shapes.js +10 -8
- package/dist/backend/llvm/shapes.js.map +1 -1
- package/dist/backend/llvm/walkers.js +7 -5
- package/dist/backend/llvm/walkers.js.map +1 -1
- package/dist/backend/native-link-info.d.ts +2 -1
- package/dist/backend/native-link-info.js +4 -0
- package/dist/backend/native-link-info.js.map +1 -1
- package/dist/backend/native-link-info.test.js +24 -1
- package/dist/backend/native-link-info.test.js.map +1 -1
- package/dist/backend/native-toolchain.d.ts +11 -6
- package/dist/backend/native-toolchain.js +30 -13
- package/dist/backend/native-toolchain.js.map +1 -1
- package/dist/backend/native-toolchain.test.js +36 -1
- package/dist/backend/native-toolchain.test.js.map +1 -1
- package/dist/backend/runtime-pack-targets.test.js +1 -1
- package/dist/backend/runtime-pack-targets.test.js.map +1 -1
- package/dist/backend/runtime-pack.test.js +29 -10
- package/dist/backend/runtime-pack.test.js.map +1 -1
- package/dist/backend/targets.d.ts +9 -0
- package/dist/backend/targets.js +22 -0
- package/dist/backend/targets.js.map +1 -1
- package/dist/backend/targets.test.js +13 -1
- package/dist/backend/targets.test.js.map +1 -1
- package/dist/coverage/surface-manifest.js +9 -0
- package/dist/coverage/surface-manifest.js.map +1 -1
- package/dist/diagnostics/diagnostic.js +4 -4
- package/dist/diagnostics/diagnostic.js.map +1 -1
- package/dist/executable/executable-cache.d.ts +3 -0
- package/dist/executable/executable-cache.js +4 -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/fork-target.d.ts +17 -0
- package/dist/frontend/fork-target.js +256 -0
- package/dist/frontend/fork-target.js.map +1 -0
- package/dist/frontend/lowering/abstract-equality.d.ts +6 -0
- package/dist/frontend/lowering/abstract-equality.js +250 -0
- package/dist/frontend/lowering/abstract-equality.js.map +1 -0
- package/dist/frontend/lowering/containers/bytes.d.ts +0 -4
- package/dist/frontend/lowering/containers/bytes.js +112 -28
- package/dist/frontend/lowering/containers/bytes.js.map +1 -1
- package/dist/frontend/lowering/lower-assert.js +87 -12
- package/dist/frontend/lowering/lower-assert.js.map +1 -1
- package/dist/frontend/lowering/lower-builtins.d.ts +72 -44
- package/dist/frontend/lowering/lower-builtins.js +1323 -165
- package/dist/frontend/lowering/lower-builtins.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.d.ts +37 -27
- package/dist/frontend/lowering/lower-calls.js +682 -132
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.js +39 -8
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-containers.js +162 -8
- package/dist/frontend/lowering/lower-containers.js.map +1 -1
- package/dist/frontend/lowering/lower-event-emitter.js +212 -21
- package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.js +238 -87
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-inspect.d.ts +4 -0
- package/dist/frontend/lowering/lower-inspect.js +8 -1
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-island.d.ts +6 -3
- package/dist/frontend/lowering/lower-island.js +165 -6
- package/dist/frontend/lowering/lower-island.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.d.ts +6 -0
- package/dist/frontend/lowering/lower-modules.js +192 -38
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-namespaces.js +7 -0
- package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
- package/dist/frontend/lowering/lower-server.d.ts +1 -1
- package/dist/frontend/lowering/lower-server.js +130 -27
- package/dist/frontend/lowering/lower-server.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.d.ts +5 -4
- package/dist/frontend/lowering/lower-stmts.js +141 -21
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lower-stream.d.ts +3 -0
- package/dist/frontend/lowering/lower-stream.js +7 -0
- package/dist/frontend/lowering/lower-stream.js.map +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +90 -13
- package/dist/frontend/lowering/lowerer.js +416 -76
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/surfaces.d.ts +31 -3
- package/dist/frontend/lowering/surfaces.js +173 -90
- package/dist/frontend/lowering/surfaces.js.map +1 -1
- package/dist/frontend/npm-static-declarations.d.ts +4 -0
- package/dist/frontend/npm-static-declarations.js +83 -14
- package/dist/frontend/npm-static-declarations.js.map +1 -1
- package/dist/frontend/npm-static-declarations.test.js +33 -2
- package/dist/frontend/npm-static-declarations.test.js.map +1 -1
- package/dist/frontend/npm-static.js +6 -5
- package/dist/frontend/npm-static.js.map +1 -1
- package/dist/frontend/npm.d.ts +15 -3
- package/dist/frontend/npm.js +80 -8
- package/dist/frontend/npm.js.map +1 -1
- package/dist/frontend/npm.test.js +76 -9
- package/dist/frontend/npm.test.js.map +1 -1
- package/dist/frontend/program.js +110 -12
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/resolve.d.ts +28 -7
- package/dist/frontend/resolve.js +90 -26
- package/dist/frontend/resolve.js.map +1 -1
- package/dist/frontend/resolve.test.js +21 -1
- package/dist/frontend/resolve.test.js.map +1 -1
- package/dist/frontend/type-mapper.d.ts +5 -0
- package/dist/frontend/type-mapper.js +115 -33
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.js +30 -3
- package/dist/index.js.map +1 -1
- package/dist/ir/analysis.js +1 -0
- package/dist/ir/analysis.js.map +1 -1
- package/dist/ir/ir.d.ts +155 -66
- package/dist/ir/ir.js +143 -6
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/ir.test.js +14 -1
- package/dist/ir/ir.test.js.map +1 -1
- package/dist/ir/serialize.d.ts +1 -1
- package/dist/ir/serialize.js +1 -1
- package/dist/ir/serialize.js.map +1 -1
- package/dist/ir/validate.js +242 -18
- package/dist/ir/validate.js.map +1 -1
- package/dist/library/int-infer.test.js +4 -4
- package/dist/library/int-infer.test.js.map +1 -1
- package/dist/library/library-cache.d.ts +1 -0
- package/dist/library/library-cache.js +1 -0
- package/dist/library/library-cache.js.map +1 -1
- package/dist/library/library-cache.test.js +18 -5
- package/dist/library/library-cache.test.js.map +1 -1
- package/package.json +17 -17
- package/surface-manifest.json +163 -54
package/dist/ir/validate.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { arrayOf, BOOL, BYTES_U8, bytesOf, canAdaptDynFuncTo, canConvertToDyn, canExitIslandToType, canMarshalIntoIsland, canMarshalTypedFuncIntoIsland, CHILD_T, CHILDSTREAM_T, DATE_T, DGRAMSOCK_T, DYN, DYN_HANDLE_KINDS, F64, ffiClassType, ffiSourceParamTypes, FILEHANDLE_T, FSWATCHER_T, HTTP2SESSION_T, HTTP2STREAM_T, HTTPCLIENTREQ_T, HTTPREQ_T, HTTPRES_T, islandPromisePayloadTag, isDynTypedRefType, isFfiCallbackParam, isFfiContextParam, isFfiReleaseParam, isJsonSafeType, isJsonStringifySafeType, isRefCounted, isSupportedArrayElem, isSupportedIndexValue, isSupportedMapKey, isSupportedMapValue, isSupportedSetElem, isUnitType, jsOpResultKind, JSVAL, NETSERVER_T, NETSOCKET_T, PROCSTREAM_T, REF_TRUTHY_KINDS, REGEX, RUNTIME_EMITTER_CLASS, RUNTIME_ERROR_CLASSES, RUNTIME_STREAM_CLASSES, SEARCH_PARAMS_T, SECURECTX_T, shapeHasAccessorSlots, SPAWNRES_T, STATS_T, STRING, SYMBOL_T, TESTCTX_T, typeEquals, typeKey, unionFuncSetArmsOk, URL_T, VOID } from "./ir.js";
|
|
1
|
+
import { arrayOf, BOOL, BYTES_U8, bytesOf, canAdaptDynFuncTo, canConvertToDyn, canExitIslandToType, canMarshalIntoIsland, canMarshalTypedFuncIntoIsland, CHILD_T, CHILDSTREAM_T, CHILDWRITER_T, CRYPTOHASH_T, CRYPTOHMAC_T, DATE_T, DGRAMSOCK_T, DYN, DYN_HANDLE_KINDS, F64, ffiClassType, ffiSourceParamTypes, FILEHANDLE_T, FSWATCHER_T, HTTP2SESSION_T, HTTP2STREAM_T, HTTPCLIENTREQ_T, HTTPREQ_T, HTTPRES_T, islandPromisePayloadTag, isDynTypedRefType, isFfiCallbackParam, isFfiContextParam, isFfiReleaseParam, isJsonSafeType, isJsonStringifySafeType, isRefCounted, isSupportedArrayElem, isSupportedIndexValue, isSupportedMapKey, isSupportedMapValue, isSupportedSetElem, isUnitType, jsOpResultKind, JSVAL, NETSERVER_T, NETSOCKET_T, PROCSTREAM_T, REF_TRUTHY_KINDS, REGEX, RUNTIME_EMITTER_CLASS, RUNTIME_ERROR_CLASSES, RUNTIME_STREAM_CLASSES, SEARCH_PARAMS_T, SECURECTX_T, shapeHasAccessorSlots, SPAWNRES_T, STATS_T, STRING, SYMBOL_T, TESTCTX_T, typeEquals, typeKey, unionFuncSetArmsOk, URL_T, VOID } from "./ir.js";
|
|
2
|
+
import { BIGINT_T } from "./ir.js";
|
|
2
3
|
/** Per-method signature for strIntrinsic: `argTypes` lists every argument
|
|
3
4
|
* position (optional ones included); `minArgs` is how many may be omitted
|
|
4
5
|
* from the end (backends fill the documented defaults). Exported for the
|
|
@@ -229,10 +230,43 @@ export const LIB_FN_SIGS = {
|
|
|
229
230
|
"sym.keyFor": { argTypes: [SYMBOL_T], result: VOID },
|
|
230
231
|
"sym.desc": { argTypes: [SYMBOL_T], result: VOID },
|
|
231
232
|
"sym.toString": { argTypes: [SYMBOL_T], result: STRING },
|
|
233
|
+
"bigint.parse": { argTypes: [STRING], result: BIGINT_T },
|
|
234
|
+
"bigint.fromF64": { argTypes: [F64], result: BIGINT_T },
|
|
235
|
+
"bigint.neg": { argTypes: [BIGINT_T], result: BIGINT_T },
|
|
236
|
+
"bigint.not": { argTypes: [BIGINT_T], result: BIGINT_T },
|
|
237
|
+
"bigint.add": { argTypes: [BIGINT_T, BIGINT_T], result: BIGINT_T },
|
|
238
|
+
"bigint.sub": { argTypes: [BIGINT_T, BIGINT_T], result: BIGINT_T },
|
|
239
|
+
"bigint.mul": { argTypes: [BIGINT_T, BIGINT_T], result: BIGINT_T },
|
|
240
|
+
"bigint.div": { argTypes: [BIGINT_T, BIGINT_T], result: BIGINT_T },
|
|
241
|
+
"bigint.mod": { argTypes: [BIGINT_T, BIGINT_T], result: BIGINT_T },
|
|
242
|
+
"bigint.pow": { argTypes: [BIGINT_T, BIGINT_T], result: BIGINT_T },
|
|
243
|
+
"bigint.and": { argTypes: [BIGINT_T, BIGINT_T], result: BIGINT_T },
|
|
244
|
+
"bigint.or": { argTypes: [BIGINT_T, BIGINT_T], result: BIGINT_T },
|
|
245
|
+
"bigint.xor": { argTypes: [BIGINT_T, BIGINT_T], result: BIGINT_T },
|
|
246
|
+
"bigint.shl": { argTypes: [BIGINT_T, BIGINT_T], result: BIGINT_T },
|
|
247
|
+
"bigint.shr": { argTypes: [BIGINT_T, BIGINT_T], result: BIGINT_T },
|
|
248
|
+
"bigint.eq": { argTypes: [BIGINT_T, BIGINT_T], result: BOOL },
|
|
249
|
+
"bigint.eqString": { argTypes: [BIGINT_T, STRING], result: BOOL },
|
|
250
|
+
"bigint.cmp": { argTypes: [BIGINT_T, BIGINT_T], result: F64 },
|
|
251
|
+
"bigint.cmpNumber": { argTypes: [BIGINT_T, F64], result: F64 },
|
|
252
|
+
"bigint.truthy": { argTypes: [BIGINT_T], result: BOOL },
|
|
253
|
+
"bigint.toString": { argTypes: [BIGINT_T, F64], result: STRING },
|
|
254
|
+
"bigint.inspect": { argTypes: [BIGINT_T], result: STRING },
|
|
255
|
+
"bigint.toF64": { argTypes: [BIGINT_T], result: F64 },
|
|
256
|
+
"bigint.asUintN": { argTypes: [F64, BIGINT_T], result: BIGINT_T },
|
|
257
|
+
"bigint.asIntN": { argTypes: [F64, BIGINT_T], result: BIGINT_T },
|
|
258
|
+
"bigint.bufferRead": { argTypes: [BYTES_U8, F64, BOOL, BOOL], result: BIGINT_T },
|
|
259
|
+
"bigint.bufferWrite": { argTypes: [BYTES_U8, BIGINT_T, F64, BOOL, BOOL], result: F64 },
|
|
260
|
+
"bigint.dataViewGet": { argTypes: [BYTES_U8, F64, BOOL, BOOL], result: BIGINT_T },
|
|
261
|
+
"bigint.dataViewSet": { argTypes: [BYTES_U8, F64, BIGINT_T, BOOL], result: VOID },
|
|
232
262
|
"url.new": { argTypes: [STRING], result: URL_T },
|
|
233
263
|
"url.protocol": { argTypes: [URL_T], result: STRING },
|
|
264
|
+
"url.origin": { argTypes: [URL_T], result: STRING },
|
|
265
|
+
"url.username": { argTypes: [URL_T], result: STRING },
|
|
266
|
+
"url.password": { argTypes: [URL_T], result: STRING },
|
|
234
267
|
"url.host": { argTypes: [URL_T], result: STRING },
|
|
235
268
|
"url.hostname": { argTypes: [URL_T], result: STRING },
|
|
269
|
+
"url.port": { argTypes: [URL_T], result: STRING },
|
|
236
270
|
"url.pathname": { argTypes: [URL_T], result: STRING },
|
|
237
271
|
"url.href": { argTypes: [URL_T], result: STRING },
|
|
238
272
|
"url.fileURLToPathUrl": { argTypes: [URL_T], result: STRING },
|
|
@@ -248,6 +282,7 @@ export const LIB_FN_SIGS = {
|
|
|
248
282
|
"sp.with": { argTypes: [SEARCH_PARAMS_T, STRING, STRING], result: SEARCH_PARAMS_T },
|
|
249
283
|
"url.searchParams": { argTypes: [URL_T], result: SEARCH_PARAMS_T },
|
|
250
284
|
"url.search": { argTypes: [URL_T], result: STRING },
|
|
285
|
+
"url.hash": { argTypes: [URL_T], result: STRING },
|
|
251
286
|
// Result is the interned `string | null` union — the libCall case
|
|
252
287
|
// checks the arms (the spawnRes.signal pattern).
|
|
253
288
|
"sp.get": { argTypes: [SEARCH_PARAMS_T, STRING], result: VOID },
|
|
@@ -274,7 +309,12 @@ export const LIB_FN_SIGS = {
|
|
|
274
309
|
"util.parseArgs": { argTypes: [DYN], result: DYN },
|
|
275
310
|
"fs.statSync": { argTypes: [STRING], result: STATS_T },
|
|
276
311
|
"fs.lstatSync": { argTypes: [STRING], result: STATS_T },
|
|
312
|
+
"fs.fstatSync": { argTypes: [F64], result: STATS_T },
|
|
313
|
+
"fs.fchmodSync": { argTypes: [F64, F64], result: VOID },
|
|
314
|
+
"fs.fsyncSync": { argTypes: [F64], result: VOID },
|
|
315
|
+
"fs.linkSync": { argTypes: [STRING, STRING], result: VOID },
|
|
277
316
|
"fs.openSync": { argTypes: [STRING, STRING], result: F64 },
|
|
317
|
+
"fs.openNumericSync": { argTypes: [STRING, F64, F64], result: F64 },
|
|
278
318
|
"fs.readSync": { argTypes: [F64, BYTES_U8, F64, F64, F64], result: F64 },
|
|
279
319
|
"fs.writeSync": { argTypes: [F64, BYTES_U8, F64, F64, F64], result: F64 },
|
|
280
320
|
"fs.writeStrSync": { argTypes: [F64, STRING, F64, STRING], result: F64 },
|
|
@@ -294,10 +334,13 @@ export const LIB_FN_SIGS = {
|
|
|
294
334
|
"stats.isDirectory": { argTypes: [STATS_T], result: BOOL },
|
|
295
335
|
"stats.isSymbolicLink": { argTypes: [STATS_T], result: BOOL },
|
|
296
336
|
"stats.size": { argTypes: [STATS_T], result: F64 },
|
|
337
|
+
"stats.dev": { argTypes: [STATS_T], result: F64 },
|
|
338
|
+
"stats.ino": { argTypes: [STATS_T], result: F64 },
|
|
297
339
|
"stats.blocks": { argTypes: [STATS_T], result: F64 },
|
|
298
340
|
"stats.nlink": { argTypes: [STATS_T], result: F64 },
|
|
299
341
|
"stats.atimeMs": { argTypes: [STATS_T], result: F64 },
|
|
300
342
|
"stats.mtimeMs": { argTypes: [STATS_T], result: F64 },
|
|
343
|
+
"stats.ctimeMs": { argTypes: [STATS_T], result: F64 },
|
|
301
344
|
// The wider sync fs slice (unlink/chmod/chown/copyfile and the
|
|
302
345
|
// mode-carrying write/mkdir forms).
|
|
303
346
|
"fs.unlinkSync": { argTypes: [STRING], result: VOID },
|
|
@@ -416,6 +459,7 @@ export const LIB_FN_SIGS = {
|
|
|
416
459
|
"http.createServer": { argTypes: [null], result: NETSERVER_T },
|
|
417
460
|
"http.createServerEmpty": { argTypes: [], result: NETSERVER_T },
|
|
418
461
|
"http.serverJoinDupHeaders": { argTypes: [NETSERVER_T], result: VOID },
|
|
462
|
+
"http.serverAllowMissingHostHeader": { argTypes: [NETSERVER_T], result: VOID },
|
|
419
463
|
"http.serverTimeoutGet": { argTypes: [NETSERVER_T, F64], result: F64 },
|
|
420
464
|
"http.serverTimeoutSet": { argTypes: [NETSERVER_T, F64, F64], result: VOID },
|
|
421
465
|
"http.serverTimeoutOptionSet": { argTypes: [NETSERVER_T, F64, DYN], result: VOID },
|
|
@@ -433,6 +477,9 @@ export const LIB_FN_SIGS = {
|
|
|
433
477
|
"http.reqUrl": { argTypes: [HTTPREQ_T], result: STRING },
|
|
434
478
|
"http.reqMethod": { argTypes: [HTTPREQ_T], result: STRING },
|
|
435
479
|
"http.reqHeader": { argTypes: [HTTPREQ_T, STRING], result: VOID },
|
|
480
|
+
"http.reqTrailer": { argTypes: [HTTPREQ_T, STRING], result: VOID },
|
|
481
|
+
"http.reqHeaderValues": { argTypes: [HTTPREQ_T, STRING], result: VOID },
|
|
482
|
+
"http.reqTrailerValues": { argTypes: [HTTPREQ_T, STRING], result: VOID },
|
|
436
483
|
"http.reqOnData": { argTypes: [HTTPREQ_T, null, BOOL], result: VOID },
|
|
437
484
|
"http.reqOnEnd": { argTypes: [HTTPREQ_T, { kind: "func", params: [], ret: VOID }, BOOL], result: VOID },
|
|
438
485
|
"http.resSetHeader": { argTypes: [HTTPRES_T, STRING, STRING], result: VOID },
|
|
@@ -446,6 +493,11 @@ export const LIB_FN_SIGS = {
|
|
|
446
493
|
"http.resWriteDyn": { argTypes: [HTTPRES_T, DYN], result: VOID },
|
|
447
494
|
"http.resEndDyn": { argTypes: [HTTPRES_T, DYN], result: VOID },
|
|
448
495
|
"http.resHeadersSent": { argTypes: [HTTPRES_T], result: BOOL },
|
|
496
|
+
"http.resFlushHeaders": { argTypes: [HTTPRES_T], result: VOID },
|
|
497
|
+
"http.resAddTrailers": { argTypes: [HTTPRES_T, arrayOf(STRING)], result: VOID },
|
|
498
|
+
"http.resCork": { argTypes: [HTTPRES_T], result: VOID },
|
|
499
|
+
"http.resUncork": { argTypes: [HTTPRES_T], result: VOID },
|
|
500
|
+
"http.resWritableCorked": { argTypes: [HTTPRES_T], result: F64 },
|
|
449
501
|
// The member follow-ups: reqStatusCode's `number | undefined` and
|
|
450
502
|
// sockRemoteAddress's `string | undefined` results are shape-checked in
|
|
451
503
|
// the special cases below (like reqHeader/columns).
|
|
@@ -455,6 +507,8 @@ export const LIB_FN_SIGS = {
|
|
|
455
507
|
"http.reqStatusMessage": { argTypes: [HTTPREQ_T], result: VOID },
|
|
456
508
|
"http.reqRawHeaders": { argTypes: [HTTPREQ_T], result: arrayOf(STRING) },
|
|
457
509
|
"http.reqHeaderPairs": { argTypes: [HTTPREQ_T], result: arrayOf(STRING) },
|
|
510
|
+
"http.reqRawTrailers": { argTypes: [HTTPREQ_T], result: arrayOf(STRING) },
|
|
511
|
+
"http.reqTrailerPairs": { argTypes: [HTTPREQ_T], result: arrayOf(STRING) },
|
|
458
512
|
"net.sockDestroyed": { argTypes: [NETSOCKET_T], result: BOOL },
|
|
459
513
|
"net.sockWritable": { argTypes: [NETSOCKET_T], result: BOOL },
|
|
460
514
|
// The 'upgrade' registrations: the callback shapes are program-typed
|
|
@@ -649,6 +703,11 @@ export const LIB_FN_SIGS = {
|
|
|
649
703
|
"http.clientEndBytes": { argTypes: [HTTPCLIENTREQ_T, BYTES_U8], result: VOID },
|
|
650
704
|
"http.clientWriteDyn": { argTypes: [HTTPCLIENTREQ_T, DYN], result: VOID },
|
|
651
705
|
"http.clientEndDyn": { argTypes: [HTTPCLIENTREQ_T, DYN], result: VOID },
|
|
706
|
+
"http.clientFlushHeaders": { argTypes: [HTTPCLIENTREQ_T], result: VOID },
|
|
707
|
+
"http.clientAddTrailers": { argTypes: [HTTPCLIENTREQ_T, arrayOf(STRING)], result: VOID },
|
|
708
|
+
"http.clientCork": { argTypes: [HTTPCLIENTREQ_T], result: VOID },
|
|
709
|
+
"http.clientUncork": { argTypes: [HTTPCLIENTREQ_T], result: VOID },
|
|
710
|
+
"http.clientWritableCorked": { argTypes: [HTTPCLIENTREQ_T], result: F64 },
|
|
652
711
|
"http.clientDestroy": { argTypes: [HTTPCLIENTREQ_T], result: VOID },
|
|
653
712
|
"http.clientDestroyed": { argTypes: [HTTPCLIENTREQ_T], result: BOOL },
|
|
654
713
|
"http.clientOnResponse": { argTypes: [HTTPCLIENTREQ_T, null, BOOL], result: VOID },
|
|
@@ -664,17 +723,36 @@ export const LIB_FN_SIGS = {
|
|
|
664
723
|
result: SPAWNRES_T,
|
|
665
724
|
},
|
|
666
725
|
"cp.spawn": { argTypes: [STRING, arrayOf(STRING)], result: CHILD_T },
|
|
726
|
+
"process.forkTarget": { argTypes: [F64], result: F64 },
|
|
727
|
+
"cp.fork": {
|
|
728
|
+
argTypes: [F64, arrayOf(STRING), F64, F64, F64, BOOL, arrayOf(STRING), STRING],
|
|
729
|
+
result: CHILD_T,
|
|
730
|
+
},
|
|
731
|
+
"child.connected": { argTypes: [CHILD_T], result: BOOL },
|
|
732
|
+
"child.send": { argTypes: [CHILD_T, STRING], result: BOOL },
|
|
733
|
+
"child.sendCb": { argTypes: [CHILD_T, STRING, null], result: BOOL },
|
|
734
|
+
"child.disconnect": { argTypes: [CHILD_T], result: VOID },
|
|
735
|
+
"child.onMessage": { argTypes: [CHILD_T, null, BOOL], result: VOID },
|
|
736
|
+
"child.onDisconnect": { argTypes: [CHILD_T, null, BOOL], result: VOID },
|
|
737
|
+
"process.connected": { argTypes: [], result: BOOL },
|
|
738
|
+
"process.send": { argTypes: [STRING], result: BOOL },
|
|
739
|
+
"process.sendCb": { argTypes: [STRING, null], result: BOOL },
|
|
740
|
+
"process.disconnect": { argTypes: [], result: VOID },
|
|
741
|
+
"process.onMessage": { argTypes: [null, BOOL], result: VOID },
|
|
742
|
+
"process.onDisconnect": { argTypes: [null, BOOL], result: VOID },
|
|
743
|
+
"cp.execFile": { argTypes: [STRING, arrayOf(STRING), null], result: CHILD_T },
|
|
667
744
|
// spawn's options form: per-slot stdio modes (0 ignore / 1 inherit /
|
|
668
745
|
// 2 fd) with the out/err fds for mode 2, detached, env replacement
|
|
669
746
|
// pairs, cwd ("" = inherit).
|
|
670
747
|
"cp.spawnOpts": {
|
|
671
|
-
argTypes: [STRING, arrayOf(STRING), F64, F64, F64, F64, F64, BOOL, BOOL, arrayOf(STRING), STRING],
|
|
748
|
+
argTypes: [STRING, arrayOf(STRING), F64, F64, F64, F64, F64, BOOL, BOOL, BOOL, arrayOf(STRING), STRING],
|
|
672
749
|
result: CHILD_T,
|
|
673
750
|
},
|
|
674
751
|
// The callback's func type is program-dependent (zero params, or the
|
|
675
752
|
// `number | null` union / the %Error class) — the libCall case checks
|
|
676
753
|
// the shape; the slot here only pins arity and the child receiver.
|
|
677
754
|
"child.onExit": { argTypes: [CHILD_T, null], result: VOID },
|
|
755
|
+
"child.onClose": { argTypes: [CHILD_T, null], result: VOID },
|
|
678
756
|
"child.onError": { argTypes: [CHILD_T, null], result: VOID },
|
|
679
757
|
// Like process.envGet, spawnRes.status's result type is program-dependent
|
|
680
758
|
// (the interned `number | null` union) — the libCall case checks the arms.
|
|
@@ -700,11 +778,22 @@ export const LIB_FN_SIGS = {
|
|
|
700
778
|
// case checks the arms — the child.pid pattern with a ref arm).
|
|
701
779
|
"child.stdout": { argTypes: [CHILD_T], result: VOID },
|
|
702
780
|
"child.stderr": { argTypes: [CHILD_T], result: VOID },
|
|
781
|
+
"child.stdin": { argTypes: [CHILD_T], result: VOID },
|
|
703
782
|
// Listener registrations: callback func shapes are program-dependent
|
|
704
783
|
// (zero-param / Buffer / Buffer-armed union) — the slots pin arity,
|
|
705
784
|
// the stream receiver, and the once-flag.
|
|
706
785
|
"stream.onData": { argTypes: [CHILDSTREAM_T, null, BOOL], result: VOID },
|
|
786
|
+
"stream.onDataStr": { argTypes: [CHILDSTREAM_T, null, BOOL], result: VOID },
|
|
707
787
|
"stream.onEnd": { argTypes: [CHILDSTREAM_T, null, BOOL], result: VOID },
|
|
788
|
+
"stream.childSetEncoding": { argTypes: [CHILDSTREAM_T, STRING], result: CHILDSTREAM_T },
|
|
789
|
+
"writer.writeString": { argTypes: [CHILDWRITER_T, STRING], result: BOOL },
|
|
790
|
+
"writer.writeBytes": { argTypes: [CHILDWRITER_T, BYTES_U8], result: BOOL },
|
|
791
|
+
"writer.end": { argTypes: [CHILDWRITER_T], result: VOID },
|
|
792
|
+
"writer.destroy": { argTypes: [CHILDWRITER_T], result: VOID },
|
|
793
|
+
"writer.writable": { argTypes: [CHILDWRITER_T], result: BOOL },
|
|
794
|
+
"writer.onDrain": { argTypes: [CHILDWRITER_T, null, BOOL], result: VOID },
|
|
795
|
+
"writer.onFinish": { argTypes: [CHILDWRITER_T, null, BOOL], result: VOID },
|
|
796
|
+
"writer.onError": { argTypes: [CHILDWRITER_T, null, BOOL], result: VOID },
|
|
708
797
|
"procStream.write": { argTypes: [PROCSTREAM_T, STRING], result: BOOL },
|
|
709
798
|
"child.killed": { argTypes: [CHILD_T], result: BOOL },
|
|
710
799
|
"child.kill": { argTypes: [CHILD_T, STRING], result: BOOL },
|
|
@@ -717,6 +806,25 @@ export const LIB_FN_SIGS = {
|
|
|
717
806
|
"crypto.randomBytes": { argTypes: [F64], result: BYTES_U8 },
|
|
718
807
|
"crypto.hashDigestStr": { argTypes: [STRING, STRING, STRING], result: STRING },
|
|
719
808
|
"crypto.hashDigestBytes": { argTypes: [STRING, BYTES_U8, STRING], result: STRING },
|
|
809
|
+
"crypto.hashNew": { argTypes: [STRING], result: CRYPTOHASH_T },
|
|
810
|
+
"crypto.hmacNewStr": { argTypes: [STRING, STRING], result: CRYPTOHMAC_T },
|
|
811
|
+
"crypto.hmacNewBytes": { argTypes: [STRING, BYTES_U8], result: CRYPTOHMAC_T },
|
|
812
|
+
"crypto.hashUpdateStr": { argTypes: [CRYPTOHASH_T, STRING], result: CRYPTOHASH_T },
|
|
813
|
+
"crypto.hashUpdateBytes": { argTypes: [CRYPTOHASH_T, BYTES_U8], result: CRYPTOHASH_T },
|
|
814
|
+
"crypto.hmacUpdateStr": { argTypes: [CRYPTOHMAC_T, STRING], result: CRYPTOHMAC_T },
|
|
815
|
+
"crypto.hmacUpdateBytes": { argTypes: [CRYPTOHMAC_T, BYTES_U8], result: CRYPTOHMAC_T },
|
|
816
|
+
"crypto.hashCopy": { argTypes: [CRYPTOHASH_T], result: CRYPTOHASH_T },
|
|
817
|
+
"crypto.hashDigestString": { argTypes: [CRYPTOHASH_T, STRING], result: STRING },
|
|
818
|
+
"crypto.hashDigestBuffer": { argTypes: [CRYPTOHASH_T], result: BYTES_U8 },
|
|
819
|
+
"crypto.hmacDigestString": { argTypes: [CRYPTOHMAC_T, STRING], result: STRING },
|
|
820
|
+
"crypto.hmacDigestBuffer": { argTypes: [CRYPTOHMAC_T], result: BYTES_U8 },
|
|
821
|
+
"crypto.timingSafeEqual": { argTypes: [BYTES_U8, BYTES_U8], result: BOOL },
|
|
822
|
+
"crypto.randomFill": { argTypes: [BYTES_U8, F64, F64], result: BYTES_U8 },
|
|
823
|
+
"crypto.randomFillRest": { argTypes: [BYTES_U8, F64], result: BYTES_U8 },
|
|
824
|
+
"crypto.randomInt": { argTypes: [F64, F64], result: F64 },
|
|
825
|
+
"crypto.pbkdf2": { argTypes: [BYTES_U8, BYTES_U8, F64, F64, STRING], result: BYTES_U8 },
|
|
826
|
+
"crypto.randomBytesCb": { argTypes: [F64, null], result: VOID },
|
|
827
|
+
"crypto.pbkdf2Cb": { argTypes: [BYTES_U8, BYTES_U8, F64, F64, STRING, null], result: VOID },
|
|
720
828
|
// The Buffer statics and the fs/zlib Buffer forms: fixed always-u8
|
|
721
829
|
// signatures (Buffer IS a Uint8Array — one bytes kind).
|
|
722
830
|
"buffer.fromStr": { argTypes: [STRING, STRING], result: BYTES_U8 },
|
|
@@ -751,6 +859,19 @@ export const LIB_FN_SIGS = {
|
|
|
751
859
|
"fsp.readFileBytes": { argTypes: [STRING], result: { kind: "promise", inner: BYTES_U8 } },
|
|
752
860
|
"zlib.deflateSync": { argTypes: [BYTES_U8], result: BYTES_U8 },
|
|
753
861
|
"zlib.inflateSync": { argTypes: [BYTES_U8], result: BYTES_U8 },
|
|
862
|
+
"zlib.deflateRawSync": { argTypes: [BYTES_U8], result: BYTES_U8 },
|
|
863
|
+
"zlib.inflateRawSync": { argTypes: [BYTES_U8], result: BYTES_U8 },
|
|
864
|
+
"zlib.gzipSync": { argTypes: [BYTES_U8], result: BYTES_U8 },
|
|
865
|
+
"zlib.gunzipSync": { argTypes: [BYTES_U8], result: BYTES_U8 },
|
|
866
|
+
"zlib.unzipSync": { argTypes: [BYTES_U8], result: BYTES_U8 },
|
|
867
|
+
"zlib.deflateCb": { argTypes: [BYTES_U8, null], result: VOID },
|
|
868
|
+
"zlib.inflateCb": { argTypes: [BYTES_U8, null], result: VOID },
|
|
869
|
+
"zlib.deflateRawCb": { argTypes: [BYTES_U8, null], result: VOID },
|
|
870
|
+
"zlib.inflateRawCb": { argTypes: [BYTES_U8, null], result: VOID },
|
|
871
|
+
"zlib.gzipCb": { argTypes: [BYTES_U8, null], result: VOID },
|
|
872
|
+
"zlib.gunzipCb": { argTypes: [BYTES_U8, null], result: VOID },
|
|
873
|
+
"zlib.unzipCb": { argTypes: [BYTES_U8, null], result: VOID },
|
|
874
|
+
"zlib.crc32": { argTypes: [BYTES_U8, F64], result: F64 },
|
|
754
875
|
"process.stdoutWriteBytes": { argTypes: [BYTES_U8, STRING], result: BOOL },
|
|
755
876
|
"process.stderrWriteBytes": { argTypes: [BYTES_U8, STRING], result: BOOL },
|
|
756
877
|
// Completion callback is program-dependent: zero params, checked-dynamic,
|
|
@@ -768,8 +889,13 @@ export const LIB_FN_SIGS = {
|
|
|
768
889
|
"fsp.chmod": { argTypes: [STRING, F64], result: { kind: "promise", inner: VOID } },
|
|
769
890
|
"fsp.rename": { argTypes: [STRING, STRING], result: { kind: "promise", inner: VOID } },
|
|
770
891
|
"fsp.readdir": { argTypes: [STRING], result: { kind: "promise", inner: arrayOf(STRING) } },
|
|
892
|
+
// Result is promise<call-site Dirent record array>; the libCall case
|
|
893
|
+
// validates the program-dependent record shape below.
|
|
894
|
+
"fsp.readdirTypes": { argTypes: [STRING], result: { kind: "promise", inner: VOID } },
|
|
771
895
|
"fsp.rm": { argTypes: [STRING], result: { kind: "promise", inner: VOID } },
|
|
772
896
|
"fsp.stat": { argTypes: [STRING], result: { kind: "promise", inner: STATS_T } },
|
|
897
|
+
"fsp.realpath": { argTypes: [STRING], result: { kind: "promise", inner: STRING } },
|
|
898
|
+
"fsp.lstat": { argTypes: [STRING], result: { kind: "promise", inner: STATS_T } },
|
|
773
899
|
"fsp.open": { argTypes: [STRING, STRING, F64], result: { kind: "promise", inner: FILEHANDLE_T } },
|
|
774
900
|
"fileHandle.fd": { argTypes: [FILEHANDLE_T], result: F64 },
|
|
775
901
|
"fileHandle.close": { argTypes: [FILEHANDLE_T], result: { kind: "promise", inner: VOID } },
|
|
@@ -794,6 +920,8 @@ export const LIB_FN_SIGS = {
|
|
|
794
920
|
"process.envUnset": { argTypes: [STRING], result: VOID },
|
|
795
921
|
"process.envPairs": { argTypes: [], result: arrayOf(STRING) },
|
|
796
922
|
"process.exit": { argTypes: [F64], result: VOID },
|
|
923
|
+
"process.setExitCode": { argTypes: [F64], result: VOID },
|
|
924
|
+
"process.currentExitCode": { argTypes: [], result: F64 },
|
|
797
925
|
"process.cwd": { argTypes: [], result: STRING },
|
|
798
926
|
"process.pid": { argTypes: [], result: F64 },
|
|
799
927
|
"dyn.this": { argTypes: [], result: DYN },
|
|
@@ -812,6 +940,7 @@ export const LIB_FN_SIGS = {
|
|
|
812
940
|
"error.new": { argTypes: [STRING], result: VOID },
|
|
813
941
|
"error.nodeThrow": { argTypes: [F64, STRING, STRING], result: VOID },
|
|
814
942
|
"dyn.toStringCoerce": { argTypes: [DYN], result: STRING },
|
|
943
|
+
"dyn.toNumberCoerce": { argTypes: [DYN], result: F64 },
|
|
815
944
|
// Always throws; the result is the READ's declared type (a typed dummy
|
|
816
945
|
// the unwind abandons) — the libCall case skips the result check.
|
|
817
946
|
"global.undefRead": { argTypes: [STRING], result: VOID },
|
|
@@ -864,9 +993,11 @@ export const LIB_FN_SIGS = {
|
|
|
864
993
|
// once, prepend), offDyn (recv, name, cb dyn).
|
|
865
994
|
"emitter.checkListener": { argTypes: [DYN], result: VOID },
|
|
866
995
|
"emitter.onDyn": { argTypes: [null, STRING, DYN, null, BOOL, BOOL], result: VOID },
|
|
996
|
+
"emitter.onFlex": { argTypes: [null, STRING, DYN, BOOL, BOOL], result: VOID },
|
|
867
997
|
"emitter.offDyn": { argTypes: [null, STRING, DYN], result: VOID },
|
|
868
998
|
"emitter.removeAll": { argTypes: [null, STRING, BOOL], result: VOID },
|
|
869
999
|
"emitter.emit": { argTypes: [null, STRING], result: BOOL },
|
|
1000
|
+
"emitter.emitFlex": { argTypes: [null, STRING], result: BOOL },
|
|
870
1001
|
"emitter.emitError": { argTypes: [null, STRING, null], result: BOOL },
|
|
871
1002
|
"emitter.count": { argTypes: [null, STRING], result: F64 },
|
|
872
1003
|
"emitter.countFn": { argTypes: [null, STRING, null], result: F64 },
|
|
@@ -960,6 +1091,7 @@ export const LIB_FN_SIGS = {
|
|
|
960
1091
|
// message slot always carries a string ("" when hasMsg is false).
|
|
961
1092
|
"assert.ok": { argTypes: [BOOL, STRING], result: VOID },
|
|
962
1093
|
"assert.eqF64": { argTypes: [F64, F64, BOOL, BOOL, STRING, BOOL], result: VOID },
|
|
1094
|
+
"assert.eqBigInt": { argTypes: [BIGINT_T, BIGINT_T, BOOL, BOOL, STRING, BOOL], result: VOID },
|
|
963
1095
|
"assert.eqStr": { argTypes: [STRING, STRING, BOOL, BOOL, STRING, BOOL], result: VOID },
|
|
964
1096
|
"assert.eqBool": { argTypes: [BOOL, BOOL, BOOL, BOOL, STRING, BOOL], result: VOID },
|
|
965
1097
|
"assert.deepResult": { argTypes: [BOOL, BOOL, STRING, BOOL], result: VOID },
|
|
@@ -977,6 +1109,7 @@ export const LIB_FN_SIGS = {
|
|
|
977
1109
|
// The equality quartet over checked-dynamic operands (the frontend
|
|
978
1110
|
// boxes a static side into the checked-dynamic tree first).
|
|
979
1111
|
"assert.eqDyn": { argTypes: [DYN, DYN, BOOL, BOOL, STRING, BOOL], result: VOID },
|
|
1112
|
+
"assert.looseResult": { argTypes: [BOOL, BOOL, STRING, STRING, STRING, BOOL], result: VOID },
|
|
980
1113
|
// The throws(fn, {shape}) accumulator: begin/slot calls never throw;
|
|
981
1114
|
// shapeEnd throws the Comparison diff. The error slot is the
|
|
982
1115
|
// %Error-narrowed caught value.
|
|
@@ -1081,6 +1214,7 @@ export const LIB_FN_SIGS = {
|
|
|
1081
1214
|
"date.newNow": { argTypes: [], result: DATE_T },
|
|
1082
1215
|
"date.newMs": { argTypes: [F64], result: DATE_T },
|
|
1083
1216
|
"date.newString": { argTypes: [STRING], result: DATE_T },
|
|
1217
|
+
"date.parse": { argTypes: [STRING], result: F64 },
|
|
1084
1218
|
"date.getTime": { argTypes: [DATE_T], result: F64 },
|
|
1085
1219
|
"date.valueOf": { argTypes: [DATE_T], result: F64 },
|
|
1086
1220
|
"date.toISOString": { argTypes: [F64], result: STRING },
|
|
@@ -1759,6 +1893,11 @@ function validateFunction(fn, functions, ffiByName, classes, records, unions, gl
|
|
|
1759
1893
|
if (e.type.kind !== "string")
|
|
1760
1894
|
err("strLit must be string", e.loc);
|
|
1761
1895
|
break;
|
|
1896
|
+
case "moduleNsRef":
|
|
1897
|
+
if (e.type.kind !== "moduleNs" || e.type.moduleId !== e.moduleId) {
|
|
1898
|
+
err("moduleNsRef must match its moduleNs type", e.loc);
|
|
1899
|
+
}
|
|
1900
|
+
break;
|
|
1762
1901
|
case "boolLit":
|
|
1763
1902
|
if (e.type.kind !== "bool")
|
|
1764
1903
|
err("boolLit must be bool", e.loc);
|
|
@@ -1797,6 +1936,11 @@ function validateFunction(fn, functions, ffiByName, classes, records, unions, gl
|
|
|
1797
1936
|
err(`bin ${e.op} on class values: right operand is ${e.right.type.kind}`, e.loc);
|
|
1798
1937
|
}
|
|
1799
1938
|
}
|
|
1939
|
+
else if (isEq && e.left.type.kind === "moduleNs") {
|
|
1940
|
+
if (e.right.type.kind !== "moduleNs") {
|
|
1941
|
+
err(`bin ${e.op} on module namespaces: right operand is ${e.right.type.kind}`, e.loc);
|
|
1942
|
+
}
|
|
1943
|
+
}
|
|
1800
1944
|
else if (isEq &&
|
|
1801
1945
|
(e.left.type.kind === "array" ||
|
|
1802
1946
|
e.left.type.kind === "map" ||
|
|
@@ -1954,9 +2098,10 @@ function validateFunction(fn, functions, ffiByName, classes, records, unions, gl
|
|
|
1954
2098
|
checkExpr(e.operand);
|
|
1955
2099
|
if (e.operand.type.kind !== "f64" &&
|
|
1956
2100
|
e.operand.type.kind !== "string" &&
|
|
2101
|
+
e.operand.type.kind !== "dyn" &&
|
|
1957
2102
|
e.operand.type.kind !== "union" &&
|
|
1958
2103
|
!REF_TRUTHY_KINDS.has(e.operand.type.kind)) {
|
|
1959
|
-
err(`toBool operand must be f64|string|union|ref, got ${e.operand.type.kind}`, e.loc);
|
|
2104
|
+
err(`toBool operand must be f64|string|dyn|union|ref, got ${e.operand.type.kind}`, e.loc);
|
|
1960
2105
|
}
|
|
1961
2106
|
if (e.operand.type.kind === "union")
|
|
1962
2107
|
checkTruthyUnion(e.operand.type.unionId, e.loc);
|
|
@@ -2800,7 +2945,7 @@ function validateFunction(fn, functions, ffiByName, classes, records, unions, gl
|
|
|
2800
2945
|
// ISLAND-REST types (restAbi jsval) SPELL their trailing engine
|
|
2801
2946
|
// array param — the lifted signature matches directly, no
|
|
2802
2947
|
// hidden slot.
|
|
2803
|
-
const hiddenRest = e.type.rest === true && e.type.restAbi
|
|
2948
|
+
const hiddenRest = e.type.rest === true && e.type.restAbi === undefined;
|
|
2804
2949
|
const declared = hiddenRest ? target.params.slice(0, -1) : target.params;
|
|
2805
2950
|
const restOk = !hiddenRest ||
|
|
2806
2951
|
(target.params.length === e.type.params.length + 1 &&
|
|
@@ -3705,7 +3850,7 @@ function validateFunction(fn, functions, ffiByName, classes, records, unions, gl
|
|
|
3705
3850
|
// The stream constructors (trailing option callbacks), write/end
|
|
3706
3851
|
// (the optional chunk/cb tail), and unpipe (the optional
|
|
3707
3852
|
// destination) admit a longer list the same way.
|
|
3708
|
-
const variadic = e.fn === "emitter.emit" ||
|
|
3853
|
+
const variadic = e.fn === "emitter.emit" || e.fn === "emitter.emitFlex" ||
|
|
3709
3854
|
e.fn === "readable.new" || e.fn === "writable.new" ||
|
|
3710
3855
|
e.fn === "duplex.new" || e.fn === "transform.new" ||
|
|
3711
3856
|
e.fn === "passthrough.new" ||
|
|
@@ -4062,7 +4207,7 @@ function validateFunction(fn, functions, ffiByName, classes, records, unions, gl
|
|
|
4062
4207
|
err(`libCall http.reqH2Stream must return the 'Http2Stream | undefined' union`, e.loc);
|
|
4063
4208
|
break;
|
|
4064
4209
|
}
|
|
4065
|
-
if (e.fn === "http.reqHeader" || e.fn === "http.resGetHeader") {
|
|
4210
|
+
if (e.fn === "http.reqHeader" || e.fn === "http.reqTrailer" || e.fn === "http.resGetHeader") {
|
|
4066
4211
|
// Result is the interned `string | undefined` union (envGet's).
|
|
4067
4212
|
const def = e.type.kind === "union" ? unions.get(e.type.unionId) : undefined;
|
|
4068
4213
|
const ok = def &&
|
|
@@ -4074,6 +4219,15 @@ function validateFunction(fn, functions, ffiByName, classes, records, unions, gl
|
|
|
4074
4219
|
}
|
|
4075
4220
|
break;
|
|
4076
4221
|
}
|
|
4222
|
+
if (e.fn === "http.reqHeaderValues" || e.fn === "http.reqTrailerValues") {
|
|
4223
|
+
const def = e.type.kind === "union" ? unions.get(e.type.unionId) : undefined;
|
|
4224
|
+
const ok = def && def.arms.length === 2 &&
|
|
4225
|
+
def.arms[0].kind === "array" && def.arms[0].elem.kind === "string" &&
|
|
4226
|
+
def.arms[1].kind === "undefinedT";
|
|
4227
|
+
if (!ok)
|
|
4228
|
+
err(`libCall ${e.fn} must return the 'string[] | undefined' union`, e.loc);
|
|
4229
|
+
break;
|
|
4230
|
+
}
|
|
4077
4231
|
if (e.fn === "net.createServerCb" || e.fn === "net.serverOnConnection" ||
|
|
4078
4232
|
e.fn === "net.serverOnSecureConnection" ||
|
|
4079
4233
|
e.fn === "net.sockOnData" || e.fn === "net.serverOnError" ||
|
|
@@ -4172,6 +4326,30 @@ function validateFunction(fn, functions, ffiByName, classes, records, unions, gl
|
|
|
4172
4326
|
}
|
|
4173
4327
|
break;
|
|
4174
4328
|
}
|
|
4329
|
+
if (e.fn === "zlib.deflateCb" || e.fn === "zlib.inflateCb" ||
|
|
4330
|
+
e.fn === "zlib.deflateRawCb" || e.fn === "zlib.inflateRawCb" ||
|
|
4331
|
+
e.fn === "zlib.gzipCb" || e.fn === "zlib.gunzipCb" || e.fn === "zlib.unzipCb") {
|
|
4332
|
+
const cbT = e.args[1]?.type;
|
|
4333
|
+
let ok = cbT?.kind === "func" && cbT.ret.kind === "void" && cbT.params.length <= 2;
|
|
4334
|
+
if (ok && cbT?.kind === "func" && cbT.params.length >= 1) {
|
|
4335
|
+
const error = cbT.params[0];
|
|
4336
|
+
if (error.kind !== "dyn") {
|
|
4337
|
+
const def = error.kind === "union" ? unions.get(error.unionId) : undefined;
|
|
4338
|
+
ok = def !== undefined &&
|
|
4339
|
+
def.arms.some((arm) => arm.kind === "nullT") &&
|
|
4340
|
+
def.arms.some((arm) => arm.kind === "object" && arm.className === "%Error") &&
|
|
4341
|
+
def.arms.every((arm) => arm.kind === "nullT" || arm.kind === "undefinedT" ||
|
|
4342
|
+
(arm.kind === "object" && arm.className === "%Error"));
|
|
4343
|
+
}
|
|
4344
|
+
}
|
|
4345
|
+
if (ok && cbT?.kind === "func" && cbT.params.length === 2) {
|
|
4346
|
+
const value = cbT.params[1];
|
|
4347
|
+
ok = value.kind === "dyn" || (value.kind === "bytes" && value.elem === "u8");
|
|
4348
|
+
}
|
|
4349
|
+
if (!ok)
|
|
4350
|
+
err(`libCall ${e.fn} callback shape (frontend must fence)`, e.loc);
|
|
4351
|
+
break;
|
|
4352
|
+
}
|
|
4175
4353
|
if (e.fn === "fs.renameCb" ||
|
|
4176
4354
|
e.fn === "process.stdoutWriteBytesCb" ||
|
|
4177
4355
|
e.fn === "process.stderrWriteBytesCb") {
|
|
@@ -4227,12 +4405,15 @@ function validateFunction(fn, functions, ffiByName, classes, records, unions, gl
|
|
|
4227
4405
|
}
|
|
4228
4406
|
break;
|
|
4229
4407
|
}
|
|
4230
|
-
if (e.fn === "fs.readdirTypesSync") {
|
|
4408
|
+
if (e.fn === "fs.readdirTypesSync" || e.fn === "fsp.readdirTypes") {
|
|
4231
4409
|
// Result: the interned Dirent record array — {%dtype: f64,
|
|
4232
4410
|
// name: string, parentPath: string} rows (canonical field
|
|
4233
4411
|
// order; the structure lowerFsReaddirTypesCall pinned).
|
|
4234
|
-
const
|
|
4235
|
-
?
|
|
4412
|
+
const result = e.fn === "fsp.readdirTypes"
|
|
4413
|
+
? e.type.kind === "promise" ? e.type.inner : undefined
|
|
4414
|
+
: e.type;
|
|
4415
|
+
const shape = result?.kind === "array" && result.elem.kind === "record"
|
|
4416
|
+
? records.get(result.elem.shapeId)
|
|
4236
4417
|
: undefined;
|
|
4237
4418
|
const ok = shape !== undefined &&
|
|
4238
4419
|
!shape.tuple &&
|
|
@@ -4242,7 +4423,7 @@ function validateFunction(fn, functions, ffiByName, classes, records, unions, gl
|
|
|
4242
4423
|
shape.fields[1].name === "name" && shape.fields[1].type.kind === "string" &&
|
|
4243
4424
|
shape.fields[2].name === "parentPath" && shape.fields[2].type.kind === "string";
|
|
4244
4425
|
if (!ok) {
|
|
4245
|
-
err(`libCall
|
|
4426
|
+
err(`libCall ${e.fn} must return ${e.fn === "fsp.readdirTypes" ? "a promise of " : ""}the Dirent record array`, e.loc);
|
|
4246
4427
|
}
|
|
4247
4428
|
break;
|
|
4248
4429
|
}
|
|
@@ -4282,18 +4463,43 @@ function validateFunction(fn, functions, ffiByName, classes, records, unions, gl
|
|
|
4282
4463
|
}
|
|
4283
4464
|
break;
|
|
4284
4465
|
}
|
|
4285
|
-
if (e.fn === "
|
|
4466
|
+
if (e.fn === "cp.execFile") {
|
|
4467
|
+
const cb = e.args[2]?.type;
|
|
4468
|
+
if (cb?.kind !== "func" || cb.rest === true || cb.params.length > 3 || cb.ret.kind !== "void") {
|
|
4469
|
+
err(`libCall cp.execFile callback must be a non-rest void function with at most three parameters`, e.loc);
|
|
4470
|
+
}
|
|
4471
|
+
else {
|
|
4472
|
+
const error = cb.params[0];
|
|
4473
|
+
if (error !== undefined) {
|
|
4474
|
+
const def = error.kind === "union" ? unions.get(error.unionId) : undefined;
|
|
4475
|
+
if (!def || def.arms.length !== 2 ||
|
|
4476
|
+
!def.arms.some((arm) => arm.kind === "nullT") ||
|
|
4477
|
+
!def.arms.some((arm) => arm.kind === "object" && arm.className === "%Error")) {
|
|
4478
|
+
err(`libCall cp.execFile callback error parameter must be Error | null`, e.loc);
|
|
4479
|
+
}
|
|
4480
|
+
}
|
|
4481
|
+
const stdout = cb.params[1];
|
|
4482
|
+
if (stdout !== undefined && stdout.kind !== "string") {
|
|
4483
|
+
err(`libCall cp.execFile callback stdout parameter must be string`, e.loc);
|
|
4484
|
+
}
|
|
4485
|
+
const stderr = cb.params[2];
|
|
4486
|
+
if (stderr !== undefined && stderr.kind !== "string") {
|
|
4487
|
+
err(`libCall cp.execFile callback stderr parameter must be string`, e.loc);
|
|
4488
|
+
}
|
|
4489
|
+
}
|
|
4490
|
+
}
|
|
4491
|
+
if (e.fn === "child.onExit" || e.fn === "child.onClose" || e.fn === "child.onError") {
|
|
4286
4492
|
// The listener: a closure with no params, or exactly the
|
|
4287
4493
|
// supported parameter shapes per event — exit takes (code:
|
|
4288
4494
|
// number | null) with an optional (signal: string | null)
|
|
4289
4495
|
// second parameter, error exactly (err: %Error).
|
|
4290
4496
|
const cb = e.args[1];
|
|
4291
4497
|
const cbT = cb?.type;
|
|
4292
|
-
const maxParams = e.fn === "child.
|
|
4498
|
+
const maxParams = e.fn === "child.onError" ? 1 : 2;
|
|
4293
4499
|
let ok = cbT?.kind === "func" && cbT.ret.kind === "void" && cbT.params.length <= maxParams;
|
|
4294
4500
|
if (ok && cbT?.kind === "func" && cbT.params.length >= 1) {
|
|
4295
4501
|
const p = cbT.params[0];
|
|
4296
|
-
if (e.fn === "child.onExit") {
|
|
4502
|
+
if (e.fn === "child.onExit" || e.fn === "child.onClose") {
|
|
4297
4503
|
const def = p.kind === "union" ? unions.get(p.unionId) : undefined;
|
|
4298
4504
|
ok =
|
|
4299
4505
|
def !== undefined &&
|
|
@@ -4319,6 +4525,18 @@ function validateFunction(fn, functions, ffiByName, classes, records, unions, gl
|
|
|
4319
4525
|
}
|
|
4320
4526
|
break;
|
|
4321
4527
|
}
|
|
4528
|
+
if (e.fn === "writer.onDrain" || e.fn === "writer.onFinish" || e.fn === "writer.onError") {
|
|
4529
|
+
const cbT = e.args[1]?.type;
|
|
4530
|
+
const maxParams = e.fn === "writer.onError" ? 1 : 0;
|
|
4531
|
+
let ok = cbT?.kind === "func" && cbT.ret.kind === "void" && cbT.params.length <= maxParams;
|
|
4532
|
+
if (ok && cbT?.kind === "func" && cbT.params.length === 1) {
|
|
4533
|
+
const p = cbT.params[0];
|
|
4534
|
+
ok = p.kind === "object" && p.className === "%Error";
|
|
4535
|
+
}
|
|
4536
|
+
if (!ok)
|
|
4537
|
+
err(`libCall ${e.fn} callback shape (frontend must fence)`, e.loc);
|
|
4538
|
+
break;
|
|
4539
|
+
}
|
|
4322
4540
|
if (e.fn === "process.onExit" || e.fn === "process.offExit" ||
|
|
4323
4541
|
e.fn === "stdin.onData" || e.fn === "stdin.onError") {
|
|
4324
4542
|
// The listener: a void closure with no params, or exactly the
|
|
@@ -4438,14 +4656,15 @@ function validateFunction(fn, functions, ffiByName, classes, records, unions, gl
|
|
|
4438
4656
|
}
|
|
4439
4657
|
break;
|
|
4440
4658
|
}
|
|
4441
|
-
if (e.fn === "child.stdout" || e.fn === "child.stderr") {
|
|
4659
|
+
if (e.fn === "child.stdin" || e.fn === "child.stdout" || e.fn === "child.stderr") {
|
|
4442
4660
|
const def = e.type.kind === "union" ? unions.get(e.type.unionId) : undefined;
|
|
4661
|
+
const handleKind = e.fn === "child.stdin" ? "childWriter" : "childStream";
|
|
4443
4662
|
const ok = def &&
|
|
4444
4663
|
def.arms.length === 2 &&
|
|
4445
|
-
def.arms.some((a) => a.kind ===
|
|
4664
|
+
def.arms.some((a) => a.kind === handleKind) &&
|
|
4446
4665
|
def.arms.some((a) => a.kind === "nullT");
|
|
4447
4666
|
if (!ok) {
|
|
4448
|
-
err(`libCall ${e.fn} must return the 'Readable | null' union`, e.loc);
|
|
4667
|
+
err(`libCall ${e.fn} must return the '${e.fn === "child.stdin" ? "Writable" : "Readable"} | null' union`, e.loc);
|
|
4449
4668
|
}
|
|
4450
4669
|
break;
|
|
4451
4670
|
}
|
|
@@ -4717,7 +4936,7 @@ function validateFunction(fn, functions, ffiByName, classes, records, unions, gl
|
|
|
4717
4936
|
}
|
|
4718
4937
|
// The chaining forms return the receiver's own static class.
|
|
4719
4938
|
if (e.fn === "emitter.on" || e.fn === "emitter.off" ||
|
|
4720
|
-
e.fn === "emitter.onDyn" || e.fn === "emitter.offDyn" ||
|
|
4939
|
+
e.fn === "emitter.onDyn" || e.fn === "emitter.onFlex" || e.fn === "emitter.offDyn" ||
|
|
4721
4940
|
e.fn === "emitter.onData" || e.fn === "emitter.onDataDyn" ||
|
|
4722
4941
|
e.fn === "emitter.removeAll" || e.fn === "emitter.setMax" ||
|
|
4723
4942
|
e.fn === "emitter.setMaxChk") {
|
|
@@ -4764,7 +4983,12 @@ function validateFunction(fn, functions, ffiByName, classes, records, unions, gl
|
|
|
4764
4983
|
err(`libCall emitter.listeners must return a func array`, e.loc);
|
|
4765
4984
|
break;
|
|
4766
4985
|
}
|
|
4767
|
-
if (e.fn === "emitter.
|
|
4986
|
+
if (e.fn === "emitter.emitFlex") {
|
|
4987
|
+
if (e.args.slice(2).some((arg) => arg.type.kind !== "dyn")) {
|
|
4988
|
+
err("libCall emitter.emitFlex payloads must be checked-dynamic", e.loc);
|
|
4989
|
+
}
|
|
4990
|
+
}
|
|
4991
|
+
if (e.fn === "emitter.emit" || e.fn === "emitter.emitFlex" || e.fn === "emitter.count" ||
|
|
4768
4992
|
e.fn === "emitter.getMax" || e.fn === "emitter.ctor" ||
|
|
4769
4993
|
e.fn === "emitter.countFn" || e.fn === "emitter.emitError") {
|
|
4770
4994
|
if (!typeEquals(e.type, sig.result)) {
|