Skip to content

Commit 3932d20

Browse files
committed
fix NoSubstitutionTemplateLiteral support
1 parent 6ef797f commit 3932d20

11 files changed

+84
-54
lines changed

src/compiler/parser.ts

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1038,8 +1038,8 @@ namespace ts {
10381038
return currentToken = scanner.reScanTemplateToken(isTaggedTemplate);
10391039
}
10401040

1041-
function reScanTemplateHead(): SyntaxKind {
1042-
return currentToken = scanner.reScanTemplateHead();
1041+
function reScanTemplateHeadOrNoSubstitutionTemplate(): SyntaxKind {
1042+
return currentToken = scanner.reScanTemplateHeadOrNoSubstitutionTemplate();
10431043
}
10441044

10451045
function scanJsxIdentifier(): SyntaxKind {
@@ -2108,6 +2108,13 @@ namespace ts {
21082108
return allowIdentifierNames ? parseIdentifierName() : parseIdentifier();
21092109
}
21102110

2111+
function parseNoSubstitutionTemplate(isTaggedTemplate?: boolean) {
2112+
if (isTaggedTemplate) {
2113+
reScanTemplateHeadOrNoSubstitutionTemplate();
2114+
}
2115+
return <NoSubstitutionTemplateLiteral>parseLiteralNode();
2116+
}
2117+
21112118
function parseTemplateExpression(isTaggedTemplate?: boolean): TemplateExpression {
21122119
const template = <TemplateExpression>createNode(SyntaxKind.TemplateExpression);
21132120

@@ -2150,7 +2157,7 @@ namespace ts {
21502157

21512158
function parseTemplateHead(isTaggedTemplate?: boolean): TemplateHead {
21522159
if (isTaggedTemplate) {
2153-
reScanTemplateHead();
2160+
reScanTemplateHeadOrNoSubstitutionTemplate();
21542161
}
21552162
const fragment = parseLiteralLikeNode(token());
21562163
Debug.assert(fragment.kind === SyntaxKind.TemplateHead, "Template head has wrong token kind");
@@ -2186,8 +2193,8 @@ namespace ts {
21862193
(<NumericLiteral>node).numericLiteralFlags = scanner.getTokenFlags() & TokenFlags.NumericLiteralFlags;
21872194
}
21882195

2189-
if (node.kind === SyntaxKind.TemplateHead || node.kind === SyntaxKind.TemplateMiddle || node.kind === SyntaxKind.TemplateTail) {
2190-
(<TemplateHead | TemplateMiddle | TemplateTail>node).notEscapeFlags = scanner.getTokenFlags() & TokenFlags.NotEscape;
2196+
if (isTemplateLiteralKind(node.kind)) {
2197+
(<TemplateHead | TemplateMiddle | TemplateTail | NoSubstitutionTemplateLiteral>node).templateFlags = scanner.getTokenFlags() & TokenFlags.ContainsInvalidEscape;
21912198
}
21922199

21932200
nextToken();
@@ -4424,7 +4431,7 @@ namespace ts {
44244431
tagExpression.tag = tag;
44254432
tagExpression.typeArguments = typeArguments;
44264433
tagExpression.template = token() === SyntaxKind.NoSubstitutionTemplateLiteral
4427-
? <NoSubstitutionTemplateLiteral>parseLiteralNode()
4434+
? parseNoSubstitutionTemplate(/*isTaggedTemplate*/ true)
44284435
: parseTemplateExpression(/*isTaggedTemplate*/ true);
44294436
return finishNode(tagExpression);
44304437
}

src/compiler/scanner.ts

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ namespace ts {
2828
reScanGreaterToken(): SyntaxKind;
2929
reScanSlashToken(): SyntaxKind;
3030
reScanTemplateToken(isTaggedTemplate?: boolean): SyntaxKind;
31-
reScanTemplateHead(): SyntaxKind;
31+
reScanTemplateHeadOrNoSubstitutionTemplate(): SyntaxKind;
3232
scanJsxIdentifier(): SyntaxKind;
3333
scanJsxAttributeValue(): SyntaxKind;
3434
reScanJsxToken(): JsxTokenSyntaxKind;
@@ -424,19 +424,17 @@ namespace ts {
424424
return ch >= CharacterCodes._0 && ch <= CharacterCodes._9;
425425
}
426426

427-
/* @internal */
428-
export function isOctalDigit(ch: number): boolean {
429-
return ch >= CharacterCodes._0 && ch <= CharacterCodes._7;
427+
function isHexDigit(ch: number): boolean {
428+
return isDigit(ch) || ch >= CharacterCodes.A && ch <= CharacterCodes.F || ch >= CharacterCodes.a && ch <= CharacterCodes.f;
430429
}
431430

432-
/* @internal */
433-
export function isHexDigit(ch: number): boolean {
434-
return isDigit(ch) || ch >= CharacterCodes.A && ch <= CharacterCodes.F || ch >= CharacterCodes.a && ch <= CharacterCodes.f;
431+
function isCodePoint(code: number): boolean {
432+
return code <= 0x10FFFF;
435433
}
436434

437435
/* @internal */
438-
export function isCodePoint(code: number): boolean {
439-
return code <= 0x10FFFF;
436+
export function isOctalDigit(ch: number): boolean {
437+
return ch >= CharacterCodes._0 && ch <= CharacterCodes._7;
440438
}
441439

442440
export function couldStartTrivia(text: string, pos: number): boolean {
@@ -849,7 +847,7 @@ namespace ts {
849847
reScanGreaterToken,
850848
reScanSlashToken,
851849
reScanTemplateToken,
852-
reScanTemplateHead,
850+
reScanTemplateHeadOrNoSubstitutionTemplate,
853851
scanJsxIdentifier,
854852
scanJsxAttributeValue,
855853
reScanJsxToken,
@@ -1147,7 +1145,7 @@ namespace ts {
11471145
// '\01'
11481146
if (isTaggedTemplate && pos < end && isDigit(text.charCodeAt(pos))) {
11491147
pos++;
1150-
tokenFlags |= TokenFlags.NotEscape;
1148+
tokenFlags |= TokenFlags.ContainsInvalidEscape;
11511149
return text.substring(start, pos);
11521150
}
11531151
return "\0";
@@ -1171,15 +1169,15 @@ namespace ts {
11711169
if (isTaggedTemplate) {
11721170
// '\u'
11731171
if (pos < end && !isHexDigit(text.charCodeAt(pos)) && text.charCodeAt(pos) !== CharacterCodes.openBrace) {
1174-
tokenFlags |= TokenFlags.NotEscape;
1172+
tokenFlags |= TokenFlags.ContainsInvalidEscape;
11751173
return text.substring(start, pos);
11761174
}
11771175

11781176
// '\u0' or '\u00' or '\u000'
11791177
for (let i = 0; i < 3; i++) {
11801178
if (pos + i + 1 < end && isHexDigit(text.charCodeAt(pos + i)) && !isHexDigit(text.charCodeAt(pos + i + 1)) && text.charCodeAt(pos + i + 1) !== CharacterCodes.openBrace) {
11811179
pos += i;
1182-
tokenFlags |= TokenFlags.NotEscape;
1180+
tokenFlags |= TokenFlags.ContainsInvalidEscape;
11831181
return text.substring(start, pos);
11841182
}
11851183
}
@@ -1190,15 +1188,15 @@ namespace ts {
11901188

11911189
// '\u{'
11921190
if (isTaggedTemplate && !isHexDigit(text.charCodeAt(pos))) {
1193-
tokenFlags |= TokenFlags.NotEscape;
1191+
tokenFlags |= TokenFlags.ContainsInvalidEscape;
11941192
return text.substring(start, pos);
11951193
}
11961194

11971195
const escapedValue = scanMinimumNumberOfHexDigits(1, /*canHaveSeparators*/ false);
11981196
if (isTaggedTemplate) {
11991197
// '\u{Not Code Point' or '\u{CodePoint'
12001198
if (!isCodePoint(escapedValue) || text.charCodeAt(pos) !== CharacterCodes.closeBrace) {
1201-
tokenFlags |= TokenFlags.NotEscape;
1199+
tokenFlags |= TokenFlags.ContainsInvalidEscape;
12021200
return text.substring(start, pos);
12031201
}
12041202
}
@@ -1212,12 +1210,12 @@ namespace ts {
12121210
case CharacterCodes.x:
12131211
if (isTaggedTemplate) {
12141212
if (!isHexDigit(text.charCodeAt(pos))) {
1215-
tokenFlags |= TokenFlags.NotEscape;
1213+
tokenFlags |= TokenFlags.ContainsInvalidEscape;
12161214
return text.substring(start, pos);
12171215
}
12181216
else if (!isHexDigit(text.charCodeAt(pos + 1))) {
12191217
pos++;
1220-
tokenFlags |= TokenFlags.NotEscape;
1218+
tokenFlags |= TokenFlags.ContainsInvalidEscape;
12211219
return text.substring(start, pos);
12221220
}
12231221
}
@@ -1891,7 +1889,7 @@ namespace ts {
18911889
return token = scanTemplateAndSetTokenValue(isTaggedTemplate);
18921890
}
18931891

1894-
function reScanTemplateHead(): SyntaxKind {
1892+
function reScanTemplateHeadOrNoSubstitutionTemplate(): SyntaxKind {
18951893
pos = tokenPos;
18961894
return token = scanTemplateAndSetTokenValue(/* isTaggedTemplate */ true);
18971895
}

src/compiler/transformers/es2015.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3652,14 +3652,14 @@ namespace ts {
36523652
const rawStrings: Expression[] = [];
36533653
const template = node.template;
36543654
if (isNoSubstitutionTemplateLiteral(template)) {
3655-
cookedStrings.push(createLiteral(template.text));
3655+
cookedStrings.push(template.templateFlags ? createIdentifier("undefined") : createLiteral(template.text));
36563656
rawStrings.push(getRawLiteral(template));
36573657
}
36583658
else {
3659-
cookedStrings.push(template.head.notEscapeFlags ? createIdentifier("undefined") : createLiteral(template.head.text));
3659+
cookedStrings.push(template.head.templateFlags ? createIdentifier("undefined") : createLiteral(template.head.text));
36603660
rawStrings.push(getRawLiteral(template.head));
36613661
for (const templateSpan of template.templateSpans) {
3662-
cookedStrings.push(templateSpan.literal.notEscapeFlags ? createIdentifier("undefined") : createLiteral(templateSpan.literal.text));
3662+
cookedStrings.push(templateSpan.literal.templateFlags ? createIdentifier("undefined") : createLiteral(templateSpan.literal.text));
36633663
rawStrings.push(getRawLiteral(templateSpan.literal));
36643664
templateArguments.push(visitNode(templateSpan.expression, visitor, isExpression));
36653665
}

src/compiler/types.ts

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1578,6 +1578,8 @@ namespace ts {
15781578

15791579
export interface NoSubstitutionTemplateLiteral extends LiteralExpression {
15801580
kind: SyntaxKind.NoSubstitutionTemplateLiteral;
1581+
/* @internal */
1582+
templateFlags?: TokenFlags;
15811583
}
15821584

15831585
/* @internal */
@@ -1587,13 +1589,13 @@ namespace ts {
15871589
PrecedingJSDocComment = 1 << 1,
15881590
Unterminated = 1 << 2,
15891591
ExtendedUnicodeEscape = 1 << 3,
1590-
Scientific = 1 << 4, // e.g. `10e2`
1591-
Octal = 1 << 5, // e.g. `0777`
1592-
HexSpecifier = 1 << 6, // e.g. `0x00000000`
1593-
BinarySpecifier = 1 << 7, // e.g. `0b0110010000000000`
1594-
OctalSpecifier = 1 << 8, // e.g. `0o777`
1595-
ContainsSeparator = 1 << 9, // e.g. `0b1100_0101`
1596-
NotEscape = 1 << 10, // e.g. `\uhello`
1592+
Scientific = 1 << 4, // e.g. `10e2`
1593+
Octal = 1 << 5, // e.g. `0777`
1594+
HexSpecifier = 1 << 6, // e.g. `0x00000000`
1595+
BinarySpecifier = 1 << 7, // e.g. `0b0110010000000000`
1596+
OctalSpecifier = 1 << 8, // e.g. `0o777`
1597+
ContainsSeparator = 1 << 9, // e.g. `0b1100_0101`
1598+
ContainsInvalidEscape = 1 << 10, // e.g. `\uhello`
15971599
BinaryOrOctalSpecifier = BinarySpecifier | OctalSpecifier,
15981600
NumericLiteralFlags = Scientific | Octal | HexSpecifier | BinarySpecifier | OctalSpecifier | ContainsSeparator
15991601
}
@@ -1608,21 +1610,21 @@ namespace ts {
16081610
kind: SyntaxKind.TemplateHead;
16091611
parent?: TemplateExpression;
16101612
/* @internal */
1611-
notEscapeFlags?: TokenFlags;
1613+
templateFlags?: TokenFlags;
16121614
}
16131615

16141616
export interface TemplateMiddle extends LiteralLikeNode {
16151617
kind: SyntaxKind.TemplateMiddle;
16161618
parent?: TemplateSpan;
16171619
/* @internal */
1618-
notEscapeFlags?: TokenFlags;
1620+
templateFlags?: TokenFlags;
16191621
}
16201622

16211623
export interface TemplateTail extends LiteralLikeNode {
16221624
kind: SyntaxKind.TemplateTail;
16231625
parent?: TemplateSpan;
16241626
/* @internal */
1625-
notEscapeFlags?: TokenFlags;
1627+
templateFlags?: TokenFlags;
16261628
}
16271629

16281630
export type TemplateLiteral = TemplateExpression | NoSubstitutionTemplateLiteral;

tests/baselines/reference/api/tsserverlibrary.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2954,7 +2954,7 @@ declare namespace ts {
29542954
reScanGreaterToken(): SyntaxKind;
29552955
reScanSlashToken(): SyntaxKind;
29562956
reScanTemplateToken(isTaggedTemplate?: boolean): SyntaxKind;
2957-
reScanTemplateHead(): SyntaxKind;
2957+
reScanTemplateHeadOrNoSubstitutionTemplate(): SyntaxKind;
29582958
scanJsxIdentifier(): SyntaxKind;
29592959
scanJsxAttributeValue(): SyntaxKind;
29602960
reScanJsxToken(): JsxTokenSyntaxKind;

tests/baselines/reference/api/typescript.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2954,7 +2954,7 @@ declare namespace ts {
29542954
reScanGreaterToken(): SyntaxKind;
29552955
reScanSlashToken(): SyntaxKind;
29562956
reScanTemplateToken(isTaggedTemplate?: boolean): SyntaxKind;
2957-
reScanTemplateHead(): SyntaxKind;
2957+
reScanTemplateHeadOrNoSubstitutionTemplate(): SyntaxKind;
29582958
scanJsxIdentifier(): SyntaxKind;
29592959
scanJsxAttributeValue(): SyntaxKind;
29602960
reScanJsxToken(): JsxTokenSyntaxKind;

tests/baselines/reference/invalidTaggedTemplateEscapeSequences.errors.txt

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,12 @@ tests/cases/conformance/es2018/invalidTaggedTemplateEscapeSequences.ts(5,18): er
22
tests/cases/conformance/es2018/invalidTaggedTemplateEscapeSequences.ts(6,15): error TS1125: Hexadecimal digit expected.
33
tests/cases/conformance/es2018/invalidTaggedTemplateEscapeSequences.ts(6,33): error TS1125: Hexadecimal digit expected.
44
tests/cases/conformance/es2018/invalidTaggedTemplateEscapeSequences.ts(6,75): error TS1125: Hexadecimal digit expected.
5+
tests/cases/conformance/es2018/invalidTaggedTemplateEscapeSequences.ts(7,18): error TS1125: Hexadecimal digit expected.
6+
tests/cases/conformance/es2018/invalidTaggedTemplateEscapeSequences.ts(7,27): error TS1125: Hexadecimal digit expected.
7+
tests/cases/conformance/es2018/invalidTaggedTemplateEscapeSequences.ts(7,51): error TS1125: Hexadecimal digit expected.
58

69

7-
==== tests/cases/conformance/es2018/invalidTaggedTemplateEscapeSequences.ts (4 errors) ====
10+
==== tests/cases/conformance/es2018/invalidTaggedTemplateEscapeSequences.ts (7 errors) ====
811
function tag (str: any, ...args: any[]): string {
912
return str
1013
}
@@ -18,6 +21,13 @@ tests/cases/conformance/es2018/invalidTaggedTemplateEscapeSequences.ts(6,75): er
1821

1922
!!! error TS1125: Hexadecimal digit expected.
2023

24+
!!! error TS1125: Hexadecimal digit expected.
25+
const z = tag`\u{hello} \xtraordinary wonderful \uworld` // should work with Tagged NoSubstitutionTemplate
26+
27+
!!! error TS1125: Hexadecimal digit expected.
28+
29+
!!! error TS1125: Hexadecimal digit expected.
30+
2131
!!! error TS1125: Hexadecimal digit expected.
2232

2333
const a1 = tag`${ 100 }\0` // \0

tests/baselines/reference/invalidTaggedTemplateEscapeSequences.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ function tag (str: any, ...args: any[]): string {
55

66
const x = tag`\u{hello} ${ 100 } \xtraordinary ${ 200 } wonderful ${ 300 } \uworld`;
77
const y = `\u{hello} ${ 100 } \xtraordinary ${ 200 } wonderful ${ 300 } \uworld`;
8+
const z = tag`\u{hello} \xtraordinary wonderful \uworld` // should work with Tagged NoSubstitutionTemplate
89
910
const a1 = tag`${ 100 }\0` // \0
1011
const a2 = tag`${ 100 }\00` // \\00
@@ -36,6 +37,7 @@ function tag(str) {
3637
}
3738
var x = tag(__makeTemplateObject([undefined, undefined, " wonderful ", undefined], ["\\u{hello} ", " \\xtraordinary ", " wonderful ", " \\uworld"]), 100, 200, 300);
3839
var y = "hello} " + 100 + " traordinary " + 200 + " wonderful " + 300 + " world";
40+
var z = tag(__makeTemplateObject([undefined], ["\\u{hello} \\xtraordinary wonderful \\uworld"])); // should work with Tagged NoSubstitutionTemplate
3941
var a1 = tag(__makeTemplateObject(["", "\0"], ["", "\\0"]), 100); // \0
4042
var a2 = tag(__makeTemplateObject(["", undefined], ["", "\\00"]), 100); // \\00
4143
var a3 = tag(__makeTemplateObject(["", undefined], ["", "\\u"]), 100); // \\u

tests/baselines/reference/invalidTaggedTemplateEscapeSequences.symbols

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -15,59 +15,63 @@ const x = tag`\u{hello} ${ 100 } \xtraordinary ${ 200 } wonderful ${ 300 } \uwor
1515
const y = `\u{hello} ${ 100 } \xtraordinary ${ 200 } wonderful ${ 300 } \uworld`;
1616
>y : Symbol(y, Decl(invalidTaggedTemplateEscapeSequences.ts, 5, 5))
1717

18+
const z = tag`\u{hello} \xtraordinary wonderful \uworld` // should work with Tagged NoSubstitutionTemplate
19+
>z : Symbol(z, Decl(invalidTaggedTemplateEscapeSequences.ts, 6, 5))
20+
>tag : Symbol(tag, Decl(invalidTaggedTemplateEscapeSequences.ts, 0, 0))
21+
1822
const a1 = tag`${ 100 }\0` // \0
19-
>a1 : Symbol(a1, Decl(invalidTaggedTemplateEscapeSequences.ts, 7, 5))
23+
>a1 : Symbol(a1, Decl(invalidTaggedTemplateEscapeSequences.ts, 8, 5))
2024
>tag : Symbol(tag, Decl(invalidTaggedTemplateEscapeSequences.ts, 0, 0))
2125

2226
const a2 = tag`${ 100 }\00` // \\00
23-
>a2 : Symbol(a2, Decl(invalidTaggedTemplateEscapeSequences.ts, 8, 5))
27+
>a2 : Symbol(a2, Decl(invalidTaggedTemplateEscapeSequences.ts, 9, 5))
2428
>tag : Symbol(tag, Decl(invalidTaggedTemplateEscapeSequences.ts, 0, 0))
2529

2630
const a3 = tag`${ 100 }\u` // \\u
27-
>a3 : Symbol(a3, Decl(invalidTaggedTemplateEscapeSequences.ts, 9, 5))
31+
>a3 : Symbol(a3, Decl(invalidTaggedTemplateEscapeSequences.ts, 10, 5))
2832
>tag : Symbol(tag, Decl(invalidTaggedTemplateEscapeSequences.ts, 0, 0))
2933

3034
const a4 = tag`${ 100 }\u0` // \\u0
31-
>a4 : Symbol(a4, Decl(invalidTaggedTemplateEscapeSequences.ts, 10, 5))
35+
>a4 : Symbol(a4, Decl(invalidTaggedTemplateEscapeSequences.ts, 11, 5))
3236
>tag : Symbol(tag, Decl(invalidTaggedTemplateEscapeSequences.ts, 0, 0))
3337

3438
const a5 = tag`${ 100 }\u00` // \\u00
35-
>a5 : Symbol(a5, Decl(invalidTaggedTemplateEscapeSequences.ts, 11, 5))
39+
>a5 : Symbol(a5, Decl(invalidTaggedTemplateEscapeSequences.ts, 12, 5))
3640
>tag : Symbol(tag, Decl(invalidTaggedTemplateEscapeSequences.ts, 0, 0))
3741

3842
const a6 = tag`${ 100 }\u000` // \\u000
39-
>a6 : Symbol(a6, Decl(invalidTaggedTemplateEscapeSequences.ts, 12, 5))
43+
>a6 : Symbol(a6, Decl(invalidTaggedTemplateEscapeSequences.ts, 13, 5))
4044
>tag : Symbol(tag, Decl(invalidTaggedTemplateEscapeSequences.ts, 0, 0))
4145

4246
const a7 = tag`${ 100 }\u0000` // \u0000
43-
>a7 : Symbol(a7, Decl(invalidTaggedTemplateEscapeSequences.ts, 13, 5))
47+
>a7 : Symbol(a7, Decl(invalidTaggedTemplateEscapeSequences.ts, 14, 5))
4448
>tag : Symbol(tag, Decl(invalidTaggedTemplateEscapeSequences.ts, 0, 0))
4549

4650
const a8 = tag`${ 100 }\u{` // \\u{
47-
>a8 : Symbol(a8, Decl(invalidTaggedTemplateEscapeSequences.ts, 14, 5))
51+
>a8 : Symbol(a8, Decl(invalidTaggedTemplateEscapeSequences.ts, 15, 5))
4852
>tag : Symbol(tag, Decl(invalidTaggedTemplateEscapeSequences.ts, 0, 0))
4953

5054
const a9 = tag`${ 100 }\u{10FFFF}` // \\u{10FFFF
51-
>a9 : Symbol(a9, Decl(invalidTaggedTemplateEscapeSequences.ts, 15, 5))
55+
>a9 : Symbol(a9, Decl(invalidTaggedTemplateEscapeSequences.ts, 16, 5))
5256
>tag : Symbol(tag, Decl(invalidTaggedTemplateEscapeSequences.ts, 0, 0))
5357

5458
const a10 = tag`${ 100 }\u{1f622` // \\u{1f622
55-
>a10 : Symbol(a10, Decl(invalidTaggedTemplateEscapeSequences.ts, 16, 5))
59+
>a10 : Symbol(a10, Decl(invalidTaggedTemplateEscapeSequences.ts, 17, 5))
5660
>tag : Symbol(tag, Decl(invalidTaggedTemplateEscapeSequences.ts, 0, 0))
5761

5862
const a11 = tag`${ 100 }\u{1f622}` // \u{1f622}
59-
>a11 : Symbol(a11, Decl(invalidTaggedTemplateEscapeSequences.ts, 17, 5))
63+
>a11 : Symbol(a11, Decl(invalidTaggedTemplateEscapeSequences.ts, 18, 5))
6064
>tag : Symbol(tag, Decl(invalidTaggedTemplateEscapeSequences.ts, 0, 0))
6165

6266
const a12 = tag`${ 100 }\x` // \\x
63-
>a12 : Symbol(a12, Decl(invalidTaggedTemplateEscapeSequences.ts, 18, 5))
67+
>a12 : Symbol(a12, Decl(invalidTaggedTemplateEscapeSequences.ts, 19, 5))
6468
>tag : Symbol(tag, Decl(invalidTaggedTemplateEscapeSequences.ts, 0, 0))
6569

6670
const a13 = tag`${ 100 }\x0` // \\x0
67-
>a13 : Symbol(a13, Decl(invalidTaggedTemplateEscapeSequences.ts, 19, 5))
71+
>a13 : Symbol(a13, Decl(invalidTaggedTemplateEscapeSequences.ts, 20, 5))
6872
>tag : Symbol(tag, Decl(invalidTaggedTemplateEscapeSequences.ts, 0, 0))
6973

7074
const a14 = tag`${ 100 }\x00` // \x00
71-
>a14 : Symbol(a14, Decl(invalidTaggedTemplateEscapeSequences.ts, 20, 5))
75+
>a14 : Symbol(a14, Decl(invalidTaggedTemplateEscapeSequences.ts, 21, 5))
7276
>tag : Symbol(tag, Decl(invalidTaggedTemplateEscapeSequences.ts, 0, 0))
7377

0 commit comments

Comments
 (0)