@scriptc/compiler 0.2.1 → 0.2.2
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 +59 -4
- package/dist/backend/llvm/dyn.d.ts +3 -0
- package/dist/backend/llvm/dyn.js +84 -12
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emitter.d.ts +4 -1
- package/dist/backend/llvm/emitter.js +20 -5
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/emitter.test.js +9 -1
- package/dist/backend/llvm/emitter.test.js.map +1 -1
- package/dist/backend/llvm/expr-containers.js +5 -0
- package/dist/backend/llvm/expr-containers.js.map +1 -1
- package/dist/backend/llvm/expr-dynamic.js +30 -5
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.js +70 -9
- package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
- package/dist/backend/llvm/expr-stream-callbacks.d.ts +2 -2
- package/dist/backend/llvm/expr-stream-callbacks.js +7 -57
- package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
- package/dist/backend/llvm/lib-dispatch.js +41 -3
- package/dist/backend/llvm/lib-dispatch.js.map +1 -1
- package/dist/backend/llvm/lib-filesystem.js +12 -9
- package/dist/backend/llvm/lib-filesystem.js.map +1 -1
- package/dist/backend/llvm/lib-shared.js +35 -1
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/may-throw.js +4 -0
- package/dist/backend/may-throw.js.map +1 -1
- package/dist/backend/native-codegen.d.ts +1 -1
- package/dist/backend/native-codegen.js +4 -3
- package/dist/backend/native-codegen.js.map +1 -1
- package/dist/backend/native-codegen.test.js +11 -0
- package/dist/backend/native-codegen.test.js.map +1 -1
- package/dist/backend/target-diagnostics.d.ts +5 -0
- package/dist/backend/target-diagnostics.js +72 -1
- package/dist/backend/target-diagnostics.js.map +1 -1
- package/dist/backend/target-diagnostics.test.d.ts +1 -0
- package/dist/backend/target-diagnostics.test.js +68 -0
- package/dist/backend/target-diagnostics.test.js.map +1 -0
- package/dist/coverage/surface-manifest.js +5 -3
- package/dist/coverage/surface-manifest.js.map +1 -1
- package/dist/executable/executable-cache.d.ts +7 -3
- package/dist/executable/executable-cache.js +47 -11
- package/dist/executable/executable-cache.js.map +1 -1
- package/dist/executable/executable-cache.test.js +109 -2
- package/dist/executable/executable-cache.test.js.map +1 -1
- package/dist/executable/prepare.js +2 -1
- package/dist/executable/prepare.js.map +1 -1
- package/dist/frontend/builtin-modules.d.ts +1 -1
- package/dist/frontend/builtin-modules.js +1 -1
- package/dist/frontend/builtin-modules.js.map +1 -1
- package/dist/frontend/function-completion.d.ts +6 -0
- package/dist/frontend/function-completion.js +50 -0
- package/dist/frontend/function-completion.js.map +1 -0
- package/dist/frontend/lowering/abstract-equality.js +5 -1
- package/dist/frontend/lowering/abstract-equality.js.map +1 -1
- package/dist/frontend/lowering/checked-iterable-spread.d.ts +4 -0
- package/dist/frontend/lowering/checked-iterable-spread.js +30 -0
- package/dist/frontend/lowering/checked-iterable-spread.js.map +1 -0
- package/dist/frontend/lowering/checked-promise-all.d.ts +5 -0
- package/dist/frontend/lowering/checked-promise-all.js +31 -0
- package/dist/frontend/lowering/checked-promise-all.js.map +1 -0
- package/dist/frontend/lowering/class-callbacks.d.ts +1 -1
- package/dist/frontend/lowering/class-callbacks.js +7 -6
- package/dist/frontend/lowering/class-callbacks.js.map +1 -1
- package/dist/frontend/lowering/class-construction.d.ts +2 -0
- package/dist/frontend/lowering/class-construction.js +34 -5
- package/dist/frontend/lowering/class-construction.js.map +1 -1
- package/dist/frontend/lowering/class-descriptors.d.ts +1 -1
- package/dist/frontend/lowering/class-descriptors.js +12 -5
- package/dist/frontend/lowering/class-descriptors.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +25 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.js +597 -78
- package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.test.js +64 -2
- package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -1
- package/dist/frontend/lowering/class-instance-constructor.d.ts +1 -1
- package/dist/frontend/lowering/class-instance-constructor.js +11 -41
- package/dist/frontend/lowering/class-instance-constructor.js.map +1 -1
- package/dist/frontend/lowering/class-method-values.d.ts +16 -0
- package/dist/frontend/lowering/class-method-values.js +60 -29
- package/dist/frontend/lowering/class-method-values.js.map +1 -1
- package/dist/frontend/lowering/class-prototypes.d.ts +5 -1
- package/dist/frontend/lowering/class-prototypes.js +69 -10
- package/dist/frontend/lowering/class-prototypes.js.map +1 -1
- package/dist/frontend/lowering/class-runtime-statics.d.ts +4 -4
- package/dist/frontend/lowering/class-runtime-statics.js +26 -8
- package/dist/frontend/lowering/class-runtime-statics.js.map +1 -1
- package/dist/frontend/lowering/class-static-data.d.ts +1 -0
- package/dist/frontend/lowering/class-static-data.js +4 -2
- package/dist/frontend/lowering/class-static-data.js.map +1 -1
- package/dist/frontend/lowering/containers/bytes.js +17 -4
- package/dist/frontend/lowering/containers/bytes.js.map +1 -1
- package/dist/frontend/lowering/containers/string-and-regexp.js +6 -1
- package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
- package/dist/frontend/lowering/deferred-module-initializers.d.ts +13 -0
- package/dist/frontend/lowering/deferred-module-initializers.js +410 -0
- package/dist/frontend/lowering/deferred-module-initializers.js.map +1 -0
- package/dist/frontend/lowering/deferred-module-initializers.test.d.ts +1 -0
- package/dist/frontend/lowering/deferred-module-initializers.test.js +92 -0
- package/dist/frontend/lowering/deferred-module-initializers.test.js.map +1 -0
- package/dist/frontend/lowering/expressions/object-literals.js +31 -1
- package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/optional-chains.js +3 -3
- package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
- package/dist/frontend/lowering/lower-builtins.d.ts +4 -9
- package/dist/frontend/lowering/lower-builtins.js +291 -51
- package/dist/frontend/lowering/lower-builtins.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.js +283 -73
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.d.ts +5 -0
- package/dist/frontend/lowering/lower-classes.js +439 -25
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-containers.d.ts +1 -1
- package/dist/frontend/lowering/lower-containers.js +39 -17
- package/dist/frontend/lowering/lower-containers.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.d.ts +10 -6
- package/dist/frontend/lowering/lower-exprs.js +294 -129
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-generators.js +5 -1
- package/dist/frontend/lowering/lower-generators.js.map +1 -1
- package/dist/frontend/lowering/lower-inspect.js +15 -1
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-island.js +4 -0
- package/dist/frontend/lowering/lower-island.js.map +1 -1
- package/dist/frontend/lowering/lower-island.test.d.ts +1 -0
- package/dist/frontend/lowering/lower-island.test.js +51 -0
- package/dist/frontend/lowering/lower-island.test.js.map +1 -0
- package/dist/frontend/lowering/lower-modules.d.ts +1 -3
- package/dist/frontend/lowering/lower-modules.js +186 -82
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.test.js +69 -1
- package/dist/frontend/lowering/lower-modules.test.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.js +100 -35
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.test.d.ts +1 -0
- package/dist/frontend/lowering/lower-stmts.test.js +77 -0
- package/dist/frontend/lowering/lower-stmts.test.js.map +1 -0
- package/dist/frontend/lowering/lower-stream.js +2 -0
- package/dist/frontend/lowering/lower-stream.js.map +1 -1
- package/dist/frontend/lowering/lower-url.d.ts +2 -1
- package/dist/frontend/lowering/lower-url.js +32 -9
- package/dist/frontend/lowering/lower-url.js.map +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +26 -9
- package/dist/frontend/lowering/lowerer.js +218 -27
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/lowerer.test.js +38 -0
- package/dist/frontend/lowering/lowerer.test.js.map +1 -1
- package/dist/frontend/lowering/module-namespace-elements.d.ts +7 -0
- package/dist/frontend/lowering/module-namespace-elements.js +54 -0
- package/dist/frontend/lowering/module-namespace-elements.js.map +1 -0
- package/dist/frontend/lowering/object-factory-new.d.ts +4 -3
- package/dist/frontend/lowering/object-factory-new.js +27 -14
- package/dist/frontend/lowering/object-factory-new.js.map +1 -1
- package/dist/frontend/lowering/surfaces.d.ts +1 -0
- package/dist/frontend/lowering/surfaces.js +24 -12
- package/dist/frontend/lowering/surfaces.js.map +1 -1
- package/dist/frontend/lowering/text-decoder-encoding.js +3 -0
- package/dist/frontend/lowering/text-decoder-encoding.js.map +1 -1
- package/dist/frontend/lowering/text-decoder-encoding.test.js +2 -1
- package/dist/frontend/lowering/text-decoder-encoding.test.js.map +1 -1
- package/dist/frontend/program.js +4 -2
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/type-mapper.js +83 -14
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/frontend/union-discriminants.js +22 -7
- package/dist/frontend/union-discriminants.js.map +1 -1
- package/dist/index.js +16 -10
- package/dist/index.js.map +1 -1
- package/dist/ir/ir.d.ts +27 -13
- package/dist/ir/ir.js +26 -2
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/serialize.js +21 -1
- package/dist/ir/serialize.js.map +1 -1
- package/dist/ir/serialize.test.js +21 -0
- package/dist/ir/serialize.test.js.map +1 -1
- package/dist/ir/traverse.d.ts +0 -3
- package/dist/ir/traverse.js +33 -20
- package/dist/ir/traverse.js.map +1 -1
- package/dist/ir/validate.js +56 -5
- package/dist/ir/validate.js.map +1 -1
- package/dist/ir/validate.test.js +17 -1
- package/dist/ir/validate.test.js.map +1 -1
- package/dist/library/compiler-self-identity.js +1 -1
- package/dist/library/compiler-self-identity.test.js +2 -2
- package/dist/library/compiler-self-identity.test.js.map +1 -1
- package/dist/library/int-infer.d.ts +2 -2
- package/dist/library/int-infer.js +10 -7
- package/dist/library/int-infer.js.map +1 -1
- package/dist/library/int-infer.test.js +44 -0
- package/dist/library/int-infer.test.js.map +1 -1
- package/dist/library/prepare.js +2 -1
- package/dist/library/prepare.js.map +1 -1
- package/package.json +20 -20
- package/surface-manifest.json +115 -13
|
@@ -34,7 +34,7 @@ export declare function lowerArrayConstructor(lowerer: Lowerer, expr: ts.CallExp
|
|
|
34
34
|
export declare function lowerArrayOfCall(lowerer: Lowerer, call: ts.CallExpression, access: ts.PropertyAccessExpression): IrExpr | null;
|
|
35
35
|
/** Mapper-less checked Array.from: acquire once, then step through emitted
|
|
36
36
|
* property and call dispatch so native class iterators retain their methods. */
|
|
37
|
-
export declare function lowerCheckedArrayFrom(lowerer: Lowerer, source: IrExpr, loc: SrcLoc, mapper?: IrExpr, receiver?: IrExpr, numeric?: boolean): Extract<IrExpr, {
|
|
37
|
+
export declare function lowerCheckedArrayFrom(lowerer: Lowerer, source: IrExpr, loc: SrcLoc, mapper?: IrExpr, receiver?: IrExpr, numeric?: boolean, iterable?: IrExpr): Extract<IrExpr, {
|
|
38
38
|
kind: "seqExpr";
|
|
39
39
|
}>;
|
|
40
40
|
export declare function lowerArrayFromValue(lowerer: Lowerer, loc: SrcLoc): IrExpr;
|
|
@@ -6,7 +6,7 @@ import { InternalCompilerError } from "../../errors.js";
|
|
|
6
6
|
* record operations. */
|
|
7
7
|
import * as ts from "../ts7/adapter.js";
|
|
8
8
|
import { BOOL, CAUGHT, DYN, F64, JSVAL, STRING, UNDEFINED_T, VOID, arrayOf, funcOf, isRefCounted, isSupportedArrayElem, isSupportedIndexValue, isUnitType, typeEquals } from "../../ir/ir.js";
|
|
9
|
-
import { ARRAY_METHODS, MAP_METHODS, SET_COMBINE_METHODS, SET_METHODS } from "./surfaces.js";
|
|
9
|
+
import { ARRAY_METHODS, COLLECTION_ITERATOR_METHODS, MAP_METHODS, SET_COMBINE_METHODS, SET_METHODS } from "./surfaces.js";
|
|
10
10
|
import { tryLowerExpression } from "./expressions/try-lower-expression.js";
|
|
11
11
|
import { forOfVarTarget, lowerDestructuringAssign } from "./lower-stmts.js";
|
|
12
12
|
import { isJsSourceFile, locOf } from "../program.js";
|
|
@@ -2808,6 +2808,14 @@ export function lowerArrayConstructor(lowerer, expr, args) {
|
|
|
2808
2808
|
lowerer.noLowering("Array constructor with spread arguments", expr);
|
|
2809
2809
|
}
|
|
2810
2810
|
let result = lowerer.mapTypeOf(lowerer.typeOf(expr));
|
|
2811
|
+
// Constructors without a concrete element layout keep their checked
|
|
2812
|
+
// reference. Known element forms retain native arrays, including their
|
|
2813
|
+
// existing sparse storage and indexed property contracts.
|
|
2814
|
+
if (!lowerer.dynamic && isJsSourceFile(expr.getSourceFile()) &&
|
|
2815
|
+
(result?.kind !== "array" || result.elem.kind === "dyn")) {
|
|
2816
|
+
return { kind: "dynCall", callee: { kind: "libCall", fn: "dyn.arrayConstructor", args: [], type: DYN, loc },
|
|
2817
|
+
calleeName: "Array", args: args.map((arg) => lowerer.lowerExprExpecting(arg, DYN)), type: DYN, loc };
|
|
2818
|
+
}
|
|
2811
2819
|
if (result?.kind !== "array") {
|
|
2812
2820
|
const contextual = lowerer.checker.getContextualType(expr);
|
|
2813
2821
|
if (contextual)
|
|
@@ -2896,7 +2904,7 @@ export function lowerArrayOfCall(lowerer, call, access) {
|
|
|
2896
2904
|
}
|
|
2897
2905
|
/** Mapper-less checked Array.from: acquire once, then step through emitted
|
|
2898
2906
|
* property and call dispatch so native class iterators retain their methods. */
|
|
2899
|
-
export function lowerCheckedArrayFrom(lowerer, source, loc, mapper, receiver, numeric = false) {
|
|
2907
|
+
export function lowerCheckedArrayFrom(lowerer, source, loc, mapper, receiver, numeric = false, iterable) {
|
|
2900
2908
|
const iterator = lowerer.declareHiddenLocal("%fromIterator", DYN);
|
|
2901
2909
|
const next = lowerer.declareHiddenLocal("%fromNext", DYN);
|
|
2902
2910
|
const step = lowerer.declareHiddenLocal("%fromStep", DYN);
|
|
@@ -2931,7 +2939,7 @@ export function lowerCheckedArrayFrom(lowerer, source, loc, mapper, receiver, nu
|
|
|
2931
2939
|
{ kind: "exprStmt", expr: nodeThrowExpr(1, "", "Array.from mapper is not a function", DYN, loc), loc },
|
|
2932
2940
|
], loc },
|
|
2933
2941
|
], loc }] : []),
|
|
2934
|
-
{ kind: "varDecl", localId: iterator.id, init: { kind: "libCall", fn: "dyn.iteratorResult", args: [{ kind: "libCall", fn: "dyn.arrayFromIterator", args: [source], type: DYN, loc }], type: DYN, loc }, loc },
|
|
2942
|
+
{ kind: "varDecl", localId: iterator.id, init: { kind: "libCall", fn: "dyn.iteratorResult", args: [{ kind: "libCall", fn: iterable ? "dyn.iterator" : "dyn.arrayFromIterator", args: iterable ? [source, iterable] : [source], type: DYN, loc }], type: DYN, loc }, loc },
|
|
2935
2943
|
{ kind: "varDecl", localId: next.id, init: get(varRef(iterator.id, DYN, loc), "next"), loc },
|
|
2936
2944
|
{ kind: "varDecl", localId: out.id, init: { kind: "dynArrLit", elems: [], type: DYN, loc }, loc },
|
|
2937
2945
|
{ kind: "varDecl", localId: done.id, init: boolLit(false, loc), loc },
|
|
@@ -3314,7 +3322,7 @@ export function lowerMapMethodCall(lowerer, call, access) {
|
|
|
3314
3322
|
if (lowerer.chainBlocked(access, call))
|
|
3315
3323
|
return null;
|
|
3316
3324
|
const name = access.name.text;
|
|
3317
|
-
if (!MAP_METHODS.has(name)
|
|
3325
|
+
if (!MAP_METHODS.has(name))
|
|
3318
3326
|
return null;
|
|
3319
3327
|
let receiverIr = lowerer.mapTypeOf(lowerer.typeOf(access.expression));
|
|
3320
3328
|
let probedUntyped = false;
|
|
@@ -3370,31 +3378,39 @@ export function lowerMapMethodCall(lowerer, call, access) {
|
|
|
3370
3378
|
if (name === "clear") {
|
|
3371
3379
|
return { kind: "mapIntrinsic", method: "clear", receiver, args: [], type: VOID, loc };
|
|
3372
3380
|
}
|
|
3373
|
-
if (
|
|
3381
|
+
if (COLLECTION_ITERATOR_METHODS.has(name)) {
|
|
3374
3382
|
return lowerMapIterDrainCall(lowerer, call, receiver, receiverIr, name);
|
|
3375
3383
|
}
|
|
3376
3384
|
// forEach
|
|
3377
3385
|
return lowerMapForEachCall(lowerer, call, receiver, receiverIr, probedUntyped);
|
|
3378
3386
|
}
|
|
3379
|
-
/**
|
|
3380
|
-
|
|
3387
|
+
/** Stored collection iterators retain the native collection by reference. The
|
|
3388
|
+
* checked-value runtime supplies the live cursor without embedding an engine. */
|
|
3389
|
+
function lowerCollectionIteratorCall(lowerer, call, receiver, method) {
|
|
3390
|
+
const access = call.expression;
|
|
3391
|
+
if (!ts.isPropertyAccessExpression(access))
|
|
3392
|
+
throw new InternalCompilerError("collection iterator requires a member call");
|
|
3393
|
+
const boxed = lowerer.coerceInto(access.expression, receiver, DYN);
|
|
3394
|
+
const result = lowerDynDispatchMethodCall(lowerer, call, access, boxed, false);
|
|
3395
|
+
if (!result)
|
|
3396
|
+
throw new InternalCompilerError(`missing collection iterator dispatch: ${method}`);
|
|
3397
|
+
return result;
|
|
3398
|
+
}
|
|
3381
3399
|
/** `[...m.keys()]` / `[...m.values()]` / `[...m.entries()]` — the iterator
|
|
3382
|
-
* methods
|
|
3400
|
+
* methods use an optimized drain as the operand of a spread inside an array
|
|
3383
3401
|
* literal, where JS drains the iterator on the spot. The call desugars to
|
|
3384
3402
|
* a direct call of a synthetic drain function whose loop walks the same
|
|
3385
3403
|
* iteration primitives as the forEach desugar and pushes each live entry
|
|
3386
3404
|
* into a fresh array — key, value, or `[K, V]` tuple record per method.
|
|
3387
3405
|
* No user code runs mid-drain (and nothing here mutates the map), so no
|
|
3388
3406
|
* compaction can shift indices: the enter/exit bracket is unnecessary and
|
|
3389
|
-
* the snapshot IS what JS's immediate drain observes.
|
|
3390
|
-
*
|
|
3391
|
-
* iterator value — fenced with the spread spelling as the hint. */
|
|
3407
|
+
* the snapshot IS what JS's immediate drain observes. Other contexts keep
|
|
3408
|
+
* a live iterator through the native checked-value runtime. */
|
|
3392
3409
|
function lowerMapIterDrainCall(lowerer, call, receiver, mapT, method) {
|
|
3393
3410
|
const loc = locOf(call);
|
|
3394
3411
|
const inArraySpread = ts.isSpreadElement(call.parent) && ts.isArrayLiteralExpression(call.parent.parent);
|
|
3395
|
-
if (!inArraySpread)
|
|
3396
|
-
lowerer
|
|
3397
|
-
}
|
|
3412
|
+
if (!inArraySpread)
|
|
3413
|
+
return lowerCollectionIteratorCall(lowerer, call, receiver, method);
|
|
3398
3414
|
// The pushed element type. For entries the checker's own element type —
|
|
3399
3415
|
// the [K, V] tuple behind MapIterator<[K, V]> — carries the interned
|
|
3400
3416
|
// tuple shape the surrounding literal will intern too.
|
|
@@ -3747,6 +3763,9 @@ export function lowerSetMethodCall(lowerer, call, access) {
|
|
|
3747
3763
|
if (name === "forEach" && call.arguments.length !== 1) {
|
|
3748
3764
|
lowerer.noLowering(`.forEach with ${call.arguments.length} arguments`, call, "the thisArg parameter has no lowering — use an arrow function");
|
|
3749
3765
|
}
|
|
3766
|
+
if (COLLECTION_ITERATOR_METHODS.has(name)) {
|
|
3767
|
+
return lowerCollectionIteratorCall(lowerer, call, receiver, name);
|
|
3768
|
+
}
|
|
3750
3769
|
if (SET_COMBINE_METHODS.has(name)) {
|
|
3751
3770
|
return lowerSetCombineCall(lowerer, call, name, receiver, receiverIr);
|
|
3752
3771
|
}
|
|
@@ -5351,8 +5370,8 @@ export function lowerSetSeedNew(lowerer, node, setT) {
|
|
|
5351
5370
|
(source.type.kind === "dyn" || source.type.kind === "jsval")) {
|
|
5352
5371
|
source = lowerer.coerceInto(node, source, STRING);
|
|
5353
5372
|
}
|
|
5354
|
-
if (
|
|
5355
|
-
return { kind: "dynCheck", value: { kind: "libCall", fn: "dyn.nativeSetNew", args: [source], type: DYN, loc }, type: setT, loc };
|
|
5373
|
+
if (setT.elem.kind === "dyn" && lowerer.dynConvertible(source.type)) {
|
|
5374
|
+
return { kind: "dynCheck", value: { kind: "libCall", fn: "dyn.nativeSetNew", args: [lowerer.coerceInto(node, source, DYN)], type: DYN, loc }, type: setT, loc };
|
|
5356
5375
|
}
|
|
5357
5376
|
if (declared?.kind === "array" && typeEquals(declared.elem, setT.elem)) {
|
|
5358
5377
|
// Preserve the existing checked scalar-iterable bridge. Reference
|
|
@@ -5546,7 +5565,7 @@ function mapFromSeedValue(lowerer, seed, mapT) {
|
|
|
5546
5565
|
return { kind: "call", callee: name, args: [seed], type: mapT, loc };
|
|
5547
5566
|
}
|
|
5548
5567
|
if (seed.type.kind === "dyn" || seed.type.kind === "array" &&
|
|
5549
|
-
(seed.type.elem.kind === "
|
|
5568
|
+
!(seed.type.elem.kind === "record" && lowerer.shapes.get(seed.type.elem.shapeId)?.tuple)) {
|
|
5550
5569
|
const key = `checked-seed:${typeKey(mapT)}`;
|
|
5551
5570
|
let name = lowerer.mapHofHelpers.get(key);
|
|
5552
5571
|
if (!name) {
|
|
@@ -5901,6 +5920,9 @@ function lowerTypedObjectFromEntriesCall(lowerer, call, callee) {
|
|
|
5901
5920
|
const argIr = lowerer.mapTypeOf(lowerer.typeOf(argNode));
|
|
5902
5921
|
if (argIr?.kind !== "array")
|
|
5903
5922
|
return null;
|
|
5923
|
+
const represented = tryLowerExpression(lowerer, argNode);
|
|
5924
|
+
if (represented && !typeEquals(represented.type, argIr))
|
|
5925
|
+
return null;
|
|
5904
5926
|
// `Object.fromEntries(rows)` over a `string[][]` VALUE — the env-line
|
|
5905
5927
|
// idiom (`envArray.map((env) => env.split('='))`). The checker has no
|
|
5906
5928
|
// tuple to type here (string[] misses the lib's [PropertyKey, T]
|