@@ -27,7 +27,7 @@ namespace ts {
27
27
isReservedWord ( ) : boolean ;
28
28
isUnterminated ( ) : boolean ;
29
29
/* @internal */
30
- getNumericLiteralFlags ( ) : NumericLiteralFlags ;
30
+ getTokenFlags ( ) : TokenFlags ;
31
31
reScanGreaterToken ( ) : SyntaxKind ;
32
32
reScanSlashToken ( ) : SyntaxKind ;
33
33
reScanTemplateToken ( ) : SyntaxKind ;
@@ -815,10 +815,7 @@ namespace ts {
815
815
816
816
let token : SyntaxKind ;
817
817
let tokenValue : string ;
818
- let precedingLineBreak : boolean ;
819
- let hasExtendedUnicodeEscape : boolean ;
820
- let tokenIsUnterminated : boolean ;
821
- let numericLiteralFlags : NumericLiteralFlags ;
818
+ let tokenFlags : TokenFlags ;
822
819
823
820
setText ( text , start , length ) ;
824
821
@@ -829,12 +826,12 @@ namespace ts {
829
826
getTokenPos : ( ) => tokenPos ,
830
827
getTokenText : ( ) => text . substring ( tokenPos , pos ) ,
831
828
getTokenValue : ( ) => tokenValue ,
832
- hasExtendedUnicodeEscape : ( ) => hasExtendedUnicodeEscape ,
833
- hasPrecedingLineBreak : ( ) => precedingLineBreak ,
829
+ hasExtendedUnicodeEscape : ( ) => ( tokenFlags & TokenFlags . ExtendedUnicodeEscape ) !== 0 ,
830
+ hasPrecedingLineBreak : ( ) => ( tokenFlags & TokenFlags . PrecedingLineBreak ) !== 0 ,
834
831
isIdentifier : ( ) => token === SyntaxKind . Identifier || token > SyntaxKind . LastReservedWord ,
835
832
isReservedWord : ( ) => token >= SyntaxKind . FirstReservedWord && token <= SyntaxKind . LastReservedWord ,
836
- isUnterminated : ( ) => tokenIsUnterminated ,
837
- getNumericLiteralFlags : ( ) => numericLiteralFlags ,
833
+ isUnterminated : ( ) => ( tokenFlags & TokenFlags . Unterminated ) !== 0 ,
834
+ getTokenFlags : ( ) => tokenFlags ,
838
835
reScanGreaterToken,
839
836
reScanSlashToken,
840
837
reScanTemplateToken,
@@ -871,7 +868,7 @@ namespace ts {
871
868
let end = pos ;
872
869
if ( text . charCodeAt ( pos ) === CharacterCodes . E || text . charCodeAt ( pos ) === CharacterCodes . e ) {
873
870
pos ++ ;
874
- numericLiteralFlags = NumericLiteralFlags . Scientific ;
871
+ tokenFlags |= TokenFlags . Scientific ;
875
872
if ( text . charCodeAt ( pos ) === CharacterCodes . plus || text . charCodeAt ( pos ) === CharacterCodes . minus ) pos ++ ;
876
873
if ( isDigit ( text . charCodeAt ( pos ) ) ) {
877
874
pos ++ ;
@@ -943,7 +940,7 @@ namespace ts {
943
940
while ( true ) {
944
941
if ( pos >= end ) {
945
942
result += text . substring ( start , pos ) ;
946
- tokenIsUnterminated = true ;
943
+ tokenFlags |= TokenFlags . Unterminated ;
947
944
error ( Diagnostics . Unterminated_string_literal ) ;
948
945
break ;
949
946
}
@@ -961,7 +958,7 @@ namespace ts {
961
958
}
962
959
if ( isLineBreak ( ch ) ) {
963
960
result += text . substring ( start , pos ) ;
964
- tokenIsUnterminated = true ;
961
+ tokenFlags |= TokenFlags . Unterminated ;
965
962
error ( Diagnostics . Unterminated_string_literal ) ;
966
963
break ;
967
964
}
@@ -985,7 +982,7 @@ namespace ts {
985
982
while ( true ) {
986
983
if ( pos >= end ) {
987
984
contents += text . substring ( start , pos ) ;
988
- tokenIsUnterminated = true ;
985
+ tokenFlags |= TokenFlags . Unterminated ;
989
986
error ( Diagnostics . Unterminated_template_literal ) ;
990
987
resultingToken = startedWithBacktick ? SyntaxKind . NoSubstitutionTemplateLiteral : SyntaxKind . TemplateTail ;
991
988
break ;
@@ -1071,7 +1068,7 @@ namespace ts {
1071
1068
case CharacterCodes . u :
1072
1069
// '\u{DDDDDDDD}'
1073
1070
if ( pos < end && text . charCodeAt ( pos ) === CharacterCodes . openBrace ) {
1074
- hasExtendedUnicodeEscape = true ;
1071
+ tokenFlags |= TokenFlags . ExtendedUnicodeEscape ;
1075
1072
pos ++ ;
1076
1073
return scanExtendedUnicodeEscape ( ) ;
1077
1074
}
@@ -1240,10 +1237,7 @@ namespace ts {
1240
1237
1241
1238
function scan ( ) : SyntaxKind {
1242
1239
startPos = pos ;
1243
- hasExtendedUnicodeEscape = false ;
1244
- precedingLineBreak = false ;
1245
- tokenIsUnterminated = false ;
1246
- numericLiteralFlags = 0 ;
1240
+ tokenFlags = 0 ;
1247
1241
while ( true ) {
1248
1242
tokenPos = pos ;
1249
1243
if ( pos >= end ) {
@@ -1265,7 +1259,7 @@ namespace ts {
1265
1259
switch ( ch ) {
1266
1260
case CharacterCodes . lineFeed :
1267
1261
case CharacterCodes . carriageReturn :
1268
- precedingLineBreak = true ;
1262
+ tokenFlags |= TokenFlags . PrecedingLineBreak ;
1269
1263
if ( skipTrivia ) {
1270
1264
pos ++ ;
1271
1265
continue ;
@@ -1396,6 +1390,9 @@ namespace ts {
1396
1390
// Multi-line comment
1397
1391
if ( text . charCodeAt ( pos + 1 ) === CharacterCodes . asterisk ) {
1398
1392
pos += 2 ;
1393
+ if ( text . charCodeAt ( pos ) === CharacterCodes . asterisk && text . charCodeAt ( pos + 1 ) !== CharacterCodes . slash ) {
1394
+ tokenFlags |= TokenFlags . PrecedingJSDocComment ;
1395
+ }
1399
1396
1400
1397
let commentClosed = false ;
1401
1398
while ( pos < end ) {
@@ -1408,7 +1405,7 @@ namespace ts {
1408
1405
}
1409
1406
1410
1407
if ( isLineBreak ( ch ) ) {
1411
- precedingLineBreak = true ;
1408
+ tokenFlags |= TokenFlags . PrecedingLineBreak ;
1412
1409
}
1413
1410
pos ++ ;
1414
1411
}
@@ -1421,7 +1418,9 @@ namespace ts {
1421
1418
continue ;
1422
1419
}
1423
1420
else {
1424
- tokenIsUnterminated = ! commentClosed ;
1421
+ if ( ! commentClosed ) {
1422
+ tokenFlags |= TokenFlags . Unterminated ;
1423
+ }
1425
1424
return token = SyntaxKind . MultiLineCommentTrivia ;
1426
1425
}
1427
1426
}
@@ -1442,7 +1441,7 @@ namespace ts {
1442
1441
value = 0 ;
1443
1442
}
1444
1443
tokenValue = "" + value ;
1445
- numericLiteralFlags = NumericLiteralFlags . HexSpecifier ;
1444
+ tokenFlags |= TokenFlags . HexSpecifier ;
1446
1445
return token = SyntaxKind . NumericLiteral ;
1447
1446
}
1448
1447
else if ( pos + 2 < end && ( text . charCodeAt ( pos + 1 ) === CharacterCodes . B || text . charCodeAt ( pos + 1 ) === CharacterCodes . b ) ) {
@@ -1453,7 +1452,7 @@ namespace ts {
1453
1452
value = 0 ;
1454
1453
}
1455
1454
tokenValue = "" + value ;
1456
- numericLiteralFlags = NumericLiteralFlags . BinarySpecifier ;
1455
+ tokenFlags |= TokenFlags . BinarySpecifier ;
1457
1456
return token = SyntaxKind . NumericLiteral ;
1458
1457
}
1459
1458
else if ( pos + 2 < end && ( text . charCodeAt ( pos + 1 ) === CharacterCodes . O || text . charCodeAt ( pos + 1 ) === CharacterCodes . o ) ) {
@@ -1464,13 +1463,13 @@ namespace ts {
1464
1463
value = 0 ;
1465
1464
}
1466
1465
tokenValue = "" + value ;
1467
- numericLiteralFlags = NumericLiteralFlags . OctalSpecifier ;
1466
+ tokenFlags |= TokenFlags . OctalSpecifier ;
1468
1467
return token = SyntaxKind . NumericLiteral ;
1469
1468
}
1470
1469
// Try to parse as an octal
1471
1470
if ( pos + 1 < end && isOctalDigit ( text . charCodeAt ( pos + 1 ) ) ) {
1472
1471
tokenValue = "" + scanOctalDigits ( ) ;
1473
- numericLiteralFlags = NumericLiteralFlags . Octal ;
1472
+ tokenFlags |= TokenFlags . Octal ;
1474
1473
return token = SyntaxKind . NumericLiteral ;
1475
1474
}
1476
1475
// This fall-through is a deviation from the EcmaScript grammar. The grammar says that a leading zero
@@ -1627,7 +1626,7 @@ namespace ts {
1627
1626
continue ;
1628
1627
}
1629
1628
else if ( isLineBreak ( ch ) ) {
1630
- precedingLineBreak = true ;
1629
+ tokenFlags |= TokenFlags . PrecedingLineBreak ;
1631
1630
pos ++ ;
1632
1631
continue ;
1633
1632
}
@@ -1670,14 +1669,14 @@ namespace ts {
1670
1669
// If we reach the end of a file, or hit a newline, then this is an unterminated
1671
1670
// regex. Report error and return what we have so far.
1672
1671
if ( p >= end ) {
1673
- tokenIsUnterminated = true ;
1672
+ tokenFlags |= TokenFlags . Unterminated ;
1674
1673
error ( Diagnostics . Unterminated_regular_expression_literal ) ;
1675
1674
break ;
1676
1675
}
1677
1676
1678
1677
const ch = text . charCodeAt ( p ) ;
1679
1678
if ( isLineBreak ( ch ) ) {
1680
- tokenIsUnterminated = true ;
1679
+ tokenFlags |= TokenFlags . Unterminated ;
1681
1680
error ( Diagnostics . Unterminated_regular_expression_literal ) ;
1682
1681
break ;
1683
1682
}
@@ -1895,7 +1894,7 @@ namespace ts {
1895
1894
const saveTokenPos = tokenPos ;
1896
1895
const saveToken = token ;
1897
1896
const saveTokenValue = tokenValue ;
1898
- const savePrecedingLineBreak = precedingLineBreak ;
1897
+ const saveTokenFlags = tokenFlags ;
1899
1898
const result = callback ( ) ;
1900
1899
1901
1900
// If our callback returned something 'falsy' or we're just looking ahead,
@@ -1906,7 +1905,7 @@ namespace ts {
1906
1905
tokenPos = saveTokenPos ;
1907
1906
token = saveToken ;
1908
1907
tokenValue = saveTokenValue ;
1909
- precedingLineBreak = savePrecedingLineBreak ;
1908
+ tokenFlags = saveTokenFlags ;
1910
1909
}
1911
1910
return result ;
1912
1911
}
@@ -1917,10 +1916,8 @@ namespace ts {
1917
1916
const saveStartPos = startPos ;
1918
1917
const saveTokenPos = tokenPos ;
1919
1918
const saveToken = token ;
1920
- const savePrecedingLineBreak = precedingLineBreak ;
1921
1919
const saveTokenValue = tokenValue ;
1922
- const saveHasExtendedUnicodeEscape = hasExtendedUnicodeEscape ;
1923
- const saveTokenIsUnterminated = tokenIsUnterminated ;
1920
+ const saveTokenFlags = tokenFlags ;
1924
1921
1925
1922
setText ( text , start , length ) ;
1926
1923
const result = callback ( ) ;
@@ -1930,10 +1927,8 @@ namespace ts {
1930
1927
startPos = saveStartPos ;
1931
1928
tokenPos = saveTokenPos ;
1932
1929
token = saveToken ;
1933
- precedingLineBreak = savePrecedingLineBreak ;
1934
1930
tokenValue = saveTokenValue ;
1935
- hasExtendedUnicodeEscape = saveHasExtendedUnicodeEscape ;
1936
- tokenIsUnterminated = saveTokenIsUnterminated ;
1931
+ tokenFlags = saveTokenFlags ;
1937
1932
1938
1933
return result ;
1939
1934
}
@@ -1974,11 +1969,8 @@ namespace ts {
1974
1969
startPos = textPos ;
1975
1970
tokenPos = textPos ;
1976
1971
token = SyntaxKind . Unknown ;
1977
- precedingLineBreak = false ;
1978
-
1979
1972
tokenValue = undefined ;
1980
- hasExtendedUnicodeEscape = false ;
1981
- tokenIsUnterminated = false ;
1973
+ tokenFlags = 0 ;
1982
1974
}
1983
1975
}
1984
1976
}
0 commit comments