Lines Matching defs:lexer

111 #include <lexer/lexer.h>
112 #include <lexer/token/letters.h>
113 #include <lexer/token/sourceLocation.h>
120 std::unique_ptr<lexer::Lexer> ParserImpl::InitLexer(const std::string &fileName, const std::string &source)
127 auto lexer = std::make_unique<lexer::Lexer>(&context_);
128 lexer_ = lexer.get();
130 return lexer;
148 * In order to make the lexer's memory alive, the return value 'lexer' can not be omitted.
150 auto lexer = InitLexer(sourceFile.fileName, std::string {sourceFile.source});
189 lexer::SourcePosition startLoc = lexer_->GetToken().Start();
289 ASSERT(lexer_->GetToken().Type() == lexer::TokenType::LITERAL_IDENT ||
290 lexer_->GetToken().Type() == lexer::TokenType::KEYW_EXTENDS);
293 case lexer::TokenType::KEYW_ANY:
294 case lexer::TokenType::KEYW_BOOLEAN:
295 case lexer::TokenType::KEYW_NUMBER:
296 case lexer::TokenType::KEYW_STRING:
297 case lexer::TokenType::KEYW_SYMBOL:
298 case lexer::TokenType::KEYW_UNKNOWN:
299 case lexer::TokenType::KEYW_UNDEFINED:
300 case lexer::TokenType::KEYW_NEVER:
301 case lexer::TokenType::KEYW_OBJECT:
302 case lexer::TokenType::KEYW_BIGINT: {
315 case lexer::TokenType::PUNCTUATOR_MINUS:
316 case lexer::TokenType::LITERAL_NUMBER:
317 case lexer::TokenType::LITERAL_STRING:
318 case lexer::TokenType::LITERAL_FALSE:
319 case lexer::TokenType::LITERAL_TRUE:
320 case lexer::TokenType::LITERAL_NULL:
321 case lexer::TokenType::KEYW_VOID: {
324 case lexer::TokenType::LITERAL_IDENT: {
364 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_MINUS ||
365 lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_PLUS) {
367 result = lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_READONLY;
372 if (lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_READONLY) {
376 if (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_LEFT_SQUARE_BRACKET) {
383 if (lexer_->GetToken().Type() != lexer::TokenType::LITERAL_IDENT) {
390 result = lexer_->GetToken().Type() == lexer::TokenType::KEYW_IN;
398 ASSERT(lexer_->GetToken().Type() == lexer::TokenType::LITERAL_IDENT ||
399 lexer_->GetToken().Type() == lexer::TokenType::KEYW_THIS);
402 bool isAsserts = lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_ASSERTS;
407 if (lexer_->GetToken().Type() != lexer::TokenType::LITERAL_IDENT &&
408 lexer_->GetToken().Type() != lexer::TokenType::KEYW_THIS) {
420 bool result = !lexer_->GetToken().NewLine() && (lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_IS);
427 if (lexer_->GetToken().KeywordType() != lexer::TokenType::KEYW_ABSTRACT) {
431 lexer::LexerPosition pos = lexer_->Save();
433 bool result = lexer_->GetToken().Type() == lexer::TokenType::KEYW_NEW;
450 lexer::SourcePosition bodyStart = lexer_->GetToken().Start();
452 lexer::SourcePosition bodyEnd = lexer_->GetToken().End();
492 ASSERT(lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_BACK_TICK);
493 lexer::SourcePosition startLoc = lexer_->GetToken().Start();
509 element->SetRange({lexer::SourcePosition{startPos.iterator.Index(), startPos.line},
510 lexer::SourcePosition{end, lexer_->Line()}});
521 lexer::TemplateLiteralParserContext ctx(lexer_);
528 if (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_RIGHT_BRACE) {
550 case lexer::TokenType::PUNCTUATOR_BITWISE_OR: {
559 case lexer::TokenType::PUNCTUATOR_BITWISE_AND: {
569 case lexer::TokenType::PUNCTUATOR_MINUS:
570 case lexer::TokenType::LITERAL_NUMBER:
571 case lexer::TokenType::LITERAL_STRING:
572 case lexer::TokenType::LITERAL_FALSE:
573 case lexer::TokenType::LITERAL_TRUE:
574 case lexer::TokenType::LITERAL_NULL:
575 case lexer::TokenType::KEYW_VOID: {
582 case lexer::TokenType::KEYW_TYPEOF: {
589 case lexer::TokenType::KEYW_IMPORT: {
594 lexer::SourcePosition startLoc = lexer_->GetToken().Start();
597 case lexer::TokenType::KEYW_CONST: {
605 case lexer::TokenType::LITERAL_IDENT: {
615 case lexer::TokenType::KEYW_EXTENDS: {
629 case lexer::TokenType::KEYW_THIS: {
634 case lexer::TokenType::PUNCTUATOR_BACK_TICK: {
657 case lexer::TokenType::PUNCTUATOR_LESS_THAN:
658 case lexer::TokenType::PUNCTUATOR_LEFT_PARENTHESIS:
659 case lexer::TokenType::KEYW_NEW: {
664 case lexer::TokenType::PUNCTUATOR_LEFT_SQUARE_BRACKET: {
678 case lexer::TokenType::PUNCTUATOR_LEFT_BRACE: {
688 ir::TSImportType *ParserImpl::ParseTsImportType(const lexer::SourcePosition &startLoc, bool isTypeof)
690 ASSERT(lexer_->GetToken().Type() == lexer::TokenType::KEYW_IMPORT);
694 if (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_LEFT_PARENTHESIS) {
707 if (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_RIGHT_PARENTHESIS) {
714 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_PERIOD) {
717 if (lexer_->GetToken().Type() != lexer::TokenType::LITERAL_IDENT) {
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);
750 ASSERT(lexer_->GetToken().Type() == lexer::TokenType::KEYW_THIS);
768 ASSERT(lexer_->GetToken().Type() == lexer::TokenType::KEYW_EXTENDS);
773 lexer::SourcePosition startLoc = checkType->Start();
787 if (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_QUESTION_MARK) {
796 if (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_COLON) {
804 lexer::SourcePosition endLoc = falseType->End();
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();
866 if (lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_KEYOF) {
867 lexer::SourcePosition typeOperatorStart = lexer_->GetToken().Start();
881 if (lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_UNIQUE) {
882 lexer::SourcePosition typeOperatorStart = lexer_->GetToken().Start();
895 if (lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_INFER) {
902 lexer::SourcePosition inferStart = lexer_->GetToken().Start();
919 if (lexer_->GetToken().Type() != lexer::TokenType::LITERAL_IDENT) {
925 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_COLON ||
926 (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_QUESTION_MARK &&
946 lexer::SourcePosition startPos = lexer_->GetToken().Start();
951 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_PERIOD_PERIOD_PERIOD) {
967 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_QUESTION_MARK) {
975 if (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_COLON) {
999 lexer::SourcePosition endPos = element->End();
1004 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_QUESTION_MARK) {
1005 lexer::SourcePosition elementStartPos = element->Start();
1019 ASSERT(lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_SQUARE_BRACKET);
1020 lexer::SourcePosition tupleStart = lexer_->GetToken().Start();
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) {
1044 lexer::SourcePosition tupleEnd = lexer_->GetToken().End();
1054 lexer::SourcePosition startLoc = typeName->Start();
1057 lexer_->NextToken(lexer::LexerNextTokenFlags::KEYWORD_TO_IDENT); // eat '.'
1059 if (lexer_->GetToken().Type() != lexer::TokenType::LITERAL_IDENT) {
1070 } while (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_PERIOD);
1087 if (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_RIGHT_SQUARE_BRACKET) {
1098 } while (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_SQUARE_BRACKET &&
1106 lexer::SourcePosition referenceStartLoc = lexer_->GetToken().Start();
1109 ASSERT(lexer_->GetToken().Type() == lexer::TokenType::KEYW_TYPEOF);
1112 if (lexer_->GetToken().Type() == lexer::TokenType::KEYW_IMPORT) {
1113 lexer::SourcePosition &startLoc = referenceStartLoc;
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);
1132 lexer_->ForwardToken(lexer::TokenType::PUNCTUATOR_LESS_THAN, 1);
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) {
1147 lexer::SourcePosition endLoc = typeParamInst->End();
1152 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_SQUARE_BRACKET &&
1167 lexer::SourcePosition referenceEndLoc = typeName->End();
1182 lexer::SourcePosition startLoc = lexer_->GetToken().Start();
1194 lexer::SourcePosition endLoc = constraint->End();
1203 ir::MappedOption ParserImpl::ParseMappedOption(lexer::TokenType tokenType)
1205 if (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_MINUS &&
1206 lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_PLUS &&
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) {
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 '{'
1235 ir::MappedOption readonly = ParseMappedOption(lexer::TokenType::KEYW_READONLY);
1242 if (lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_AS) {
1249 if (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_RIGHT_SQUARE_BRACKET) {
1255 ir::MappedOption optional = ParseMappedOption(lexer::TokenType::PUNCTUATOR_QUESTION_MARK);
1258 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_COLON) {
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) {
1273 if (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_RIGHT_BRACE) {
1289 lexer::SourcePosition startPos = lexer_->GetToken().Start();
1290 bool isAsserts = lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_ASSERTS;
1293 if (lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_IS) {
1300 if (lexer_->GetToken().Type() == lexer::TokenType::LITERAL_IDENT) {
1311 lexer::SourcePosition endPos;
1314 if (isAsserts && lexer_->GetToken().KeywordType() != lexer::TokenType::KEYW_IS) {
1338 if (lexer_->GetToken().Type() == lexer::TokenType::LITERAL_IDENT &&
1339 (lexer_->GetToken().KeywordType() != lexer::TokenType::KEYW_NEW ||
1344 } else if (lexer_->GetToken().Type() == lexer::TokenType::LITERAL_NUMBER) {
1345 if (lexer_->GetToken().Flags() & lexer::TokenFlags::NUMBER_BIGINT) {
1353 } else if (lexer_->GetToken().Type() == lexer::TokenType::LITERAL_STRING) {
1357 } else if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_SQUARE_BRACKET) {
1361 if (lexer_->GetToken().Type() == lexer::TokenType::LITERAL_IDENT && lexer_->Lookahead() == LEX_CHAR_COLON) {
1368 if (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_COLON) {
1384 if (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_RIGHT_SQUARE_BRACKET) {
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) {
1457 if (lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_GET) {
1458 if (lexer_->GetToken().Flags() & lexer::TokenFlags::HAS_ESCAPE) {
1464 } else if (lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_SET) {
1465 if (lexer_->GetToken().Flags() & lexer::TokenFlags::HAS_ESCAPE) {
1485 lexer::SourcePosition memberStartLoc = lexer_->GetToken().Start();
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) {
1506 if (lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_NEW && signature) {
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) {
1567 } else if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_COLON) {
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) {
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);
1702 if (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_RIGHT_SQUARE_BRACKET) {
1706 lexer::SourcePosition endLoc = lexer_->GetToken().End();
1709 lexer::SourcePosition startLoc = elementType->Start();
1719 lexer::SourcePosition startLoc;
1738 if (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_BITWISE_OR) {
1752 lexer::SourcePosition endLoc = types.back()->End();
1766 lexer::SourcePosition startLoc;
1789 if (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_BITWISE_AND) {
1802 lexer::SourcePosition endLoc = types.back()->End();
1814 ASSERT(lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_PARENTHESIS);
1817 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_RIGHT_PARENTHESIS ||
1818 lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_PERIOD_PERIOD_PERIOD) {
1825 if (lexer_->GetToken().Type() == lexer::TokenType::LITERAL_IDENT ||
1826 (Extension() == ScriptExtension::TS && lexer_->GetToken().Type() == lexer::TokenType::KEYW_THIS)) {
1828 } else if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_SQUARE_BRACKET) {
1830 } else if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_BRACE) {
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) {
1849 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_RIGHT_PARENTHESIS) {
1851 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_ARROW) {
1866 lexer::SourcePosition typeStart = lexer_->GetToken().Start();
1868 bool abstractConstructor = lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_ABSTRACT;
1875 if (lexer_->GetToken().Type() == lexer::TokenType::KEYW_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);
1902 if (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_RIGHT_PARENTHESIS) {
1909 lexer::SourcePosition endLoc = lexer_->GetToken().End();
1918 ir::Expression *ParserImpl::ParseTsFunctionType(lexer::SourcePosition startLoc, bool isConstructionType,
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) {
1984 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_MINUS) {
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) {
2007 } else if (lexer_->GetToken().Type() == lexer::TokenType::LITERAL_STRING) {
2012 } else if (lexer_->GetToken().Type() == lexer::TokenType::LITERAL_TRUE) {
2017 } else if (lexer_->GetToken().Type() == lexer::TokenType::LITERAL_FALSE) {
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) {
2073 static bool IsModifierKind(const lexer::Token &token)
2075 if (token.Type() == lexer::TokenType::LITERAL_IDENT) {
2077 case lexer::TokenType::KEYW_PUBLIC:
2078 case lexer::TokenType::KEYW_PRIVATE:
2079 case lexer::TokenType::KEYW_PROTECTED:
2080 case lexer::TokenType::KEYW_STATIC:
2081 case lexer::TokenType::KEYW_ASYNC:
2082 case lexer::TokenType::KEYW_ABSTRACT:
2083 case lexer::TokenType::KEYW_DECLARE:
2084 case lexer::TokenType::KEYW_READONLY:
2085 case lexer::TokenType::KEYW_ACCESSOR:
2086 case lexer::TokenType::KEYW_OVERRIDE:
2107 lexer::TokenFlags tokenFlags = lexer_->GetToken().Flags();
2108 if (tokenFlags & lexer::TokenFlags::HAS_ESCAPE) {
2116 case lexer::TokenType::KEYW_PUBLIC: {
2123 case lexer::TokenType::KEYW_PRIVATE: {
2130 case lexer::TokenType::KEYW_PROTECTED: {
2137 case lexer::TokenType::KEYW_STATIC: {
2143 case lexer::TokenType::KEYW_ASYNC: {
2148 case lexer::TokenType::KEYW_ABSTRACT: {
2155 case lexer::TokenType::KEYW_DECLARE: {
2161 case lexer::TokenType::KEYW_READONLY: {
2166 case lexer::TokenType::KEYW_ACCESSOR: {
2171 case lexer::TokenType::KEYW_OVERRIDE: {
2188 lexer_->NextToken(lexer::LexerNextTokenFlags::KEYWORD_TO_IDENT);
2215 lexer::SourcePosition errorInfo)
2276 if (lexer_->GetToken().Type() != lexer::TokenType::LITERAL_IDENT) {
2287 if (lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_GET) {
2288 if (lexer_->GetToken().Flags() & lexer::TokenFlags::HAS_ESCAPE) {
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) {
2305 lexer_->NextToken(lexer::LexerNextTokenFlags::KEYWORD_TO_IDENT);
2339 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_HASH_MARK) {
2378 lexer_->GetToken().SetTokenType(lexer::TokenType::LITERAL_IDENT);
2382 case lexer::TokenType::LITERAL_IDENT: {
2389 case lexer::TokenType::LITERAL_STRING: {
2396 case lexer::TokenType::LITERAL_NUMBER: {
2398 if (lexer_->GetToken().Flags() & lexer::TokenFlags::NUMBER_BIGINT) {
2407 case lexer::TokenType::PUNCTUATOR_LEFT_SQUARE_BRACKET: {
2411 if (Extension() == ScriptExtension::TS && lexer_->GetToken().Type() == lexer::TokenType::LITERAL_IDENT &&
2420 if (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_COLON) {
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)) {
2509 lexer::SourcePosition errorInfo)
2523 lexer::SourcePosition errorInfo)
2594 ir::Expression *propName, lexer::SourcePosition *propEnd,
2628 lexer::SourcePosition errorInfo = decorators.empty() ? func->Start() : decorators[0]->Start();
2643 auto privateIdStart = lexer::SourcePosition(propName->Start().index - 1, propName->Start().line);
2677 lexer::SourcePosition propEnd = propName->End();
2697 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_SUBSTITUTION) {
2718 auto privateIdStart = lexer::SourcePosition(propName->Start().index - 1, propName->Start().line);
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) {
2786 ASSERT(lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_AT);
2789 lexer::SourcePosition start = lexer_->GetToken().Start();
2792 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_HASH_MARK) {
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))) {
2883 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_BRACE) {
2913 if (Extension() == ScriptExtension::TS && lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_QUESTION_MARK) {
2929 lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_EXCLAMATION_MARK) {
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);
3154 lexer::SourcePosition startLoc = lexer_->GetToken().Start();
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) {
3251 lexer::SourcePosition classBodyEndLoc = lexer_->GetToken().End();
3278 if (lexer_->GetToken().Type() != lexer::TokenType::KEYW_EXTENDS) {
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) {
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)) {
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) {
3328 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_COMMA) {
3332 if (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_LEFT_BRACE) {
3507 const lexer::SourcePosition &keyStartLoc, bool isDeclare)
3512 if (lexer_->GetToken().Type() == lexer::TokenType::LITERAL_STRING) {
3517 } else if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_BACK_TICK) {
3536 if (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_RIGHT_SQUARE_BRACKET) {
3545 ir::TSEnumDeclaration *ParserImpl::ParseEnumMembers(ir::Identifier *key, const lexer::SourcePosition &enumStart,
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) {
3560 if (lexer_->GetToken().Type() == lexer::TokenType::LITERAL_IDENT) {
3565 } else if (lexer_->GetToken().Type() == lexer::TokenType::LITERAL_STRING) {
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) {
3590 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_COMMA) {
3591 lexer_->NextToken(lexer::LexerNextTokenFlags::KEYWORD_TO_IDENT); // eat ','
3606 ASSERT(lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_ENUM);
3607 lexer::SourcePosition enumStart = lexer_->GetToken().Start();
3610 if (lexer_->GetToken().Type() != lexer::TokenType::LITERAL_IDENT &&
3611 lexer_->GetToken().Type() != lexer::TokenType::KEYW_AWAIT) {
3662 if (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_RIGHT_PARENTHESIS) {
3708 ASSERT(lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_PARENTHESIS);
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) {
3747 ASSERT(lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_RIGHT_PARENTHESIS);
3765 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_GREATER_THAN ||
3766 lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_COMMA) {
3777 if (lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_IN) {
3783 if (lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_IN) {
3787 if (lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_OUT && !CheckOutIsIdentInTypeParameter()) {
3790 if (lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_OUT && !CheckOutIsIdentInTypeParameter()) {
3794 } else if (lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_OUT && !CheckOutIsIdentInTypeParameter()) {
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) {
3857 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_SUBSTITUTION) {
3872 if (lexer_->GetToken().Type() == lexer::TokenType::KEYW_EXTENDS) {
3877 lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_QUESTION_MARK) {
3887 ASSERT(lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LESS_THAN);
3891 lexer::SourcePosition startLoc = lexer_->GetToken().Start();
3897 while (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_GREATER_THAN) {
3915 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_COMMA) {
3920 if (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_GREATER_THAN) {
3933 lexer::SourcePosition endLoc = lexer_->GetToken().End();
3946 ASSERT(lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LESS_THAN);
3947 lexer::SourcePosition startLoc = lexer_->GetToken().Start();
3951 while (lexer_->GetToken().Type() != lexer::TokenType::PUNCTUATOR_GREATER_THAN) {
3967 case lexer::TokenType::PUNCTUATOR_COMMA: {
3971 case lexer::TokenType::PUNCTUATOR_RIGHT_SHIFT: {
3972 lexer_->BackwardToken(lexer::TokenType::PUNCTUATOR_GREATER_THAN, 1);
3975 case lexer::TokenType::PUNCTUATOR_UNSIGNED_RIGHT_SHIFT: {
3976 lexer_->BackwardToken(lexer::TokenType::PUNCTUATOR_GREATER_THAN, 2);
3979 case lexer::TokenType::PUNCTUATOR_GREATER_THAN: {
3992 lexer::SourcePosition endLoc = lexer_->GetToken().End();
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) {
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();
4115 if (lexer_->GetToken().Type() == lexer::TokenType::PUNCTUATOR_COLON) {
4125 lexer::SourcePosition endLoc = typeAnnotation ? typeAnnotation->End() : argument->End();
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();
4182 if (tokenType == lexer::TokenType::LITERAL_IDENT &&
4183 (lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_ARGUMENTS ||
4184 lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_EVAL)) {
4345 void ParserImpl::ThrowSyntaxError(std::initializer_list<std::string_view> list, const lexer::SourcePosition &pos) const
4358 void ParserImpl::ThrowSyntaxError(std::string_view errorMessage, const lexer::SourcePosition &pos) const
4360 lexer::LineIndex index(program_.SourceCode());
4361 lexer::SourceLocation loc = index.GetLocation(pos);
4398 if (lexer_->GetToken().KeywordType() >= lexer::TokenType::KEYW_ARGUMENTS) {
4403 if (lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_AWAIT &&
4464 lexer::LineIndex index(program_.SourceCode());
4465 lexer::SourceLocation loc = index.GetLocation(pos);