@@ -1672,11 +1672,16 @@ namespace ts {
16721672 }
16731673
16741674 function scanJSDocToken ( ) : SyntaxKind {
1675+ if ( pos >= end ) {
1676+ return token = SyntaxKind . EndOfFileToken ;
1677+ }
1678+
16751679 startPos = pos ;
16761680
16771681 // Eat leading whitespace
1682+ let ch = text . charCodeAt ( pos ) ;
16781683 while ( pos < end ) {
1679- const ch = text . charCodeAt ( pos ) ;
1684+ ch = text . charCodeAt ( pos ) ;
16801685 if ( isWhiteSpace ( ch ) ) {
16811686 pos ++ ;
16821687 }
@@ -1686,55 +1691,38 @@ namespace ts {
16861691 }
16871692 tokenPos = pos ;
16881693
1689- let identifierStarted = false ;
1690- while ( pos < end ) {
1691- const ch = text . charCodeAt ( pos ) ;
1692- if ( identifierStarted ) {
1693- if ( ! isIdentifierPart ( ch , ScriptTarget . Latest ) ) {
1694- return token = SyntaxKind . Identifier ;
1695- }
1696- }
1697- else {
1698- if ( ch === CharacterCodes . at ) {
1699- return pos += 1 , token = SyntaxKind . AtToken ;
1700- }
1701- else if ( isLineBreak ( ch ) ) {
1702- return pos += 1 , token = SyntaxKind . NewLineTrivia ;
1703- }
1704- else if ( ch === CharacterCodes . asterisk ) {
1705- return pos += 1 , token = SyntaxKind . AsteriskToken ;
1706- }
1707- else if ( ch === CharacterCodes . openBrace ) {
1708- return pos += 1 , token = SyntaxKind . OpenBraceToken ;
1709- }
1710- else if ( ch === CharacterCodes . closeBrace ) {
1711- return pos += 1 , token = SyntaxKind . CloseBraceToken ;
1712- }
1713- else if ( ch === CharacterCodes . openBracket ) {
1714- return pos += 1 , token = SyntaxKind . OpenBracketToken ;
1715- }
1716- else if ( ch === CharacterCodes . closeBracket ) {
1717- return pos += 1 , token = SyntaxKind . CloseBracketToken ;
1718- }
1719- else if ( ch === CharacterCodes . equals ) {
1720- return pos += 1 , token = SyntaxKind . EqualsToken ;
1721- }
1722- else if ( ch === CharacterCodes . comma ) {
1723- return pos += 1 , token = SyntaxKind . CommaToken ;
1724- }
1725- else if ( isWhiteSpace ( ch ) ) {
1726- // Keep going
1727- }
1728- else if ( isIdentifierStart ( ch , ScriptTarget . Latest ) ) {
1729- identifierStarted = true ;
1730- }
1731- else {
1732- return pos += 1 , token = SyntaxKind . Unknown ;
1733- }
1694+ switch ( ch ) {
1695+ case CharacterCodes . at :
1696+ return pos += 1 , token = SyntaxKind . AtToken ;
1697+ case CharacterCodes . lineFeed :
1698+ case CharacterCodes . carriageReturn :
1699+ return pos += 1 , token = SyntaxKind . NewLineTrivia ;
1700+ case CharacterCodes . asterisk :
1701+ return pos += 1 , token = SyntaxKind . AsteriskToken ;
1702+ case CharacterCodes . openBrace :
1703+ return pos += 1 , token = SyntaxKind . OpenBraceToken ;
1704+ case CharacterCodes . closeBrace :
1705+ return pos += 1 , token = SyntaxKind . CloseBraceToken ;
1706+ case CharacterCodes . openBracket :
1707+ return pos += 1 , token = SyntaxKind . OpenBracketToken ;
1708+ case CharacterCodes . closeBracket :
1709+ return pos += 1 , token = SyntaxKind . CloseBracketToken ;
1710+ case CharacterCodes . equals :
1711+ return pos += 1 , token = SyntaxKind . EqualsToken ;
1712+ case CharacterCodes . comma :
1713+ return pos += 1 , token = SyntaxKind . CommaToken ;
1714+ }
1715+
1716+ if ( isIdentifierStart ( ch , ScriptTarget . Latest ) ) {
1717+ pos ++ ;
1718+ while ( isIdentifierPart ( text . charCodeAt ( pos ) , ScriptTarget . Latest ) && pos < end ) {
1719+ pos ++ ;
17341720 }
1735- pos += 1 ;
1721+ return token = SyntaxKind . Identifier ;
1722+ }
1723+ else {
1724+ return pos += 1 , token = SyntaxKind . Unknown ;
17361725 }
1737- return token = SyntaxKind . EndOfFileToken ;
17381726 }
17391727
17401728 function speculationHelper < T > ( callback : ( ) => T , isLookahead : boolean ) : T {
0 commit comments