Skip to content

Commit a6b40db

Browse files
committed
Fix failed tests
1 parent 0f61a9c commit a6b40db

File tree

4 files changed

+959
-958
lines changed

4 files changed

+959
-958
lines changed

src/parser.ts

Lines changed: 29 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -322,7 +322,7 @@ export class Parser extends DiagnosticEmitter {
322322
statement = this.parseExport(tn, startPos, (flags & CommonFlags.DECLARE) != 0);
323323
}
324324

325-
// handle non-declaration statements
325+
// handle non-declaration statements
326326
} else {
327327
if (exportEnd) {
328328
this.error(
@@ -503,32 +503,32 @@ export class Parser extends DiagnosticEmitter {
503503
return null;
504504
}
505505

506-
// 'void'
506+
// 'void'
507507
} else if (token == Token.VOID) {
508508
type = Node.createNamedType(
509509
Node.createSimpleTypeName("void", tn.range()), [], false, tn.range(startPos, tn.pos)
510510
);
511511

512-
// 'this'
512+
// 'this'
513513
} else if (token == Token.THIS) {
514514
type = Node.createNamedType(
515515
Node.createSimpleTypeName("this", tn.range()), [], false, tn.range(startPos, tn.pos)
516516
);
517517

518-
// 'true'
518+
// 'true'
519519
} else if (token == Token.TRUE || token == Token.FALSE) {
520520
type = Node.createNamedType(
521521
Node.createSimpleTypeName("bool", tn.range()), [], false, tn.range(startPos, tn.pos)
522522
);
523523

524-
// StringLiteral
524+
// StringLiteral
525525
} else if (token == Token.STRINGLITERAL) {
526526
tn.readString();
527527
type = Node.createNamedType(
528528
Node.createSimpleTypeName("string", tn.range()), [], false, tn.range(startPos, tn.pos)
529529
);
530530

531-
// Identifier
531+
// Identifier
532532
} else if (token == Token.IDENTIFIER) {
533533
let name = this.parseTypeName(tn);
534534
if (!name) return null;
@@ -608,7 +608,7 @@ export class Parser extends DiagnosticEmitter {
608608
}
609609
type = Node.createNamedType(
610610
Node.createSimpleTypeName("Array", bracketRange),
611-
[ type ],
611+
[type],
612612
nullable,
613613
tn.range(startPos, tn.pos)
614614
);
@@ -696,7 +696,7 @@ export class Parser extends DiagnosticEmitter {
696696
param.parameterKind = kind;
697697
param.name = name;
698698
param.type = type;
699-
if (!parameters) parameters = [ param ];
699+
if (!parameters) parameters = [param];
700700
else parameters.push(param);
701701
} else {
702702
if (!isSignature) {
@@ -710,7 +710,7 @@ export class Parser extends DiagnosticEmitter {
710710
param.parameterKind = kind;
711711
param.name = name;
712712
param.type = Node.createOmittedType(tn.range().atEnd);
713-
if (!parameters) parameters = [ param ];
713+
if (!parameters) parameters = [param];
714714
else parameters.push(param);
715715
this.error(
716716
DiagnosticCode.Type_expected,
@@ -761,7 +761,7 @@ export class Parser extends DiagnosticEmitter {
761761
param.parameterKind = firstParamKind;
762762
param.name = firstParamNameNoType;
763763
param.type = Node.createOmittedType(firstParamNameNoType.range.atEnd);
764-
if (!parameters) parameters = [ param ];
764+
if (!parameters) parameters = [param];
765765
else parameters.push(param);
766766
this.error(
767767
DiagnosticCode.Type_expected,
@@ -1057,7 +1057,7 @@ export class Parser extends DiagnosticEmitter {
10571057
);
10581058
typeParameter.defaultType = null;
10591059
}
1060-
if (!typeParameters) typeParameters = [ typeParameter ];
1060+
if (!typeParameters) typeParameters = [typeParameter];
10611061
else typeParameters.push(typeParameter);
10621062
if (!tn.skip(Token.COMMA)) {
10631063
if (tn.skip(Token.GREATERTHAN)) {
@@ -1486,9 +1486,9 @@ export class Parser extends DiagnosticEmitter {
14861486
return null;
14871487
}
14881488

1489-
// or at '(' of arrow function:
1490-
// Parameters (':' Type)?
1491-
// Statement
1489+
// or at '(' of arrow function:
1490+
// Parameters (':' Type)?
1491+
// Statement
14921492

14931493
} else {
14941494
arrowKind = ArrowKind.ARROW_PARENTHESIZED;
@@ -2131,7 +2131,7 @@ export class Parser extends DiagnosticEmitter {
21312131
name.range
21322132
);
21332133

2134-
// field: (':' Type)? ('=' Expression)? ';'?
2134+
// field: (':' Type)? ('=' Expression)? ';'?
21352135
} else {
21362136
if (flags & CommonFlags.ABSTRACT) {
21372137
this.error(
@@ -2369,7 +2369,7 @@ export class Parser extends DiagnosticEmitter {
23692369
let internalPath = assert(ret.internalPath);
23702370
let source = tn.source;
23712371
let exportPaths = source.exportPaths;
2372-
if (!exportPaths) source.exportPaths = [ internalPath ];
2372+
if (!exportPaths) source.exportPaths = [internalPath];
23732373
else if (!exportPaths.includes(internalPath)) exportPaths.push(internalPath);
23742374
if (!this.seenlog.has(internalPath)) {
23752375
this.dependees.set(internalPath, this.currentSource);
@@ -3011,7 +3011,7 @@ export class Parser extends DiagnosticEmitter {
30113011

30123012
var startPos = tn.tokenPos;
30133013
var statements: Statement[],
3014-
statement: Statement | null;
3014+
statement: Statement | null;
30153015

30163016
// 'case' Expression ':' Statement*
30173017

@@ -3033,7 +3033,7 @@ export class Parser extends DiagnosticEmitter {
30333033
);
30343034
}
30353035

3036-
// 'default' ':' Statement*
3036+
// 'default' ':' Statement*
30373037

30383038
} else if (tn.skip(Token.DEFAULT)) {
30393039
if (tn.skip(Token.COLON)) {
@@ -3397,7 +3397,7 @@ export class Parser extends DiagnosticEmitter {
33973397
}
33983398
again = false; // parenthesized
33993399
break;
3400-
}
3400+
}
34013401
case Token.COMMA: {
34023402
break; // continue
34033403
}
@@ -3619,10 +3619,12 @@ export class Parser extends DiagnosticEmitter {
36193619

36203620
parseTemplateLiteralExpression(tn: Tokenizer): Expression | null {
36213621
var startPos = tn.pos;
3622-
// at `(Sring*${ Epression }*String*)*`
3622+
tn.inStringTemplate = true;
3623+
3624+
// at `(String*${ Expression }*String*)*`
36233625
const parts: Expression[] = [this.parseStringLiteral(tn, startPos)];
36243626

3625-
var token = tn.next();
3627+
var token = tn.peek();
36263628
while (token == Token.DOLLAR) {
36273629
tn.skip(token);
36283630
tn.skip(Token.OPENBRACE);
@@ -3632,7 +3634,9 @@ export class Parser extends DiagnosticEmitter {
36323634
tn.skip(Token.CLOSEBRACE);
36333635
token = tn.next();
36343636
if (token == Token.TEMPLATELITERAL) {
3635-
tn.skip(token);
3637+
tn.skip(Token.TEMPLATELITERAL);
3638+
tn.advance();
3639+
tn.inStringTemplate = false;
36363640
break;
36373641
}
36383642
if (token == Token.DOLLAR) {
@@ -3647,7 +3651,7 @@ export class Parser extends DiagnosticEmitter {
36473651
}
36483652
return parts.reduce((acc: Expression | null, expr: Expression) => {
36493653
if (acc == null) return expr;
3650-
return Node.createBinaryExpression(Token.PLUS, acc, expr, tn.range(startPos, tn.pos));
3654+
return Node.createBinaryExpression(Token.PLUS, acc, expr, tn.range(startPos, tn.pos));
36513655
}, null);
36523656
}
36533657

@@ -3669,7 +3673,7 @@ export class Parser extends DiagnosticEmitter {
36693673
tn.reset(state);
36703674
return null;
36713675
}
3672-
if (!typeArguments) typeArguments = [ type ];
3676+
if (!typeArguments) typeArguments = [type];
36733677
else typeArguments.push(type);
36743678
} while (tn.skip(Token.COMMA));
36753679
if (tn.skip(Token.GREATERTHAN) && tn.skip(Token.OPENPAREN)) {
@@ -3821,7 +3825,7 @@ export class Parser extends DiagnosticEmitter {
38213825
}
38223826
// CommaExpression
38233827
case Token.COMMA: {
3824-
let commaExprs: Expression[] = [ expr ];
3828+
let commaExprs: Expression[] = [expr];
38253829
do {
38263830
expr = this.parseExpression(tn, Precedence.COMMA + 1);
38273831
if (!expr) return null;

src/tokenizer.ts

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -513,6 +513,7 @@ export class Tokenizer extends DiagnosticEmitter {
513513
nextTokenOnNewLine: bool = false;
514514

515515
onComment: CommentHandler | null = null;
516+
public inStringTemplate: bool = false;
516517

517518
/** Constructs a new tokenizer. */
518519
constructor(source: Source, diagnostics: DiagnosticMessage[] | null = null) {
@@ -935,8 +936,11 @@ export class Tokenizer extends DiagnosticEmitter {
935936
return Token.AT;
936937
}
937938
case CharCode.DOLLAR: {
938-
++this.pos;
939-
return Token.DOLLAR;
939+
if (this.inStringTemplate) {
940+
++this.pos;
941+
return Token.DOLLAR;
942+
}
943+
// fall through to identifier
940944
}
941945
default: {
942946
if (isIdentifierStart(c)) {
@@ -1037,6 +1041,10 @@ export class Tokenizer extends DiagnosticEmitter {
10371041
}
10381042
}
10391043

1044+
advance() {
1045+
++this.pos;
1046+
}
1047+
10401048
mark(): State {
10411049
var state: State;
10421050
if (reusableState) {
@@ -1148,6 +1156,7 @@ export class Tokenizer extends DiagnosticEmitter {
11481156
case CharCode.r: return "\r";
11491157
case CharCode.SINGLEQUOTE: return "'";
11501158
case CharCode.DOUBLEQUOTE: return "\"";
1159+
case CharCode.BACKTICK: return "`";
11511160
case CharCode.u: {
11521161
if (
11531162
this.pos < end &&
@@ -1317,7 +1326,7 @@ export class Tokenizer extends DiagnosticEmitter {
13171326
i64_shl(value, i64_4),
13181327
i64_new(c - CharCode._0)
13191328
);
1320-
} else if (c >= CharCode.A && c <= CharCode.F) {
1329+
} else if (c >= CharCode.A && c <= CharCode.F) {
13211330
// value = (value << 4) + 10 + c - CharCode.A;
13221331
value = i64_add(
13231332
i64_shl(value, i64_4),

0 commit comments

Comments
 (0)