@scriptc/compiler 0.4.3 → 0.4.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 +73 -29
- package/dist/backend/llvm/bytes-loop-versions.js +6 -0
- package/dist/backend/llvm/bytes-loop-versions.js.map +1 -1
- package/dist/backend/llvm/bytes-loop-versions.test.js +7 -2
- package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -1
- package/dist/backend/llvm/debug-info.js +2 -5
- package/dist/backend/llvm/debug-info.js.map +1 -1
- package/dist/backend/llvm/dyn.d.ts +4 -0
- package/dist/backend/llvm/dyn.js +21 -9
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emit-function.js +2 -8
- package/dist/backend/llvm/emit-function.js.map +1 -1
- package/dist/backend/llvm/emit-module.js +16 -6
- package/dist/backend/llvm/emit-module.js.map +1 -1
- package/dist/backend/llvm/emitter.d.ts +10 -0
- package/dist/backend/llvm/emitter.js +9 -5
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/emitter.test.js +11 -2
- package/dist/backend/llvm/emitter.test.js.map +1 -1
- package/dist/backend/llvm/expr-async.js +11 -13
- package/dist/backend/llvm/expr-async.js.map +1 -1
- package/dist/backend/llvm/expr-bytes.js +14 -8
- package/dist/backend/llvm/expr-bytes.js.map +1 -1
- package/dist/backend/llvm/expr-containers.js +14 -0
- package/dist/backend/llvm/expr-containers.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.js +20 -11
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.js +16 -4
- package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
- package/dist/backend/llvm/integer-values.d.ts +5 -0
- package/dist/backend/llvm/integer-values.js +27 -3
- package/dist/backend/llvm/integer-values.js.map +1 -1
- package/dist/backend/llvm/lib-dispatch.js +133 -3
- package/dist/backend/llvm/lib-dispatch.js.map +1 -1
- package/dist/backend/llvm/lib-process.js +37 -1
- package/dist/backend/llvm/lib-process.js.map +1 -1
- package/dist/backend/llvm/lib-shared.js +21 -0
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/publish.js +3 -3
- package/dist/backend/llvm/publish.js.map +1 -1
- package/dist/backend/llvm/reference-effects.js +3 -0
- package/dist/backend/llvm/reference-effects.js.map +1 -1
- package/dist/backend/llvm/shapes.js +2 -7
- package/dist/backend/llvm/shapes.js.map +1 -1
- package/dist/backend/llvm/stack-captures.js +1 -5
- package/dist/backend/llvm/stack-captures.js.map +1 -1
- package/dist/backend/llvm/union-repr.d.ts +4 -3
- package/dist/backend/llvm/union-repr.js +6 -5
- package/dist/backend/llvm/union-repr.js.map +1 -1
- package/dist/backend/llvm/walkers.js +13 -0
- package/dist/backend/llvm/walkers.js.map +1 -1
- package/dist/backend/native-codegen-core.d.ts +5 -3
- package/dist/backend/native-codegen-core.js +13 -6
- package/dist/backend/native-codegen-core.js.map +1 -1
- package/dist/backend/native-codegen.test.js +6 -4
- package/dist/backend/native-codegen.test.js.map +1 -1
- package/dist/backend/target-cpu.d.ts +26 -0
- package/dist/backend/target-cpu.js +98 -0
- package/dist/backend/target-cpu.js.map +1 -0
- package/dist/backend/target-cpu.test.d.ts +1 -0
- package/dist/backend/target-cpu.test.js +38 -0
- package/dist/backend/target-cpu.test.js.map +1 -0
- package/dist/cli/command.js +20 -1
- package/dist/cli/command.js.map +1 -1
- package/dist/cli/usage.d.ts +4 -1
- package/dist/cli/usage.js +7 -0
- package/dist/cli/usage.js.map +1 -1
- package/dist/compile-types.d.ts +7 -0
- package/dist/diagnostics/diagnostic.js +1 -1
- 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 +2 -0
- package/dist/executable/executable-cache.test.js.map +1 -1
- package/dist/frontend/decl-projection.js +105 -10
- package/dist/frontend/decl-projection.js.map +1 -1
- package/dist/frontend/lowering/builtins/async-context.d.ts +8 -2
- package/dist/frontend/lowering/builtins/async-context.js +62 -3
- package/dist/frontend/lowering/builtins/async-context.js.map +1 -1
- package/dist/frontend/lowering/builtins/crypto.js +3 -1
- package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
- package/dist/frontend/lowering/builtins/dates.js +4 -1
- package/dist/frontend/lowering/builtins/dates.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem-calls.js +3 -3
- package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/fs-glob.js +6 -3
- package/dist/frontend/lowering/builtins/fs-glob.js.map +1 -1
- package/dist/frontend/lowering/builtins/fs-paths.d.ts +43 -5
- package/dist/frontend/lowering/builtins/fs-paths.js +245 -93
- package/dist/frontend/lowering/builtins/fs-paths.js.map +1 -1
- package/dist/frontend/lowering/builtins/module-calls.js +6 -3
- package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/promises.d.ts +1 -1
- package/dist/frontend/lowering/builtins/promises.js +149 -138
- package/dist/frontend/lowering/builtins/promises.js.map +1 -1
- package/dist/frontend/lowering/call-signatures.js +0 -1
- package/dist/frontend/lowering/call-signatures.js.map +1 -1
- package/dist/frontend/lowering/cjs-exports-object.js +1 -1
- package/dist/frontend/lowering/cjs-exports-object.js.map +1 -1
- package/dist/frontend/lowering/cjs-inline-require.d.ts +32 -0
- package/dist/frontend/lowering/cjs-inline-require.js +307 -4
- package/dist/frontend/lowering/cjs-inline-require.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +10 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.js +114 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/class-method-mutations.js +54 -18
- package/dist/frontend/lowering/class-method-mutations.js.map +1 -1
- package/dist/frontend/lowering/class-protocols.d.ts +25 -0
- package/dist/frontend/lowering/class-protocols.js +183 -1
- package/dist/frontend/lowering/class-protocols.js.map +1 -1
- package/dist/frontend/lowering/completion-callbacks.d.ts +4 -0
- package/dist/frontend/lowering/completion-callbacks.js +146 -0
- package/dist/frontend/lowering/completion-callbacks.js.map +1 -0
- package/dist/frontend/lowering/containers/array-callbacks.d.ts +5 -4
- package/dist/frontend/lowering/containers/array-callbacks.js +7 -6
- package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
- package/dist/frontend/lowering/containers/array-construction.js +5 -0
- package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
- package/dist/frontend/lowering/containers/array-methods.js +11 -3
- package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/bytes.d.ts +25 -17
- package/dist/frontend/lowering/containers/bytes.js +453 -45
- package/dist/frontend/lowering/containers/bytes.js.map +1 -1
- package/dist/frontend/lowering/date-values.d.ts +11 -0
- package/dist/frontend/lowering/date-values.js +207 -0
- package/dist/frontend/lowering/date-values.js.map +1 -0
- package/dist/frontend/lowering/expressions/array-literals.js +6 -0
- package/dist/frontend/lowering/expressions/array-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/binary.js +64 -26
- package/dist/frontend/lowering/expressions/binary.js.map +1 -1
- package/dist/frontend/lowering/expressions/element-access.js +79 -0
- package/dist/frontend/lowering/expressions/element-access.js.map +1 -1
- package/dist/frontend/lowering/expressions/identifiers.js +31 -1
- package/dist/frontend/lowering/expressions/identifiers.js.map +1 -1
- package/dist/frontend/lowering/expressions/property-access.js +56 -0
- package/dist/frontend/lowering/expressions/property-access.js.map +1 -1
- package/dist/frontend/lowering/expressions/typeof.js +6 -0
- package/dist/frontend/lowering/expressions/typeof.js.map +1 -1
- package/dist/frontend/lowering/expressions/updates.js +17 -0
- package/dist/frontend/lowering/expressions/updates.js.map +1 -1
- package/dist/frontend/lowering/function-returns.js +15 -0
- package/dist/frontend/lowering/function-returns.js.map +1 -1
- package/dist/frontend/lowering/indexed-unions.d.ts +54 -0
- package/dist/frontend/lowering/indexed-unions.js +401 -0
- package/dist/frontend/lowering/indexed-unions.js.map +1 -0
- package/dist/frontend/lowering/key-order-witness.js +210 -32
- package/dist/frontend/lowering/key-order-witness.js.map +1 -1
- package/dist/frontend/lowering/key-order-witness.test.js +104 -4
- package/dist/frontend/lowering/key-order-witness.test.js.map +1 -1
- package/dist/frontend/lowering/lower-assert.js +15 -3
- package/dist/frontend/lowering/lower-assert.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.js +19 -3
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.js +22 -47
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.js +205 -1
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-generators.js +1 -1
- package/dist/frontend/lowering/lower-generators.js.map +1 -1
- package/dist/frontend/lowering/lower-inspect.d.ts +1 -1
- package/dist/frontend/lowering/lower-inspect.js +35 -11
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.js +21 -5
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.js +100 -34
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +30 -2
- package/dist/frontend/lowering/lowerer.js +68 -7
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/object-factory-new.d.ts +5 -0
- package/dist/frontend/lowering/object-factory-new.js +20 -6
- package/dist/frontend/lowering/object-factory-new.js.map +1 -1
- package/dist/frontend/lowering/overload-choice.d.ts +33 -0
- package/dist/frontend/lowering/overload-choice.js +190 -0
- package/dist/frontend/lowering/overload-choice.js.map +1 -0
- package/dist/frontend/lowering/surfaces.js +55 -2
- package/dist/frontend/lowering/surfaces.js.map +1 -1
- package/dist/frontend/pipeline.js +1 -1
- package/dist/frontend/pipeline.js.map +1 -1
- package/dist/frontend/program-analysis.d.ts +5 -1
- package/dist/frontend/program-analysis.js +5 -0
- package/dist/frontend/program-analysis.js.map +1 -1
- package/dist/frontend/program.d.ts +13 -5
- package/dist/frontend/program.js +197 -14
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/ts7/semantic-model.d.ts +3 -0
- package/dist/frontend/ts7/semantic-model.js +5 -0
- package/dist/frontend/ts7/semantic-model.js.map +1 -1
- package/dist/frontend/ts7/semantic-model.test.js +6 -1
- package/dist/frontend/ts7/semantic-model.test.js.map +1 -1
- package/dist/frontend/ts7/semantic-types.d.ts +1 -1
- package/dist/frontend/ts7/semantic-types.js +1 -1
- package/dist/frontend/ts7/semantic-types.js.map +1 -1
- package/dist/frontend/type-mapper.js +45 -16
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -1
- package/dist/ir/builtin-effects.js +8 -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 +56 -0
- package/dist/ir/builtin-signatures.js.map +1 -1
- package/dist/ir/int32-slots.js +7 -0
- package/dist/ir/int32-slots.js.map +1 -1
- package/dist/ir/int32-slots.test.js +33 -0
- package/dist/ir/int32-slots.test.js.map +1 -1
- package/dist/ir/integer-loops.js +14 -4
- package/dist/ir/integer-loops.js.map +1 -1
- package/dist/ir/ir.d.ts +13 -3
- package/dist/ir/ir.js +19 -5
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/ir.test.js +2 -1
- package/dist/ir/ir.test.js.map +1 -1
- package/dist/ir/js-ic.d.ts +2 -15
- package/dist/ir/js-ic.js +11 -79
- package/dist/ir/js-ic.js.map +1 -1
- package/dist/ir/js-ic.test.js +0 -142
- package/dist/ir/js-ic.test.js.map +1 -1
- package/dist/ir/runtime-features.js +25 -1
- package/dist/ir/runtime-features.js.map +1 -1
- package/dist/ir/validate.js +46 -5
- package/dist/ir/validate.js.map +1 -1
- package/dist/library/ir-policy.js +1 -0
- package/dist/library/ir-policy.js.map +1 -1
- package/dist/native/prepare.d.ts +1 -1
- package/dist/native/prepare.js +11 -1
- package/dist/native/prepare.js.map +1 -1
- package/dist/native/prepare.test.js +18 -2
- package/dist/native/prepare.test.js.map +1 -1
- package/package.json +20 -20
- package/surface-manifest.json +2 -4
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { lowerTupleAliasDecl, stripTypeWrappers } from "./typed-arguments.js";
|
|
2
|
+
import { allBytesArms, indexedUnionArms, lowerIndexedUnionMember, lowerIndexedUnionNumberRead, lowerIndexedUnionRead, } from "./indexed-unions.js";
|
|
2
3
|
import { declaredMemberOf, isPromisePrototypeRead } from "./expressions/property-access.js";
|
|
3
4
|
import { hostsAll } from "./expressions/hosted-narrowing.js";
|
|
4
5
|
import { requestGeneralStreamSurface } from "./general-streams.js";
|
|
@@ -26,15 +27,16 @@ import { lowerOptionalIndex } from "./undefined-index.js";
|
|
|
26
27
|
import { processDataMemberValue, programReadsExitCode } from "./builtins/process.js";
|
|
27
28
|
import { requireInitFlagStmt } from "./require-initialization.js";
|
|
28
29
|
import { isJsonRequireDecl } from "./json-require.js";
|
|
30
|
+
import { isTimeValueDateDeclaration } from "./date-values.js";
|
|
29
31
|
import { bindingSource } from "../binding-source.js";
|
|
30
32
|
import { lowerConstructorReturn } from "./constructor-returns.js";
|
|
31
|
-
import { cjsExportValueByName, cjsNamespaceDestructureOf, cjsTableMethodEntry, inlineProgramRequireOf, requireNestedPatternsOf, } from "./cjs-inline-require.js";
|
|
33
|
+
import { cjsExportValueByName, cjsNamespaceDestructureOf, cjsTableMethodEntry, inlineProgramRequireOf, requireNestedPatternsOf, splitRequireAssignmentOf, splitRequireBindingOf, splitRequireBindingOfIdent, splitRequireEarlyReadOf, wholeExportSymbolOfModule, } from "./cjs-inline-require.js";
|
|
32
34
|
import { cjsExportMemberWriteGlobalOf, isCjsExportsIdentifier, isCjsModuleExports, isFreshExportsReset, } from "./cjs-exports-object.js";
|
|
33
35
|
import { isDeadTscHelperDecl, tscInteropBindingOfDecl } from "./cjs-tsc-interop.js";
|
|
34
36
|
import { arrayValueRead, arrayValueStore, arrayValueType, unionArrayValueRead, lowerSafeIndexRead, } from "./array-values.js";
|
|
35
37
|
import { lowerForAwaitGenerator, lowerForOfGenerator, lowerYieldStarStatement, } from "./lower-generators.js";
|
|
36
38
|
import { classAsyncGeneratorIterator, lowerForAwaitBuiltin } from "./lower-async-iteration.js";
|
|
37
|
-
import { BOOL, BYTES_U8, CAUGHT, DYN, F64, SEARCH_PARAMS_T, STRING, UNDEFINED_T, VOID, arrayOf, isDynTypedRefType, isUnitType, shapeHasAccessorSlots, typeEquals, } from "../../ir/ir.js";
|
|
39
|
+
import { BOOL, BYTES_U8, CAUGHT, DATE_T, DYN, F64, SEARCH_PARAMS_T, STRING, UNDEFINED_T, VOID, arrayOf, isDynTypedRefType, isUnitType, shapeHasAccessorSlots, typeEquals, } from "../../ir/ir.js";
|
|
38
40
|
import { PoisonError, boundIdentifiersOf, dynFallbackType, neverTaintedJsType, staticImportNamespaceType, } from "./lowerer.js";
|
|
39
41
|
import { enforceLibBoundary, lowerSurplusCalls } from "./lib-boundary.js";
|
|
40
42
|
import { cjsExportAssignmentOf, cjsExportChainOf, cjsVoidInitPreambleReals, cjsExportDiscardReason, cjsExportTargetLiteral, isCjsJsFile, isEsModuleStamp, isJsSourceFile, locOf, requireEarlyReference, requireSpecOf, } from "../program.js";
|
|
@@ -1662,6 +1664,19 @@ export function lowerVarStatement(lowerer, stmt) {
|
|
|
1662
1664
|
});
|
|
1663
1665
|
}
|
|
1664
1666
|
function lowerVarDeclarator(lowerer, stmt, decl, isConst, isLet) {
|
|
1667
|
+
// `var m; m = require("./x")`: the declaration is alias plumbing; the
|
|
1668
|
+
// assignment owns the module's run-once %init (cjs-inline-require.ts).
|
|
1669
|
+
// A read that code before the assignment can reach keeps Node's hoisted
|
|
1670
|
+
// `undefined` divergence visible at build time, like a var require
|
|
1671
|
+
// declaration below runnable code.
|
|
1672
|
+
const split = splitRequireBindingOf(lowerer, decl);
|
|
1673
|
+
if (split !== null) {
|
|
1674
|
+
const early = splitRequireEarlyReadOf(lowerer, split);
|
|
1675
|
+
if (early !== null) {
|
|
1676
|
+
lowerer.unsupported("SC1013", early, `var require() binding '${decl.name.text}' below code that can reach it (Node reads undefined before the require runs, which is not modeled — assign the require above the code that can run first)`);
|
|
1677
|
+
}
|
|
1678
|
+
return [];
|
|
1679
|
+
}
|
|
1665
1680
|
// The canonical ESM bridge to a compiled program module. Like a
|
|
1666
1681
|
// top-level CommonJS require declaration, the binding is alias
|
|
1667
1682
|
// plumbing while the dependency evaluates at this statement's
|
|
@@ -4535,6 +4550,15 @@ export function lowerVarDecl(lowerer, decl, isLet) {
|
|
|
4535
4550
|
if (alias)
|
|
4536
4551
|
return alias;
|
|
4537
4552
|
}
|
|
4553
|
+
// A Date local whose identity no use observes stores its time value.
|
|
4554
|
+
if (isTimeValueDateDeclaration(lowerer, decl)) {
|
|
4555
|
+
const loc = locOf(decl);
|
|
4556
|
+
const date = lowerer.lowerExprExpecting(decl.initializer, DATE_T);
|
|
4557
|
+
const local = lowerer.declareLocal(decl.name, decl.name.text, F64, isLet);
|
|
4558
|
+
lowerer.timeValueDateLocals.add(local);
|
|
4559
|
+
const init = { kind: "libCall", fn: "date.getTime", args: [date], type: F64, loc };
|
|
4560
|
+
return { kind: "varDecl", localId: local.id, init, loc };
|
|
4561
|
+
}
|
|
4538
4562
|
// A NULLISH generic binding (`const i: I<A & B> = null as any` — the
|
|
4539
4563
|
// declared type has no mapping, the value is provably null/undefined
|
|
4540
4564
|
// forever): no storage exists; reads know the value (member reads and
|
|
@@ -5833,7 +5857,7 @@ function lowerDynSwitch(lowerer, stmt, disc, labels) {
|
|
|
5833
5857
|
loc: locOf(expression),
|
|
5834
5858
|
};
|
|
5835
5859
|
}
|
|
5836
|
-
if (
|
|
5860
|
+
if (!lowerer.dynConvertible(test.type)) {
|
|
5837
5861
|
lowerer.unsupported("SC1100", expression, "switch case values that cannot compare strictly with 'unknown'");
|
|
5838
5862
|
}
|
|
5839
5863
|
return {
|
|
@@ -6411,6 +6435,22 @@ function lowerCjsSingleValueExport(lowerer, expr, loc) {
|
|
|
6411
6435
|
return lowerer.requireInitStmt(req.spec, req.call) ?? { kind: "block", body: [], loc };
|
|
6412
6436
|
}
|
|
6413
6437
|
if (ts.isIdentifier(rhs)) {
|
|
6438
|
+
const split = splitRequireBindingOfIdent(lowerer, rhs);
|
|
6439
|
+
if (split !== null) {
|
|
6440
|
+
if (wholeExportSymbolOfModule(lowerer, split.dep) === null) {
|
|
6441
|
+
lowerer.unsupported("SC1090", rhs, `the exports object of '${split.spec}' as a value (its exports compile to a static table: read require(${JSON.stringify(split.spec)}).member directly)`);
|
|
6442
|
+
}
|
|
6443
|
+
const root = lowerer.globalsByDeclNode.get(expr);
|
|
6444
|
+
if (root !== undefined) {
|
|
6445
|
+
return {
|
|
6446
|
+
kind: "assign",
|
|
6447
|
+
localId: root.id,
|
|
6448
|
+
value: lowerer.lowerExprExpecting(rhs, root.type),
|
|
6449
|
+
loc: locOf(rhs),
|
|
6450
|
+
};
|
|
6451
|
+
}
|
|
6452
|
+
return { kind: "block", body: [], loc };
|
|
6453
|
+
}
|
|
6414
6454
|
const sym = lowerer.resolveValueSymbol(rhs);
|
|
6415
6455
|
if (!sym)
|
|
6416
6456
|
return null;
|
|
@@ -7213,6 +7253,14 @@ export function lowerExprStatement(lowerer, expr) {
|
|
|
7213
7253
|
if (!ts.isIdentifier(expr.left)) {
|
|
7214
7254
|
lowerer.unsupported("SC1090", expr.left, "assignment to non-variables");
|
|
7215
7255
|
}
|
|
7256
|
+
const splitAssign = splitRequireAssignmentOf(lowerer, expr);
|
|
7257
|
+
if (splitAssign !== null) {
|
|
7258
|
+
return (lowerer.requireInitStmt(splitAssign.spec, splitAssign.call) ?? {
|
|
7259
|
+
kind: "block",
|
|
7260
|
+
body: [],
|
|
7261
|
+
loc: locOf(expr),
|
|
7262
|
+
});
|
|
7263
|
+
}
|
|
7216
7264
|
const target = lowerer.resolveWritable(expr.left);
|
|
7217
7265
|
if (!target)
|
|
7218
7266
|
lowerer.rejectUnresolved(expr.left, `assignment to '${expr.left.text}' (not a writable local or module global)`);
|
|
@@ -7498,7 +7546,9 @@ function destrSpellingOf(rhs) {
|
|
|
7498
7546
|
return base === null ? null : `${base}.${e.name.text}`;
|
|
7499
7547
|
}
|
|
7500
7548
|
// `table[key]` and `list[0]`; V8 prints a numeric key in its canonical
|
|
7501
|
-
// number form (`o[1.50]` reads "o[1.5]")
|
|
7549
|
+
// number form (`o[1.50]` reads "o[1.5]"), and a string key as a property
|
|
7550
|
+
// name with its text decoded (`o["a.b"]` and `o[\`a.b\`]` read "o.a.b").
|
|
7551
|
+
// The message is a C string, so a key holding NUL keeps the refusal.
|
|
7502
7552
|
if (ts.isElementAccessExpression(e) && !e.questionDotToken) {
|
|
7503
7553
|
const base = destrSpellingOf(e.expression);
|
|
7504
7554
|
const key = e.argumentExpression;
|
|
@@ -7508,6 +7558,9 @@ function destrSpellingOf(rhs) {
|
|
|
7508
7558
|
return `${base}[${key.text}]`;
|
|
7509
7559
|
if (ts.isNumericLiteral(key))
|
|
7510
7560
|
return `${base}[${String(Number(key.text))}]`;
|
|
7561
|
+
if ((ts.isStringLiteral(key) || ts.isNoSubstitutionTemplateLiteral(key)) &&
|
|
7562
|
+
!key.text.includes("\0"))
|
|
7563
|
+
return `${base}.${key.text}`;
|
|
7511
7564
|
return null;
|
|
7512
7565
|
}
|
|
7513
7566
|
if (ts.isCallExpression(e) && !e.questionDotToken) {
|
|
@@ -8667,7 +8720,7 @@ export function lowerForOf(lowerer, stmt) {
|
|
|
8667
8720
|
loc: locOf(iterSrc),
|
|
8668
8721
|
};
|
|
8669
8722
|
}
|
|
8670
|
-
if (iterable.type.kind === "bytes") {
|
|
8723
|
+
if (iterable.type.kind === "bytes" || indexedUnionArms(lowerer, iterable.type)) {
|
|
8671
8724
|
return lowerForOfBytes(lowerer, stmt, iterable, labels);
|
|
8672
8725
|
}
|
|
8673
8726
|
if (iterable.type.kind !== "array") {
|
|
@@ -9242,40 +9295,53 @@ function lowerForOfStoredNumericIterator(lowerer, stmt, state, labels) {
|
|
|
9242
9295
|
lowerer.unsupported("SC1031", decl.name);
|
|
9243
9296
|
const loc = locOf(stmt);
|
|
9244
9297
|
const sourceT = state.sourceType;
|
|
9245
|
-
|
|
9298
|
+
// A union of typed arrays and number arrays (indexed-unions.ts) reads
|
|
9299
|
+
// through its arms' own length and element reads.
|
|
9300
|
+
const unionArms = indexedUnionArms(lowerer, sourceT);
|
|
9301
|
+
if (!((sourceT.kind === "array" && sourceT.elem.kind === "f64") ||
|
|
9302
|
+
sourceT.kind === "bytes" ||
|
|
9303
|
+
unionArms)) {
|
|
9246
9304
|
throw new InternalCompilerError("internal: retained numeric iterator has a non-numeric source");
|
|
9247
9305
|
}
|
|
9248
9306
|
const indexRef = () => varRef(state.indexLocalId, F64, loc);
|
|
9249
9307
|
const doneRef = () => varRef(state.doneLocalId, BOOL, loc);
|
|
9250
9308
|
const sourceRef = () => varRef(state.sourceLocalId, sourceT, loc);
|
|
9251
|
-
const sourceLength = () =>
|
|
9252
|
-
?
|
|
9253
|
-
|
|
9254
|
-
|
|
9255
|
-
|
|
9256
|
-
|
|
9257
|
-
|
|
9258
|
-
|
|
9259
|
-
|
|
9260
|
-
|
|
9261
|
-
|
|
9262
|
-
|
|
9263
|
-
|
|
9264
|
-
|
|
9265
|
-
|
|
9266
|
-
|
|
9267
|
-
|
|
9268
|
-
|
|
9269
|
-
|
|
9270
|
-
|
|
9271
|
-
|
|
9272
|
-
|
|
9273
|
-
|
|
9274
|
-
|
|
9275
|
-
|
|
9276
|
-
|
|
9277
|
-
|
|
9278
|
-
|
|
9309
|
+
const sourceLength = () => unionArms
|
|
9310
|
+
? lowerIndexedUnionMember(lowerer, sourceRef(), unionArms, "length", loc)
|
|
9311
|
+
: sourceT.kind === "array"
|
|
9312
|
+
? {
|
|
9313
|
+
kind: "arrIntrinsic",
|
|
9314
|
+
method: "length",
|
|
9315
|
+
receiver: sourceRef(),
|
|
9316
|
+
args: [],
|
|
9317
|
+
type: F64,
|
|
9318
|
+
loc,
|
|
9319
|
+
}
|
|
9320
|
+
: {
|
|
9321
|
+
kind: "bytesIntrinsic",
|
|
9322
|
+
method: "length",
|
|
9323
|
+
receiver: sourceRef(),
|
|
9324
|
+
args: [],
|
|
9325
|
+
type: F64,
|
|
9326
|
+
loc,
|
|
9327
|
+
};
|
|
9328
|
+
const valueT = sourceT.kind === "array" || (unionArms && !allBytesArms(unionArms))
|
|
9329
|
+
? arrayValueType(lowerer, F64)
|
|
9330
|
+
: F64;
|
|
9331
|
+
const sourceValue = () => unionArms
|
|
9332
|
+
? allBytesArms(unionArms)
|
|
9333
|
+
? lowerIndexedUnionNumberRead(lowerer, sourceRef(), unionArms, indexRef(), loc)
|
|
9334
|
+
: lowerIndexedUnionRead(lowerer, sourceRef(), unionArms, indexRef(), loc)
|
|
9335
|
+
: sourceT.kind === "array"
|
|
9336
|
+
? arrayValueRead(lowerer, sourceRef(), indexRef(), F64, loc)
|
|
9337
|
+
: {
|
|
9338
|
+
kind: "bytesIntrinsic",
|
|
9339
|
+
method: "get",
|
|
9340
|
+
receiver: sourceRef(),
|
|
9341
|
+
args: [indexRef()],
|
|
9342
|
+
type: F64,
|
|
9343
|
+
loc,
|
|
9344
|
+
};
|
|
9279
9345
|
const one = { kind: "numLit", value: 1, type: F64, loc };
|
|
9280
9346
|
lowerer.scopes.push(new Map());
|
|
9281
9347
|
try {
|