Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 35 additions & 28 deletions src/compiler/checker.ts
Original file line number Diff line number Diff line change
@@ -13137,7 +13137,7 @@ namespace ts {
i--;
const t = types[i];
const remove =
t.flags & TypeFlags.StringLiteral && includes & TypeFlags.String ||
t.flags & TypeFlags.StringLikeLiteral && includes & TypeFlags.String ||
t.flags & TypeFlags.NumberLiteral && includes & TypeFlags.Number ||
t.flags & TypeFlags.BigIntLiteral && includes & TypeFlags.BigInt ||
t.flags & TypeFlags.UniqueESSymbol && includes & TypeFlags.ESSymbol ||
@@ -13184,7 +13184,7 @@ namespace ts {
}
switch (unionReduction) {
case UnionReduction.Literal:
if (includes & (TypeFlags.Literal | TypeFlags.UniqueESSymbol)) {
if (includes & (TypeFlags.FreshableLiteral | TypeFlags.UniqueESSymbol)) {
removeRedundantLiteralTypes(typeSet, includes);
}
if (includes & TypeFlags.StringLiteral && includes & TypeFlags.TemplateLiteral) {
@@ -13715,6 +13715,7 @@ namespace ts {
let type = templateLiteralTypes.get(id);
if (!type) {
templateLiteralTypes.set(id, type = createTemplateLiteralType(newTexts, newTypes));
type.regularType = type;
}
return type;

@@ -14753,26 +14754,28 @@ namespace ts {
}

function getFreshTypeOfLiteralType(type: Type): Type {
if (type.flags & TypeFlags.Literal) {
if (!(<LiteralType>type).freshType) {
const freshType = createLiteralType(type.flags, (<LiteralType>type).value, (<LiteralType>type).symbol);
freshType.regularType = <LiteralType>type;
if (type.flags & TypeFlags.FreshableLiteral) {
if (!(<FreshableLiteralType>type).freshType) {
const freshType = type.flags & TypeFlags.TemplateLiteral ?
createTemplateLiteralType((<TemplateLiteralType>type).texts, (<TemplateLiteralType>type).types) :
createLiteralType(type.flags, (<LiteralType>type).value, (<LiteralType>type).symbol);
freshType.regularType = <FreshableLiteralType>type;
freshType.freshType = freshType;
(<LiteralType>type).freshType = freshType;
(<FreshableLiteralType>type).freshType = freshType;
}
return (<LiteralType>type).freshType;
return (<FreshableLiteralType>type).freshType;
}
return type;
}

function getRegularTypeOfLiteralType(type: Type): Type {
return type.flags & TypeFlags.Literal ? (<LiteralType>type).regularType :
return type.flags & TypeFlags.FreshableLiteral ? (<FreshableLiteralType>type).regularType :
type.flags & TypeFlags.Union ? ((<UnionType>type).regularType || ((<UnionType>type).regularType = getUnionType(sameMap((<UnionType>type).types, getRegularTypeOfLiteralType)) as UnionType)) :
type;
}

function isFreshLiteralType(type: Type) {
return !!(type.flags & TypeFlags.Literal) && (<LiteralType>type).freshType === type;
return !!(type.flags & TypeFlags.FreshableLiteral) && (<FreshableLiteralType>type).freshType === type;
}

function getLiteralType(value: string): StringLiteralType;
@@ -17613,17 +17616,20 @@ namespace ts {
}
}
else if (source.flags & TypeFlags.TemplateLiteral) {
if (target.flags & TypeFlags.TemplateLiteral &&
(source as TemplateLiteralType).texts.length === (target as TemplateLiteralType).texts.length &&
(source as TemplateLiteralType).types.length === (target as TemplateLiteralType).types.length &&
every((source as TemplateLiteralType).texts, (t, i) => t === (target as TemplateLiteralType).texts[i]) &&
every((instantiateType(source, makeFunctionTypeMapper(reportUnreliableMarkers)) as TemplateLiteralType).types, (t, i) => !!((target as TemplateLiteralType).types[i].flags & (TypeFlags.Any | TypeFlags.String)) || !!isRelatedTo(t, (target as TemplateLiteralType).types[i], /*reportErrors*/ false))) {
return Ternary.True;
if (target.flags & TypeFlags.TemplateLiteral) {
if ((source as TemplateLiteralType).texts.length === (target as TemplateLiteralType).texts.length &&
(source as TemplateLiteralType).types.length === (target as TemplateLiteralType).types.length &&
every((source as TemplateLiteralType).texts, (t, i) => t === (target as TemplateLiteralType).texts[i]) &&
every((instantiateType(source, makeFunctionTypeMapper(reportUnreliableMarkers)) as TemplateLiteralType).types, (t, i) => !!((target as TemplateLiteralType).types[i].flags & (TypeFlags.Any | TypeFlags.String)) || !!isRelatedTo(t, (target as TemplateLiteralType).types[i], /*reportErrors*/ false))) {
return Ternary.True;
}
}
const constraint = getBaseConstraintOfType(source);
if (constraint && constraint !== source && (result = isRelatedTo(constraint, target, reportErrors))) {
resetErrorInfo(saveErrorInfo);
return result;
else {
const constraint = getBaseConstraintOfType(source);
if (result = isRelatedTo(constraint && constraint !== source ? constraint : stringType, target, reportErrors)) {
resetErrorInfo(saveErrorInfo);
return result;
}
}
}
else if (source.flags & TypeFlags.StringMapping) {
@@ -19100,7 +19106,7 @@ namespace ts {

function getBaseTypeOfLiteralType(type: Type): Type {
return type.flags & TypeFlags.EnumLiteral ? getBaseTypeOfEnumLiteralType(<LiteralType>type) :
type.flags & TypeFlags.StringLiteral ? stringType :
type.flags & TypeFlags.StringLikeLiteral ? stringType :
type.flags & TypeFlags.NumberLiteral ? numberType :
type.flags & TypeFlags.BigIntLiteral ? bigintType :
type.flags & TypeFlags.BooleanLiteral ? booleanType :
@@ -19110,7 +19116,7 @@ namespace ts {

function getWidenedLiteralType(type: Type): Type {
return type.flags & TypeFlags.EnumLiteral && isFreshLiteralType(type) ? getBaseTypeOfEnumLiteralType(<LiteralType>type) :
type.flags & TypeFlags.StringLiteral && isFreshLiteralType(type) ? stringType :
type.flags & TypeFlags.StringLikeLiteral && isFreshLiteralType(type) ? stringType :
type.flags & TypeFlags.NumberLiteral && isFreshLiteralType(type) ? numberType :
type.flags & TypeFlags.BigIntLiteral && isFreshLiteralType(type) ? bigintType :
type.flags & TypeFlags.BooleanLiteral && isFreshLiteralType(type) ? booleanType :
@@ -20611,7 +20617,7 @@ namespace ts {
}

function isTypeOrBaseIdenticalTo(s: Type, t: Type) {
return isTypeIdenticalTo(s, t) || !!(t.flags & TypeFlags.String && s.flags & TypeFlags.StringLiteral || t.flags & TypeFlags.Number && s.flags & TypeFlags.NumberLiteral);
return isTypeIdenticalTo(s, t) || !!(t.flags & TypeFlags.String && s.flags & TypeFlags.StringLikeLiteral || t.flags & TypeFlags.Number && s.flags & TypeFlags.NumberLiteral);
}

function isTypeCloselyMatchedBy(s: Type, t: Type) {
@@ -30753,7 +30759,7 @@ namespace ts {
texts.push(span.literal.text);
types.push(isTypeAssignableTo(type, templateConstraintType) ? type : stringType);
}
return isConstContext(node) ? getTemplateLiteralType(texts, types) : stringType;
return getFreshTypeOfLiteralType(getTemplateLiteralType(texts, types));
}

function getContextNode(node: Expression): Node {
@@ -30774,7 +30780,7 @@ namespace ts {
// We strip literal freshness when an appropriate contextual type is present such that contextually typed
// literals always preserve their literal types (otherwise they might widen during type inference). An alternative
// here would be to not mark contextually typed literals as fresh in the first place.
const result = maybeTypeOfKind(type, TypeFlags.Literal) && isLiteralOfContextualType(type, instantiateContextualType(contextualType, node)) ?
const result = maybeTypeOfKind(type, TypeFlags.FreshableLiteral) && isLiteralOfContextualType(type, instantiateContextualType(contextualType, node)) ?
getRegularTypeOfLiteralType(type) : type;
return result;
}
@@ -30864,15 +30870,15 @@ namespace ts {
// this a literal context for literals of that primitive type. For example, given a
// type parameter 'T extends string', infer string literal types for T.
const constraint = getBaseConstraintOfType(contextualType) || unknownType;
return maybeTypeOfKind(constraint, TypeFlags.String) && maybeTypeOfKind(candidateType, TypeFlags.StringLiteral) ||
return maybeTypeOfKind(constraint, TypeFlags.String) && maybeTypeOfKind(candidateType, TypeFlags.StringLikeLiteral) ||
maybeTypeOfKind(constraint, TypeFlags.Number) && maybeTypeOfKind(candidateType, TypeFlags.NumberLiteral) ||
maybeTypeOfKind(constraint, TypeFlags.BigInt) && maybeTypeOfKind(candidateType, TypeFlags.BigIntLiteral) ||
maybeTypeOfKind(constraint, TypeFlags.ESSymbol) && maybeTypeOfKind(candidateType, TypeFlags.UniqueESSymbol) ||
isLiteralOfContextualType(candidateType, constraint);
}
// If the contextual type is a literal of a particular primitive type, we consider this a
// literal context for all literals of that primitive type.
return !!(contextualType.flags & (TypeFlags.StringLiteral | TypeFlags.Index | TypeFlags.TemplateLiteral | TypeFlags.StringMapping) && maybeTypeOfKind(candidateType, TypeFlags.StringLiteral) ||
return !!(contextualType.flags & (TypeFlags.StringLikeLiteral | TypeFlags.Index | TypeFlags.StringMapping) && maybeTypeOfKind(candidateType, TypeFlags.StringLikeLiteral) ||
contextualType.flags & TypeFlags.NumberLiteral && maybeTypeOfKind(candidateType, TypeFlags.NumberLiteral) ||
contextualType.flags & TypeFlags.BigIntLiteral && maybeTypeOfKind(candidateType, TypeFlags.BigIntLiteral) ||
contextualType.flags & TypeFlags.BooleanLiteral && maybeTypeOfKind(candidateType, TypeFlags.BooleanLiteral) ||
@@ -38398,7 +38404,8 @@ namespace ts {

function isLiteralConstDeclaration(node: VariableDeclaration | PropertyDeclaration | PropertySignature | ParameterDeclaration): boolean {
if (isDeclarationReadonly(node) || isVariableDeclaration(node) && isVarConst(node)) {
return isFreshLiteralType(getTypeOfSymbol(getSymbolOfNode(node)));
const type = getTypeOfSymbol(getSymbolOfNode(node));
return !!(type.flags & TypeFlags.Literal) && isFreshLiteralType(type);
}
return false;
}
10 changes: 9 additions & 1 deletion src/compiler/types.ts
Original file line number Diff line number Diff line change
@@ -4895,6 +4895,10 @@ namespace ts {
Unit = Literal | UniqueESSymbol | Nullable,
StringOrNumberLiteral = StringLiteral | NumberLiteral,
/* @internal */
StringLikeLiteral = StringLiteral | TemplateLiteral,
/* @internal */
FreshableLiteral = Literal | TemplateLiteral,
/* @internal */
StringOrNumberLiteralOrUnique = StringLiteral | NumberLiteral | UniqueESSymbol,
/* @internal */
DefinitelyFalsy = StringLiteral | NumberLiteral | BigIntLiteral | BooleanLiteral | Void | Undefined | Null,
@@ -4988,7 +4992,9 @@ namespace ts {
}

/* @internal */
export type FreshableType = LiteralType | FreshableIntrinsicType;
export type FreshableLiteralType = LiteralType | TemplateLiteralType;
/* @internal */
export type FreshableType = FreshableLiteralType | FreshableIntrinsicType;

// String literal types (TypeFlags.StringLiteral)
// Numeric literal types (TypeFlags.NumberLiteral)
@@ -5386,6 +5392,8 @@ namespace ts {
export interface TemplateLiteralType extends InstantiableType {
texts: readonly string[]; // Always one element longer than types
types: readonly Type[]; // Always at least one element
freshType: TemplateLiteralType; // Fresh version of type
regularType: TemplateLiteralType; // Regular version of type
}

export interface StringMappingType extends InstantiableType {
2 changes: 1 addition & 1 deletion tests/baselines/reference/TemplateExpression1.types
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
=== tests/cases/conformance/es6/templates/TemplateExpression1.ts ===
var v = `foo ${ a
>v : string
>`foo ${ a : string
>`foo ${ a : `foo ${any}`
>a : any

2 changes: 1 addition & 1 deletion tests/baselines/reference/accessorsOverrideProperty2.types
Original file line number Diff line number Diff line change
@@ -22,7 +22,7 @@ class Derived extends Base {
>console.log : (...data: any[]) => void
>console : Console
>log : (...data: any[]) => void
>`x was set to ${value}` : string
>`x was set to ${value}` : `x was set to ${number}`
>value : number
}

2 changes: 2 additions & 0 deletions tests/baselines/reference/api/tsserverlibrary.d.ts
Original file line number Diff line number Diff line change
@@ -2653,6 +2653,8 @@ declare namespace ts {
export interface TemplateLiteralType extends InstantiableType {
texts: readonly string[];
types: readonly Type[];
freshType: TemplateLiteralType;
regularType: TemplateLiteralType;
}
export interface StringMappingType extends InstantiableType {
symbol: Symbol;
2 changes: 2 additions & 0 deletions tests/baselines/reference/api/typescript.d.ts
Original file line number Diff line number Diff line change
@@ -2653,6 +2653,8 @@ declare namespace ts {
export interface TemplateLiteralType extends InstantiableType {
texts: readonly string[];
types: readonly Type[];
freshType: TemplateLiteralType;
regularType: TemplateLiteralType;
}
export interface StringMappingType extends InstantiableType {
symbol: Symbol;
12 changes: 6 additions & 6 deletions tests/baselines/reference/asOperator3.types
Original file line number Diff line number Diff line change
@@ -5,23 +5,23 @@ declare function tag(...x: any[]): any;

var a = `${123 + 456 as number}`;
>a : string
>`${123 + 456 as number}` : string
>`${123 + 456 as number}` : `${number}`
>123 + 456 as number : number
>123 + 456 : number
>123 : 123
>456 : 456

var b = `leading ${123 + 456 as number}`;
>b : string
>`leading ${123 + 456 as number}` : string
>`leading ${123 + 456 as number}` : `leading ${number}`
>123 + 456 as number : number
>123 + 456 : number
>123 : 123
>456 : 456

var c = `${123 + 456 as number} trailing`;
>c : string
>`${123 + 456 as number} trailing` : string
>`${123 + 456 as number} trailing` : `${number} trailing`
>123 + 456 as number : number
>123 + 456 : number
>123 : 123
@@ -30,7 +30,7 @@ var c = `${123 + 456 as number} trailing`;
var d = `Hello ${123} World` as string;
>d : string
>`Hello ${123} World` as string : string
>`Hello ${123} World` : string
>`Hello ${123} World` : "Hello 123 World"
>123 : 123

var e = `Hello` as string;
@@ -43,15 +43,15 @@ var f = 1 + `${1} end of string` as string;
>1 + `${1} end of string` as string : string
>1 + `${1} end of string` : string
>1 : 1
>`${1} end of string` : string
>`${1} end of string` : "1 end of string"
>1 : 1

var g = tag `Hello ${123} World` as string;
>g : string
>tag `Hello ${123} World` as string : string
>tag `Hello ${123} World` : any
>tag : (...x: any[]) => any
>`Hello ${123} World` : string
>`Hello ${123} World` : "Hello 123 World"
>123 : 123

var h = tag `Hello` as string;
Original file line number Diff line number Diff line change
@@ -10,7 +10,7 @@ let n = Math.random();

let s = `${n}`;
>s : string
>`${n}` : string
>`${n}` : `${number}`
>n : number

const numericIndex = { [n]: 1 };
Original file line number Diff line number Diff line change
@@ -60,6 +60,6 @@ var v = {

[`hello ${a} bye`]() { }
>[`hello ${a} bye`] : () => void
>`hello ${a} bye` : string
>`hello ${a} bye` : `hello ${any} bye`
>a : any
}
Original file line number Diff line number Diff line change
@@ -60,6 +60,6 @@ var v = {

[`hello ${a} bye`]() { }
>[`hello ${a} bye`] : () => void
>`hello ${a} bye` : string
>`hello ${a} bye` : `hello ${any} bye`
>a : any
}
Original file line number Diff line number Diff line change
@@ -70,7 +70,7 @@ var v = {

get [`hello ${a} bye`]() { return 0; }
>[`hello ${a} bye`] : number
>`hello ${a} bye` : string
>`hello ${a} bye` : `hello ${any} bye`
>a : any
>0 : 0
}
Original file line number Diff line number Diff line change
@@ -70,7 +70,7 @@ var v = {

get [`hello ${a} bye`]() { return 0; }
>[`hello ${a} bye`] : number
>`hello ${a} bye` : string
>`hello ${a} bye` : `hello ${any} bye`
>a : any
>0 : 0
}
Original file line number Diff line number Diff line change
@@ -63,7 +63,7 @@ class C {

static [`hello ${a} bye`] = 0
>[`hello ${a} bye`] : number
>`hello ${a} bye` : string
>`hello ${a} bye` : `hello ${any} bye`
>a : any
>0 : 0
}
Original file line number Diff line number Diff line change
@@ -63,7 +63,7 @@ class C {

static [`hello ${a} bye`] = 0
>[`hello ${a} bye`] : number
>`hello ${a} bye` : string
>`hello ${a} bye` : `hello ${any} bye`
>a : any
>0 : 0
}
Original file line number Diff line number Diff line change
@@ -59,6 +59,6 @@ class C {

static [`hello ${a} bye`]() { }
>[`hello ${a} bye`] : () => void
>`hello ${a} bye` : string
>`hello ${a} bye` : `hello ${any} bye`
>a : any
}
Original file line number Diff line number Diff line change
@@ -59,6 +59,6 @@ class C {

static [`hello ${a} bye`]() { }
>[`hello ${a} bye`] : () => void
>`hello ${a} bye` : string
>`hello ${a} bye` : `hello ${any} bye`
>a : any
}
Original file line number Diff line number Diff line change
@@ -69,7 +69,7 @@ class C {

get [`hello ${a} bye`]() { return 0; }
>[`hello ${a} bye`] : number
>`hello ${a} bye` : string
>`hello ${a} bye` : `hello ${any} bye`
>a : any
>0 : 0
}
Original file line number Diff line number Diff line change
@@ -69,7 +69,7 @@ class C {

get [`hello ${a} bye`]() { return 0; }
>[`hello ${a} bye`] : number
>`hello ${a} bye` : string
>`hello ${a} bye` : `hello ${any} bye`
>a : any
>0 : 0
}
2 changes: 1 addition & 1 deletion tests/baselines/reference/computedPropertyNames4_ES5.types
Original file line number Diff line number Diff line change
@@ -70,7 +70,7 @@ var v = {

[`hello ${a} bye`]: 0
>[`hello ${a} bye`] : number
>`hello ${a} bye` : string
>`hello ${a} bye` : `hello ${any} bye`
>a : any
>0 : 0
}
2 changes: 1 addition & 1 deletion tests/baselines/reference/computedPropertyNames4_ES6.types
Original file line number Diff line number Diff line change
@@ -70,7 +70,7 @@ var v = {

[`hello ${a} bye`]: 0
>[`hello ${a} bye`] : number
>`hello ${a} bye` : string
>`hello ${a} bye` : `hello ${any} bye`
>a : any
>0 : 0
}
Original file line number Diff line number Diff line change
@@ -23,7 +23,7 @@ class HelloWorld {
>Log.info : (msg: string) => void
>Log : { info(msg: string): void; }
>info : (msg: string) => void
>`Hello ${this.name}` : string
>`Hello ${this.name}` : `Hello ${string}`
>this.name : string
>this : this
>name : string
Original file line number Diff line number Diff line change
@@ -16,7 +16,7 @@ function register(kind: string): void | never {
throw new Error(`Class with kind "${kind}" is already registered.`);
>new Error(`Class with kind "${kind}" is already registered.`) : Error
>Error : ErrorConstructor
>`Class with kind "${kind}" is already registered.` : string
>`Class with kind "${kind}" is already registered.` : `Class with kind "${string}" is already registered.`
>kind : string
}
kindCache[kind] = true;
Original file line number Diff line number Diff line change
@@ -34,7 +34,7 @@ const Parent: SFC<Props> = ({

const Child: SFC<Props> = ({
>Child : SFC<Props>
>({ children, name = "Artemis", ...props}) => `name: ${name} props: ${JSON.stringify(props)}` : ({ children, name, ...props }: Props & { children?: any; }) => string
>({ children, name = "Artemis", ...props}) => `name: ${name} props: ${JSON.stringify(props)}` : ({ children, name, ...props }: Props & { children?: any; }) => `name: Apollo props: ${string}` | `name: Artemis props: ${string}` | `name: Dionysus props: ${string}` | `name: Persephone props: ${string}`

children,
>children : any
@@ -47,7 +47,7 @@ const Child: SFC<Props> = ({
>props : {}

}) => `name: ${name} props: ${JSON.stringify(props)}`;
>`name: ${name} props: ${JSON.stringify(props)}` : string
>`name: ${name} props: ${JSON.stringify(props)}` : `name: Apollo props: ${string}` | `name: Artemis props: ${string}` | `name: Dionysus props: ${string}` | `name: Persephone props: ${string}`
>name : "Apollo" | "Artemis" | "Dionysus" | "Persephone"
>JSON.stringify(props) : string
>JSON.stringify : { (value: any, replacer?: ((this: any, key: string, value: any) => any) | undefined, space?: string | number | undefined): string; (value: any, replacer?: (string | number)[] | null | undefined, space?: string | number | undefined): string; }
Original file line number Diff line number Diff line change
@@ -75,10 +75,10 @@ class C2 extends C1<number, string, boolean> {
>C1 : C1<number, string, boolean>

public doSomethingWithSuperProperties() {
>doSomethingWithSuperProperties : () => string
>doSomethingWithSuperProperties : () => `${any} ${any} ${any}`

return `${this.a} ${this.b} ${this.c}`;
>`${this.a} ${this.b} ${this.c}` : string
>`${this.a} ${this.b} ${this.c}` : `${any} ${any} ${any}`
>this.a : any
>this : this
>a : any
Original file line number Diff line number Diff line change
@@ -12,14 +12,14 @@ var s;

// With TemplateTail
`${t1 ** -t2} world`;
>`${t1 ** -t2} world` : string
>`${t1 ** -t2} world` : `${number} world`
>t1 ** -t2 : number
>t1 : number
>-t2 : number
>t2 : number

`${(-t1) ** t2 - t1} world`;
>`${(-t1) ** t2 - t1} world` : string
>`${(-t1) ** t2 - t1} world` : `${number} world`
>(-t1) ** t2 - t1 : number
>(-t1) ** t2 : number
>(-t1) : number
@@ -29,7 +29,7 @@ var s;
>t1 : number

`${(-++t1) ** t2 - t1} world`;
>`${(-++t1) ** t2 - t1} world` : string
>`${(-++t1) ** t2 - t1} world` : `${number} world`
>(-++t1) ** t2 - t1 : number
>(-++t1) ** t2 : number
>(-++t1) : number
@@ -40,7 +40,7 @@ var s;
>t1 : number

`${(-t1++) ** t2 - t1} world`;
>`${(-t1++) ** t2 - t1} world` : string
>`${(-t1++) ** t2 - t1} world` : `${number} world`
>(-t1++) ** t2 - t1 : number
>(-t1++) ** t2 : number
>(-t1++) : number
@@ -51,7 +51,7 @@ var s;
>t1 : number

`${(~t1) ** t2 ** --t1 } world`;
>`${(~t1) ** t2 ** --t1 } world` : string
>`${(~t1) ** t2 ** --t1 } world` : `${number} world`
>(~t1) ** t2 ** --t1 : number
>(~t1) : number
>~t1 : number
@@ -62,7 +62,7 @@ var s;
>t1 : number

`${typeof (t1 ** t2 ** t1) } world`;
>`${typeof (t1 ** t2 ** t1) } world` : string
>`${typeof (t1 ** t2 ** t1) } world` : "string world" | "number world" | "bigint world" | "boolean world" | "symbol world" | "undefined world" | "object world" | "function world"
>typeof (t1 ** t2 ** t1) : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"
>(t1 ** t2 ** t1) : number
>t1 ** t2 ** t1 : number
@@ -73,7 +73,7 @@ var s;

// TempateHead & TemplateTail are empt
`${t1 ** -t2} hello world ${t1 ** -t2}`;
>`${t1 ** -t2} hello world ${t1 ** -t2}` : string
>`${t1 ** -t2} hello world ${t1 ** -t2}` : `${number} hello world ${number}`
>t1 ** -t2 : number
>t1 : number
>-t2 : number
@@ -84,7 +84,7 @@ var s;
>t2 : number

`${(-t1) ** t2 - t1} hello world ${(-t1) ** t2 - t1}`;
>`${(-t1) ** t2 - t1} hello world ${(-t1) ** t2 - t1}` : string
>`${(-t1) ** t2 - t1} hello world ${(-t1) ** t2 - t1}` : `${number} hello world ${number}`
>(-t1) ** t2 - t1 : number
>(-t1) ** t2 : number
>(-t1) : number
@@ -101,7 +101,7 @@ var s;
>t1 : number

`${(-++t1) ** t2 - t1} hello world ${t1 ** (-++t1) **- t1}`;
>`${(-++t1) ** t2 - t1} hello world ${t1 ** (-++t1) **- t1}` : string
>`${(-++t1) ** t2 - t1} hello world ${t1 ** (-++t1) **- t1}` : `${number} hello world ${number}`
>(-++t1) ** t2 - t1 : number
>(-++t1) ** t2 : number
>(-++t1) : number
@@ -121,7 +121,7 @@ var s;
>t1 : number

`${(-t1++) ** t2 - t1} hello world ${t2 ** (-t1++) ** - t1}`;
>`${(-t1++) ** t2 - t1} hello world ${t2 ** (-t1++) ** - t1}` : string
>`${(-t1++) ** t2 - t1} hello world ${t2 ** (-t1++) ** - t1}` : `${number} hello world ${number}`
>(-t1++) ** t2 - t1 : number
>(-t1++) ** t2 : number
>(-t1++) : number
@@ -141,7 +141,7 @@ var s;
>t1 : number

`${(~t1) ** t2 ** --t1 } hello world ${(~t1) ** t2 ** --t1 }`;
>`${(~t1) ** t2 ** --t1 } hello world ${(~t1) ** t2 ** --t1 }` : string
>`${(~t1) ** t2 ** --t1 } hello world ${(~t1) ** t2 ** --t1 }` : `${number} hello world ${number}`
>(~t1) ** t2 ** --t1 : number
>(~t1) : number
>~t1 : number
@@ -160,7 +160,7 @@ var s;
>t1 : number

`${typeof (t1 ** t2 ** t1)} hello world ${typeof (t1 ** t2 ** t1)}`;
>`${typeof (t1 ** t2 ** t1)} hello world ${typeof (t1 ** t2 ** t1)}` : string
>`${typeof (t1 ** t2 ** t1)} hello world ${typeof (t1 ** t2 ** t1)}` : "string hello world string" | "string hello world number" | "string hello world bigint" | "string hello world boolean" | "string hello world symbol" | "string hello world undefined" | "string hello world object" | "string hello world function" | "number hello world string" | "number hello world number" | "number hello world bigint" | "number hello world boolean" | "number hello world symbol" | "number hello world undefined" | "number hello world object" | "number hello world function" | "bigint hello world string" | "bigint hello world number" | "bigint hello world bigint" | "bigint hello world boolean" | "bigint hello world symbol" | "bigint hello world undefined" | "bigint hello world object" | "bigint hello world function" | "boolean hello world string" | "boolean hello world number" | "boolean hello world bigint" | "boolean hello world boolean" | "boolean hello world symbol" | "boolean hello world undefined" | "boolean hello world object" | "boolean hello world function" | "symbol hello world string" | "symbol hello world number" | "symbol hello world bigint" | "symbol hello world boolean" | "symbol hello world symbol" | "symbol hello world undefined" | "symbol hello world object" | "symbol hello world function" | "undefined hello world string" | "undefined hello world number" | "undefined hello world bigint" | "undefined hello world boolean" | "undefined hello world symbol" | "undefined hello world undefined" | "undefined hello world object" | "undefined hello world function" | "object hello world string" | "object hello world number" | "object hello world bigint" | "object hello world boolean" | "object hello world symbol" | "object hello world undefined" | "object hello world object" | "object hello world function" | "function hello world string" | "function hello world number" | "function hello world bigint" | "function hello world boolean" | "function hello world symbol" | "function hello world undefined" | "function hello world object" | "function hello world function"
>typeof (t1 ** t2 ** t1) : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"
>(t1 ** t2 ** t1) : number
>t1 ** t2 ** t1 : number
@@ -178,7 +178,7 @@ var s;

// With templateHead
`hello ${(-t1) ** t2 - t1}`;
>`hello ${(-t1) ** t2 - t1}` : string
>`hello ${(-t1) ** t2 - t1}` : `hello ${number}`
>(-t1) ** t2 - t1 : number
>(-t1) ** t2 : number
>(-t1) : number
@@ -188,7 +188,7 @@ var s;
>t1 : number

`hello ${(-++t1) ** t2 - t1}`;
>`hello ${(-++t1) ** t2 - t1}` : string
>`hello ${(-++t1) ** t2 - t1}` : `hello ${number}`
>(-++t1) ** t2 - t1 : number
>(-++t1) ** t2 : number
>(-++t1) : number
@@ -199,7 +199,7 @@ var s;
>t1 : number

`hello ${(-t1++) ** t2 - t1}`;
>`hello ${(-t1++) ** t2 - t1}` : string
>`hello ${(-t1++) ** t2 - t1}` : `hello ${number}`
>(-t1++) ** t2 - t1 : number
>(-t1++) ** t2 : number
>(-t1++) : number
@@ -210,7 +210,7 @@ var s;
>t1 : number

`hello ${(~t1) ** t2 ** --t1 }`;
>`hello ${(~t1) ** t2 ** --t1 }` : string
>`hello ${(~t1) ** t2 ** --t1 }` : `hello ${number}`
>(~t1) ** t2 ** --t1 : number
>(~t1) : number
>~t1 : number
@@ -221,7 +221,7 @@ var s;
>t1 : number

`hello ${typeof (t1 ** t2 ** t1)}`;
>`hello ${typeof (t1 ** t2 ** t1)}` : string
>`hello ${typeof (t1 ** t2 ** t1)}` : "hello string" | "hello number" | "hello bigint" | "hello boolean" | "hello symbol" | "hello undefined" | "hello object" | "hello function"
>typeof (t1 ** t2 ** t1) : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"
>(t1 ** t2 ** t1) : number
>t1 ** t2 ** t1 : number
Original file line number Diff line number Diff line change
@@ -12,14 +12,14 @@ var s;

// With TemplateTail
`${t1 ** -t2} world`;
>`${t1 ** -t2} world` : string
>`${t1 ** -t2} world` : `${number} world`
>t1 ** -t2 : number
>t1 : number
>-t2 : number
>t2 : number

`${(-t1) ** t2 - t1} world`;
>`${(-t1) ** t2 - t1} world` : string
>`${(-t1) ** t2 - t1} world` : `${number} world`
>(-t1) ** t2 - t1 : number
>(-t1) ** t2 : number
>(-t1) : number
@@ -29,7 +29,7 @@ var s;
>t1 : number

`${(-++t1) ** t2 - t1} world`;
>`${(-++t1) ** t2 - t1} world` : string
>`${(-++t1) ** t2 - t1} world` : `${number} world`
>(-++t1) ** t2 - t1 : number
>(-++t1) ** t2 : number
>(-++t1) : number
@@ -40,7 +40,7 @@ var s;
>t1 : number

`${(-t1++) ** t2 - t1} world`;
>`${(-t1++) ** t2 - t1} world` : string
>`${(-t1++) ** t2 - t1} world` : `${number} world`
>(-t1++) ** t2 - t1 : number
>(-t1++) ** t2 : number
>(-t1++) : number
@@ -51,7 +51,7 @@ var s;
>t1 : number

`${(~t1) ** t2 ** --t1 } world`;
>`${(~t1) ** t2 ** --t1 } world` : string
>`${(~t1) ** t2 ** --t1 } world` : `${number} world`
>(~t1) ** t2 ** --t1 : number
>(~t1) : number
>~t1 : number
@@ -62,7 +62,7 @@ var s;
>t1 : number

`${typeof (t1 ** t2 ** t1) } world`;
>`${typeof (t1 ** t2 ** t1) } world` : string
>`${typeof (t1 ** t2 ** t1) } world` : "string world" | "number world" | "bigint world" | "boolean world" | "symbol world" | "undefined world" | "object world" | "function world"
>typeof (t1 ** t2 ** t1) : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"
>(t1 ** t2 ** t1) : number
>t1 ** t2 ** t1 : number
@@ -73,7 +73,7 @@ var s;

// TempateHead & TemplateTail are empt
`${t1 ** -t2} hello world ${t1 ** -t2}`;
>`${t1 ** -t2} hello world ${t1 ** -t2}` : string
>`${t1 ** -t2} hello world ${t1 ** -t2}` : `${number} hello world ${number}`
>t1 ** -t2 : number
>t1 : number
>-t2 : number
@@ -84,7 +84,7 @@ var s;
>t2 : number

`${(-t1) ** t2 - t1} hello world ${(-t1) ** t2 - t1}`;
>`${(-t1) ** t2 - t1} hello world ${(-t1) ** t2 - t1}` : string
>`${(-t1) ** t2 - t1} hello world ${(-t1) ** t2 - t1}` : `${number} hello world ${number}`
>(-t1) ** t2 - t1 : number
>(-t1) ** t2 : number
>(-t1) : number
@@ -101,7 +101,7 @@ var s;
>t1 : number

`${(-++t1) ** t2 - t1} hello world ${t1 ** (-++t1) **- t1}`;
>`${(-++t1) ** t2 - t1} hello world ${t1 ** (-++t1) **- t1}` : string
>`${(-++t1) ** t2 - t1} hello world ${t1 ** (-++t1) **- t1}` : `${number} hello world ${number}`
>(-++t1) ** t2 - t1 : number
>(-++t1) ** t2 : number
>(-++t1) : number
@@ -121,7 +121,7 @@ var s;
>t1 : number

`${(-t1++) ** t2 - t1} hello world ${t2 ** (-t1++) ** - t1}`;
>`${(-t1++) ** t2 - t1} hello world ${t2 ** (-t1++) ** - t1}` : string
>`${(-t1++) ** t2 - t1} hello world ${t2 ** (-t1++) ** - t1}` : `${number} hello world ${number}`
>(-t1++) ** t2 - t1 : number
>(-t1++) ** t2 : number
>(-t1++) : number
@@ -141,7 +141,7 @@ var s;
>t1 : number

`${(~t1) ** t2 ** --t1 } hello world ${(~t1) ** t2 ** --t1 }`;
>`${(~t1) ** t2 ** --t1 } hello world ${(~t1) ** t2 ** --t1 }` : string
>`${(~t1) ** t2 ** --t1 } hello world ${(~t1) ** t2 ** --t1 }` : `${number} hello world ${number}`
>(~t1) ** t2 ** --t1 : number
>(~t1) : number
>~t1 : number
@@ -160,7 +160,7 @@ var s;
>t1 : number

`${typeof (t1 ** t2 ** t1)} hello world ${typeof (t1 ** t2 ** t1)}`;
>`${typeof (t1 ** t2 ** t1)} hello world ${typeof (t1 ** t2 ** t1)}` : string
>`${typeof (t1 ** t2 ** t1)} hello world ${typeof (t1 ** t2 ** t1)}` : "string hello world string" | "string hello world number" | "string hello world bigint" | "string hello world boolean" | "string hello world symbol" | "string hello world undefined" | "string hello world object" | "string hello world function" | "number hello world string" | "number hello world number" | "number hello world bigint" | "number hello world boolean" | "number hello world symbol" | "number hello world undefined" | "number hello world object" | "number hello world function" | "bigint hello world string" | "bigint hello world number" | "bigint hello world bigint" | "bigint hello world boolean" | "bigint hello world symbol" | "bigint hello world undefined" | "bigint hello world object" | "bigint hello world function" | "boolean hello world string" | "boolean hello world number" | "boolean hello world bigint" | "boolean hello world boolean" | "boolean hello world symbol" | "boolean hello world undefined" | "boolean hello world object" | "boolean hello world function" | "symbol hello world string" | "symbol hello world number" | "symbol hello world bigint" | "symbol hello world boolean" | "symbol hello world symbol" | "symbol hello world undefined" | "symbol hello world object" | "symbol hello world function" | "undefined hello world string" | "undefined hello world number" | "undefined hello world bigint" | "undefined hello world boolean" | "undefined hello world symbol" | "undefined hello world undefined" | "undefined hello world object" | "undefined hello world function" | "object hello world string" | "object hello world number" | "object hello world bigint" | "object hello world boolean" | "object hello world symbol" | "object hello world undefined" | "object hello world object" | "object hello world function" | "function hello world string" | "function hello world number" | "function hello world bigint" | "function hello world boolean" | "function hello world symbol" | "function hello world undefined" | "function hello world object" | "function hello world function"
>typeof (t1 ** t2 ** t1) : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"
>(t1 ** t2 ** t1) : number
>t1 ** t2 ** t1 : number
@@ -178,7 +178,7 @@ var s;

// With templateHead
`hello ${(-t1) ** t2 - t1}`;
>`hello ${(-t1) ** t2 - t1}` : string
>`hello ${(-t1) ** t2 - t1}` : `hello ${number}`
>(-t1) ** t2 - t1 : number
>(-t1) ** t2 : number
>(-t1) : number
@@ -188,7 +188,7 @@ var s;
>t1 : number

`hello ${(-++t1) ** t2 - t1}`;
>`hello ${(-++t1) ** t2 - t1}` : string
>`hello ${(-++t1) ** t2 - t1}` : `hello ${number}`
>(-++t1) ** t2 - t1 : number
>(-++t1) ** t2 : number
>(-++t1) : number
@@ -199,7 +199,7 @@ var s;
>t1 : number

`hello ${(-t1++) ** t2 - t1}`;
>`hello ${(-t1++) ** t2 - t1}` : string
>`hello ${(-t1++) ** t2 - t1}` : `hello ${number}`
>(-t1++) ** t2 - t1 : number
>(-t1++) ** t2 : number
>(-t1++) : number
@@ -210,7 +210,7 @@ var s;
>t1 : number

`hello ${(~t1) ** t2 ** --t1 }`;
>`hello ${(~t1) ** t2 ** --t1 }` : string
>`hello ${(~t1) ** t2 ** --t1 }` : `hello ${number}`
>(~t1) ** t2 ** --t1 : number
>(~t1) : number
>~t1 : number
@@ -221,7 +221,7 @@ var s;
>t1 : number

`hello ${typeof (t1 ** t2 ** t1)}`;
>`hello ${typeof (t1 ** t2 ** t1)}` : string
>`hello ${typeof (t1 ** t2 ** t1)}` : "hello string" | "hello number" | "hello bigint" | "hello boolean" | "hello symbol" | "hello undefined" | "hello object" | "hello function"
>typeof (t1 ** t2 ** t1) : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"
>(t1 ** t2 ** t1) : number
>t1 ** t2 ** t1 : number
Original file line number Diff line number Diff line change
@@ -12,37 +12,37 @@ var s;

// TempateHead & TemplateTail are empty
`${t1 ** t2}`;
>`${t1 ** t2}` : string
>`${t1 ** t2}` : `${number}`
>t1 ** t2 : number
>t1 : number
>t2 : number

`${t1 ** t2 ** t1}`;
>`${t1 ** t2 ** t1}` : string
>`${t1 ** t2 ** t1}` : `${number}`
>t1 ** t2 ** t1 : number
>t1 : number
>t2 ** t1 : number
>t2 : number
>t1 : number

`${t1 + t2 ** t1}`;
>`${t1 + t2 ** t1}` : string
>`${t1 + t2 ** t1}` : `${number}`
>t1 + t2 ** t1 : number
>t1 : number
>t2 ** t1 : number
>t2 : number
>t1 : number

`${t1 ** t2 + t1}`;
>`${t1 ** t2 + t1}` : string
>`${t1 ** t2 + t1}` : `${number}`
>t1 ** t2 + t1 : number
>t1 ** t2 : number
>t1 : number
>t2 : number
>t1 : number

`${t1 + t2 ** t2 + t1 }`;
>`${t1 + t2 ** t2 + t1 }` : string
>`${t1 + t2 ** t2 + t1 }` : `${number}`
>t1 + t2 ** t2 + t1 : number
>t1 + t2 ** t2 : number
>t1 : number
@@ -52,7 +52,7 @@ var s;
>t1 : number

`${typeof (t1 ** t2 ** t1) }`;
>`${typeof (t1 ** t2 ** t1) }` : string
>`${typeof (t1 ** t2 ** t1) }` : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"
>typeof (t1 ** t2 ** t1) : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"
>(t1 ** t2 ** t1) : number
>t1 ** t2 ** t1 : number
@@ -74,7 +74,7 @@ var s;
>t1 : number

`${t1 ** t2}${t1 ** t2}`;
>`${t1 ** t2}${t1 ** t2}` : string
>`${t1 ** t2}${t1 ** t2}` : `${number}${number}`
>t1 ** t2 : number
>t1 : number
>t2 : number
@@ -83,7 +83,7 @@ var s;
>t2 : number

`${t1 ** t2 ** t1}${t1 ** t2 ** t1}`;
>`${t1 ** t2 ** t1}${t1 ** t2 ** t1}` : string
>`${t1 ** t2 ** t1}${t1 ** t2 ** t1}` : `${number}${number}`
>t1 ** t2 ** t1 : number
>t1 : number
>t2 ** t1 : number
@@ -96,7 +96,7 @@ var s;
>t1 : number

`${t1 + t2 ** t1}${t1 + t2 ** t1}`;
>`${t1 + t2 ** t1}${t1 + t2 ** t1}` : string
>`${t1 + t2 ** t1}${t1 + t2 ** t1}` : `${number}${number}`
>t1 + t2 ** t1 : number
>t1 : number
>t2 ** t1 : number
@@ -109,7 +109,7 @@ var s;
>t1 : number

`${t1 ** t2 + t1}${t1 ** t2 + t1}`;
>`${t1 ** t2 + t1}${t1 ** t2 + t1}` : string
>`${t1 ** t2 + t1}${t1 ** t2 + t1}` : `${number}${number}`
>t1 ** t2 + t1 : number
>t1 ** t2 : number
>t1 : number
@@ -122,7 +122,7 @@ var s;
>t1 : number

`${t1 + t2 ** t2 + t1}${t1 + t2 ** t2 + t1}`;
>`${t1 + t2 ** t2 + t1}${t1 + t2 ** t2 + t1}` : string
>`${t1 + t2 ** t2 + t1}${t1 + t2 ** t2 + t1}` : `${number}${number}`
>t1 + t2 ** t2 + t1 : number
>t1 + t2 ** t2 : number
>t1 : number
@@ -139,7 +139,7 @@ var s;
>t1 : number

`${typeof (t1 ** t2 ** t1)}${typeof (t1 ** t2 ** t1)}`;
>`${typeof (t1 ** t2 ** t1)}${typeof (t1 ** t2 ** t1)}` : string
>`${typeof (t1 ** t2 ** t1)}${typeof (t1 ** t2 ** t1)}` : "stringstring" | "stringnumber" | "stringbigint" | "stringboolean" | "stringsymbol" | "stringundefined" | "stringobject" | "stringfunction" | "numberstring" | "numbernumber" | "numberbigint" | "numberboolean" | "numbersymbol" | "numberundefined" | "numberobject" | "numberfunction" | "bigintstring" | "bigintnumber" | "bigintbigint" | "bigintboolean" | "bigintsymbol" | "bigintundefined" | "bigintobject" | "bigintfunction" | "booleanstring" | "booleannumber" | "booleanbigint" | "booleanboolean" | "booleansymbol" | "booleanundefined" | "booleanobject" | "booleanfunction" | "symbolstring" | "symbolnumber" | "symbolbigint" | "symbolboolean" | "symbolsymbol" | "symbolundefined" | "symbolobject" | "symbolfunction" | "undefinedstring" | "undefinednumber" | "undefinedbigint" | "undefinedboolean" | "undefinedsymbol" | "undefinedundefined" | "undefinedobject" | "undefinedfunction" | "objectstring" | "objectnumber" | "objectbigint" | "objectboolean" | "objectsymbol" | "objectundefined" | "objectobject" | "objectfunction" | "functionstring" | "functionnumber" | "functionbigint" | "functionboolean" | "functionsymbol" | "functionundefined" | "functionobject" | "functionfunction"
>typeof (t1 ** t2 ** t1) : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"
>(t1 ** t2 ** t1) : number
>t1 ** t2 ** t1 : number
@@ -156,7 +156,7 @@ var s;
>t1 : number

`${t1 ** t2} hello world ${t1 ** t2}`;
>`${t1 ** t2} hello world ${t1 ** t2}` : string
>`${t1 ** t2} hello world ${t1 ** t2}` : `${number} hello world ${number}`
>t1 ** t2 : number
>t1 : number
>t2 : number
@@ -165,7 +165,7 @@ var s;
>t2 : number

`${t1 ** t2 ** t1} hello world ${t1 ** t2 ** t1}`;
>`${t1 ** t2 ** t1} hello world ${t1 ** t2 ** t1}` : string
>`${t1 ** t2 ** t1} hello world ${t1 ** t2 ** t1}` : `${number} hello world ${number}`
>t1 ** t2 ** t1 : number
>t1 : number
>t2 ** t1 : number
@@ -178,7 +178,7 @@ var s;
>t1 : number

`${t1 + t2 ** t1} hello world ${t1 + t2 ** t1}`;
>`${t1 + t2 ** t1} hello world ${t1 + t2 ** t1}` : string
>`${t1 + t2 ** t1} hello world ${t1 + t2 ** t1}` : `${number} hello world ${number}`
>t1 + t2 ** t1 : number
>t1 : number
>t2 ** t1 : number
@@ -191,7 +191,7 @@ var s;
>t1 : number

`${t1 ** t2 + t1} hello world ${t1 ** t2 + t1}`;
>`${t1 ** t2 + t1} hello world ${t1 ** t2 + t1}` : string
>`${t1 ** t2 + t1} hello world ${t1 ** t2 + t1}` : `${number} hello world ${number}`
>t1 ** t2 + t1 : number
>t1 ** t2 : number
>t1 : number
@@ -204,7 +204,7 @@ var s;
>t1 : number

`${t1 + t2 ** t2 + t1} hello world ${t1 + t2 ** t2 + t1}`;
>`${t1 + t2 ** t2 + t1} hello world ${t1 + t2 ** t2 + t1}` : string
>`${t1 + t2 ** t2 + t1} hello world ${t1 + t2 ** t2 + t1}` : `${number} hello world ${number}`
>t1 + t2 ** t2 + t1 : number
>t1 + t2 ** t2 : number
>t1 : number
@@ -221,7 +221,7 @@ var s;
>t1 : number

`${typeof (t1 ** t2 ** t1) } hello world ${typeof (t1 ** t2 ** t1) }`;
>`${typeof (t1 ** t2 ** t1) } hello world ${typeof (t1 ** t2 ** t1) }` : string
>`${typeof (t1 ** t2 ** t1) } hello world ${typeof (t1 ** t2 ** t1) }` : "string hello world string" | "string hello world number" | "string hello world bigint" | "string hello world boolean" | "string hello world symbol" | "string hello world undefined" | "string hello world object" | "string hello world function" | "number hello world string" | "number hello world number" | "number hello world bigint" | "number hello world boolean" | "number hello world symbol" | "number hello world undefined" | "number hello world object" | "number hello world function" | "bigint hello world string" | "bigint hello world number" | "bigint hello world bigint" | "bigint hello world boolean" | "bigint hello world symbol" | "bigint hello world undefined" | "bigint hello world object" | "bigint hello world function" | "boolean hello world string" | "boolean hello world number" | "boolean hello world bigint" | "boolean hello world boolean" | "boolean hello world symbol" | "boolean hello world undefined" | "boolean hello world object" | "boolean hello world function" | "symbol hello world string" | "symbol hello world number" | "symbol hello world bigint" | "symbol hello world boolean" | "symbol hello world symbol" | "symbol hello world undefined" | "symbol hello world object" | "symbol hello world function" | "undefined hello world string" | "undefined hello world number" | "undefined hello world bigint" | "undefined hello world boolean" | "undefined hello world symbol" | "undefined hello world undefined" | "undefined hello world object" | "undefined hello world function" | "object hello world string" | "object hello world number" | "object hello world bigint" | "object hello world boolean" | "object hello world symbol" | "object hello world undefined" | "object hello world object" | "object hello world function" | "function hello world string" | "function hello world number" | "function hello world bigint" | "function hello world boolean" | "function hello world symbol" | "function hello world undefined" | "function hello world object" | "function hello world function"
>typeof (t1 ** t2 ** t1) : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"
>(t1 ** t2 ** t1) : number
>t1 ** t2 ** t1 : number
Original file line number Diff line number Diff line change
@@ -12,37 +12,37 @@ var s;

// TempateHead & TemplateTail are empty
`${t1 ** t2}`;
>`${t1 ** t2}` : string
>`${t1 ** t2}` : `${number}`
>t1 ** t2 : number
>t1 : number
>t2 : number

`${t1 ** t2 ** t1}`;
>`${t1 ** t2 ** t1}` : string
>`${t1 ** t2 ** t1}` : `${number}`
>t1 ** t2 ** t1 : number
>t1 : number
>t2 ** t1 : number
>t2 : number
>t1 : number

`${t1 + t2 ** t1}`;
>`${t1 + t2 ** t1}` : string
>`${t1 + t2 ** t1}` : `${number}`
>t1 + t2 ** t1 : number
>t1 : number
>t2 ** t1 : number
>t2 : number
>t1 : number

`${t1 ** t2 + t1}`;
>`${t1 ** t2 + t1}` : string
>`${t1 ** t2 + t1}` : `${number}`
>t1 ** t2 + t1 : number
>t1 ** t2 : number
>t1 : number
>t2 : number
>t1 : number

`${t1 + t2 ** t2 + t1 }`;
>`${t1 + t2 ** t2 + t1 }` : string
>`${t1 + t2 ** t2 + t1 }` : `${number}`
>t1 + t2 ** t2 + t1 : number
>t1 + t2 ** t2 : number
>t1 : number
@@ -52,7 +52,7 @@ var s;
>t1 : number

`${typeof (t1 ** t2 ** t1) }`;
>`${typeof (t1 ** t2 ** t1) }` : string
>`${typeof (t1 ** t2 ** t1) }` : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"
>typeof (t1 ** t2 ** t1) : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"
>(t1 ** t2 ** t1) : number
>t1 ** t2 ** t1 : number
@@ -74,7 +74,7 @@ var s;
>t1 : number

`${t1 ** t2}${t1 ** t2}`;
>`${t1 ** t2}${t1 ** t2}` : string
>`${t1 ** t2}${t1 ** t2}` : `${number}${number}`
>t1 ** t2 : number
>t1 : number
>t2 : number
@@ -83,7 +83,7 @@ var s;
>t2 : number

`${t1 ** t2 ** t1}${t1 ** t2 ** t1}`;
>`${t1 ** t2 ** t1}${t1 ** t2 ** t1}` : string
>`${t1 ** t2 ** t1}${t1 ** t2 ** t1}` : `${number}${number}`
>t1 ** t2 ** t1 : number
>t1 : number
>t2 ** t1 : number
@@ -96,7 +96,7 @@ var s;
>t1 : number

`${t1 + t2 ** t1}${t1 + t2 ** t1}`;
>`${t1 + t2 ** t1}${t1 + t2 ** t1}` : string
>`${t1 + t2 ** t1}${t1 + t2 ** t1}` : `${number}${number}`
>t1 + t2 ** t1 : number
>t1 : number
>t2 ** t1 : number
@@ -109,7 +109,7 @@ var s;
>t1 : number

`${t1 ** t2 + t1}${t1 ** t2 + t1}`;
>`${t1 ** t2 + t1}${t1 ** t2 + t1}` : string
>`${t1 ** t2 + t1}${t1 ** t2 + t1}` : `${number}${number}`
>t1 ** t2 + t1 : number
>t1 ** t2 : number
>t1 : number
@@ -122,7 +122,7 @@ var s;
>t1 : number

`${t1 + t2 ** t2 + t1}${t1 + t2 ** t2 + t1}`;
>`${t1 + t2 ** t2 + t1}${t1 + t2 ** t2 + t1}` : string
>`${t1 + t2 ** t2 + t1}${t1 + t2 ** t2 + t1}` : `${number}${number}`
>t1 + t2 ** t2 + t1 : number
>t1 + t2 ** t2 : number
>t1 : number
@@ -139,7 +139,7 @@ var s;
>t1 : number

`${typeof (t1 ** t2 ** t1)}${typeof (t1 ** t2 ** t1)}`;
>`${typeof (t1 ** t2 ** t1)}${typeof (t1 ** t2 ** t1)}` : string
>`${typeof (t1 ** t2 ** t1)}${typeof (t1 ** t2 ** t1)}` : "stringstring" | "stringnumber" | "stringbigint" | "stringboolean" | "stringsymbol" | "stringundefined" | "stringobject" | "stringfunction" | "numberstring" | "numbernumber" | "numberbigint" | "numberboolean" | "numbersymbol" | "numberundefined" | "numberobject" | "numberfunction" | "bigintstring" | "bigintnumber" | "bigintbigint" | "bigintboolean" | "bigintsymbol" | "bigintundefined" | "bigintobject" | "bigintfunction" | "booleanstring" | "booleannumber" | "booleanbigint" | "booleanboolean" | "booleansymbol" | "booleanundefined" | "booleanobject" | "booleanfunction" | "symbolstring" | "symbolnumber" | "symbolbigint" | "symbolboolean" | "symbolsymbol" | "symbolundefined" | "symbolobject" | "symbolfunction" | "undefinedstring" | "undefinednumber" | "undefinedbigint" | "undefinedboolean" | "undefinedsymbol" | "undefinedundefined" | "undefinedobject" | "undefinedfunction" | "objectstring" | "objectnumber" | "objectbigint" | "objectboolean" | "objectsymbol" | "objectundefined" | "objectobject" | "objectfunction" | "functionstring" | "functionnumber" | "functionbigint" | "functionboolean" | "functionsymbol" | "functionundefined" | "functionobject" | "functionfunction"
>typeof (t1 ** t2 ** t1) : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"
>(t1 ** t2 ** t1) : number
>t1 ** t2 ** t1 : number
@@ -156,7 +156,7 @@ var s;
>t1 : number

`${t1 ** t2} hello world ${t1 ** t2}`;
>`${t1 ** t2} hello world ${t1 ** t2}` : string
>`${t1 ** t2} hello world ${t1 ** t2}` : `${number} hello world ${number}`
>t1 ** t2 : number
>t1 : number
>t2 : number
@@ -165,7 +165,7 @@ var s;
>t2 : number

`${t1 ** t2 ** t1} hello world ${t1 ** t2 ** t1}`;
>`${t1 ** t2 ** t1} hello world ${t1 ** t2 ** t1}` : string
>`${t1 ** t2 ** t1} hello world ${t1 ** t2 ** t1}` : `${number} hello world ${number}`
>t1 ** t2 ** t1 : number
>t1 : number
>t2 ** t1 : number
@@ -178,7 +178,7 @@ var s;
>t1 : number

`${t1 + t2 ** t1} hello world ${t1 + t2 ** t1}`;
>`${t1 + t2 ** t1} hello world ${t1 + t2 ** t1}` : string
>`${t1 + t2 ** t1} hello world ${t1 + t2 ** t1}` : `${number} hello world ${number}`
>t1 + t2 ** t1 : number
>t1 : number
>t2 ** t1 : number
@@ -191,7 +191,7 @@ var s;
>t1 : number

`${t1 ** t2 + t1} hello world ${t1 ** t2 + t1}`;
>`${t1 ** t2 + t1} hello world ${t1 ** t2 + t1}` : string
>`${t1 ** t2 + t1} hello world ${t1 ** t2 + t1}` : `${number} hello world ${number}`
>t1 ** t2 + t1 : number
>t1 ** t2 : number
>t1 : number
@@ -204,7 +204,7 @@ var s;
>t1 : number

`${t1 + t2 ** t2 + t1} hello world ${t1 + t2 ** t2 + t1}`;
>`${t1 + t2 ** t2 + t1} hello world ${t1 + t2 ** t2 + t1}` : string
>`${t1 + t2 ** t2 + t1} hello world ${t1 + t2 ** t2 + t1}` : `${number} hello world ${number}`
>t1 + t2 ** t2 + t1 : number
>t1 + t2 ** t2 : number
>t1 : number
@@ -221,7 +221,7 @@ var s;
>t1 : number

`${typeof (t1 ** t2 ** t1) } hello world ${typeof (t1 ** t2 ** t1) }`;
>`${typeof (t1 ** t2 ** t1) } hello world ${typeof (t1 ** t2 ** t1) }` : string
>`${typeof (t1 ** t2 ** t1) } hello world ${typeof (t1 ** t2 ** t1) }` : "string hello world string" | "string hello world number" | "string hello world bigint" | "string hello world boolean" | "string hello world symbol" | "string hello world undefined" | "string hello world object" | "string hello world function" | "number hello world string" | "number hello world number" | "number hello world bigint" | "number hello world boolean" | "number hello world symbol" | "number hello world undefined" | "number hello world object" | "number hello world function" | "bigint hello world string" | "bigint hello world number" | "bigint hello world bigint" | "bigint hello world boolean" | "bigint hello world symbol" | "bigint hello world undefined" | "bigint hello world object" | "bigint hello world function" | "boolean hello world string" | "boolean hello world number" | "boolean hello world bigint" | "boolean hello world boolean" | "boolean hello world symbol" | "boolean hello world undefined" | "boolean hello world object" | "boolean hello world function" | "symbol hello world string" | "symbol hello world number" | "symbol hello world bigint" | "symbol hello world boolean" | "symbol hello world symbol" | "symbol hello world undefined" | "symbol hello world object" | "symbol hello world function" | "undefined hello world string" | "undefined hello world number" | "undefined hello world bigint" | "undefined hello world boolean" | "undefined hello world symbol" | "undefined hello world undefined" | "undefined hello world object" | "undefined hello world function" | "object hello world string" | "object hello world number" | "object hello world bigint" | "object hello world boolean" | "object hello world symbol" | "object hello world undefined" | "object hello world object" | "object hello world function" | "function hello world string" | "function hello world number" | "function hello world bigint" | "function hello world boolean" | "function hello world symbol" | "function hello world undefined" | "function hello world object" | "function hello world function"
>typeof (t1 ** t2 ** t1) : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"
>(t1 ** t2 ** t1) : number
>t1 ** t2 ** t1 : number
Original file line number Diff line number Diff line change
@@ -12,37 +12,37 @@ var s;

// With templateHead
`hello ${t1 ** t2}`;
>`hello ${t1 ** t2}` : string
>`hello ${t1 ** t2}` : `hello ${number}`
>t1 ** t2 : number
>t1 : number
>t2 : number

`hello ${t1 ** t2 ** t1}`;
>`hello ${t1 ** t2 ** t1}` : string
>`hello ${t1 ** t2 ** t1}` : `hello ${number}`
>t1 ** t2 ** t1 : number
>t1 : number
>t2 ** t1 : number
>t2 : number
>t1 : number

`hello ${t1 + t2 ** t1}`;
>`hello ${t1 + t2 ** t1}` : string
>`hello ${t1 + t2 ** t1}` : `hello ${number}`
>t1 + t2 ** t1 : number
>t1 : number
>t2 ** t1 : number
>t2 : number
>t1 : number

`hello ${t1 ** t2 + t1}`;
>`hello ${t1 ** t2 + t1}` : string
>`hello ${t1 ** t2 + t1}` : `hello ${number}`
>t1 ** t2 + t1 : number
>t1 ** t2 : number
>t1 : number
>t2 : number
>t1 : number

`hello ${t1 + t2 ** t2 + t1 }`;
>`hello ${t1 + t2 ** t2 + t1 }` : string
>`hello ${t1 + t2 ** t2 + t1 }` : `hello ${number}`
>t1 + t2 ** t2 + t1 : number
>t1 + t2 ** t2 : number
>t1 : number
@@ -52,7 +52,7 @@ var s;
>t1 : number

`hello ${typeof (t1 ** t2 ** t1) }`;
>`hello ${typeof (t1 ** t2 ** t1) }` : string
>`hello ${typeof (t1 ** t2 ** t1) }` : "hello string" | "hello number" | "hello bigint" | "hello boolean" | "hello symbol" | "hello undefined" | "hello object" | "hello function"
>typeof (t1 ** t2 ** t1) : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"
>(t1 ** t2 ** t1) : number
>t1 ** t2 ** t1 : number
@@ -62,7 +62,7 @@ var s;
>t1 : number

`hello ${1 + typeof (t1 ** t2 ** t1) }`;
>`hello ${1 + typeof (t1 ** t2 ** t1) }` : string
>`hello ${1 + typeof (t1 ** t2 ** t1) }` : `hello ${string}`
>1 + typeof (t1 ** t2 ** t1) : string
>1 : 1
>typeof (t1 ** t2 ** t1) : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"
@@ -74,7 +74,7 @@ var s;
>t1 : number

`hello ${t1 ** t2}${t1 ** t2}`;
>`hello ${t1 ** t2}${t1 ** t2}` : string
>`hello ${t1 ** t2}${t1 ** t2}` : `hello ${number}${number}`
>t1 ** t2 : number
>t1 : number
>t2 : number
@@ -83,7 +83,7 @@ var s;
>t2 : number

`hello ${t1 ** t2 ** t1}${t1 ** t2 ** t1}`;
>`hello ${t1 ** t2 ** t1}${t1 ** t2 ** t1}` : string
>`hello ${t1 ** t2 ** t1}${t1 ** t2 ** t1}` : `hello ${number}${number}`
>t1 ** t2 ** t1 : number
>t1 : number
>t2 ** t1 : number
@@ -96,7 +96,7 @@ var s;
>t1 : number

`hello ${t1 + t2 ** t1}${t1 + t2 ** t1}`;
>`hello ${t1 + t2 ** t1}${t1 + t2 ** t1}` : string
>`hello ${t1 + t2 ** t1}${t1 + t2 ** t1}` : `hello ${number}${number}`
>t1 + t2 ** t1 : number
>t1 : number
>t2 ** t1 : number
@@ -109,7 +109,7 @@ var s;
>t1 : number

`hello ${t1 ** t2 + t1}${t1 ** t2 + t1}`;
>`hello ${t1 ** t2 + t1}${t1 ** t2 + t1}` : string
>`hello ${t1 ** t2 + t1}${t1 ** t2 + t1}` : `hello ${number}${number}`
>t1 ** t2 + t1 : number
>t1 ** t2 : number
>t1 : number
@@ -122,7 +122,7 @@ var s;
>t1 : number

`hello ${t1 + t2 ** t2 + t1}${t1 + t2 ** t2 + t1}`;
>`hello ${t1 + t2 ** t2 + t1}${t1 + t2 ** t2 + t1}` : string
>`hello ${t1 + t2 ** t2 + t1}${t1 + t2 ** t2 + t1}` : `hello ${number}${number}`
>t1 + t2 ** t2 + t1 : number
>t1 + t2 ** t2 : number
>t1 : number
@@ -139,7 +139,7 @@ var s;
>t1 : number

`hello ${typeof (t1 ** t2 ** t1) }${typeof (t1 ** t2 ** t1) }`;
>`hello ${typeof (t1 ** t2 ** t1) }${typeof (t1 ** t2 ** t1) }` : string
>`hello ${typeof (t1 ** t2 ** t1) }${typeof (t1 ** t2 ** t1) }` : "hello stringstring" | "hello stringnumber" | "hello stringbigint" | "hello stringboolean" | "hello stringsymbol" | "hello stringundefined" | "hello stringobject" | "hello stringfunction" | "hello numberstring" | "hello numbernumber" | "hello numberbigint" | "hello numberboolean" | "hello numbersymbol" | "hello numberundefined" | "hello numberobject" | "hello numberfunction" | "hello bigintstring" | "hello bigintnumber" | "hello bigintbigint" | "hello bigintboolean" | "hello bigintsymbol" | "hello bigintundefined" | "hello bigintobject" | "hello bigintfunction" | "hello booleanstring" | "hello booleannumber" | "hello booleanbigint" | "hello booleanboolean" | "hello booleansymbol" | "hello booleanundefined" | "hello booleanobject" | "hello booleanfunction" | "hello symbolstring" | "hello symbolnumber" | "hello symbolbigint" | "hello symbolboolean" | "hello symbolsymbol" | "hello symbolundefined" | "hello symbolobject" | "hello symbolfunction" | "hello undefinedstring" | "hello undefinednumber" | "hello undefinedbigint" | "hello undefinedboolean" | "hello undefinedsymbol" | "hello undefinedundefined" | "hello undefinedobject" | "hello undefinedfunction" | "hello objectstring" | "hello objectnumber" | "hello objectbigint" | "hello objectboolean" | "hello objectsymbol" | "hello objectundefined" | "hello objectobject" | "hello objectfunction" | "hello functionstring" | "hello functionnumber" | "hello functionbigint" | "hello functionboolean" | "hello functionsymbol" | "hello functionundefined" | "hello functionobject" | "hello functionfunction"
>typeof (t1 ** t2 ** t1) : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"
>(t1 ** t2 ** t1) : number
>t1 ** t2 ** t1 : number
@@ -156,7 +156,7 @@ var s;
>t1 : number

`hello ${t1 ** t2} hello world ${t1 ** t2}`;
>`hello ${t1 ** t2} hello world ${t1 ** t2}` : string
>`hello ${t1 ** t2} hello world ${t1 ** t2}` : `hello ${number} hello world ${number}`
>t1 ** t2 : number
>t1 : number
>t2 : number
@@ -165,7 +165,7 @@ var s;
>t2 : number

`hello ${t1 ** t2 ** t1} hello world ${t1 ** t2 ** t1}`;
>`hello ${t1 ** t2 ** t1} hello world ${t1 ** t2 ** t1}` : string
>`hello ${t1 ** t2 ** t1} hello world ${t1 ** t2 ** t1}` : `hello ${number} hello world ${number}`
>t1 ** t2 ** t1 : number
>t1 : number
>t2 ** t1 : number
@@ -178,7 +178,7 @@ var s;
>t1 : number

`hello ${t1 + t2 ** t1} hello world ${t1 + t2 ** t1}`;
>`hello ${t1 + t2 ** t1} hello world ${t1 + t2 ** t1}` : string
>`hello ${t1 + t2 ** t1} hello world ${t1 + t2 ** t1}` : `hello ${number} hello world ${number}`
>t1 + t2 ** t1 : number
>t1 : number
>t2 ** t1 : number
@@ -191,7 +191,7 @@ var s;
>t1 : number

`hello ${t1 ** t2 + t1} hello world ${t1 ** t2 + t1}`;
>`hello ${t1 ** t2 + t1} hello world ${t1 ** t2 + t1}` : string
>`hello ${t1 ** t2 + t1} hello world ${t1 ** t2 + t1}` : `hello ${number} hello world ${number}`
>t1 ** t2 + t1 : number
>t1 ** t2 : number
>t1 : number
@@ -204,7 +204,7 @@ var s;
>t1 : number

`hello ${t1 + t2 ** t2 + t1} hello world ${t1 + t2 ** t2 + t1}`;
>`hello ${t1 + t2 ** t2 + t1} hello world ${t1 + t2 ** t2 + t1}` : string
>`hello ${t1 + t2 ** t2 + t1} hello world ${t1 + t2 ** t2 + t1}` : `hello ${number} hello world ${number}`
>t1 + t2 ** t2 + t1 : number
>t1 + t2 ** t2 : number
>t1 : number
@@ -221,7 +221,7 @@ var s;
>t1 : number

`hello ${typeof (t1 ** t2 ** t1) } hello world ${typeof (t1 ** t2 ** t1) }`;
>`hello ${typeof (t1 ** t2 ** t1) } hello world ${typeof (t1 ** t2 ** t1) }` : string
>`hello ${typeof (t1 ** t2 ** t1) } hello world ${typeof (t1 ** t2 ** t1) }` : "hello string hello world string" | "hello string hello world number" | "hello string hello world bigint" | "hello string hello world boolean" | "hello string hello world symbol" | "hello string hello world undefined" | "hello string hello world object" | "hello string hello world function" | "hello number hello world string" | "hello number hello world number" | "hello number hello world bigint" | "hello number hello world boolean" | "hello number hello world symbol" | "hello number hello world undefined" | "hello number hello world object" | "hello number hello world function" | "hello bigint hello world string" | "hello bigint hello world number" | "hello bigint hello world bigint" | "hello bigint hello world boolean" | "hello bigint hello world symbol" | "hello bigint hello world undefined" | "hello bigint hello world object" | "hello bigint hello world function" | "hello boolean hello world string" | "hello boolean hello world number" | "hello boolean hello world bigint" | "hello boolean hello world boolean" | "hello boolean hello world symbol" | "hello boolean hello world undefined" | "hello boolean hello world object" | "hello boolean hello world function" | "hello symbol hello world string" | "hello symbol hello world number" | "hello symbol hello world bigint" | "hello symbol hello world boolean" | "hello symbol hello world symbol" | "hello symbol hello world undefined" | "hello symbol hello world object" | "hello symbol hello world function" | "hello undefined hello world string" | "hello undefined hello world number" | "hello undefined hello world bigint" | "hello undefined hello world boolean" | "hello undefined hello world symbol" | "hello undefined hello world undefined" | "hello undefined hello world object" | "hello undefined hello world function" | "hello object hello world string" | "hello object hello world number" | "hello object hello world bigint" | "hello object hello world boolean" | "hello object hello world symbol" | "hello object hello world undefined" | "hello object hello world object" | "hello object hello world function" | "hello function hello world string" | "hello function hello world number" | "hello function hello world bigint" | "hello function hello world boolean" | "hello function hello world symbol" | "hello function hello world undefined" | "hello function hello world object" | "hello function hello world function"
>typeof (t1 ** t2 ** t1) : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"
>(t1 ** t2 ** t1) : number
>t1 ** t2 ** t1 : number
Original file line number Diff line number Diff line change
@@ -12,37 +12,37 @@ var s;

// With templateHead
`hello ${t1 ** t2}`;
>`hello ${t1 ** t2}` : string
>`hello ${t1 ** t2}` : `hello ${number}`
>t1 ** t2 : number
>t1 : number
>t2 : number

`hello ${t1 ** t2 ** t1}`;
>`hello ${t1 ** t2 ** t1}` : string
>`hello ${t1 ** t2 ** t1}` : `hello ${number}`
>t1 ** t2 ** t1 : number
>t1 : number
>t2 ** t1 : number
>t2 : number
>t1 : number

`hello ${t1 + t2 ** t1}`;
>`hello ${t1 + t2 ** t1}` : string
>`hello ${t1 + t2 ** t1}` : `hello ${number}`
>t1 + t2 ** t1 : number
>t1 : number
>t2 ** t1 : number
>t2 : number
>t1 : number

`hello ${t1 ** t2 + t1}`;
>`hello ${t1 ** t2 + t1}` : string
>`hello ${t1 ** t2 + t1}` : `hello ${number}`
>t1 ** t2 + t1 : number
>t1 ** t2 : number
>t1 : number
>t2 : number
>t1 : number

`hello ${t1 + t2 ** t2 + t1 }`;
>`hello ${t1 + t2 ** t2 + t1 }` : string
>`hello ${t1 + t2 ** t2 + t1 }` : `hello ${number}`
>t1 + t2 ** t2 + t1 : number
>t1 + t2 ** t2 : number
>t1 : number
@@ -52,7 +52,7 @@ var s;
>t1 : number

`hello ${typeof (t1 ** t2 ** t1) }`;
>`hello ${typeof (t1 ** t2 ** t1) }` : string
>`hello ${typeof (t1 ** t2 ** t1) }` : "hello string" | "hello number" | "hello bigint" | "hello boolean" | "hello symbol" | "hello undefined" | "hello object" | "hello function"
>typeof (t1 ** t2 ** t1) : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"
>(t1 ** t2 ** t1) : number
>t1 ** t2 ** t1 : number
@@ -62,7 +62,7 @@ var s;
>t1 : number

`hello ${1 + typeof (t1 ** t2 ** t1) }`;
>`hello ${1 + typeof (t1 ** t2 ** t1) }` : string
>`hello ${1 + typeof (t1 ** t2 ** t1) }` : `hello ${string}`
>1 + typeof (t1 ** t2 ** t1) : string
>1 : 1
>typeof (t1 ** t2 ** t1) : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"
@@ -74,7 +74,7 @@ var s;
>t1 : number

`hello ${t1 ** t2}${t1 ** t2}`;
>`hello ${t1 ** t2}${t1 ** t2}` : string
>`hello ${t1 ** t2}${t1 ** t2}` : `hello ${number}${number}`
>t1 ** t2 : number
>t1 : number
>t2 : number
@@ -83,7 +83,7 @@ var s;
>t2 : number

`hello ${t1 ** t2 ** t1}${t1 ** t2 ** t1}`;
>`hello ${t1 ** t2 ** t1}${t1 ** t2 ** t1}` : string
>`hello ${t1 ** t2 ** t1}${t1 ** t2 ** t1}` : `hello ${number}${number}`
>t1 ** t2 ** t1 : number
>t1 : number
>t2 ** t1 : number
@@ -96,7 +96,7 @@ var s;
>t1 : number

`hello ${t1 + t2 ** t1}${t1 + t2 ** t1}`;
>`hello ${t1 + t2 ** t1}${t1 + t2 ** t1}` : string
>`hello ${t1 + t2 ** t1}${t1 + t2 ** t1}` : `hello ${number}${number}`
>t1 + t2 ** t1 : number
>t1 : number
>t2 ** t1 : number
@@ -109,7 +109,7 @@ var s;
>t1 : number

`hello ${t1 ** t2 + t1}${t1 ** t2 + t1}`;
>`hello ${t1 ** t2 + t1}${t1 ** t2 + t1}` : string
>`hello ${t1 ** t2 + t1}${t1 ** t2 + t1}` : `hello ${number}${number}`
>t1 ** t2 + t1 : number
>t1 ** t2 : number
>t1 : number
@@ -122,7 +122,7 @@ var s;
>t1 : number

`hello ${t1 + t2 ** t2 + t1}${t1 + t2 ** t2 + t1}`;
>`hello ${t1 + t2 ** t2 + t1}${t1 + t2 ** t2 + t1}` : string
>`hello ${t1 + t2 ** t2 + t1}${t1 + t2 ** t2 + t1}` : `hello ${number}${number}`
>t1 + t2 ** t2 + t1 : number
>t1 + t2 ** t2 : number
>t1 : number
@@ -139,7 +139,7 @@ var s;
>t1 : number

`hello ${typeof (t1 ** t2 ** t1) }${typeof (t1 ** t2 ** t1) }`;
>`hello ${typeof (t1 ** t2 ** t1) }${typeof (t1 ** t2 ** t1) }` : string
>`hello ${typeof (t1 ** t2 ** t1) }${typeof (t1 ** t2 ** t1) }` : "hello stringstring" | "hello stringnumber" | "hello stringbigint" | "hello stringboolean" | "hello stringsymbol" | "hello stringundefined" | "hello stringobject" | "hello stringfunction" | "hello numberstring" | "hello numbernumber" | "hello numberbigint" | "hello numberboolean" | "hello numbersymbol" | "hello numberundefined" | "hello numberobject" | "hello numberfunction" | "hello bigintstring" | "hello bigintnumber" | "hello bigintbigint" | "hello bigintboolean" | "hello bigintsymbol" | "hello bigintundefined" | "hello bigintobject" | "hello bigintfunction" | "hello booleanstring" | "hello booleannumber" | "hello booleanbigint" | "hello booleanboolean" | "hello booleansymbol" | "hello booleanundefined" | "hello booleanobject" | "hello booleanfunction" | "hello symbolstring" | "hello symbolnumber" | "hello symbolbigint" | "hello symbolboolean" | "hello symbolsymbol" | "hello symbolundefined" | "hello symbolobject" | "hello symbolfunction" | "hello undefinedstring" | "hello undefinednumber" | "hello undefinedbigint" | "hello undefinedboolean" | "hello undefinedsymbol" | "hello undefinedundefined" | "hello undefinedobject" | "hello undefinedfunction" | "hello objectstring" | "hello objectnumber" | "hello objectbigint" | "hello objectboolean" | "hello objectsymbol" | "hello objectundefined" | "hello objectobject" | "hello objectfunction" | "hello functionstring" | "hello functionnumber" | "hello functionbigint" | "hello functionboolean" | "hello functionsymbol" | "hello functionundefined" | "hello functionobject" | "hello functionfunction"
>typeof (t1 ** t2 ** t1) : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"
>(t1 ** t2 ** t1) : number
>t1 ** t2 ** t1 : number
@@ -156,7 +156,7 @@ var s;
>t1 : number

`hello ${t1 ** t2} hello world ${t1 ** t2}`;
>`hello ${t1 ** t2} hello world ${t1 ** t2}` : string
>`hello ${t1 ** t2} hello world ${t1 ** t2}` : `hello ${number} hello world ${number}`
>t1 ** t2 : number
>t1 : number
>t2 : number
@@ -165,7 +165,7 @@ var s;
>t2 : number

`hello ${t1 ** t2 ** t1} hello world ${t1 ** t2 ** t1}`;
>`hello ${t1 ** t2 ** t1} hello world ${t1 ** t2 ** t1}` : string
>`hello ${t1 ** t2 ** t1} hello world ${t1 ** t2 ** t1}` : `hello ${number} hello world ${number}`
>t1 ** t2 ** t1 : number
>t1 : number
>t2 ** t1 : number
@@ -178,7 +178,7 @@ var s;
>t1 : number

`hello ${t1 + t2 ** t1} hello world ${t1 + t2 ** t1}`;
>`hello ${t1 + t2 ** t1} hello world ${t1 + t2 ** t1}` : string
>`hello ${t1 + t2 ** t1} hello world ${t1 + t2 ** t1}` : `hello ${number} hello world ${number}`
>t1 + t2 ** t1 : number
>t1 : number
>t2 ** t1 : number
@@ -191,7 +191,7 @@ var s;
>t1 : number

`hello ${t1 ** t2 + t1} hello world ${t1 ** t2 + t1}`;
>`hello ${t1 ** t2 + t1} hello world ${t1 ** t2 + t1}` : string
>`hello ${t1 ** t2 + t1} hello world ${t1 ** t2 + t1}` : `hello ${number} hello world ${number}`
>t1 ** t2 + t1 : number
>t1 ** t2 : number
>t1 : number
@@ -204,7 +204,7 @@ var s;
>t1 : number

`hello ${t1 + t2 ** t2 + t1} hello world ${t1 + t2 ** t2 + t1}`;
>`hello ${t1 + t2 ** t2 + t1} hello world ${t1 + t2 ** t2 + t1}` : string
>`hello ${t1 + t2 ** t2 + t1} hello world ${t1 + t2 ** t2 + t1}` : `hello ${number} hello world ${number}`
>t1 + t2 ** t2 + t1 : number
>t1 + t2 ** t2 : number
>t1 : number
@@ -221,7 +221,7 @@ var s;
>t1 : number

`hello ${typeof (t1 ** t2 ** t1) } hello world ${typeof (t1 ** t2 ** t1) }`;
>`hello ${typeof (t1 ** t2 ** t1) } hello world ${typeof (t1 ** t2 ** t1) }` : string
>`hello ${typeof (t1 ** t2 ** t1) } hello world ${typeof (t1 ** t2 ** t1) }` : "hello string hello world string" | "hello string hello world number" | "hello string hello world bigint" | "hello string hello world boolean" | "hello string hello world symbol" | "hello string hello world undefined" | "hello string hello world object" | "hello string hello world function" | "hello number hello world string" | "hello number hello world number" | "hello number hello world bigint" | "hello number hello world boolean" | "hello number hello world symbol" | "hello number hello world undefined" | "hello number hello world object" | "hello number hello world function" | "hello bigint hello world string" | "hello bigint hello world number" | "hello bigint hello world bigint" | "hello bigint hello world boolean" | "hello bigint hello world symbol" | "hello bigint hello world undefined" | "hello bigint hello world object" | "hello bigint hello world function" | "hello boolean hello world string" | "hello boolean hello world number" | "hello boolean hello world bigint" | "hello boolean hello world boolean" | "hello boolean hello world symbol" | "hello boolean hello world undefined" | "hello boolean hello world object" | "hello boolean hello world function" | "hello symbol hello world string" | "hello symbol hello world number" | "hello symbol hello world bigint" | "hello symbol hello world boolean" | "hello symbol hello world symbol" | "hello symbol hello world undefined" | "hello symbol hello world object" | "hello symbol hello world function" | "hello undefined hello world string" | "hello undefined hello world number" | "hello undefined hello world bigint" | "hello undefined hello world boolean" | "hello undefined hello world symbol" | "hello undefined hello world undefined" | "hello undefined hello world object" | "hello undefined hello world function" | "hello object hello world string" | "hello object hello world number" | "hello object hello world bigint" | "hello object hello world boolean" | "hello object hello world symbol" | "hello object hello world undefined" | "hello object hello world object" | "hello object hello world function" | "hello function hello world string" | "hello function hello world number" | "hello function hello world bigint" | "hello function hello world boolean" | "hello function hello world symbol" | "hello function hello world undefined" | "hello function hello world object" | "hello function hello world function"
>typeof (t1 ** t2 ** t1) : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"
>(t1 ** t2 ** t1) : number
>t1 ** t2 ** t1 : number
Original file line number Diff line number Diff line change
@@ -12,37 +12,37 @@ var s;

// With TemplateTail
`${t1 ** t2} world`;
>`${t1 ** t2} world` : string
>`${t1 ** t2} world` : `${number} world`
>t1 ** t2 : number
>t1 : number
>t2 : number

`${t1 ** t2 ** t1} world`;
>`${t1 ** t2 ** t1} world` : string
>`${t1 ** t2 ** t1} world` : `${number} world`
>t1 ** t2 ** t1 : number
>t1 : number
>t2 ** t1 : number
>t2 : number
>t1 : number

`${t1 + t2 ** t1} world`;
>`${t1 + t2 ** t1} world` : string
>`${t1 + t2 ** t1} world` : `${number} world`
>t1 + t2 ** t1 : number
>t1 : number
>t2 ** t1 : number
>t2 : number
>t1 : number

`${t1 ** t2 + t1} world`;
>`${t1 ** t2 + t1} world` : string
>`${t1 ** t2 + t1} world` : `${number} world`
>t1 ** t2 + t1 : number
>t1 ** t2 : number
>t1 : number
>t2 : number
>t1 : number

`${t1 + t2 ** t2 + t1 } world`;
>`${t1 + t2 ** t2 + t1 } world` : string
>`${t1 + t2 ** t2 + t1 } world` : `${number} world`
>t1 + t2 ** t2 + t1 : number
>t1 + t2 ** t2 : number
>t1 : number
@@ -52,7 +52,7 @@ var s;
>t1 : number

`${typeof (t1 ** t2 ** t1) } world`;
>`${typeof (t1 ** t2 ** t1) } world` : string
>`${typeof (t1 ** t2 ** t1) } world` : "string world" | "number world" | "bigint world" | "boolean world" | "symbol world" | "undefined world" | "object world" | "function world"
>typeof (t1 ** t2 ** t1) : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"
>(t1 ** t2 ** t1) : number
>t1 ** t2 ** t1 : number
@@ -62,7 +62,7 @@ var s;
>t1 : number

`${1 + typeof (t1 ** t2 ** t1) } world`;
>`${1 + typeof (t1 ** t2 ** t1) } world` : string
>`${1 + typeof (t1 ** t2 ** t1) } world` : `${string} world`
>1 + typeof (t1 ** t2 ** t1) : string
>1 : 1
>typeof (t1 ** t2 ** t1) : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"
@@ -74,7 +74,7 @@ var s;
>t1 : number

`${t1 ** t2}${t1 ** t2} world`;
>`${t1 ** t2}${t1 ** t2} world` : string
>`${t1 ** t2}${t1 ** t2} world` : `${number}${number} world`
>t1 ** t2 : number
>t1 : number
>t2 : number
@@ -83,7 +83,7 @@ var s;
>t2 : number

`${t1 ** t2 ** t1}${t1 ** t2 ** t1} world`;
>`${t1 ** t2 ** t1}${t1 ** t2 ** t1} world` : string
>`${t1 ** t2 ** t1}${t1 ** t2 ** t1} world` : `${number}${number} world`
>t1 ** t2 ** t1 : number
>t1 : number
>t2 ** t1 : number
@@ -96,7 +96,7 @@ var s;
>t1 : number

`${t1 + t2 ** t1}${t1 + t2 ** t1} world`;
>`${t1 + t2 ** t1}${t1 + t2 ** t1} world` : string
>`${t1 + t2 ** t1}${t1 + t2 ** t1} world` : `${number}${number} world`
>t1 + t2 ** t1 : number
>t1 : number
>t2 ** t1 : number
@@ -109,7 +109,7 @@ var s;
>t1 : number

`${t1 ** t2 + t1}${t1 ** t2 + t1} world`;
>`${t1 ** t2 + t1}${t1 ** t2 + t1} world` : string
>`${t1 ** t2 + t1}${t1 ** t2 + t1} world` : `${number}${number} world`
>t1 ** t2 + t1 : number
>t1 ** t2 : number
>t1 : number
@@ -122,7 +122,7 @@ var s;
>t1 : number

`${t1 + t2 ** t2 + t1}${t1 + t2 ** t2 + t1} world`;
>`${t1 + t2 ** t2 + t1}${t1 + t2 ** t2 + t1} world` : string
>`${t1 + t2 ** t2 + t1}${t1 + t2 ** t2 + t1} world` : `${number}${number} world`
>t1 + t2 ** t2 + t1 : number
>t1 + t2 ** t2 : number
>t1 : number
@@ -139,7 +139,7 @@ var s;
>t1 : number

`${typeof (t1 ** t2 ** t1) }${typeof (t1 ** t2 ** t1) } world`;
>`${typeof (t1 ** t2 ** t1) }${typeof (t1 ** t2 ** t1) } world` : string
>`${typeof (t1 ** t2 ** t1) }${typeof (t1 ** t2 ** t1) } world` : "stringstring world" | "stringnumber world" | "stringbigint world" | "stringboolean world" | "stringsymbol world" | "stringundefined world" | "stringobject world" | "stringfunction world" | "numberstring world" | "numbernumber world" | "numberbigint world" | "numberboolean world" | "numbersymbol world" | "numberundefined world" | "numberobject world" | "numberfunction world" | "bigintstring world" | "bigintnumber world" | "bigintbigint world" | "bigintboolean world" | "bigintsymbol world" | "bigintundefined world" | "bigintobject world" | "bigintfunction world" | "booleanstring world" | "booleannumber world" | "booleanbigint world" | "booleanboolean world" | "booleansymbol world" | "booleanundefined world" | "booleanobject world" | "booleanfunction world" | "symbolstring world" | "symbolnumber world" | "symbolbigint world" | "symbolboolean world" | "symbolsymbol world" | "symbolundefined world" | "symbolobject world" | "symbolfunction world" | "undefinedstring world" | "undefinednumber world" | "undefinedbigint world" | "undefinedboolean world" | "undefinedsymbol world" | "undefinedundefined world" | "undefinedobject world" | "undefinedfunction world" | "objectstring world" | "objectnumber world" | "objectbigint world" | "objectboolean world" | "objectsymbol world" | "objectundefined world" | "objectobject world" | "objectfunction world" | "functionstring world" | "functionnumber world" | "functionbigint world" | "functionboolean world" | "functionsymbol world" | "functionundefined world" | "functionobject world" | "functionfunction world"
>typeof (t1 ** t2 ** t1) : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"
>(t1 ** t2 ** t1) : number
>t1 ** t2 ** t1 : number
@@ -156,7 +156,7 @@ var s;
>t1 : number

`${t1 ** t2} hello world ${t1 ** t2} !!`;
>`${t1 ** t2} hello world ${t1 ** t2} !!` : string
>`${t1 ** t2} hello world ${t1 ** t2} !!` : `${number} hello world ${number} !!`
>t1 ** t2 : number
>t1 : number
>t2 : number
@@ -165,7 +165,7 @@ var s;
>t2 : number

`${t1 ** t2 ** t1} hello world ${t1 ** t2 ** t1} !!`;
>`${t1 ** t2 ** t1} hello world ${t1 ** t2 ** t1} !!` : string
>`${t1 ** t2 ** t1} hello world ${t1 ** t2 ** t1} !!` : `${number} hello world ${number} !!`
>t1 ** t2 ** t1 : number
>t1 : number
>t2 ** t1 : number
@@ -178,7 +178,7 @@ var s;
>t1 : number

`${t1 + t2 ** t1} hello world ${t1 + t2 ** t1} !!`;
>`${t1 + t2 ** t1} hello world ${t1 + t2 ** t1} !!` : string
>`${t1 + t2 ** t1} hello world ${t1 + t2 ** t1} !!` : `${number} hello world ${number} !!`
>t1 + t2 ** t1 : number
>t1 : number
>t2 ** t1 : number
@@ -191,7 +191,7 @@ var s;
>t1 : number

`${t1 ** t2 + t1} hello world ${t1 ** t2 + t1} !!`;
>`${t1 ** t2 + t1} hello world ${t1 ** t2 + t1} !!` : string
>`${t1 ** t2 + t1} hello world ${t1 ** t2 + t1} !!` : `${number} hello world ${number} !!`
>t1 ** t2 + t1 : number
>t1 ** t2 : number
>t1 : number
@@ -204,7 +204,7 @@ var s;
>t1 : number

`${t1 + t2 ** t2 + t1} hello world ${t1 + t2 ** t2 + t1} !!`;
>`${t1 + t2 ** t2 + t1} hello world ${t1 + t2 ** t2 + t1} !!` : string
>`${t1 + t2 ** t2 + t1} hello world ${t1 + t2 ** t2 + t1} !!` : `${number} hello world ${number} !!`
>t1 + t2 ** t2 + t1 : number
>t1 + t2 ** t2 : number
>t1 : number
@@ -221,7 +221,7 @@ var s;
>t1 : number

`${typeof (t1 ** t2 ** t1) } hello world ${typeof (t1 ** t2 ** t1)} !!`;
>`${typeof (t1 ** t2 ** t1) } hello world ${typeof (t1 ** t2 ** t1)} !!` : string
>`${typeof (t1 ** t2 ** t1) } hello world ${typeof (t1 ** t2 ** t1)} !!` : "string hello world string !!" | "string hello world number !!" | "string hello world bigint !!" | "string hello world boolean !!" | "string hello world symbol !!" | "string hello world undefined !!" | "string hello world object !!" | "string hello world function !!" | "number hello world string !!" | "number hello world number !!" | "number hello world bigint !!" | "number hello world boolean !!" | "number hello world symbol !!" | "number hello world undefined !!" | "number hello world object !!" | "number hello world function !!" | "bigint hello world string !!" | "bigint hello world number !!" | "bigint hello world bigint !!" | "bigint hello world boolean !!" | "bigint hello world symbol !!" | "bigint hello world undefined !!" | "bigint hello world object !!" | "bigint hello world function !!" | "boolean hello world string !!" | "boolean hello world number !!" | "boolean hello world bigint !!" | "boolean hello world boolean !!" | "boolean hello world symbol !!" | "boolean hello world undefined !!" | "boolean hello world object !!" | "boolean hello world function !!" | "symbol hello world string !!" | "symbol hello world number !!" | "symbol hello world bigint !!" | "symbol hello world boolean !!" | "symbol hello world symbol !!" | "symbol hello world undefined !!" | "symbol hello world object !!" | "symbol hello world function !!" | "undefined hello world string !!" | "undefined hello world number !!" | "undefined hello world bigint !!" | "undefined hello world boolean !!" | "undefined hello world symbol !!" | "undefined hello world undefined !!" | "undefined hello world object !!" | "undefined hello world function !!" | "object hello world string !!" | "object hello world number !!" | "object hello world bigint !!" | "object hello world boolean !!" | "object hello world symbol !!" | "object hello world undefined !!" | "object hello world object !!" | "object hello world function !!" | "function hello world string !!" | "function hello world number !!" | "function hello world bigint !!" | "function hello world boolean !!" | "function hello world symbol !!" | "function hello world undefined !!" | "function hello world object !!" | "function hello world function !!"
>typeof (t1 ** t2 ** t1) : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"
>(t1 ** t2 ** t1) : number
>t1 ** t2 ** t1 : number
Original file line number Diff line number Diff line change
@@ -12,37 +12,37 @@ var s;

// With TemplateTail
`${t1 ** t2} world`;
>`${t1 ** t2} world` : string
>`${t1 ** t2} world` : `${number} world`
>t1 ** t2 : number
>t1 : number
>t2 : number

`${t1 ** t2 ** t1} world`;
>`${t1 ** t2 ** t1} world` : string
>`${t1 ** t2 ** t1} world` : `${number} world`
>t1 ** t2 ** t1 : number
>t1 : number
>t2 ** t1 : number
>t2 : number
>t1 : number

`${t1 + t2 ** t1} world`;
>`${t1 + t2 ** t1} world` : string
>`${t1 + t2 ** t1} world` : `${number} world`
>t1 + t2 ** t1 : number
>t1 : number
>t2 ** t1 : number
>t2 : number
>t1 : number

`${t1 ** t2 + t1} world`;
>`${t1 ** t2 + t1} world` : string
>`${t1 ** t2 + t1} world` : `${number} world`
>t1 ** t2 + t1 : number
>t1 ** t2 : number
>t1 : number
>t2 : number
>t1 : number

`${t1 + t2 ** t2 + t1 } world`;
>`${t1 + t2 ** t2 + t1 } world` : string
>`${t1 + t2 ** t2 + t1 } world` : `${number} world`
>t1 + t2 ** t2 + t1 : number
>t1 + t2 ** t2 : number
>t1 : number
@@ -52,7 +52,7 @@ var s;
>t1 : number

`${typeof (t1 ** t2 ** t1) } world`;
>`${typeof (t1 ** t2 ** t1) } world` : string
>`${typeof (t1 ** t2 ** t1) } world` : "string world" | "number world" | "bigint world" | "boolean world" | "symbol world" | "undefined world" | "object world" | "function world"
>typeof (t1 ** t2 ** t1) : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"
>(t1 ** t2 ** t1) : number
>t1 ** t2 ** t1 : number
@@ -62,7 +62,7 @@ var s;
>t1 : number

`${1 + typeof (t1 ** t2 ** t1) } world`;
>`${1 + typeof (t1 ** t2 ** t1) } world` : string
>`${1 + typeof (t1 ** t2 ** t1) } world` : `${string} world`
>1 + typeof (t1 ** t2 ** t1) : string
>1 : 1
>typeof (t1 ** t2 ** t1) : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"
@@ -74,7 +74,7 @@ var s;
>t1 : number

`${t1 ** t2}${t1 ** t2} world`;
>`${t1 ** t2}${t1 ** t2} world` : string
>`${t1 ** t2}${t1 ** t2} world` : `${number}${number} world`
>t1 ** t2 : number
>t1 : number
>t2 : number
@@ -83,7 +83,7 @@ var s;
>t2 : number

`${t1 ** t2 ** t1}${t1 ** t2 ** t1} world`;
>`${t1 ** t2 ** t1}${t1 ** t2 ** t1} world` : string
>`${t1 ** t2 ** t1}${t1 ** t2 ** t1} world` : `${number}${number} world`
>t1 ** t2 ** t1 : number
>t1 : number
>t2 ** t1 : number
@@ -96,7 +96,7 @@ var s;
>t1 : number

`${t1 + t2 ** t1}${t1 + t2 ** t1} world`;
>`${t1 + t2 ** t1}${t1 + t2 ** t1} world` : string
>`${t1 + t2 ** t1}${t1 + t2 ** t1} world` : `${number}${number} world`
>t1 + t2 ** t1 : number
>t1 : number
>t2 ** t1 : number
@@ -109,7 +109,7 @@ var s;
>t1 : number

`${t1 ** t2 + t1}${t1 ** t2 + t1} world`;
>`${t1 ** t2 + t1}${t1 ** t2 + t1} world` : string
>`${t1 ** t2 + t1}${t1 ** t2 + t1} world` : `${number}${number} world`
>t1 ** t2 + t1 : number
>t1 ** t2 : number
>t1 : number
@@ -122,7 +122,7 @@ var s;
>t1 : number

`${t1 + t2 ** t2 + t1}${t1 + t2 ** t2 + t1} world`;
>`${t1 + t2 ** t2 + t1}${t1 + t2 ** t2 + t1} world` : string
>`${t1 + t2 ** t2 + t1}${t1 + t2 ** t2 + t1} world` : `${number}${number} world`
>t1 + t2 ** t2 + t1 : number
>t1 + t2 ** t2 : number
>t1 : number
@@ -139,7 +139,7 @@ var s;
>t1 : number

`${typeof (t1 ** t2 ** t1) }${typeof (t1 ** t2 ** t1) } world`;
>`${typeof (t1 ** t2 ** t1) }${typeof (t1 ** t2 ** t1) } world` : string
>`${typeof (t1 ** t2 ** t1) }${typeof (t1 ** t2 ** t1) } world` : "stringstring world" | "stringnumber world" | "stringbigint world" | "stringboolean world" | "stringsymbol world" | "stringundefined world" | "stringobject world" | "stringfunction world" | "numberstring world" | "numbernumber world" | "numberbigint world" | "numberboolean world" | "numbersymbol world" | "numberundefined world" | "numberobject world" | "numberfunction world" | "bigintstring world" | "bigintnumber world" | "bigintbigint world" | "bigintboolean world" | "bigintsymbol world" | "bigintundefined world" | "bigintobject world" | "bigintfunction world" | "booleanstring world" | "booleannumber world" | "booleanbigint world" | "booleanboolean world" | "booleansymbol world" | "booleanundefined world" | "booleanobject world" | "booleanfunction world" | "symbolstring world" | "symbolnumber world" | "symbolbigint world" | "symbolboolean world" | "symbolsymbol world" | "symbolundefined world" | "symbolobject world" | "symbolfunction world" | "undefinedstring world" | "undefinednumber world" | "undefinedbigint world" | "undefinedboolean world" | "undefinedsymbol world" | "undefinedundefined world" | "undefinedobject world" | "undefinedfunction world" | "objectstring world" | "objectnumber world" | "objectbigint world" | "objectboolean world" | "objectsymbol world" | "objectundefined world" | "objectobject world" | "objectfunction world" | "functionstring world" | "functionnumber world" | "functionbigint world" | "functionboolean world" | "functionsymbol world" | "functionundefined world" | "functionobject world" | "functionfunction world"
>typeof (t1 ** t2 ** t1) : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"
>(t1 ** t2 ** t1) : number
>t1 ** t2 ** t1 : number
@@ -156,7 +156,7 @@ var s;
>t1 : number

`${t1 ** t2} hello world ${t1 ** t2} !!`;
>`${t1 ** t2} hello world ${t1 ** t2} !!` : string
>`${t1 ** t2} hello world ${t1 ** t2} !!` : `${number} hello world ${number} !!`
>t1 ** t2 : number
>t1 : number
>t2 : number
@@ -165,7 +165,7 @@ var s;
>t2 : number

`${t1 ** t2 ** t1} hello world ${t1 ** t2 ** t1} !!`;
>`${t1 ** t2 ** t1} hello world ${t1 ** t2 ** t1} !!` : string
>`${t1 ** t2 ** t1} hello world ${t1 ** t2 ** t1} !!` : `${number} hello world ${number} !!`
>t1 ** t2 ** t1 : number
>t1 : number
>t2 ** t1 : number
@@ -178,7 +178,7 @@ var s;
>t1 : number

`${t1 + t2 ** t1} hello world ${t1 + t2 ** t1} !!`;
>`${t1 + t2 ** t1} hello world ${t1 + t2 ** t1} !!` : string
>`${t1 + t2 ** t1} hello world ${t1 + t2 ** t1} !!` : `${number} hello world ${number} !!`
>t1 + t2 ** t1 : number
>t1 : number
>t2 ** t1 : number
@@ -191,7 +191,7 @@ var s;
>t1 : number

`${t1 ** t2 + t1} hello world ${t1 ** t2 + t1} !!`;
>`${t1 ** t2 + t1} hello world ${t1 ** t2 + t1} !!` : string
>`${t1 ** t2 + t1} hello world ${t1 ** t2 + t1} !!` : `${number} hello world ${number} !!`
>t1 ** t2 + t1 : number
>t1 ** t2 : number
>t1 : number
@@ -204,7 +204,7 @@ var s;
>t1 : number

`${t1 + t2 ** t2 + t1} hello world ${t1 + t2 ** t2 + t1} !!`;
>`${t1 + t2 ** t2 + t1} hello world ${t1 + t2 ** t2 + t1} !!` : string
>`${t1 + t2 ** t2 + t1} hello world ${t1 + t2 ** t2 + t1} !!` : `${number} hello world ${number} !!`
>t1 + t2 ** t2 + t1 : number
>t1 + t2 ** t2 : number
>t1 : number
@@ -221,7 +221,7 @@ var s;
>t1 : number

`${typeof (t1 ** t2 ** t1) } hello world ${typeof (t1 ** t2 ** t1)} !!`;
>`${typeof (t1 ** t2 ** t1) } hello world ${typeof (t1 ** t2 ** t1)} !!` : string
>`${typeof (t1 ** t2 ** t1) } hello world ${typeof (t1 ** t2 ** t1)} !!` : "string hello world string !!" | "string hello world number !!" | "string hello world bigint !!" | "string hello world boolean !!" | "string hello world symbol !!" | "string hello world undefined !!" | "string hello world object !!" | "string hello world function !!" | "number hello world string !!" | "number hello world number !!" | "number hello world bigint !!" | "number hello world boolean !!" | "number hello world symbol !!" | "number hello world undefined !!" | "number hello world object !!" | "number hello world function !!" | "bigint hello world string !!" | "bigint hello world number !!" | "bigint hello world bigint !!" | "bigint hello world boolean !!" | "bigint hello world symbol !!" | "bigint hello world undefined !!" | "bigint hello world object !!" | "bigint hello world function !!" | "boolean hello world string !!" | "boolean hello world number !!" | "boolean hello world bigint !!" | "boolean hello world boolean !!" | "boolean hello world symbol !!" | "boolean hello world undefined !!" | "boolean hello world object !!" | "boolean hello world function !!" | "symbol hello world string !!" | "symbol hello world number !!" | "symbol hello world bigint !!" | "symbol hello world boolean !!" | "symbol hello world symbol !!" | "symbol hello world undefined !!" | "symbol hello world object !!" | "symbol hello world function !!" | "undefined hello world string !!" | "undefined hello world number !!" | "undefined hello world bigint !!" | "undefined hello world boolean !!" | "undefined hello world symbol !!" | "undefined hello world undefined !!" | "undefined hello world object !!" | "undefined hello world function !!" | "object hello world string !!" | "object hello world number !!" | "object hello world bigint !!" | "object hello world boolean !!" | "object hello world symbol !!" | "object hello world undefined !!" | "object hello world object !!" | "object hello world function !!" | "function hello world string !!" | "function hello world number !!" | "function hello world bigint !!" | "function hello world boolean !!" | "function hello world symbol !!" | "function hello world undefined !!" | "function hello world object !!" | "function hello world function !!"
>typeof (t1 ** t2 ** t1) : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"
>(t1 ** t2 ** t1) : number
>t1 ** t2 ** t1 : number
Original file line number Diff line number Diff line change
@@ -106,7 +106,7 @@ enum T5 {

g = `1${"2"}3`,
>g : T5.e
>`1${"2"}3` : string
>`1${"2"}3` : "123"
>"2" : "2"

h = `1`.length
Original file line number Diff line number Diff line change
@@ -19,8 +19,8 @@ const sayHello = (name?: string) => void (`Hello, ${name}!`);
>(name?: string) => void (`Hello, ${name}!`) : (name?: string) => any
>name : string
>void (`Hello, ${name}!`) : undefined
>(`Hello, ${name}!`) : string
>`Hello, ${name}!` : string
>(`Hello, ${name}!`) : `Hello, ${string}!`
>`Hello, ${name}!` : `Hello, ${string}!`
>name : string

export default sayHello;
Original file line number Diff line number Diff line change
@@ -13,7 +13,7 @@ var s;
// Error: early syntax error using ES7 SimpleUnaryExpression on left-hand side without ()
// TempateHead & TemplateTail are empty
`${1 + typeof t1 ** t2 ** t1}`;
>`${1 + typeof t1 ** t2 ** t1}` : string
>`${1 + typeof t1 ** t2 ** t1}` : `${number}`
>1 + typeof t1 ** t2 ** t1 : number
>1 : 1
>typeof t1 ** t2 ** t1 : number
@@ -24,7 +24,7 @@ var s;
>t1 : number

`${-t1 ** t2 - t1}`;
>`${-t1 ** t2 - t1}` : string
>`${-t1 ** t2 - t1}` : `${number}`
>-t1 ** t2 - t1 : number
>-t1 ** t2 : number
>-t1 : number
@@ -33,7 +33,7 @@ var s;
>t1 : number

`${-++t1 ** t2 - t1}`;
>`${-++t1 ** t2 - t1}` : string
>`${-++t1 ** t2 - t1}` : `${number}`
>-++t1 ** t2 - t1 : number
>-++t1 ** t2 : number
>-++t1 : number
@@ -43,7 +43,7 @@ var s;
>t1 : number

`${-t1++ ** t2 - t1}`;
>`${-t1++ ** t2 - t1}` : string
>`${-t1++ ** t2 - t1}` : `${number}`
>-t1++ ** t2 - t1 : number
>-t1++ ** t2 : number
>-t1++ : number
@@ -53,7 +53,7 @@ var s;
>t1 : number

`${!t1 ** t2 ** --t1 }`;
>`${!t1 ** t2 ** --t1 }` : string
>`${!t1 ** t2 ** --t1 }` : `${number}`
>!t1 ** t2 ** --t1 : number
>!t1 : boolean
>t1 : number
@@ -63,7 +63,7 @@ var s;
>t1 : number

`${typeof t1 ** t2 ** t1}`;
>`${typeof t1 ** t2 ** t1}` : string
>`${typeof t1 ** t2 ** t1}` : `${number}`
>typeof t1 ** t2 ** t1 : number
>typeof t1 : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"
>t1 : number
@@ -72,7 +72,7 @@ var s;
>t1 : number

`${-t1 ** t2 - t1}${-t1 ** t2 - t1}`;
>`${-t1 ** t2 - t1}${-t1 ** t2 - t1}` : string
>`${-t1 ** t2 - t1}${-t1 ** t2 - t1}` : `${number}${number}`
>-t1 ** t2 - t1 : number
>-t1 ** t2 : number
>-t1 : number
@@ -87,7 +87,7 @@ var s;
>t1 : number

`${-++t1 ** t2 - t1}${-++t1 ** t2 - t1}`;
>`${-++t1 ** t2 - t1}${-++t1 ** t2 - t1}` : string
>`${-++t1 ** t2 - t1}${-++t1 ** t2 - t1}` : `${number}${number}`
>-++t1 ** t2 - t1 : number
>-++t1 ** t2 : number
>-++t1 : number
@@ -104,7 +104,7 @@ var s;
>t1 : number

`${-t1++ ** t2 - t1}${-t1++ ** t2 - t1}`;
>`${-t1++ ** t2 - t1}${-t1++ ** t2 - t1}` : string
>`${-t1++ ** t2 - t1}${-t1++ ** t2 - t1}` : `${number}${number}`
>-t1++ ** t2 - t1 : number
>-t1++ ** t2 : number
>-t1++ : number
@@ -121,7 +121,7 @@ var s;
>t1 : number

`${!t1 ** t2 ** --t1 }${!t1 ** t2 ** --t1 }`;
>`${!t1 ** t2 ** --t1 }${!t1 ** t2 ** --t1 }` : string
>`${!t1 ** t2 ** --t1 }${!t1 ** t2 ** --t1 }` : `${number}${number}`
>!t1 ** t2 ** --t1 : number
>!t1 : boolean
>t1 : number
@@ -138,7 +138,7 @@ var s;
>t1 : number

`${typeof t1 ** t2 ** t1}${typeof t1 ** t2 ** t1}`;
>`${typeof t1 ** t2 ** t1}${typeof t1 ** t2 ** t1}` : string
>`${typeof t1 ** t2 ** t1}${typeof t1 ** t2 ** t1}` : `${number}${number}`
>typeof t1 ** t2 ** t1 : number
>typeof t1 : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"
>t1 : number
@@ -153,7 +153,7 @@ var s;
>t1 : number

`${1 + typeof t1 ** t2 ** t1}${1 + typeof t1 ** t2 ** t1}`;
>`${1 + typeof t1 ** t2 ** t1}${1 + typeof t1 ** t2 ** t1}` : string
>`${1 + typeof t1 ** t2 ** t1}${1 + typeof t1 ** t2 ** t1}` : `${number}${number}`
>1 + typeof t1 ** t2 ** t1 : number
>1 : 1
>typeof t1 ** t2 ** t1 : number
@@ -172,7 +172,7 @@ var s;
>t1 : number

`${-t1 ** t2 - t1} hello world ${-t1 ** t2 - t1}`;
>`${-t1 ** t2 - t1} hello world ${-t1 ** t2 - t1}` : string
>`${-t1 ** t2 - t1} hello world ${-t1 ** t2 - t1}` : `${number} hello world ${number}`
>-t1 ** t2 - t1 : number
>-t1 ** t2 : number
>-t1 : number
@@ -187,7 +187,7 @@ var s;
>t1 : number

`${-++t1 ** t2 - t1} hello world ${-++t1 ** t2 - t1}`;
>`${-++t1 ** t2 - t1} hello world ${-++t1 ** t2 - t1}` : string
>`${-++t1 ** t2 - t1} hello world ${-++t1 ** t2 - t1}` : `${number} hello world ${number}`
>-++t1 ** t2 - t1 : number
>-++t1 ** t2 : number
>-++t1 : number
@@ -204,7 +204,7 @@ var s;
>t1 : number

`${-t1++ ** t2 - t1} hello world ${-t1++ ** t2 - t1}`;
>`${-t1++ ** t2 - t1} hello world ${-t1++ ** t2 - t1}` : string
>`${-t1++ ** t2 - t1} hello world ${-t1++ ** t2 - t1}` : `${number} hello world ${number}`
>-t1++ ** t2 - t1 : number
>-t1++ ** t2 : number
>-t1++ : number
@@ -221,7 +221,7 @@ var s;
>t1 : number

`${!t1 ** t2 ** --t1 } hello world ${!t1 ** t2 ** --t1 }`;
>`${!t1 ** t2 ** --t1 } hello world ${!t1 ** t2 ** --t1 }` : string
>`${!t1 ** t2 ** --t1 } hello world ${!t1 ** t2 ** --t1 }` : `${number} hello world ${number}`
>!t1 ** t2 ** --t1 : number
>!t1 : boolean
>t1 : number
@@ -238,7 +238,7 @@ var s;
>t1 : number

`${typeof t1 ** t2 ** t1} hello world ${typeof t1 ** t2 ** t1}`;
>`${typeof t1 ** t2 ** t1} hello world ${typeof t1 ** t2 ** t1}` : string
>`${typeof t1 ** t2 ** t1} hello world ${typeof t1 ** t2 ** t1}` : `${number} hello world ${number}`
>typeof t1 ** t2 ** t1 : number
>typeof t1 : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"
>t1 : number
@@ -253,7 +253,7 @@ var s;
>t1 : number

`${1 + typeof t1 ** t2 ** t1} hello world ${1 + typeof t1 ** t2 ** t1}`;
>`${1 + typeof t1 ** t2 ** t1} hello world ${1 + typeof t1 ** t2 ** t1}` : string
>`${1 + typeof t1 ** t2 ** t1} hello world ${1 + typeof t1 ** t2 ** t1}` : `${number} hello world ${number}`
>1 + typeof t1 ** t2 ** t1 : number
>1 : 1
>typeof t1 ** t2 ** t1 : number
Original file line number Diff line number Diff line change
@@ -13,7 +13,7 @@ var s;
// Error: early syntax error using ES7 SimpleUnaryExpression on left-hand side without ()
// With templateHead
`hello ${-t1 ** t2 - t1}`;
>`hello ${-t1 ** t2 - t1}` : string
>`hello ${-t1 ** t2 - t1}` : `hello ${number}`
>-t1 ** t2 - t1 : number
>-t1 ** t2 : number
>-t1 : number
@@ -22,7 +22,7 @@ var s;
>t1 : number

`hello ${-++t1 ** t2 - t1}`;
>`hello ${-++t1 ** t2 - t1}` : string
>`hello ${-++t1 ** t2 - t1}` : `hello ${number}`
>-++t1 ** t2 - t1 : number
>-++t1 ** t2 : number
>-++t1 : number
@@ -32,7 +32,7 @@ var s;
>t1 : number

`hello ${-t1++ ** t2 - t1}`;
>`hello ${-t1++ ** t2 - t1}` : string
>`hello ${-t1++ ** t2 - t1}` : `hello ${number}`
>-t1++ ** t2 - t1 : number
>-t1++ ** t2 : number
>-t1++ : number
@@ -42,7 +42,7 @@ var s;
>t1 : number

`hello ${!t1 ** t2 ** --t1 }`;
>`hello ${!t1 ** t2 ** --t1 }` : string
>`hello ${!t1 ** t2 ** --t1 }` : `hello ${number}`
>!t1 ** t2 ** --t1 : number
>!t1 : boolean
>t1 : number
@@ -52,7 +52,7 @@ var s;
>t1 : number

`hello ${typeof t1 ** t2 ** t1}`;
>`hello ${typeof t1 ** t2 ** t1}` : string
>`hello ${typeof t1 ** t2 ** t1}` : `hello ${number}`
>typeof t1 ** t2 ** t1 : number
>typeof t1 : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"
>t1 : number
@@ -61,7 +61,7 @@ var s;
>t1 : number

`hello ${1 + typeof t1 ** t2 ** t1}`;
>`hello ${1 + typeof t1 ** t2 ** t1}` : string
>`hello ${1 + typeof t1 ** t2 ** t1}` : `hello ${number}`
>1 + typeof t1 ** t2 ** t1 : number
>1 : 1
>typeof t1 ** t2 ** t1 : number
@@ -72,7 +72,7 @@ var s;
>t1 : number

`hello ${-t1 ** t2 - t1}${-t1 ** t2 - t1}`;
>`hello ${-t1 ** t2 - t1}${-t1 ** t2 - t1}` : string
>`hello ${-t1 ** t2 - t1}${-t1 ** t2 - t1}` : `hello ${number}${number}`
>-t1 ** t2 - t1 : number
>-t1 ** t2 : number
>-t1 : number
@@ -87,7 +87,7 @@ var s;
>t1 : number

`hello ${-++t1 ** t2 - t1}${-++t1 ** t2 - t1}`;
>`hello ${-++t1 ** t2 - t1}${-++t1 ** t2 - t1}` : string
>`hello ${-++t1 ** t2 - t1}${-++t1 ** t2 - t1}` : `hello ${number}${number}`
>-++t1 ** t2 - t1 : number
>-++t1 ** t2 : number
>-++t1 : number
@@ -104,7 +104,7 @@ var s;
>t1 : number

`hello ${-t1++ ** t2 - t1}${-t1++ ** t2 - t1}`;
>`hello ${-t1++ ** t2 - t1}${-t1++ ** t2 - t1}` : string
>`hello ${-t1++ ** t2 - t1}${-t1++ ** t2 - t1}` : `hello ${number}${number}`
>-t1++ ** t2 - t1 : number
>-t1++ ** t2 : number
>-t1++ : number
@@ -121,7 +121,7 @@ var s;
>t1 : number

`hello ${!t1 ** t2 ** --t1 }${!t1 ** t2 ** --t1 }`;
>`hello ${!t1 ** t2 ** --t1 }${!t1 ** t2 ** --t1 }` : string
>`hello ${!t1 ** t2 ** --t1 }${!t1 ** t2 ** --t1 }` : `hello ${number}${number}`
>!t1 ** t2 ** --t1 : number
>!t1 : boolean
>t1 : number
@@ -138,7 +138,7 @@ var s;
>t1 : number

`hello ${typeof t1 ** t2 ** t1}${typeof t1 ** t2 ** t1}`;
>`hello ${typeof t1 ** t2 ** t1}${typeof t1 ** t2 ** t1}` : string
>`hello ${typeof t1 ** t2 ** t1}${typeof t1 ** t2 ** t1}` : `hello ${number}${number}`
>typeof t1 ** t2 ** t1 : number
>typeof t1 : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"
>t1 : number
@@ -153,7 +153,7 @@ var s;
>t1 : number

`hello ${1 + typeof t1 ** t2 ** t1}${1 + typeof t1 ** t2 ** t1}`;
>`hello ${1 + typeof t1 ** t2 ** t1}${1 + typeof t1 ** t2 ** t1}` : string
>`hello ${1 + typeof t1 ** t2 ** t1}${1 + typeof t1 ** t2 ** t1}` : `hello ${number}${number}`
>1 + typeof t1 ** t2 ** t1 : number
>1 : 1
>typeof t1 ** t2 ** t1 : number
@@ -172,7 +172,7 @@ var s;
>t1 : number

`hello ${-t1 ** t2 - t1} hello world ${-t1 ** t2 - t1}`;
>`hello ${-t1 ** t2 - t1} hello world ${-t1 ** t2 - t1}` : string
>`hello ${-t1 ** t2 - t1} hello world ${-t1 ** t2 - t1}` : `hello ${number} hello world ${number}`
>-t1 ** t2 - t1 : number
>-t1 ** t2 : number
>-t1 : number
@@ -187,7 +187,7 @@ var s;
>t1 : number

`hello ${-++t1 ** t2 - t1} hello world ${-++t1 ** t2 - t1}`;
>`hello ${-++t1 ** t2 - t1} hello world ${-++t1 ** t2 - t1}` : string
>`hello ${-++t1 ** t2 - t1} hello world ${-++t1 ** t2 - t1}` : `hello ${number} hello world ${number}`
>-++t1 ** t2 - t1 : number
>-++t1 ** t2 : number
>-++t1 : number
@@ -204,7 +204,7 @@ var s;
>t1 : number

`hello ${-t1++ ** t2 - t1} hello world ${-t1++ ** t2 - t1}`;
>`hello ${-t1++ ** t2 - t1} hello world ${-t1++ ** t2 - t1}` : string
>`hello ${-t1++ ** t2 - t1} hello world ${-t1++ ** t2 - t1}` : `hello ${number} hello world ${number}`
>-t1++ ** t2 - t1 : number
>-t1++ ** t2 : number
>-t1++ : number
@@ -221,7 +221,7 @@ var s;
>t1 : number

`hello ${!t1 ** t2 ** --t1 } hello world ${!t1 ** t2 ** --t1 }`;
>`hello ${!t1 ** t2 ** --t1 } hello world ${!t1 ** t2 ** --t1 }` : string
>`hello ${!t1 ** t2 ** --t1 } hello world ${!t1 ** t2 ** --t1 }` : `hello ${number} hello world ${number}`
>!t1 ** t2 ** --t1 : number
>!t1 : boolean
>t1 : number
@@ -238,7 +238,7 @@ var s;
>t1 : number

`hello ${typeof t1 ** t2 ** t1} hello world ${typeof t1 ** t2 ** t1}`;
>`hello ${typeof t1 ** t2 ** t1} hello world ${typeof t1 ** t2 ** t1}` : string
>`hello ${typeof t1 ** t2 ** t1} hello world ${typeof t1 ** t2 ** t1}` : `hello ${number} hello world ${number}`
>typeof t1 ** t2 ** t1 : number
>typeof t1 : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"
>t1 : number
@@ -253,7 +253,7 @@ var s;
>t1 : number

`hello ${1 + typeof t1 ** t2 ** t1} hello world ${1 + typeof t1 ** t2 ** t1}`;
>`hello ${1 + typeof t1 ** t2 ** t1} hello world ${1 + typeof t1 ** t2 ** t1}` : string
>`hello ${1 + typeof t1 ** t2 ** t1} hello world ${1 + typeof t1 ** t2 ** t1}` : `hello ${number} hello world ${number}`
>1 + typeof t1 ** t2 ** t1 : number
>1 : 1
>typeof t1 ** t2 ** t1 : number
Original file line number Diff line number Diff line change
@@ -13,7 +13,7 @@ var s;
// Error: early syntax error using ES7 SimpleUnaryExpression on left-hand side without ()
// With TemplateTail
`${-t1 ** t2 - t1} world`;
>`${-t1 ** t2 - t1} world` : string
>`${-t1 ** t2 - t1} world` : `${number} world`
>-t1 ** t2 - t1 : number
>-t1 ** t2 : number
>-t1 : number
@@ -22,7 +22,7 @@ var s;
>t1 : number

`${-++t1 ** t2 - t1} world`;
>`${-++t1 ** t2 - t1} world` : string
>`${-++t1 ** t2 - t1} world` : `${number} world`
>-++t1 ** t2 - t1 : number
>-++t1 ** t2 : number
>-++t1 : number
@@ -32,7 +32,7 @@ var s;
>t1 : number

`${-t1++ ** t2 - t1} world`;
>`${-t1++ ** t2 - t1} world` : string
>`${-t1++ ** t2 - t1} world` : `${number} world`
>-t1++ ** t2 - t1 : number
>-t1++ ** t2 : number
>-t1++ : number
@@ -42,7 +42,7 @@ var s;
>t1 : number

`${!t1 ** t2 ** --t1 } world`;
>`${!t1 ** t2 ** --t1 } world` : string
>`${!t1 ** t2 ** --t1 } world` : `${number} world`
>!t1 ** t2 ** --t1 : number
>!t1 : boolean
>t1 : number
@@ -52,7 +52,7 @@ var s;
>t1 : number

`${typeof t1 ** t2 ** t1} world`;
>`${typeof t1 ** t2 ** t1} world` : string
>`${typeof t1 ** t2 ** t1} world` : `${number} world`
>typeof t1 ** t2 ** t1 : number
>typeof t1 : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"
>t1 : number
@@ -61,7 +61,7 @@ var s;
>t1 : number

`${1 + typeof t1 ** t2 ** t1} world`;
>`${1 + typeof t1 ** t2 ** t1} world` : string
>`${1 + typeof t1 ** t2 ** t1} world` : `${number} world`
>1 + typeof t1 ** t2 ** t1 : number
>1 : 1
>typeof t1 ** t2 ** t1 : number
@@ -72,7 +72,7 @@ var s;
>t1 : number

`${-t1 ** t2 - t1}${-t1 ** t2 - t1} world`;
>`${-t1 ** t2 - t1}${-t1 ** t2 - t1} world` : string
>`${-t1 ** t2 - t1}${-t1 ** t2 - t1} world` : `${number}${number} world`
>-t1 ** t2 - t1 : number
>-t1 ** t2 : number
>-t1 : number
@@ -87,7 +87,7 @@ var s;
>t1 : number

`${-++t1 ** t2 - t1}${-++t1 ** t2 - t1} world`;
>`${-++t1 ** t2 - t1}${-++t1 ** t2 - t1} world` : string
>`${-++t1 ** t2 - t1}${-++t1 ** t2 - t1} world` : `${number}${number} world`
>-++t1 ** t2 - t1 : number
>-++t1 ** t2 : number
>-++t1 : number
@@ -104,7 +104,7 @@ var s;
>t1 : number

`${-t1++ ** t2 - t1}${-t1++ ** t2 - t1} world`;
>`${-t1++ ** t2 - t1}${-t1++ ** t2 - t1} world` : string
>`${-t1++ ** t2 - t1}${-t1++ ** t2 - t1} world` : `${number}${number} world`
>-t1++ ** t2 - t1 : number
>-t1++ ** t2 : number
>-t1++ : number
@@ -121,7 +121,7 @@ var s;
>t1 : number

`${!t1 ** t2 ** --t1 }${!t1 ** t2 ** --t1 } world`;
>`${!t1 ** t2 ** --t1 }${!t1 ** t2 ** --t1 } world` : string
>`${!t1 ** t2 ** --t1 }${!t1 ** t2 ** --t1 } world` : `${number}${number} world`
>!t1 ** t2 ** --t1 : number
>!t1 : boolean
>t1 : number
@@ -138,7 +138,7 @@ var s;
>t1 : number

`${typeof t1 ** t2 ** t1}${typeof t1 ** t2 ** t1} world`;
>`${typeof t1 ** t2 ** t1}${typeof t1 ** t2 ** t1} world` : string
>`${typeof t1 ** t2 ** t1}${typeof t1 ** t2 ** t1} world` : `${number}${number} world`
>typeof t1 ** t2 ** t1 : number
>typeof t1 : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"
>t1 : number
@@ -153,7 +153,7 @@ var s;
>t1 : number

`${1 + typeof t1 ** t2 ** t1}${1 + typeof t1 ** t2 ** t1} world`;
>`${1 + typeof t1 ** t2 ** t1}${1 + typeof t1 ** t2 ** t1} world` : string
>`${1 + typeof t1 ** t2 ** t1}${1 + typeof t1 ** t2 ** t1} world` : `${number}${number} world`
>1 + typeof t1 ** t2 ** t1 : number
>1 : 1
>typeof t1 ** t2 ** t1 : number
@@ -172,7 +172,7 @@ var s;
>t1 : number

`${-t1 ** t2 - t1} hello world ${-t1 ** t2 - t1} !!`;
>`${-t1 ** t2 - t1} hello world ${-t1 ** t2 - t1} !!` : string
>`${-t1 ** t2 - t1} hello world ${-t1 ** t2 - t1} !!` : `${number} hello world ${number} !!`
>-t1 ** t2 - t1 : number
>-t1 ** t2 : number
>-t1 : number
@@ -187,7 +187,7 @@ var s;
>t1 : number

`${-++t1 ** t2 - t1} hello world ${-++t1 ** t2 - t1} !!`;
>`${-++t1 ** t2 - t1} hello world ${-++t1 ** t2 - t1} !!` : string
>`${-++t1 ** t2 - t1} hello world ${-++t1 ** t2 - t1} !!` : `${number} hello world ${number} !!`
>-++t1 ** t2 - t1 : number
>-++t1 ** t2 : number
>-++t1 : number
@@ -204,7 +204,7 @@ var s;
>t1 : number

`${-t1++ ** t2 - t1} hello world ${-t1++ ** t2 - t1} !!`;
>`${-t1++ ** t2 - t1} hello world ${-t1++ ** t2 - t1} !!` : string
>`${-t1++ ** t2 - t1} hello world ${-t1++ ** t2 - t1} !!` : `${number} hello world ${number} !!`
>-t1++ ** t2 - t1 : number
>-t1++ ** t2 : number
>-t1++ : number
@@ -221,7 +221,7 @@ var s;
>t1 : number

`${!t1 ** t2 ** --t1 } hello world ${!t1 ** t2 ** --t1 } !!`;
>`${!t1 ** t2 ** --t1 } hello world ${!t1 ** t2 ** --t1 } !!` : string
>`${!t1 ** t2 ** --t1 } hello world ${!t1 ** t2 ** --t1 } !!` : `${number} hello world ${number} !!`
>!t1 ** t2 ** --t1 : number
>!t1 : boolean
>t1 : number
@@ -238,7 +238,7 @@ var s;
>t1 : number

`${typeof t1 ** t2 ** t1} hello world ${typeof t1 ** t2 ** t1} !!`;
>`${typeof t1 ** t2 ** t1} hello world ${typeof t1 ** t2 ** t1} !!` : string
>`${typeof t1 ** t2 ** t1} hello world ${typeof t1 ** t2 ** t1} !!` : `${number} hello world ${number} !!`
>typeof t1 ** t2 ** t1 : number
>typeof t1 : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"
>t1 : number
@@ -253,7 +253,7 @@ var s;
>t1 : number

`${1 + typeof t1 ** t2 ** t1} hello world ${1 + typeof t1 ** t2 ** t1} !!`;
>`${1 + typeof t1 ** t2 ** t1} hello world ${1 + typeof t1 ** t2 ** t1} !!` : string
>`${1 + typeof t1 ** t2 ** t1} hello world ${1 + typeof t1 ** t2 ** t1} !!` : `${number} hello world ${number} !!`
>1 + typeof t1 ** t2 ** t1 : number
>1 : 1
>typeof t1 ** t2 ** t1 : number
Original file line number Diff line number Diff line change
@@ -3,55 +3,55 @@ var a = 1 ** `${ 3 }`;
>a : number
>1 ** `${ 3 }` : number
>1 : 1
>`${ 3 }` : string
>`${ 3 }` : "3"
>3 : 3

var b = 1 ** `2${ 3 }`;
>b : number
>1 ** `2${ 3 }` : number
>1 : 1
>`2${ 3 }` : string
>`2${ 3 }` : "23"
>3 : 3

var c = 1 ** `${ 3 }4`;
>c : number
>1 ** `${ 3 }4` : number
>1 : 1
>`${ 3 }4` : string
>`${ 3 }4` : "34"
>3 : 3

var d = 1 ** `2${ 3 }4`;
>d : number
>1 ** `2${ 3 }4` : number
>1 : 1
>`2${ 3 }4` : string
>`2${ 3 }4` : "234"
>3 : 3

var e = `${ 3 }` ** 5;
>e : number
>`${ 3 }` ** 5 : number
>`${ 3 }` : string
>`${ 3 }` : "3"
>3 : 3
>5 : 5

var f = `2${ 3 }` ** 5;
>f : number
>`2${ 3 }` ** 5 : number
>`2${ 3 }` : string
>`2${ 3 }` : "23"
>3 : 3
>5 : 5

var g = `${ 3 }4` ** 5;
>g : number
>`${ 3 }4` ** 5 : number
>`${ 3 }4` : string
>`${ 3 }4` : "34"
>3 : 3
>5 : 5

var h = `2${ 3 }4` ** 5;
>h : number
>`2${ 3 }4` ** 5 : number
>`2${ 3 }4` : string
>`2${ 3 }4` : "234"
>3 : 3
>5 : 5

@@ -62,25 +62,25 @@ var k = 10;
k **= `${ 3 }`;
>k **= `${ 3 }` : number
>k : number
>`${ 3 }` : string
>`${ 3 }` : "3"
>3 : 3

k **= `2${ 3 }`;
>k **= `2${ 3 }` : number
>k : number
>`2${ 3 }` : string
>`2${ 3 }` : "23"
>3 : 3

k **= `2${ 3 }4`;
>k **= `2${ 3 }4` : number
>k : number
>`2${ 3 }4` : string
>`2${ 3 }4` : "234"
>3 : 3

k **= `2${ 3 }4`;
>k **= `2${ 3 }4` : number
>k : number
>`2${ 3 }4` : string
>`2${ 3 }4` : "234"
>3 : 3


Original file line number Diff line number Diff line change
@@ -3,55 +3,55 @@ var a = 1 ** `${ 3 }`;
>a : number
>1 ** `${ 3 }` : number
>1 : 1
>`${ 3 }` : string
>`${ 3 }` : "3"
>3 : 3

var b = 1 ** `2${ 3 }`;
>b : number
>1 ** `2${ 3 }` : number
>1 : 1
>`2${ 3 }` : string
>`2${ 3 }` : "23"
>3 : 3

var c = 1 ** `${ 3 }4`;
>c : number
>1 ** `${ 3 }4` : number
>1 : 1
>`${ 3 }4` : string
>`${ 3 }4` : "34"
>3 : 3

var d = 1 ** `2${ 3 }4`;
>d : number
>1 ** `2${ 3 }4` : number
>1 : 1
>`2${ 3 }4` : string
>`2${ 3 }4` : "234"
>3 : 3

var e = `${ 3 }` ** 5;
>e : number
>`${ 3 }` ** 5 : number
>`${ 3 }` : string
>`${ 3 }` : "3"
>3 : 3
>5 : 5

var f = `2${ 3 }` ** 5;
>f : number
>`2${ 3 }` ** 5 : number
>`2${ 3 }` : string
>`2${ 3 }` : "23"
>3 : 3
>5 : 5

var g = `${ 3 }4` ** 5;
>g : number
>`${ 3 }4` ** 5 : number
>`${ 3 }4` : string
>`${ 3 }4` : "34"
>3 : 3
>5 : 5

var h = `2${ 3 }4` ** 5;
>h : number
>`2${ 3 }4` ** 5 : number
>`2${ 3 }4` : string
>`2${ 3 }4` : "234"
>3 : 3
>5 : 5

@@ -62,24 +62,24 @@ var k = 10;
k **= `${ 3 }`;
>k **= `${ 3 }` : number
>k : number
>`${ 3 }` : string
>`${ 3 }` : "3"
>3 : 3

k **= `2${ 3 }`;
>k **= `2${ 3 }` : number
>k : number
>`2${ 3 }` : string
>`2${ 3 }` : "23"
>3 : 3

k **= `2${ 3 }4`;
>k **= `2${ 3 }4` : number
>k : number
>`2${ 3 }4` : string
>`2${ 3 }4` : "234"
>3 : 3

kj **= `2${ 3 }4`;
>kj **= `2${ 3 }4` : number
>kj : any
>`2${ 3 }4` : string
>`2${ 3 }4` : "234"
>3 : 3

Original file line number Diff line number Diff line change
@@ -6,7 +6,7 @@ declare const moduleFile: number;

import(getSpecifier());

var p0 = import(`${directory}\${moduleFile}`);
var p0 = import(`${directory}\\${moduleFile}`);
var p1 = import(getSpecifier());
const p2 = import(whatToLoad ? getSpecifier() : "defaulPath")

@@ -16,7 +16,7 @@ function returnDynamicLoad(path: string) {

//// [importCallExpressionDeclarationEmit1.js]
Promise.resolve().then(() => require(getSpecifier()));
var p0 = Promise.resolve().then(() => require(`${directory}\${moduleFile}`));
var p0 = Promise.resolve().then(() => require(`${directory}\\${moduleFile}`));
var p1 = Promise.resolve().then(() => require(getSpecifier()));
const p2 = Promise.resolve().then(() => require(whatToLoad ? getSpecifier() : "defaulPath"));
function returnDynamicLoad(path) {
Original file line number Diff line number Diff line change
@@ -14,9 +14,10 @@ declare const moduleFile: number;
import(getSpecifier());
>getSpecifier : Symbol(getSpecifier, Decl(importCallExpressionDeclarationEmit1.ts, 0, 0))

var p0 = import(`${directory}\${moduleFile}`);
var p0 = import(`${directory}\\${moduleFile}`);
>p0 : Symbol(p0, Decl(importCallExpressionDeclarationEmit1.ts, 7, 3))
>directory : Symbol(directory, Decl(importCallExpressionDeclarationEmit1.ts, 2, 13))
>moduleFile : Symbol(moduleFile, Decl(importCallExpressionDeclarationEmit1.ts, 3, 13))

var p1 = import(getSpecifier());
>p1 : Symbol(p1, Decl(importCallExpressionDeclarationEmit1.ts, 8, 3))
Original file line number Diff line number Diff line change
@@ -16,11 +16,12 @@ import(getSpecifier());
>getSpecifier() : string
>getSpecifier : () => string

var p0 = import(`${directory}\${moduleFile}`);
var p0 = import(`${directory}\\${moduleFile}`);
>p0 : Promise<any>
>import(`${directory}\${moduleFile}`) : Promise<any>
>`${directory}\${moduleFile}` : string
>import(`${directory}\\${moduleFile}`) : Promise<any>
>`${directory}\\${moduleFile}` : `${string}\\${number}`
>directory : string
>moduleFile : number

var p1 = import(getSpecifier());
>p1 : Promise<any>
Original file line number Diff line number Diff line change
@@ -11,7 +11,7 @@ declare var whatToLoad: boolean;
declare const directory: string;
declare const moduleFile: number;

import(`${directory}\${moduleFile}`);
import(`${directory}\\${moduleFile}`);
import(getSpecifier());

var p1 = import(ValidSomeCondition() ? "./0" : "externalModule");
@@ -27,7 +27,7 @@ var p3: Promise<typeof defaultModule> = import(j=getSpecifier());

function * loadModule(directories: string[]) {
for (const directory of directories) {
const path = `${directory}\moduleFile`;
const path = `${directory}\\moduleFile`;
import(yield path);
}
}
@@ -43,7 +43,7 @@ exports.C = C;
//// [1.js]
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
Promise.resolve().then(() => require(`${directory}\${moduleFile}`));
Promise.resolve().then(() => require(`${directory}\\${moduleFile}`));
Promise.resolve().then(() => require(getSpecifier()));
var p1 = Promise.resolve().then(() => require(ValidSomeCondition() ? "./0" : "externalModule"));
var p1 = Promise.resolve().then(() => require(getSpecifier()));
@@ -56,7 +56,7 @@ let j;
var p3 = Promise.resolve().then(() => require(j = getSpecifier()));
function* loadModule(directories) {
for (const directory of directories) {
const path = `${directory}\moduleFile`;
const path = `${directory}\\moduleFile`;
Promise.resolve().then(() => require(yield path));
}
}
Original file line number Diff line number Diff line change
@@ -21,8 +21,9 @@ declare const directory: string;
declare const moduleFile: number;
>moduleFile : Symbol(moduleFile, Decl(1.ts, 5, 13))

import(`${directory}\${moduleFile}`);
import(`${directory}\\${moduleFile}`);
>directory : Symbol(directory, Decl(1.ts, 4, 13))
>moduleFile : Symbol(moduleFile, Decl(1.ts, 5, 13))

import(getSpecifier());
>getSpecifier : Symbol(getSpecifier, Decl(1.ts, 0, 47))
@@ -78,7 +79,7 @@ function * loadModule(directories: string[]) {
>directory : Symbol(directory, Decl(1.ts, 22, 14))
>directories : Symbol(directories, Decl(1.ts, 21, 22))

const path = `${directory}\moduleFile`;
const path = `${directory}\\moduleFile`;
>path : Symbol(path, Decl(1.ts, 23, 13))
>directory : Symbol(directory, Decl(1.ts, 22, 14))

Original file line number Diff line number Diff line change
@@ -21,10 +21,11 @@ declare const directory: string;
declare const moduleFile: number;
>moduleFile : number

import(`${directory}\${moduleFile}`);
>import(`${directory}\${moduleFile}`) : Promise<any>
>`${directory}\${moduleFile}` : string
import(`${directory}\\${moduleFile}`);
>import(`${directory}\\${moduleFile}`) : Promise<any>
>`${directory}\\${moduleFile}` : `${string}\\${number}`
>directory : string
>moduleFile : number

import(getSpecifier());
>import(getSpecifier()) : Promise<any>
@@ -93,22 +94,22 @@ var p3: Promise<typeof defaultModule> = import(j=getSpecifier());
>getSpecifier : () => string

function * loadModule(directories: string[]) {
>loadModule : (directories: string[]) => Generator<string, void, string>
>loadModule : (directories: string[]) => Generator<`${string}\\moduleFile`, void, string>
>directories : string[]

for (const directory of directories) {
>directory : string
>directories : string[]

const path = `${directory}\moduleFile`;
>path : string
>`${directory}\moduleFile` : string
const path = `${directory}\\moduleFile`;
>path : `${string}\\moduleFile`
>`${directory}\\moduleFile` : `${string}\\moduleFile`
>directory : string

import(yield path);
>import(yield path) : Promise<any>
>yield path : any
>path : string
>path : `${string}\\moduleFile`
}
}

Original file line number Diff line number Diff line change
@@ -7,7 +7,7 @@ import(`./locales/${localeName}.js`).then(bar => {
>import(`./locales/${localeName}.js`).then(bar => { let x = bar;}) : Promise<void>
>import(`./locales/${localeName}.js`).then : <TResult1 = any, TResult2 = never>(onfulfilled?: (value: any) => TResult1 | PromiseLike<TResult1>, onrejected?: (reason: any) => TResult2 | PromiseLike<TResult2>) => Promise<TResult1 | TResult2>
>import(`./locales/${localeName}.js`) : Promise<any>
>`./locales/${localeName}.js` : string
>`./locales/${localeName}.js` : "./locales/zh-CN.js"
>localeName : "zh-CN"
>then : <TResult1 = any, TResult2 = never>(onfulfilled?: (value: any) => TResult1 | PromiseLike<TResult1>, onrejected?: (reason: any) => TResult2 | PromiseLike<TResult2>) => Promise<TResult1 | TResult2>
>bar => { let x = bar;} : (bar: any) => void
2 changes: 1 addition & 1 deletion tests/baselines/reference/inferenceErasedSignatures.types
Original file line number Diff line number Diff line change
@@ -36,7 +36,7 @@ class SomeClass extends SomeAbstractClass<number, string, boolean> {
>context : number

return `${context}`;
>`${context}` : string
>`${context}` : `${number}`
>context : number
}
}
Loading