@@ -322,7 +322,7 @@ export class Parser extends DiagnosticEmitter {
322
322
statement = this . parseExport ( tn , startPos , ( flags & CommonFlags . DECLARE ) != 0 ) ;
323
323
}
324
324
325
- // handle non-declaration statements
325
+ // handle non-declaration statements
326
326
} else {
327
327
if ( exportEnd ) {
328
328
this . error (
@@ -503,32 +503,32 @@ export class Parser extends DiagnosticEmitter {
503
503
return null ;
504
504
}
505
505
506
- // 'void'
506
+ // 'void'
507
507
} else if ( token == Token . VOID ) {
508
508
type = Node . createNamedType (
509
509
Node . createSimpleTypeName ( "void" , tn . range ( ) ) , [ ] , false , tn . range ( startPos , tn . pos )
510
510
) ;
511
511
512
- // 'this'
512
+ // 'this'
513
513
} else if ( token == Token . THIS ) {
514
514
type = Node . createNamedType (
515
515
Node . createSimpleTypeName ( "this" , tn . range ( ) ) , [ ] , false , tn . range ( startPos , tn . pos )
516
516
) ;
517
517
518
- // 'true'
518
+ // 'true'
519
519
} else if ( token == Token . TRUE || token == Token . FALSE ) {
520
520
type = Node . createNamedType (
521
521
Node . createSimpleTypeName ( "bool" , tn . range ( ) ) , [ ] , false , tn . range ( startPos , tn . pos )
522
522
) ;
523
523
524
- // StringLiteral
524
+ // StringLiteral
525
525
} else if ( token == Token . STRINGLITERAL ) {
526
526
tn . readString ( ) ;
527
527
type = Node . createNamedType (
528
528
Node . createSimpleTypeName ( "string" , tn . range ( ) ) , [ ] , false , tn . range ( startPos , tn . pos )
529
529
) ;
530
530
531
- // Identifier
531
+ // Identifier
532
532
} else if ( token == Token . IDENTIFIER ) {
533
533
let name = this . parseTypeName ( tn ) ;
534
534
if ( ! name ) return null ;
@@ -608,7 +608,7 @@ export class Parser extends DiagnosticEmitter {
608
608
}
609
609
type = Node . createNamedType (
610
610
Node . createSimpleTypeName ( "Array" , bracketRange ) ,
611
- [ type ] ,
611
+ [ type ] ,
612
612
nullable ,
613
613
tn . range ( startPos , tn . pos )
614
614
) ;
@@ -696,7 +696,7 @@ export class Parser extends DiagnosticEmitter {
696
696
param . parameterKind = kind ;
697
697
param . name = name ;
698
698
param . type = type ;
699
- if ( ! parameters ) parameters = [ param ] ;
699
+ if ( ! parameters ) parameters = [ param ] ;
700
700
else parameters . push ( param ) ;
701
701
} else {
702
702
if ( ! isSignature ) {
@@ -710,7 +710,7 @@ export class Parser extends DiagnosticEmitter {
710
710
param . parameterKind = kind ;
711
711
param . name = name ;
712
712
param . type = Node . createOmittedType ( tn . range ( ) . atEnd ) ;
713
- if ( ! parameters ) parameters = [ param ] ;
713
+ if ( ! parameters ) parameters = [ param ] ;
714
714
else parameters . push ( param ) ;
715
715
this . error (
716
716
DiagnosticCode . Type_expected ,
@@ -761,7 +761,7 @@ export class Parser extends DiagnosticEmitter {
761
761
param . parameterKind = firstParamKind ;
762
762
param . name = firstParamNameNoType ;
763
763
param . type = Node . createOmittedType ( firstParamNameNoType . range . atEnd ) ;
764
- if ( ! parameters ) parameters = [ param ] ;
764
+ if ( ! parameters ) parameters = [ param ] ;
765
765
else parameters . push ( param ) ;
766
766
this . error (
767
767
DiagnosticCode . Type_expected ,
@@ -1057,7 +1057,7 @@ export class Parser extends DiagnosticEmitter {
1057
1057
) ;
1058
1058
typeParameter . defaultType = null ;
1059
1059
}
1060
- if ( ! typeParameters ) typeParameters = [ typeParameter ] ;
1060
+ if ( ! typeParameters ) typeParameters = [ typeParameter ] ;
1061
1061
else typeParameters . push ( typeParameter ) ;
1062
1062
if ( ! tn . skip ( Token . COMMA ) ) {
1063
1063
if ( tn . skip ( Token . GREATERTHAN ) ) {
@@ -1486,9 +1486,9 @@ export class Parser extends DiagnosticEmitter {
1486
1486
return null ;
1487
1487
}
1488
1488
1489
- // or at '(' of arrow function:
1490
- // Parameters (':' Type)?
1491
- // Statement
1489
+ // or at '(' of arrow function:
1490
+ // Parameters (':' Type)?
1491
+ // Statement
1492
1492
1493
1493
} else {
1494
1494
arrowKind = ArrowKind . ARROW_PARENTHESIZED ;
@@ -2131,7 +2131,7 @@ export class Parser extends DiagnosticEmitter {
2131
2131
name . range
2132
2132
) ;
2133
2133
2134
- // field: (':' Type)? ('=' Expression)? ';'?
2134
+ // field: (':' Type)? ('=' Expression)? ';'?
2135
2135
} else {
2136
2136
if ( flags & CommonFlags . ABSTRACT ) {
2137
2137
this . error (
@@ -2369,7 +2369,7 @@ export class Parser extends DiagnosticEmitter {
2369
2369
let internalPath = assert ( ret . internalPath ) ;
2370
2370
let source = tn . source ;
2371
2371
let exportPaths = source . exportPaths ;
2372
- if ( ! exportPaths ) source . exportPaths = [ internalPath ] ;
2372
+ if ( ! exportPaths ) source . exportPaths = [ internalPath ] ;
2373
2373
else if ( ! exportPaths . includes ( internalPath ) ) exportPaths . push ( internalPath ) ;
2374
2374
if ( ! this . seenlog . has ( internalPath ) ) {
2375
2375
this . dependees . set ( internalPath , this . currentSource ) ;
@@ -3011,7 +3011,7 @@ export class Parser extends DiagnosticEmitter {
3011
3011
3012
3012
var startPos = tn . tokenPos ;
3013
3013
var statements : Statement [ ] ,
3014
- statement : Statement | null ;
3014
+ statement : Statement | null ;
3015
3015
3016
3016
// 'case' Expression ':' Statement*
3017
3017
@@ -3033,7 +3033,7 @@ export class Parser extends DiagnosticEmitter {
3033
3033
) ;
3034
3034
}
3035
3035
3036
- // 'default' ':' Statement*
3036
+ // 'default' ':' Statement*
3037
3037
3038
3038
} else if ( tn . skip ( Token . DEFAULT ) ) {
3039
3039
if ( tn . skip ( Token . COLON ) ) {
@@ -3397,7 +3397,7 @@ export class Parser extends DiagnosticEmitter {
3397
3397
}
3398
3398
again = false ; // parenthesized
3399
3399
break ;
3400
- }
3400
+ }
3401
3401
case Token . COMMA : {
3402
3402
break ; // continue
3403
3403
}
@@ -3619,10 +3619,12 @@ export class Parser extends DiagnosticEmitter {
3619
3619
3620
3620
parseTemplateLiteralExpression ( tn : Tokenizer ) : Expression | null {
3621
3621
var startPos = tn . pos ;
3622
- // at `(Sring*${ Epression }*String*)*`
3622
+ tn . inStringTemplate = true ;
3623
+
3624
+ // at `(String*${ Expression }*String*)*`
3623
3625
const parts : Expression [ ] = [ this . parseStringLiteral ( tn , startPos ) ] ;
3624
3626
3625
- var token = tn . next ( ) ;
3627
+ var token = tn . peek ( ) ;
3626
3628
while ( token == Token . DOLLAR ) {
3627
3629
tn . skip ( token ) ;
3628
3630
tn . skip ( Token . OPENBRACE ) ;
@@ -3632,7 +3634,9 @@ export class Parser extends DiagnosticEmitter {
3632
3634
tn . skip ( Token . CLOSEBRACE ) ;
3633
3635
token = tn . next ( ) ;
3634
3636
if ( token == Token . TEMPLATELITERAL ) {
3635
- tn . skip ( token ) ;
3637
+ tn . skip ( Token . TEMPLATELITERAL ) ;
3638
+ tn . advance ( ) ;
3639
+ tn . inStringTemplate = false ;
3636
3640
break ;
3637
3641
}
3638
3642
if ( token == Token . DOLLAR ) {
@@ -3647,7 +3651,7 @@ export class Parser extends DiagnosticEmitter {
3647
3651
}
3648
3652
return parts . reduce ( ( acc : Expression | null , expr : Expression ) => {
3649
3653
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 ) ) ;
3651
3655
} , null ) ;
3652
3656
}
3653
3657
@@ -3669,7 +3673,7 @@ export class Parser extends DiagnosticEmitter {
3669
3673
tn . reset ( state ) ;
3670
3674
return null ;
3671
3675
}
3672
- if ( ! typeArguments ) typeArguments = [ type ] ;
3676
+ if ( ! typeArguments ) typeArguments = [ type ] ;
3673
3677
else typeArguments . push ( type ) ;
3674
3678
} while ( tn . skip ( Token . COMMA ) ) ;
3675
3679
if ( tn . skip ( Token . GREATERTHAN ) && tn . skip ( Token . OPENPAREN ) ) {
@@ -3821,7 +3825,7 @@ export class Parser extends DiagnosticEmitter {
3821
3825
}
3822
3826
// CommaExpression
3823
3827
case Token . COMMA : {
3824
- let commaExprs : Expression [ ] = [ expr ] ;
3828
+ let commaExprs : Expression [ ] = [ expr ] ;
3825
3829
do {
3826
3830
expr = this . parseExpression ( tn , Precedence . COMMA + 1 ) ;
3827
3831
if ( ! expr ) return null ;
0 commit comments