@scriptc/compiler 0.3.5 → 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 +278 -32
- package/dist/backend/llvm/dyn.js +31 -1
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emitter.d.ts +45 -1
- package/dist/backend/llvm/emitter.js +412 -104
- package/dist/backend/llvm/emitter.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 +11 -0
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/lib-dispatch.js +28 -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 +10 -0
- package/dist/backend/llvm/lib-process.js.map +1 -1
- package/dist/backend/llvm/lib-shared.js +43 -0
- 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/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/record-results.d.ts +1 -1
- package/dist/backend/llvm/record-results.js +2 -2
- package/dist/backend/llvm/record-results.js.map +1 -1
- 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 +3 -0
- package/dist/backend/llvm/shapes.js +5 -0
- package/dist/backend/llvm/shapes.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/may-throw.js +2 -0
- package/dist/backend/may-throw.js.map +1 -1
- package/dist/backend/native/executable.js +3 -0
- 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-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 +15 -6
- 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 +10 -0
- package/dist/frontend/lowering/builtin-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/callable-aliases.js +31 -3
- package/dist/frontend/lowering/builtins/callable-aliases.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 +4 -0
- package/dist/frontend/lowering/builtins/filesystem-calls.js +11 -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 +139 -2
- package/dist/frontend/lowering/builtins/filesystem.js.map +1 -1
- 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 +13 -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-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/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/divergences.js +188 -15
- package/dist/frontend/lowering/divergences.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.js +71 -22
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.js +39 -1
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-event-emitter.js +10 -1
- package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.js +107 -13
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-inspect.js +23 -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.js +161 -16
- package/dist/frontend/lowering/lower-server.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.js +48 -7
- 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 +317 -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 +10 -0
- package/dist/frontend/lowering/lowerer.js +8 -0
- 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/surfaces.d.ts +3 -3
- package/dist/frontend/lowering/surfaces.js +27 -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.js +95 -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/builtin-effects.js +36 -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 +167 -6
- package/dist/ir/builtin-signatures.js.map +1 -1
- package/dist/ir/function-references.test.js +1 -0
- package/dist/ir/function-references.test.js.map +1 -1
- package/dist/ir/int32-slots.js +22 -0
- package/dist/ir/int32-slots.js.map +1 -1
- package/dist/ir/int32-slots.test.js +28 -0
- package/dist/ir/int32-slots.test.js.map +1 -1
- package/dist/ir/integer-loop-facts.d.ts +14 -6
- package/dist/ir/integer-loop-facts.js +119 -35
- package/dist/ir/integer-loop-facts.js.map +1 -1
- package/dist/ir/integer-ranges.js +1 -5
- package/dist/ir/integer-ranges.js.map +1 -1
- package/dist/ir/integer-ranges.test.js +60 -0
- package/dist/ir/integer-ranges.test.js.map +1 -1
- package/dist/ir/ir.d.ts +13 -0
- package/dist/ir/ir.js +4 -0
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/runtime-features.d.ts +3 -1
- package/dist/ir/runtime-features.js +96 -6
- 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 +45 -3
- package/dist/ir/validate.js.map +1 -1
- package/dist/ir/validate.test.js +38 -0
- package/dist/ir/validate.test.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 +31 -19
|
@@ -246,10 +246,46 @@ function cleanupCall(lowerer, node, value, awaited) {
|
|
|
246
246
|
}
|
|
247
247
|
return null;
|
|
248
248
|
}
|
|
249
|
-
|
|
249
|
+
/** The statements that dispose `value` at scope exit. `setup` receives
|
|
250
|
+
* the statements that run at the declaration, after the value is bound. */
|
|
251
|
+
function cleanupForValue(lowerer, node, value, awaited, setup) {
|
|
250
252
|
const loc = locOf(node);
|
|
251
253
|
if (isUnitType(value.type))
|
|
252
254
|
return [];
|
|
255
|
+
if (value.type.kind === "dyn") {
|
|
256
|
+
// A dyn value (an object literal, a Disposable-typed result): the
|
|
257
|
+
// declaration reads and checks its dispose method, and scope exit
|
|
258
|
+
// calls it with the value as `this`.
|
|
259
|
+
const method = lowerer.declareHiddenLocal("%dispose", DYN);
|
|
260
|
+
setup.push({
|
|
261
|
+
kind: "varDecl",
|
|
262
|
+
localId: method.id,
|
|
263
|
+
init: {
|
|
264
|
+
kind: "libCall",
|
|
265
|
+
fn: "dyn.usingMethod",
|
|
266
|
+
args: [value, { kind: "boolLit", value: awaited, type: BOOL, loc }],
|
|
267
|
+
type: DYN,
|
|
268
|
+
loc,
|
|
269
|
+
},
|
|
270
|
+
loc,
|
|
271
|
+
});
|
|
272
|
+
const call = {
|
|
273
|
+
kind: "libCall",
|
|
274
|
+
fn: "dyn.usingDispose",
|
|
275
|
+
args: [{ kind: "varRef", localId: method.id, type: DYN, loc }, value],
|
|
276
|
+
type: DYN,
|
|
277
|
+
loc,
|
|
278
|
+
};
|
|
279
|
+
return [
|
|
280
|
+
{
|
|
281
|
+
kind: "exprStmt",
|
|
282
|
+
expr: awaited
|
|
283
|
+
? { kind: "libCall", fn: "async.awaitDyn", args: [call], type: DYN, loc }
|
|
284
|
+
: call,
|
|
285
|
+
loc,
|
|
286
|
+
},
|
|
287
|
+
];
|
|
288
|
+
}
|
|
253
289
|
if (value.type.kind === "union") {
|
|
254
290
|
const def = lowerer.unions.get(value.type.unionId);
|
|
255
291
|
if (!def)
|
|
@@ -267,7 +303,9 @@ function cleanupForValue(lowerer, node, value, awaited) {
|
|
|
267
303
|
type: arm,
|
|
268
304
|
loc,
|
|
269
305
|
};
|
|
270
|
-
|
|
306
|
+
if (arm.kind === "dyn")
|
|
307
|
+
lowerer.unsupported("SC1090", node, "disposing a union with an 'unknown' arm");
|
|
308
|
+
const body = cleanupForValue(lowerer, node, narrowed, awaited, setup);
|
|
271
309
|
out.push({
|
|
272
310
|
kind: "if",
|
|
273
311
|
cond: {
|
|
@@ -333,8 +371,9 @@ function lowerUsingStatement(lowerer, stmt) {
|
|
|
333
371
|
if (!binding)
|
|
334
372
|
throw new InternalCompilerError("lowerer bug: using declaration has no runtime binding");
|
|
335
373
|
const value = varRef(binding.id, binding.type, locOf(decl.name));
|
|
336
|
-
const
|
|
337
|
-
|
|
374
|
+
const setup = [];
|
|
375
|
+
const cleanup = cleanupForValue(lowerer, decl.name, value, awaited, setup);
|
|
376
|
+
registrations.push({ acquire: [acquire, ...setup], cleanup, loc: locOf(decl) });
|
|
338
377
|
}
|
|
339
378
|
return registrations;
|
|
340
379
|
}
|
|
@@ -461,8 +500,8 @@ export function lowerStmts(lowerer, stmts) {
|
|
|
461
500
|
const registrations = lowerUsingStatement(lowerer, stmt);
|
|
462
501
|
const accounting = [];
|
|
463
502
|
for (const registration of registrations) {
|
|
464
|
-
out.push(registration.acquire);
|
|
465
|
-
accounting.push(registration.acquire, ...registration.cleanup);
|
|
503
|
+
out.push(...registration.acquire);
|
|
504
|
+
accounting.push(...registration.acquire, ...registration.cleanup);
|
|
466
505
|
if (registration.cleanup.length > 0) {
|
|
467
506
|
usingMarkers.push({
|
|
468
507
|
start: out.length,
|
|
@@ -7394,8 +7433,10 @@ export function lowerForOf(lowerer, stmt) {
|
|
|
7394
7433
|
if (!resourceLoop)
|
|
7395
7434
|
return forValues(local.id, body);
|
|
7396
7435
|
const resource = varRef(local.id, local.type, locOf(decl.name));
|
|
7397
|
-
const
|
|
7436
|
+
const setup = [];
|
|
7437
|
+
const cleanup = cleanupForValue(lowerer, decl.name, resource, isAwaitUsing(list), setup);
|
|
7398
7438
|
return forValues(local.id, [
|
|
7439
|
+
...setup,
|
|
7399
7440
|
{
|
|
7400
7441
|
kind: "tryCatch",
|
|
7401
7442
|
tryBody: body,
|