@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,3 +1,4 @@
|
|
|
1
|
+
import { lowerAsyncLocalStorageOptions } from "./builtins/async-context.js";
|
|
1
2
|
import { DATE_TIME_FIELD, dateRootOf, dateSuperCall, isDatePrototypeMethod, lowerDateSuperMethodCall, } from "./builtins/date-classes.js";
|
|
2
3
|
import { predeclareForwardClass } from "./lower-stmts.js";
|
|
3
4
|
import { lowerDateStaticCall } from "./builtins/dates.js";
|
|
@@ -25,7 +26,7 @@ import { lowerZlibStreamNew, zlibClassName, zlibStreamModeOf } from "./builtins/
|
|
|
25
26
|
import { everyStmtList } from "../../ir/traverse.js";
|
|
26
27
|
import { builtinClassAliasOf, builtinClassRefOf, } from "./builtins/class-values.js";
|
|
27
28
|
import { inlineNamespaceRequireOf, lowerWithInlineRequireInit } from "./cjs-inline-require.js";
|
|
28
|
-
import { BOOL, canDynCheckTo, DATE_T, DYN, F64,
|
|
29
|
+
import { BOOL, canDynCheckTo, DATE_T, DYN, F64, RUNTIME_EMITTER_CLASS, RUNTIME_ERROR_CLASSES, RUNTIME_STREAM_CLASSES, STRING, classValueConstructor, UNDEFINED_T, VOID, arrayOf, isSupportedMapKey, isSupportedMapValue, isSupportedSetElem, isUnitType, typeEquals, } from "../../ir/ir.js";
|
|
29
30
|
import { genericCallInstance, implicitAnyParamSymbolsOf, implicitCallInstance, implicitMonoFile, genericLocalClassResult, } from "./generic-functions.js";
|
|
30
31
|
import { extendInstantiationPath, MAX_INSTANTIATION_RECURSION, } from "./instantiation-path.js";
|
|
31
32
|
import { appendImplicitUndefinedReturn, hasExplicitJsDocReturn } from "./function-returns.js";
|
|
@@ -41,8 +42,7 @@ import { isCjsRequireGlobal } from "./lower-node-module.js";
|
|
|
41
42
|
import { lowerArrayConstructor } from "./containers/array-construction.js";
|
|
42
43
|
import { lowerMapSeedNew, lowerSetSeedNew } from "./containers/collection-methods.js";
|
|
43
44
|
import { lowerObjectConstructor } from "./containers/indexed-objects.js";
|
|
44
|
-
import { knownBufEncoding,
|
|
45
|
-
import { isSafeToRepeat } from "./expressions/evaluation-safety.js";
|
|
45
|
+
import { knownBufEncoding, lowerBufferConstruct } from "./containers/bytes.js";
|
|
46
46
|
import { lowerSearchParamsNew } from "./builtins/url.js";
|
|
47
47
|
import { lowerTextCodecNew } from "./builtins/text-codecs.js";
|
|
48
48
|
import { lowerBroadcastChannelNew, lowerMessageChannelNew, lowerWorkerNew, } from "./builtins/workers.js";
|
|
@@ -891,7 +891,7 @@ function undefArmedFieldType(lowerer, p) {
|
|
|
891
891
|
const byKey = new Map();
|
|
892
892
|
const arms = mapped.kind === "union" ? (lowerer.unions.get(mapped.unionId)?.arms ?? []) : [mapped];
|
|
893
893
|
for (const a of arms) {
|
|
894
|
-
if (a.kind === "map" || a.kind === "regex" || a.kind === "
|
|
894
|
+
if (a.kind === "map" || a.kind === "regex" || a.kind === "generator") {
|
|
895
895
|
return null;
|
|
896
896
|
}
|
|
897
897
|
byKey.set(typeKey(a), a);
|
|
@@ -3042,7 +3042,6 @@ mixin) {
|
|
|
3042
3042
|
declared.kind !== "union" &&
|
|
3043
3043
|
declared.kind !== "dyn" &&
|
|
3044
3044
|
declared.kind !== "map" &&
|
|
3045
|
-
declared.kind !== "date" &&
|
|
3046
3045
|
declared.kind !== "generator" &&
|
|
3047
3046
|
declared.kind !== "void" &&
|
|
3048
3047
|
declared.kind !== "caught";
|
|
@@ -8247,9 +8246,9 @@ function isCollectionOrErrorClass(ref) {
|
|
|
8247
8246
|
}
|
|
8248
8247
|
export function lowerNew(lowerer, expr) {
|
|
8249
8248
|
const loc = locOf(expr);
|
|
8250
|
-
//
|
|
8249
|
+
// The deprecated `new Buffer(...)` (containers/bytes.ts).
|
|
8251
8250
|
{
|
|
8252
|
-
const buffer =
|
|
8251
|
+
const buffer = lowerBufferConstruct(lowerer, expr);
|
|
8253
8252
|
if (buffer)
|
|
8254
8253
|
return buffer;
|
|
8255
8254
|
}
|
|
@@ -8825,8 +8824,10 @@ export function lowerNew(lowerer, expr) {
|
|
|
8825
8824
|
if (arg.type.kind === "string") {
|
|
8826
8825
|
return { kind: "libCall", fn: "date.newString", args: [arg], type: DATE_T, loc };
|
|
8827
8826
|
}
|
|
8827
|
+
// new Date(date): a new Date object with the same time value.
|
|
8828
8828
|
if (arg.type.kind === "date") {
|
|
8829
|
-
|
|
8829
|
+
const time = { kind: "libCall", fn: "date.getTime", args: [arg], type: F64, loc };
|
|
8830
|
+
return { kind: "libCall", fn: "date.newMs", args: [time], type: DATE_T, loc };
|
|
8830
8831
|
}
|
|
8831
8832
|
lowerer.noLowering(`new Date of '${lowerer.fmt(arg.type)}' values`, args[0], "pass milliseconds, a date string, or another Date value", symbol);
|
|
8832
8833
|
}
|
|
@@ -9005,7 +9006,7 @@ export function lowerNew(lowerer, expr) {
|
|
|
9005
9006
|
if (targs[1]) {
|
|
9006
9007
|
lowerer.unsupported("SC1090", expr, `Map values of type '${lowerer.checker.typeToString(targs[1])}' ` +
|
|
9007
9008
|
`(Map values must be number, string, boolean, records, class instances, functions, ` +
|
|
9008
|
-
`typed arrays, arrays, promises, Maps, Sets, or supported unions and checked values)`);
|
|
9009
|
+
`typed arrays, arrays, promises, Dates, Maps, Sets, or supported unions and checked values)`);
|
|
9009
9010
|
}
|
|
9010
9011
|
lowerer.badType(expr, tsType);
|
|
9011
9012
|
}
|
|
@@ -9123,15 +9124,21 @@ export function lowerNew(lowerer, expr) {
|
|
|
9123
9124
|
lowerer.badType(expr, tsType);
|
|
9124
9125
|
}
|
|
9125
9126
|
// `new AsyncLocalStorage()` (node:async_hooks): a fresh store id —
|
|
9126
|
-
// an f64 handle (type-mapper.ts), the Channel story.
|
|
9127
|
-
// ({ defaultValue, name })
|
|
9127
|
+
// an f64 handle (type-mapper.ts), the Channel story. The options form
|
|
9128
|
+
// ({ defaultValue, name }) passes the options object as a dyn value.
|
|
9128
9129
|
if (symbol !== null &&
|
|
9129
9130
|
ts.symbolName(symbol) === "AsyncLocalStorage" &&
|
|
9130
9131
|
lowerer.isStdlibSymbol(symbol)) {
|
|
9131
|
-
|
|
9132
|
-
|
|
9133
|
-
|
|
9134
|
-
return {
|
|
9132
|
+
const options = expr.arguments?.nodes[0];
|
|
9133
|
+
if (options === undefined)
|
|
9134
|
+
return { kind: "libCall", fn: "als.new", args: [], type: F64, loc };
|
|
9135
|
+
return {
|
|
9136
|
+
kind: "libCall",
|
|
9137
|
+
fn: "als.newOptions",
|
|
9138
|
+
args: [lowerAsyncLocalStorageOptions(lowerer, options)],
|
|
9139
|
+
type: F64,
|
|
9140
|
+
loc,
|
|
9141
|
+
};
|
|
9135
9142
|
}
|
|
9136
9143
|
// `new Promise<T>((resolve) => ...)`: the ambient Promise constructor.
|
|
9137
9144
|
if (symbol !== null && ts.symbolName(symbol) === "Promise" && lowerer.isStdlibSymbol(symbol)) {
|
|
@@ -9201,38 +9208,6 @@ export function lowerNew(lowerer, expr) {
|
|
|
9201
9208
|
// families carry pointed hints: each states WHY no honest static
|
|
9202
9209
|
// lowering exists (or what to use instead).
|
|
9203
9210
|
if (lowerer.isStdlibSymbol(symbol ?? undefined)) {
|
|
9204
|
-
// The deprecated `new Buffer(string, encoding?)` ctor's string arm
|
|
9205
|
-
// with a NON-STRING first argument and a string second: Node
|
|
9206
|
-
// throws ERR_INVALID_ARG_TYPE synchronously (and DEP0005 never
|
|
9207
|
-
// fires on this throwing path, so the compiled silence matches).
|
|
9208
|
-
// Every other new Buffer form keeps the fence below — the
|
|
9209
|
-
// constructing forms would owe the deprecation warning.
|
|
9210
|
-
if (expr.expression.text === "Buffer" &&
|
|
9211
|
-
expr.arguments?.nodes.length === 2 &&
|
|
9212
|
-
!expr.arguments.nodes.some(ts.isSpreadElement) &&
|
|
9213
|
-
lowerer.mapTypeOf(lowerer.typeOf(expr.arguments.nodes[0]))?.kind !== "string" &&
|
|
9214
|
-
lowerer.mapTypeOf(lowerer.typeOf(expr.arguments.nodes[1]))?.kind === "string") {
|
|
9215
|
-
const first = lowerer.lowerExpr(expr.arguments.nodes[0]);
|
|
9216
|
-
if (first.kind === "unitLit" ||
|
|
9217
|
-
first.type.kind === "dyn" ||
|
|
9218
|
-
lowerer.dynConvertible(first.type)) {
|
|
9219
|
-
const got = first.type.kind === "dyn" ? first : { kind: "dynFrom", value: first, type: DYN, loc };
|
|
9220
|
-
// The encoding argument still evaluates in Node before the
|
|
9221
|
-
// throw only via the ctor body's later reads — it does NOT
|
|
9222
|
-
// observe it before throwing, so dropping it is exact for
|
|
9223
|
-
// effect-free operands; effectful ones keep the fence.
|
|
9224
|
-
const enc = lowerer.lowerExpr(expr.arguments.nodes[1]);
|
|
9225
|
-
if (enc.kind === "strLit" || isSafeToRepeat(enc)) {
|
|
9226
|
-
return {
|
|
9227
|
-
kind: "libCall",
|
|
9228
|
-
fn: "buffer.newStringFail",
|
|
9229
|
-
args: [got],
|
|
9230
|
-
type: bytesOf("u8"),
|
|
9231
|
-
loc,
|
|
9232
|
-
};
|
|
9233
|
-
}
|
|
9234
|
-
}
|
|
9235
|
-
}
|
|
9236
9211
|
const ctorHints = {
|
|
9237
9212
|
RegExp: "use a regex literal (/pattern/flags) — constructed regexes have no lowering",
|
|
9238
9213
|
String: "boxed wrapper objects have no lowering — use the string primitive (the box is only distinguishable via typeof/identity, which nothing here can honor)",
|