Lines Matching defs:lexer

24 #include "lexer/ASLexer.h"
81 std::unique_ptr<lexer::Lexer> ASParser::InitLexer(const SourceFile &sourceFile)
84 auto lexer = std::make_unique<lexer::ASLexer>(&GetContext());
85 SetLexer(lexer.get());
86 return lexer;
91 ASSERT(Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_AT);
93 lexer::SourcePosition start = Lexer()->GetToken().Start();
117 ASSERT(Lexer()->GetToken().KeywordType() == lexer::TokenType::KEYW_TYPE);
118 lexer::SourcePosition typeStart = Lexer()->GetToken().Start();
121 if (Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_IDENT) {
132 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LESS_THAN) {
137 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_SUBSTITUTION) {
143 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_BITWISE_OR) {
167 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_QUESTION_MARK) {
179 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_COLON) {
187 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_SUBSTITUTION) {
338 case lexer::TokenType::PUNCTUATOR_PERIOD_PERIOD_PERIOD: {
346 case lexer::TokenType::LITERAL_IDENT: {
352 bool questionMark = Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_QUESTION_MARK;
364 if (!isOptional && Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_COLON) {
366 } else if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_COLON) {
387 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_SUBSTITUTION) {
406 Lexer()->GetToken().Type() == lexer::TokenType::KEYW_YIELD) {
413 ir::AstNodeType::ASSIGNMENT_PATTERN, returnNode, rightNode, lexer::TokenType::PUNCTUATOR_SUBSTITUTION);
422 Lexer()->NextToken(lexer::NextTokenFlags::KEYWORD_TO_IDENT);
426 if (Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_IDENT) {
427 if (Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_STRING) {
442 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_COLON) {
459 case lexer::TokenType::LITERAL_STRING:
460 case lexer::TokenType::LITERAL_FALSE:
461 case lexer::TokenType::LITERAL_TRUE:
462 case lexer::TokenType::LITERAL_NULL:
463 case lexer::TokenType::KEYW_VOID: {
466 case lexer::TokenType::LITERAL_IDENT: {
468 case lexer::TokenType::KEYW_I8:
469 case lexer::TokenType::KEYW_I16:
470 case lexer::TokenType::KEYW_I32:
471 case lexer::TokenType::KEYW_I64:
472 case lexer::TokenType::KEYW_ISIZE:
473 case lexer::TokenType::KEYW_U8:
474 case lexer::TokenType::KEYW_U16:
475 case lexer::TokenType::KEYW_U32:
476 case lexer::TokenType::KEYW_U64:
477 case lexer::TokenType::KEYW_USIZE:
478 case lexer::TokenType::KEYW_F32:
479 case lexer::TokenType::KEYW_F64:
480 case lexer::TokenType::KEYW_V128:
481 case lexer::TokenType::KEYW_FUNCREF:
482 case lexer::TokenType::KEYW_EXTERNREF:
483 case lexer::TokenType::KEYW_ANYREF:
484 case lexer::TokenType::KEYW_EQREF:
485 case lexer::TokenType::KEYW_I31REF:
486 case lexer::TokenType::KEYW_DATAREF: {
503 ir::TypeNode *ASParser::ParseFunctionType(lexer::SourcePosition startLoc)
507 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_ARROW) {
527 lexer::SourcePosition typeStart = Lexer()->GetToken().Start();
529 ASSERT(Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_PARENTHESIS);
538 if (Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_IDENT) {
549 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_COMMA ||
550 Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_QUESTION_MARK ||
551 Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_COLON) {
556 if (throwError && Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_RIGHT_PARENTHESIS) {
560 lexer::SourcePosition endLoc = Lexer()->GetToken().End();
563 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_ARROW) {
582 while (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_PERIOD) {
585 if (Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_IDENT) {
599 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LESS_THAN) {
615 case lexer::TokenType::PUNCTUATOR_LEFT_PARENTHESIS: {
618 case lexer::TokenType::KEYW_VOID: {
622 case lexer::TokenType::KEYW_THIS: {
626 case lexer::TokenType::LITERAL_FALSE:
627 case lexer::TokenType::LITERAL_TRUE: {
631 case lexer::TokenType::LITERAL_NULL: {
635 case lexer::TokenType::LITERAL_STRING: {
639 case lexer::TokenType::LITERAL_IDENT: {
661 while (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_BITWISE_OR) {
664 if (Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_NULL) {
690 while (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_SQUARE_BRACKET) {
693 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_RIGHT_SQUARE_BRACKET) {
705 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_BITWISE_OR) {
708 bool isLiteralNull = Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_NULL;
719 const lexer::SourcePosition &startPos = type->Start();
761 [[maybe_unused]] ir::Expression **returnExpression, [[maybe_unused]] const lexer::SourcePosition &startLoc)
766 bool ASParser::ParsePotentialNonNullExpression(ir::Expression **returnExpression, lexer::SourcePosition startLoc)
779 const lexer::SourcePosition &startLoc, bool ignoreCallExpression)
781 if (Lexer()->Lookahead() == lexer::LEX_CHAR_LESS_THAN ||
788 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_SHIFT) {
789 Lexer()->BackwardToken(lexer::TokenType::PUNCTUATOR_LESS_THAN, 1);
800 if (Lexer()->GetToken().Type() == lexer::TokenType::EOS) {
804 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_PARENTHESIS) {
814 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_BACK_TICK) {
816 lexer::SourcePosition endLoc = propertyNode->End();
829 return Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_LEFT_PARENTHESIS &&
830 Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_LESS_THAN;
835 if (Lexer()->GetToken().KeywordType() != lexer::TokenType::KEYW_AS) {
863 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_RIGHT_PARENTHESIS) {
872 if (Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_IDENT) {
876 const lexer::SourcePosition &heritageStart = Lexer()->GetToken().Start();
877 lexer::SourcePosition heritageEnd = Lexer()->GetToken().End();
885 while (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_PERIOD) {
888 if (Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_IDENT) {
902 if (Lexer()->Lookahead() == lexer::LEX_CHAR_LESS_THAN) {
903 Lexer()->ForwardToken(lexer::TokenType::PUNCTUATOR_LESS_THAN, 1);
908 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LESS_THAN) {
916 if (Lexer()->GetToken().Type() == lexer::TokenType::KEYW_IMPLEMENTS) {
920 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_LEFT_BRACE) {
932 ir::TSIndexSignature *ASParser::ParseIndexSignature(const lexer::SourcePosition &startLoc, bool isReadonly)
936 if (Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_IDENT) {
949 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_COLON) {
963 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_RIGHT_SQUARE_BRACKET) {
969 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_COLON) {
991 case lexer::TokenType::LITERAL_IDENT: {
997 case lexer::TokenType::LITERAL_STRING: {
1003 case lexer::TokenType::LITERAL_NUMBER: {
1004 if ((Lexer()->GetToken().Flags() & lexer::TokenFlags::NUMBER_BIGINT) != 0) {
1022 ir::AstNode *ASParser::ParsePropertyOrMethodSignature(const lexer::SourcePosition &startLoc, bool isReadonly)
1026 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_QUESTION_MARK) {
1030 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_PARENTHESIS ||
1031 Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LESS_THAN) {
1034 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LESS_THAN) {
1042 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_COLON) {
1057 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_COLON) {
1073 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_AT) {
1078 lexer::SourcePosition startLoc = Lexer()->GetToken().Start();
1079 bool isReadonly = Lexer()->GetToken().KeywordType() == lexer::TokenType::KEYW_READONLY &&
1080 nextCp != lexer::LEX_CHAR_LEFT_PAREN && nextCp != lexer::LEX_CHAR_COLON;
1085 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_SQUARE_BRACKET) {
1096 while (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_LEFT_BRACE) {
1097 if (Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_IDENT) {
1101 const lexer::SourcePosition &implementStart = Lexer()->GetToken().Start();
1109 while (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_PERIOD) {
1112 if (Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_IDENT) {
1126 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_SHIFT) {
1127 Lexer()->BackwardToken(lexer::TokenType::PUNCTUATOR_LESS_THAN, 1);
1130 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LESS_THAN ||
1131 Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_SHIFT) {
1140 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_COMMA) {
1144 ExpectToken(lexer::TokenType::PUNCTUATOR_LEFT_BRACE, false);
1156 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_COLON) {
1163 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_LEFT_PARENTHESIS &&
1164 Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_LESS_THAN) {
1173 if (typeAnnotation == nullptr && (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_PARENTHESIS ||
1174 Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LESS_THAN)) {
1248 bool ASParser::IsModifierKind(const lexer::Token &token)
1251 case lexer::TokenType::KEYW_PUBLIC:
1252 case lexer::TokenType::KEYW_PRIVATE:
1253 case lexer::TokenType::KEYW_PROTECTED:
1254 case lexer::TokenType::KEYW_STATIC:
1255 case lexer::TokenType::KEYW_ASYNC:
1256 case lexer::TokenType::KEYW_DECLARE:
1257 case lexer::TokenType::KEYW_READONLY:
1269 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_HASH_MARK) {
1278 if (Lexer()->GetToken().Type() == lexer::TokenType::LITERAL_IDENT &&
1279 Lexer()->Lookahead() == lexer::LEX_CHAR_COLON) {
1289 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_COLON) {
1304 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_RIGHT_SQUARE_BRACKET) {
1308 Lexer()->NextToken(lexer::NextTokenFlags::KEYWORD_TO_IDENT);
1320 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_RIGHT_SQUARE_BRACKET) {
1327 std::tuple<bool, ir::BlockStatement *, lexer::SourcePosition, bool> ASParser::ParseFunctionBody(
1335 lexer::SourcePosition endLoc = Lexer()->GetToken().End();
1337 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_LEFT_BRACE) {
1367 ir::Expression *ASParser::ParseArrowFunctionRestParameter(lexer::SourcePosition start)
1378 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_COLON) {
1387 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_ARROW) {
1394 ir::Expression *ASParser::ParseArrowFunctionNoParameter(lexer::SourcePosition start)
1398 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_COLON) {
1407 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_ARROW) {
1422 ASSERT(Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_PARENTHESIS);
1423 lexer::SourcePosition start = Lexer()->GetToken().Start();
1427 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_PERIOD_PERIOD_PERIOD) {
1431 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_RIGHT_PARENTHESIS) {
1438 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_RIGHT_PARENTHESIS) {
1446 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_ARROW) {
1450 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_COLON) {
1461 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_ARROW) {
1474 lexer::SourcePosition startPos = Lexer()->GetToken().Start();
1479 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_GREATER_THAN) {
1494 lexer::SourcePosition constVarStar = Lexer()->GetToken().Start();
1497 if (Lexer()->GetToken().Type() == lexer::TokenType::KEYW_ENUM) {
1514 if (Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_IDENT) {
1525 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_COLON) {
1530 Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_SUBSTITUTION) {
1547 ir::ExportDefaultDeclaration *ASParser::ParseExportDefaultDeclaration(const lexer::SourcePosition &startLoc,
1556 case lexer::TokenType::KEYW_FUNCTION: {
1560 case lexer::TokenType::KEYW_CLASS: {
1564 case lexer::TokenType::KEYW_INTERFACE: {
1568 case lexer::TokenType::KEYW_NAMESPACE: {
1573 case lexer::TokenType::KEYW_ENUM: {
1577 case lexer::TokenType::KEYW_ASYNC: {
1578 if ((Lexer()->GetToken().Flags() & lexer::TokenFlags::HAS_ESCAPE) == 0) {
1593 lexer::SourcePosition endLoc = declNode->End();
1605 friend ir::ExportNamedDeclaration *ASParser::ParseNamedExportDeclaration(const lexer::SourcePosition &startLoc);
1608 static ir::Statement *GetParsedDeclaration(ASParser *parser, lexer::TokenType type)
1611 if (parser->Lexer()->GetToken().KeywordType() == lexer::TokenType::KEYW_ABSTRACT) {
1617 case lexer::TokenType::KEYW_VAR: {
1620 case lexer::TokenType::KEYW_CONST: {
1623 case lexer::TokenType::KEYW_LET: {
1626 case lexer::TokenType::KEYW_FUNCTION: {
1629 case lexer::TokenType::KEYW_CLASS: {
1632 case lexer::TokenType::KEYW_ENUM: {
1635 case lexer::TokenType::KEYW_INTERFACE: {
1638 case lexer::TokenType::KEYW_TYPE: {
1641 case lexer::TokenType::KEYW_GLOBAL:
1642 case lexer::TokenType::KEYW_MODULE:
1643 case lexer::TokenType::KEYW_NAMESPACE: {
1647 parser->ExpectToken(lexer::TokenType::KEYW_ASYNC);
1654 ir::ExportNamedDeclaration *ASParser::ParseNamedExportDeclaration(const lexer::SourcePosition &startLoc)
1656 if (Lexer()->GetToken().KeywordType() == lexer::TokenType::KEYW_DECLARE) {
1678 if (Lexer()->GetToken().Type() == lexer::TokenType::LITERAL_IDENT) {
1683 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_MULTIPLY) {
1685 } else if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_BRACE) {
1695 if (nextChar == lexer::LEX_CHAR_LEFT_PAREN || nextChar == lexer::LEX_CHAR_DOT) {
1699 lexer::SourcePosition startLoc = Lexer()->GetToken().Start();
1706 if (Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_STRING) {
1713 lexer::SourcePosition endLoc = source->End();