Lines Matching refs:lexer_

128     lexer_ = lexer.get();
189 lexer::SourcePosition startLoc = lexer_->GetToken().Start();
190 lexer_->NextToken();
209 blockStmt->SetRange({startLoc, lexer_->GetToken().End()});
289 ASSERT(lexer_->GetToken().Type() == lexer::TokenType::LITERAL_IDENT ||
290 lexer_->GetToken().Type() == lexer::TokenType::KEYW_EXTENDS);
292 switch (lexer_->GetToken().KeywordType()) {
314 switch (lexer_->GetToken().Type()) {
337 auto *identRef = AllocNode<ir::Identifier>(lexer_->GetToken().Ident());
339 identRef->SetRange(lexer_->GetToken().Loc());
342 typeReference->SetRange(lexer_->GetToken().Loc());
344 lexer_->NextToken();
351 if (CurrentLiteralIsBasicType() && lexer_->Lookahead() != LEX_CHAR_DOT) {
360 auto pos = lexer_->Save();
361 lexer_->NextToken();
364 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_MINUS ||
365 lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_PLUS) {
366 lexer_->NextToken();
367 result = lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_READONLY;
368 lexer_->Rewind(pos);
372 if (lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_READONLY) {
373 lexer_->NextToken();
376 if (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_LEFT_SQUARE_BRACKET) {
377 lexer_->Rewind(pos);
381 lexer_->NextToken();
383 if (lexer_->GetToken().Type() != lexer::TokenType::LITERAL_IDENT) {
384 lexer_->Rewind(pos);
388 lexer_->NextToken();
390 result = lexer_->GetToken().Type() == lexer::TokenType::KEYW_IN;
392 lexer_->Rewind(pos);
398 ASSERT(lexer_->GetToken().Type() == lexer::TokenType::LITERAL_IDENT ||
399 lexer_->GetToken().Type() == lexer::TokenType::KEYW_THIS);
401 auto pos = lexer_->Save();
402 bool isAsserts = lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_ASSERTS;
404 lexer_->NextToken();
407 if (lexer_->GetToken().Type() != lexer::TokenType::LITERAL_IDENT &&
408 lexer_->GetToken().Type() != lexer::TokenType::KEYW_THIS) {
409 lexer_->Rewind(pos);
414 lexer_->Rewind(pos);
418 lexer_->NextToken();
420 bool result = !lexer_->GetToken().NewLine() && (lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_IS);
421 lexer_->Rewind(pos);
427 if (lexer_->GetToken().KeywordType() != lexer::TokenType::KEYW_ABSTRACT) {
431 lexer::LexerPosition pos = lexer_->Save();
432 lexer_->NextToken(); // eat 'abstract'
433 bool result = lexer_->GetToken().Type() == lexer::TokenType::KEYW_NEW;
435 lexer_->Rewind(pos);
450 lexer::SourcePosition bodyStart = lexer_->GetToken().Start();
452 lexer::SourcePosition bodyEnd = lexer_->GetToken().End();
453 lexer_->NextToken();
492 ASSERT(lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_BACK_TICK);
493 lexer::SourcePosition startLoc = lexer_->GetToken().Start();
499 lexer_->ResetTokenEnd();
500 const auto startPos = lexer_->Save();
502 lexer_->ScanString<LEX_CHAR_BACK_TICK>();
503 util::StringView cooked = lexer_->GetToken().String();
505 lexer_->Rewind(startPos);
506 auto [raw, end, scanExpression] = lexer_->ScanTemplateString();
510 lexer::SourcePosition{end, lexer_->Line()}});
514 lexer_->ScanTemplateStringEnd();
521 lexer::TemplateLiteralParserContext ctx(lexer_);
522 lexer_->PushTemplateContext(&ctx);
523 lexer_->NextToken();
528 if (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_RIGHT_BRACE) {
539 typeAnnotation->SetRange({startLoc, lexer_->GetToken().End()});
541 lexer_->NextToken();
549 switch (lexer_->GetToken().Type()) {
594 lexer::SourcePosition startLoc = lexer_->GetToken().Start();
656 switch (lexer_->GetToken().Type()) {
666 if (lexer_->GetToken().NewLine()) {
669 if (lexer_->Lookahead() == LEX_CHAR_RIGHT_SQUARE) {
690 ASSERT(lexer_->GetToken().Type() == lexer::TokenType::KEYW_IMPORT);
692 lexer_->NextToken();
694 if (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_LEFT_PARENTHESIS) {
698 lexer_->NextToken();
707 if (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_RIGHT_PARENTHESIS) {
711 lexer_->NextToken();
714 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_PERIOD) {
715 lexer_->NextToken();
717 if (lexer_->GetToken().Type() != lexer::TokenType::LITERAL_IDENT) {
721 qualifier = AllocNode<ir::Identifier>(lexer_->GetToken().Ident());
722 qualifier->SetRange(lexer_->GetToken().Loc());
724 lexer_->NextToken();
726 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_PERIOD) {
732 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_SHIFT ||
733 lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LESS_THAN) {
734 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_SHIFT) {
735 lexer_->BackwardToken(lexer::TokenType::PUNCTUATOR_LESS_THAN, 1);
743 importType->SetRange({startLoc, lexer_->GetToken().End()});
750 ASSERT(lexer_->GetToken().Type() == lexer::TokenType::KEYW_THIS);
759 returnType->SetRange(lexer_->GetToken().Loc());
761 lexer_->NextToken();
768 ASSERT(lexer_->GetToken().Type() == lexer::TokenType::KEYW_EXTENDS);
775 lexer_->NextToken(); // eat 'extends'
787 if (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_QUESTION_MARK) {
791 lexer_->NextToken(); // eat '?'
796 if (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_COLON) {
800 lexer_->NextToken(); // eat ':'
830 if (((*options & TypeAnnotationParsingOptions::BREAK_AT_NEW_LINE) && lexer_->GetToken().NewLine()) &&
831 !(lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_BITWISE_AND ||
832 lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_BITWISE_OR)) {
845 if (lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_READONLY) {
846 lexer::SourcePosition typeOperatorStart = lexer_->GetToken().Start();
847 lexer_->NextToken();
866 if (lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_KEYOF) {
867 lexer::SourcePosition typeOperatorStart = lexer_->GetToken().Start();
868 lexer_->NextToken();
881 if (lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_UNIQUE) {
882 lexer::SourcePosition typeOperatorStart = lexer_->GetToken().Start();
883 lexer_->NextToken();
895 if (lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_INFER) {
902 lexer::SourcePosition inferStart = lexer_->GetToken().Start();
903 lexer_->NextToken();
909 inferType->SetRange({inferStart, lexer_->GetToken().End()});
919 if (lexer_->GetToken().Type() != lexer::TokenType::LITERAL_IDENT) {
922 const auto savePos = lexer_->Save();
924 lexer_->NextToken();
925 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_COLON ||
926 (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_QUESTION_MARK &&
927 lexer_->Lookahead() == LEX_CHAR_COLON)) {
930 lexer_->Rewind(savePos);
946 lexer::SourcePosition startPos = lexer_->GetToken().Start();
951 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_PERIOD_PERIOD_PERIOD) {
953 lexer_->NextToken(); // eat '...'
962 auto *elementIdent = AllocNode<ir::Identifier>(lexer_->GetToken().Ident());
963 elementIdent->SetRange(lexer_->GetToken().Loc());
964 lexer_->NextToken(); // eat identifier
967 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_QUESTION_MARK) {
968 lexer_->NextToken(); // eat '?'
975 if (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_COLON) {
979 lexer_->NextToken(); // eat ':'
1004 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_QUESTION_MARK) {
1007 element->SetRange({elementStartPos, lexer_->GetToken().End()});
1008 lexer_->NextToken(); // eat '?'
1019 ASSERT(lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_SQUARE_BRACKET);
1020 lexer::SourcePosition tupleStart = lexer_->GetToken().Start();
1026 lexer_->NextToken(); // eat '['
1028 while (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_RIGHT_SQUARE_BRACKET) {
1033 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_RIGHT_SQUARE_BRACKET) {
1037 if (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_COMMA) {
1041 lexer_->NextToken(); // eat ','
1044 lexer::SourcePosition tupleEnd = lexer_->GetToken().End();
1045 lexer_->NextToken(); // eat ']'
1057 lexer_->NextToken(lexer::LexerNextTokenFlags::KEYWORD_TO_IDENT); // eat '.'
1059 if (lexer_->GetToken().Type() != lexer::TokenType::LITERAL_IDENT) {
1063 auto *propName = AllocNode<ir::Identifier>(lexer_->GetToken().Ident());
1064 propName->SetRange(lexer_->GetToken().Loc());
1067 typeName->SetRange({typeName->AsTSQualifiedName()->Left()->Start(), lexer_->GetToken().End()});
1069 lexer_->NextToken();
1070 } while (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_PERIOD);
1072 typeName->SetRange({startLoc, lexer_->GetToken().End()});
1083 lexer_->NextToken(); // eat '['
1087 if (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_RIGHT_SQUARE_BRACKET) {
1094 lexer_->NextToken(); // eat ']'
1097 typeName->SetRange({typeName->AsTSIndexedAccessType()->ObjectType()->Start(), lexer_->GetToken().End()});
1098 } while (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_SQUARE_BRACKET &&
1099 lexer_->Lookahead() != LEX_CHAR_RIGHT_SQUARE);
1106 lexer::SourcePosition referenceStartLoc = lexer_->GetToken().Start();
1109 ASSERT(lexer_->GetToken().Type() == lexer::TokenType::KEYW_TYPEOF);
1110 lexer_->NextToken(); // eat 'typeof'
1112 if (lexer_->GetToken().Type() == lexer::TokenType::KEYW_IMPORT) {
1117 if (lexer_->GetToken().Type() != lexer::TokenType::LITERAL_IDENT &&
1118 lexer_->GetToken().Type() != lexer::TokenType::KEYW_THIS) {
1123 ASSERT(lexer_->GetToken().Type() == lexer::TokenType::LITERAL_IDENT ||
1124 lexer_->GetToken().Type() == lexer::TokenType::KEYW_THIS ||
1125 lexer_->GetToken().Type() == lexer::TokenType::KEYW_EXTENDS);
1127 ir::Expression *typeName = AllocNode<ir::Identifier>(lexer_->GetToken().Ident());
1128 typeName->SetRange(lexer_->GetToken().Loc());
1131 if (lexer_->Lookahead() == LEX_CHAR_LESS_THAN) {
1132 lexer_->ForwardToken(lexer::TokenType::PUNCTUATOR_LESS_THAN, 1);
1134 lexer_->NextToken();
1137 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_PERIOD) {
1142 if (!(lexer_->GetToken().Flags() & lexer::TokenFlags::NEW_LINE) &&
1143 lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LESS_THAN) {
1152 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_SQUARE_BRACKET &&
1153 lexer_->Lookahead() != LEX_CHAR_RIGHT_SQUARE) {
1160 typeName->SetRange({referenceStartLoc, lexer_->GetToken().End()});
1182 lexer::SourcePosition startLoc = lexer_->GetToken().Start();
1184 auto *paramName = AllocNode<ir::Identifier>(lexer_->GetToken().Ident());
1185 paramName->SetRange({lexer_->GetToken().Start(), lexer_->GetToken().End()});
1187 lexer_->NextToken();
1189 lexer_->NextToken(); // eat 'in'
1205 if (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_MINUS &&
1206 lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_PLUS &&
1207 lexer_->GetToken().KeywordType() != tokenType && lexer_->GetToken().Type() != tokenType) {
1211 auto result = lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_MINUS ? ir::MappedOption::MINUS
1214 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_MINUS ||
1215 lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_PLUS) {
1216 lexer_->NextToken();
1219 if (lexer_->GetToken().KeywordType() != tokenType && lexer_->GetToken().Type() != tokenType) {
1223 lexer_->NextToken();
1230 ASSERT(lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_BRACE);
1232 lexer::SourcePosition startLoc = lexer_->GetToken().Start();
1233 lexer_->NextToken(lexer::LexerNextTokenFlags::KEYWORD_TO_IDENT); // eat '{'
1237 lexer_->NextToken(); // eat '['
1242 if (lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_AS) {
1243 lexer_->NextToken(); // eat 'as'
1249 if (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_RIGHT_SQUARE_BRACKET) {
1253 lexer_->NextToken(); // eat ']'
1258 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_COLON) {
1259 lexer_->NextToken(); // eat ':'
1264 if (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_SEMI_COLON &&
1265 lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_RIGHT_BRACE) {
1269 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_SEMI_COLON) {
1270 lexer_->NextToken(); // eat ';'
1273 if (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_RIGHT_BRACE) {
1279 mappedType->SetRange({startLoc, lexer_->GetToken().End()});
1281 lexer_->NextToken(); // eat '}'
1288 auto pos = lexer_->Save();
1289 lexer::SourcePosition startPos = lexer_->GetToken().Start();
1290 bool isAsserts = lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_ASSERTS;
1292 lexer_->NextToken(); // eat 'asserts'
1293 if (lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_IS) {
1295 lexer_->Rewind(pos);
1300 if (lexer_->GetToken().Type() == lexer::TokenType::LITERAL_IDENT) {
1301 parameterName = AllocNode<ir::Identifier>(lexer_->GetToken().Ident());
1306 parameterName->SetRange({lexer_->GetToken().Start(), lexer_->GetToken().End()});
1308 lexer_->NextToken();
1314 if (isAsserts && lexer_->GetToken().KeywordType() != lexer::TokenType::KEYW_IS) {
1321 lexer_->NextToken(); // eat 'is'
1338 if (lexer_->GetToken().Type() == lexer::TokenType::LITERAL_IDENT &&
1339 (lexer_->GetToken().KeywordType() != lexer::TokenType::KEYW_NEW ||
1340 (lexer_->Lookahead() != LEX_CHAR_LEFT_PAREN && lexer_->Lookahead() != LEX_CHAR_LESS_THAN))) {
1341 key = AllocNode<ir::Identifier>(lexer_->GetToken().Ident());
1342 key->SetRange(lexer_->GetToken().Loc());
1343 lexer_->NextToken();
1344 } else if (lexer_->GetToken().Type() == lexer::TokenType::LITERAL_NUMBER) {
1345 if (lexer_->GetToken().Flags() & lexer::TokenFlags::NUMBER_BIGINT) {
1346 key = AllocNode<ir::BigIntLiteral>(lexer_->GetToken().BigInt());
1348 key = AllocNode<ir::NumberLiteral>(lexer_->GetToken().Number(), lexer_->GetToken().String());
1351 key->SetRange(lexer_->GetToken().Loc());
1352 lexer_->NextToken();
1353 } else if (lexer_->GetToken().Type() == lexer::TokenType::LITERAL_STRING) {
1354 key = AllocNode<ir::StringLiteral>(lexer_->GetToken().String());
1355 key->SetRange(lexer_->GetToken().Loc());
1356 lexer_->NextToken();
1357 } else if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_SQUARE_BRACKET) {
1359 lexer_->NextToken(); // eat '['
1361 if (lexer_->GetToken().Type() == lexer::TokenType::LITERAL_IDENT && lexer_->Lookahead() == LEX_CHAR_COLON) {
1363 key = AllocNode<ir::Identifier>(lexer_->GetToken().Ident());
1364 key->SetRange(lexer_->GetToken().Loc());
1366 lexer_->NextToken(); // eat param
1368 if (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_COLON) {
1372 lexer_->NextToken(); // eat ':'
1384 if (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_RIGHT_SQUARE_BRACKET) {
1388 lexer_->NextToken(); // eat ']'
1389 } else if (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_LEFT_PARENTHESIS &&
1390 lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_LESS_THAN &&
1391 lexer_->GetToken().KeywordType() != lexer::TokenType::KEYW_NEW) {
1448 if (lexer_->GetToken().Type() != lexer::TokenType::LITERAL_IDENT) {
1452 char32_t nextCp = lexer_->Lookahead();
1457 if (lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_GET) {
1458 if (lexer_->GetToken().Flags() & lexer::TokenFlags::HAS_ESCAPE) {
1463 lexer_->NextToken();
1464 } else if (lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_SET) {
1465 if (lexer_->GetToken().Flags() & lexer::TokenFlags::HAS_ESCAPE) {
1470 lexer_->NextToken();
1485 lexer::SourcePosition memberStartLoc = lexer_->GetToken().Start();
1486 char32_t nextToken = lexer_->Lookahead();
1487 if (lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_READONLY && nextToken != LEX_CHAR_LEFT_PAREN &&
1491 lexer_->NextToken(lexer::LexerNextTokenFlags::KEYWORD_TO_IDENT);
1497 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_QUESTION_MARK) {
1503 lexer_->NextToken(); // eat '?'
1506 if (lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_NEW && signature) {
1507 lexer_->NextToken(); // eat 'new'
1509 if (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_LEFT_PARENTHESIS &&
1510 lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_LESS_THAN) {
1518 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LESS_THAN) {
1525 if (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_LEFT_PARENTHESIS) {
1542 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_PARENTHESIS && !isIndexSignature) {
1547 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_COLON) {
1548 lexer_->NextToken(); // eat ':'
1567 } else if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_COLON) {
1568 lexer_->NextToken(); // eat ':'
1588 member->SetRange({memberStartLoc, lexer_->GetToken().End()});
1661 ASSERT(lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_BRACE);
1663 lexer_->NextToken(lexer::LexerNextTokenFlags::KEYWORD_TO_IDENT); // eat '{'
1667 while (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_RIGHT_BRACE) {
1674 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_RIGHT_BRACE) {
1678 if (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_COMMA &&
1679 lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_SEMI_COLON) {
1680 if (!lexer_->GetToken().NewLine()) {
1684 if (lexer_->GetToken().IsKeyword()) {
1685 lexer_->GetToken().SetTokenType(lexer::TokenType::LITERAL_IDENT);
1691 lexer_->NextToken(lexer::LexerNextTokenFlags::KEYWORD_TO_IDENT);
1699 ASSERT(lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_SQUARE_BRACKET);
1700 lexer_->NextToken(); // eat '['
1702 if (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_RIGHT_SQUARE_BRACKET) {
1706 lexer::SourcePosition endLoc = lexer_->GetToken().End();
1707 lexer_->NextToken(); // eat ']'
1734 startLoc = lexer_->GetToken().Start();
1738 if (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_BITWISE_OR) {
1742 lexer_->NextToken(); // eat '|'
1785 startLoc = lexer_->GetToken().Start();
1789 if (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_BITWISE_AND) {
1793 lexer_->NextToken(); // eat '&'
1814 ASSERT(lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_PARENTHESIS);
1815 const auto startPos = lexer_->Save();
1816 lexer_->NextToken(); // eat '('
1817 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_RIGHT_PARENTHESIS ||
1818 lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_PERIOD_PERIOD_PERIOD) {
1819 lexer_->Rewind(startPos);
1825 if (lexer_->GetToken().Type() == lexer::TokenType::LITERAL_IDENT ||
1826 (Extension() == ScriptExtension::TS && lexer_->GetToken().Type() == lexer::TokenType::KEYW_THIS)) {
1827 lexer_->NextToken();
1828 } else if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_SQUARE_BRACKET) {
1830 } else if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_BRACE) {
1833 lexer_->Rewind(startPos);
1837 lexer_->Rewind(startPos);
1841 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_COMMA ||
1842 lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_QUESTION_MARK ||
1843 lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_COLON ||
1844 lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_EQUAL) {
1845 lexer_->Rewind(startPos);
1849 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_RIGHT_PARENTHESIS) {
1850 lexer_->NextToken(); // eat ')'
1851 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_ARROW) {
1852 lexer_->Rewind(startPos);
1856 lexer_->Rewind(startPos);
1866 lexer::SourcePosition typeStart = lexer_->GetToken().Start();
1868 bool abstractConstructor = lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_ABSTRACT;
1870 lexer_->NextToken(); // eat 'abstract'
1875 if (lexer_->GetToken().Type() == lexer::TokenType::KEYW_NEW) {
1876 lexer_->NextToken(); // eat 'new'
1879 if (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_LEFT_PARENTHESIS &&
1880 lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_LESS_THAN) {
1888 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LESS_THAN || isConstructionType) {
1896 ASSERT(lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_PARENTHESIS);
1897 lexer_->NextToken(); // eat '('
1902 if (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_RIGHT_PARENTHESIS) {
1909 lexer::SourcePosition endLoc = lexer_->GetToken().End();
1910 lexer_->NextToken(); // eat ')'
1922 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LESS_THAN) {
1925 if (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_LEFT_PARENTHESIS) {
1947 if (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_ARROW) {
1951 lexer_->NextToken(); // eat '=>'
1984 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_MINUS) {
1985 lexer_->NextToken();
1987 if (lexer_->GetToken().Type() != lexer::TokenType::LITERAL_NUMBER) {
1995 if (lexer_->GetToken().Type() == lexer::TokenType::LITERAL_NUMBER) {
1996 if (lexer_->GetToken().Flags() & lexer::TokenFlags::NUMBER_BIGINT) {
1997 auto *bigintNode = AllocNode<ir::BigIntLiteral>(lexer_->GetToken().BigInt());
1998 bigintNode->SetRange(lexer_->GetToken().Loc());
2002 auto *numberNode = AllocNode<ir::NumberLiteral>(lexer_->GetToken().Number(), lexer_->GetToken().String());
2003 numberNode->SetRange(lexer_->GetToken().Loc());
2007 } else if (lexer_->GetToken().Type() == lexer::TokenType::LITERAL_STRING) {
2008 auto *stringNode = AllocNode<ir::StringLiteral>(lexer_->GetToken().String());
2009 stringNode->SetRange(lexer_->GetToken().Loc());
2012 } else if (lexer_->GetToken().Type() == lexer::TokenType::LITERAL_TRUE) {
2014 booleanLiteral->SetRange(lexer_->GetToken().Loc());
2017 } else if (lexer_->GetToken().Type() == lexer::TokenType::LITERAL_FALSE) {
2019 booleanLiteral->SetRange(lexer_->GetToken().Loc());
2022 } else if (lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_ANY) {
2024 } else if (lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_BOOLEAN) {
2026 } else if (lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_NUMBER) {
2028 } else if (lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_STRING) {
2030 } else if (lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_UNKNOWN) {
2032 } else if (lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_VOID) {
2034 } else if (lexer_->GetToken().KeywordType() == lexer::TokenType::LITERAL_NULL) {
2036 } else if (lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_UNDEFINED) {
2038 } else if (lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_NEVER) {
2040 } else if (lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_OBJECT) {
2042 } else if (lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_BIGINT) {
2044 } else if (lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_SYMBOL) {
2050 typeAnnotation->SetRange(lexer_->GetToken().Loc());
2052 lexer_->NextToken();
2101 while (IsModifierKind(lexer_->GetToken())) {
2102 char32_t nextCp = lexer_->Lookahead();
2107 lexer::TokenFlags tokenFlags = lexer_->GetToken().Flags();
2115 switch (lexer_->GetToken().KeywordType()) {
2181 if (lexer_->Lookahead() == LEX_CHAR_COLON || lexer_->Lookahead() == LEX_CHAR_COMMA ||
2182 lexer_->Lookahead() == LEX_CHAR_RIGHT_PAREN || lexer_->Lookahead() == LEX_CHAR_QUESTION ||
2183 lexer_->Lookahead() == LEX_CHAR_RIGHT_BRACE || lexer_->Lookahead() == LEX_CHAR_LESS_THAN) {
2187 auto pos = lexer_->Save();
2188 lexer_->NextToken(lexer::LexerNextTokenFlags::KEYWORD_TO_IDENT);
2191 lexer_->Rewind(pos);
2196 lexer_->Rewind(pos);
2202 lexer_->Rewind(pos);
2276 if (lexer_->GetToken().Type() != lexer::TokenType::LITERAL_IDENT) {
2280 char32_t nextCp = lexer_->Lookahead();
2287 if (lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_GET) {
2288 if (lexer_->GetToken().Flags() & lexer::TokenFlags::HAS_ESCAPE) {
2293 desc->methodStart = lexer_->GetToken().Start();
2295 lexer_->NextToken(lexer::LexerNextTokenFlags::KEYWORD_TO_IDENT);
2297 } else if (lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_SET) {
2298 if (lexer_->GetToken().Flags() & lexer::TokenFlags::HAS_ESCAPE) {
2303 desc->methodStart = lexer_->GetToken().Start();
2305 lexer_->NextToken(lexer::LexerNextTokenFlags::KEYWORD_TO_IDENT);
2339 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_HASH_MARK) {
2343 const util::StringView &propNameStr = lexer_->GetToken().Ident();
2355 desc->methodStart = lexer_->GetToken().Start();
2377 if (lexer_->GetToken().IsKeyword()) {
2378 lexer_->GetToken().SetTokenType(lexer::TokenType::LITERAL_IDENT);
2381 switch (lexer_->GetToken().Type()) {
2385 propName = AllocNode<ir::Identifier>(lexer_->GetToken().Ident());
2386 propName->SetRange(lexer_->GetToken().Loc());
2392 propName = AllocNode<ir::StringLiteral>(lexer_->GetToken().String());
2393 propName->SetRange(lexer_->GetToken().Loc());
2398 if (lexer_->GetToken().Flags() & lexer::TokenFlags::NUMBER_BIGINT) {
2399 propName = AllocNode<ir::BigIntLiteral>(lexer_->GetToken().BigInt());
2401 propName = AllocNode<ir::NumberLiteral>(lexer_->GetToken().Number(), lexer_->GetToken().String());
2404 propName->SetRange(lexer_->GetToken().Loc());
2409 lexer_->NextToken(); // eat left square bracket
2411 if (Extension() == ScriptExtension::TS && lexer_->GetToken().Type() == lexer::TokenType::LITERAL_IDENT &&
2412 lexer_->Lookahead() == LEX_CHAR_COLON) {
2415 propName = AllocNode<ir::Identifier>(lexer_->GetToken().Ident());
2416 propName->SetRange(lexer_->GetToken().Loc());
2418 lexer_->NextToken(); // eat param
2420 if (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_COLON) {
2424 lexer_->NextToken(); // eat ':'
2432 if (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_RIGHT_SQUARE_BRACKET) {
2436 lexer_->NextToken(lexer::LexerNextTokenFlags::KEYWORD_TO_IDENT);
2452 if (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_RIGHT_SQUARE_BRACKET) {
2462 lexer_->NextToken(lexer::LexerNextTokenFlags::KEYWORD_TO_IDENT);
2470 if (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_LEFT_PARENTHESIS) {
2477 if (!typeAnnotation && (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_PARENTHESIS ||
2478 lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LESS_THAN)) {
2617 lexer_->NextToken();
2697 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_SUBSTITUTION) {
2702 lexer_->NextToken(); // eat equals
2733 if (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_MULTIPLY) {
2738 lexer_->NextToken(lexer::LexerNextTokenFlags::KEYWORD_TO_IDENT);
2743 if (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_HASH_MARK) {
2754 lexer_->NextToken(lexer::LexerNextTokenFlags::KEYWORD_TO_IDENT);
2774 if (Extension() == ScriptExtension::TS && lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_COLON) {
2775 lexer_->NextToken(); // eat ':'
2786 ASSERT(lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_AT);
2788 auto lexPos = lexer_->Save();
2789 lexer::SourcePosition start = lexer_->GetToken().Start();
2790 lexer_->NextToken(); // eat '@'
2792 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_HASH_MARK) {
2797 lexer_->NextToken(); // eat '#'
2810 lexer_->Rewind(lexPos);
2827 while (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_AT) {
2841 if (!decorators.empty() && lexer_->GetToken().Type() != lexer::TokenType::KEYW_CLASS &&
2843 lexer_->GetToken().Type() != lexer::TokenType::KEYW_EXPORT &&
2844 !(lexer_->GetToken().Type() == lexer::TokenType::LITERAL_IDENT &&
2845 (lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_DECLARE ||
2846 lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_ABSTRACT))) {
2863 desc.propStart = lexer_->GetToken().Start();
2883 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_BRACE) {
2913 if (Extension() == ScriptExtension::TS && lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_QUESTION_MARK) {
2927 lexer_->NextToken();
2929 lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_EXCLAMATION_MARK) {
2930 if (desc.isIndexSignature || lexer_->Lookahead() != LEX_CHAR_COLON) {
2935 lexer_->NextToken();
2966 if (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_SEMI_COLON &&
2967 lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_RIGHT_BRACE &&
2968 !(lexer_->GetToken().Flags() & lexer::TokenFlags::NEW_LINE) &&
2973 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_SEMI_COLON) {
2974 lexer_->NextToken(lexer::LexerNextTokenFlags::KEYWORD_TO_IDENT);
3138 const util::StringView &identStr = lexer_->GetToken().Ident();
3140 *decl = Binder()->AddDecl<binder::ConstDecl>(lexer_->GetToken().Start(), isDeclare, identStr);
3143 identNode->SetRange(lexer_->GetToken().Loc());
3145 lexer_->NextToken();
3154 lexer::SourcePosition startLoc = lexer_->GetToken().Start();
3155 lexer_->NextToken();
3162 if ((lexer_->GetToken().Type() == lexer::TokenType::LITERAL_IDENT ||
3163 lexer_->GetToken().Type() == lexer::TokenType::KEYW_AWAIT) && (Extension() != ScriptExtension::TS ||
3164 lexer_->GetToken().KeywordType() != lexer::TokenType::KEYW_IMPLEMENTS)) {
3171 if (Extension() == ScriptExtension::TS && lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LESS_THAN) {
3181 if (Extension() == ScriptExtension::TS && (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LESS_THAN ||
3182 lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_SHIFT)) {
3183 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_SHIFT) {
3184 lexer_->BackwardToken(lexer::TokenType::PUNCTUATOR_LESS_THAN, 1);
3192 if (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_LEFT_BRACE) {
3200 lexer::SourcePosition classBodyStartLoc = lexer_->GetToken().Start();
3201 lexer_->NextToken(lexer::LexerNextTokenFlags::KEYWORD_TO_IDENT);
3219 while (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_RIGHT_BRACE) {
3220 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_SEMI_COLON) {
3221 lexer_->NextToken();
3251 lexer::SourcePosition classBodyEndLoc = lexer_->GetToken().End();
3258 lexer_->NextToken();
3278 if (lexer_->GetToken().Type() != lexer::TokenType::KEYW_EXTENDS) {
3282 lexer_->NextToken();
3283 if (lexer_->GetToken().Type() == lexer::TokenType::KEYW_AWAIT && isDeclare) {
3284 lexer_->GetToken().SetTokenType(lexer::TokenType::LITERAL_IDENT);
3299 if (Extension() != ScriptExtension::TS || lexer_->GetToken().KeywordType() != lexer::TokenType::KEYW_IMPLEMENTS) {
3303 lexer_->NextToken();
3304 while (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_LEFT_BRACE) {
3305 lexer::SourcePosition implStart = lexer_->GetToken().Start();
3306 if (lexer_->GetToken().Type() != lexer::TokenType::LITERAL_IDENT &&
3307 !(lexer_->GetToken().Type() == lexer::TokenType::KEYW_AWAIT && isDeclare)) {
3310 ir::Expression *expr = AllocNode<ir::Identifier>(lexer_->GetToken().Ident());
3311 expr->SetRange(lexer_->GetToken().Loc());
3313 lexer_->NextToken();
3314 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_PERIOD) {
3318 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_SHIFT) {
3319 lexer_->BackwardToken(lexer::TokenType::PUNCTUATOR_LESS_THAN, 1);
3321 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LESS_THAN ||
3322 lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_SHIFT) {
3326 impl->SetRange({implStart, lexer_->GetToken().End()});
3328 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_COMMA) {
3329 lexer_->NextToken();
3332 if (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_LEFT_BRACE) {
3510 lexer_->NextToken();
3512 if (lexer_->GetToken().Type() == lexer::TokenType::LITERAL_STRING) {
3513 memberKey = AllocNode<ir::StringLiteral>(lexer_->GetToken().String());
3514 decl = Binder()->AddDecl<binder::EnumDecl>(keyStartLoc, isDeclare, lexer_->GetToken().String());
3515 memberKey->SetRange(lexer_->GetToken().Loc());
3516 lexer_->NextToken();
3517 } else if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_BACK_TICK) {
3518 lexer_->ResetTokenEnd();
3519 const auto startPos = lexer_->Save();
3520 lexer_->ScanString<LEX_CHAR_BACK_TICK>();
3521 util::StringView cooked = lexer_->GetToken().String();
3522 lexer_->Rewind(startPos);
3531 memberKey->SetRange(lexer_->GetToken().Loc());
3536 if (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_RIGHT_SQUARE_BRACKET) {
3540 lexer_->NextToken();
3548 if (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_LEFT_BRACE) {
3553 lexer_->NextToken(lexer::LexerNextTokenFlags::KEYWORD_TO_IDENT); // eat '{'
3555 while (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_RIGHT_BRACE) {
3557 const auto &keyStartLoc = lexer_->GetToken().Start();
3560 if (lexer_->GetToken().Type() == lexer::TokenType::LITERAL_IDENT) {
3561 memberKey = AllocNode<ir::Identifier>(lexer_->GetToken().Ident());
3562 decl = Binder()->AddDecl<binder::EnumDecl>(keyStartLoc, isDeclare, lexer_->GetToken().Ident());
3563 memberKey->SetRange(lexer_->GetToken().Loc());
3564 lexer_->NextToken();
3565 } else if (lexer_->GetToken().Type() == lexer::TokenType::LITERAL_STRING) {
3566 memberKey = AllocNode<ir::StringLiteral>(lexer_->GetToken().String());
3567 decl = Binder()->AddDecl<binder::EnumDecl>(keyStartLoc, isDeclare, lexer_->GetToken().String());
3568 memberKey->SetRange(lexer_->GetToken().Loc());
3569 lexer_->NextToken();
3570 } else if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_SQUARE_BRACKET) {
3577 lexer::SourcePosition initStart = lexer_->GetToken().Start();
3579 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_SUBSTITUTION) {
3580 lexer_->NextToken(); // eat '='
3581 initStart = lexer_->GetToken().Start();
3587 member->SetRange({initStart, lexer_->GetToken().End()});
3590 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_COMMA) {
3591 lexer_->NextToken(lexer::LexerNextTokenFlags::KEYWORD_TO_IDENT); // eat ','
3597 enumDeclaration->SetRange({enumStart, lexer_->GetToken().End()});
3599 lexer_->NextToken(); // eat '}'
3606 ASSERT(lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_ENUM);
3607 lexer::SourcePosition enumStart = lexer_->GetToken().Start();
3608 lexer_->NextToken(); // eat enum keyword
3610 if (lexer_->GetToken().Type() != lexer::TokenType::LITERAL_IDENT &&
3611 lexer_->GetToken().Type() != lexer::TokenType::KEYW_AWAIT) {
3615 const util::StringView &ident = lexer_->GetToken().Ident();
3625 Binder()->AddTsDecl<binder::EnumLiteralDecl>(lexer_->GetToken().Start(), isDeclare,
3636 key->SetRange(lexer_->GetToken().Loc());
3638 lexer_->NextToken();
3642 Binder()->ThrowRedeclaration(lexer_->GetToken().Start(), ident);
3662 if (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_RIGHT_PARENTHESIS) {
3708 ASSERT(lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_PARENTHESIS);
3709 lexer_->NextToken();
3715 while (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_RIGHT_PARENTHESIS) {
3735 if (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_COMMA &&
3736 lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_RIGHT_PARENTHESIS) {
3740 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_COMMA) {
3741 lexer_->NextToken();
3747 ASSERT(lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_RIGHT_PARENTHESIS);
3748 lexer_->NextToken();
3762 auto pos = lexer_->Save();
3763 lexer_->NextToken();
3765 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_GREATER_THAN ||
3766 lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_COMMA) {
3767 lexer_->Rewind(pos);
3771 lexer_->Rewind(pos);
3777 if (lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_IN) {
3782 lexer_->NextToken();
3783 if (lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_IN) {
3787 if (lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_OUT && !CheckOutIsIdentInTypeParameter()) {
3789 lexer_->NextToken();
3790 if (lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_OUT && !CheckOutIsIdentInTypeParameter()) {
3794 } else if (lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_OUT && !CheckOutIsIdentInTypeParameter()) {
3800 lexer_->NextToken();
3802 if (lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_IN) {
3806 if (lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_OUT && !CheckOutIsIdentInTypeParameter()) {
3814 lexer::SourcePosition startLoc = lexer_->GetToken().Start();
3820 if (lexer_->GetToken().Type() != lexer::TokenType::LITERAL_IDENT) {
3828 const auto &ident = lexer_->GetToken().Ident();
3841 Binder()->AddDecl<binder::LetDecl>(lexer_->GetToken().Start(), false, ident);
3844 paramIdent->SetRange({lexer_->GetToken().Start(), lexer_->GetToken().End()});
3846 lexer_->NextToken();
3857 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_SUBSTITUTION) {
3858 lexer_->NextToken();
3864 typeParam->SetRange({startLoc, lexer_->GetToken().End()});
3872 if (lexer_->GetToken().Type() == lexer::TokenType::KEYW_EXTENDS) {
3873 auto savedPos = lexer_->Save();
3874 lexer_->NextToken(); // eat 'extends'
3877 lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_QUESTION_MARK) {
3879 lexer_->Rewind(savedPos); // go back to 'extends'
3887 ASSERT(lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LESS_THAN);
3891 lexer::SourcePosition startLoc = lexer_->GetToken().Start();
3895 lexer_->NextToken(); // eat '<'
3897 while (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_GREATER_THAN) {
3915 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_COMMA) {
3916 lexer_->NextToken();
3920 if (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_GREATER_THAN) {
3933 lexer::SourcePosition endLoc = lexer_->GetToken().End();
3934 lexer_->NextToken(); // eat '>'
3946 ASSERT(lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LESS_THAN);
3947 lexer::SourcePosition startLoc = lexer_->GetToken().Start();
3949 lexer_->NextToken(); // eat '<'
3951 while (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_GREATER_THAN) {
3966 switch (lexer_->GetToken().Type()) {
3968 lexer_->NextToken();
3972 lexer_->BackwardToken(lexer::TokenType::PUNCTUATOR_GREATER_THAN, 1);
3976 lexer_->BackwardToken(lexer::TokenType::PUNCTUATOR_GREATER_THAN, 2);
3992 lexer::SourcePosition endLoc = lexer_->GetToken().End();
3993 lexer_->NextToken();
4011 lexer::SourcePosition startLoc = lexer_->GetToken().Start();
4014 if (Extension() == ScriptExtension::TS && lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LESS_THAN) {
4018 if (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_LEFT_PARENTHESIS) {
4030 if (Extension() == ScriptExtension::TS && lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_COLON) {
4031 lexer_->NextToken(); // eat ':'
4043 lexer::SourcePosition endLoc = lexer_->GetToken().End();
4056 if (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_LEFT_BRACE) {
4098 ASSERT(lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_PERIOD_PERIOD_PERIOD);
4099 lexer::SourcePosition startLocation = lexer_->GetToken().Start();
4101 lexer_->NextToken();
4115 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_COLON) {
4116 lexer_->NextToken(); // eat ':'
4171 if (Extension() == ScriptExtension::TS && lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_THIS) {
4172 lexer_->GetToken().SetTokenType(lexer::TokenType::LITERAL_IDENT);
4175 lexer::SourcePosition parameterStart = lexer_->GetToken().Start();
4181 lexer::TokenType tokenType = lexer_->GetToken().Type();
4183 (lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_ARGUMENTS ||
4184 lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_EVAL)) {
4188 lexer_->GetToken().Start());
4332 lexer_->GetToken().Start());
4337 ThrowSyntaxError(errorMessage, lexer_->GetToken().Start());
4342 ThrowSyntaxError(list, lexer_->GetToken().Start());
4394 if (lexer_->GetToken().IsJsStrictReservedWord()) {
4398 if (lexer_->GetToken().KeywordType() >= lexer::TokenType::KEYW_ARGUMENTS) {
4403 if (lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_AWAIT &&
4463 auto pos = lexer_->GetToken().Start();