Lines Matching refs:Lexer

81 std::unique_ptr<lexer::Lexer> ASParser::InitLexer(const SourceFile &sourceFile)
91 ASSERT(Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_AT);
93 lexer::SourcePosition start = Lexer()->GetToken().Start();
94 Lexer()->NextToken(); // eat '@'
117 ASSERT(Lexer()->GetToken().KeywordType() == lexer::TokenType::KEYW_TYPE);
118 lexer::SourcePosition typeStart = Lexer()->GetToken().Start();
119 Lexer()->NextToken(); // eat type keyword
121 if (Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_IDENT) {
125 const util::StringView &ident = Lexer()->GetToken().Ident();
128 id->SetRange(Lexer()->GetToken().Loc());
129 Lexer()->NextToken();
132 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LESS_THAN) {
137 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_SUBSTITUTION) {
141 Lexer()->NextToken(); // eat '='
143 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_BITWISE_OR) {
144 Lexer()->NextToken(); // eat '|'
152 typeAliasDecl->SetRange({typeStart, Lexer()->GetToken().End()});
167 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_QUESTION_MARK) {
176 Lexer()->NextToken(); // eat '?'
179 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_COLON) {
180 Lexer()->NextToken(); // eat ':'
187 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_SUBSTITUTION) {
285 return ArrowFunctionDescriptor {std::move(params), Lexer()->GetToken().Start(), arrowStatus};
337 switch (Lexer()->GetToken().Type()) {
347 returnNode = AllocNode<ir::Identifier>(Lexer()->GetToken().Ident(), Allocator());
349 returnNode->SetRange(Lexer()->GetToken().Loc());
350 Lexer()->NextToken();
352 bool questionMark = Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_QUESTION_MARK;
361 Lexer()->NextToken();
364 if (!isOptional && Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_COLON) {
366 } else if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_COLON) {
367 Lexer()->NextToken(); // eat ':'
387 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_SUBSTITUTION) {
403 Lexer()->NextToken();
406 Lexer()->GetToken().Type() == lexer::TokenType::KEYW_YIELD) {
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) {
431 key = AllocNode<ir::StringLiteral>(Lexer()->GetToken().String());
433 key = AllocNode<ir::Identifier>(Lexer()->GetToken().Ident(), Allocator());
436 key->SetRange(Lexer()->GetToken().Loc());
438 Lexer()->NextToken();
442 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_COLON) {
443 Lexer()->NextToken();
458 switch (Lexer()->GetToken().Type()) {
467 switch (Lexer()->GetToken().KeywordType()) {
507 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_ARROW) {
511 Lexer()->NextToken(); // eat '=>'
527 lexer::SourcePosition typeStart = Lexer()->GetToken().Start();
528 const auto startPos = Lexer()->Save();
529 ASSERT(Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_PARENTHESIS);
530 Lexer()->NextToken(); // eat '('
536 Lexer()->Rewind(startPos);
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) {
552 Lexer()->Rewind(startPos);
556 if (throwError && Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_RIGHT_PARENTHESIS) {
560 lexer::SourcePosition endLoc = Lexer()->GetToken().End();
561 Lexer()->NextToken(); // eat ')'
563 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_ARROW) {
564 Lexer()->Rewind(startPos);
575 auto *typeName = AllocNode<ir::Identifier>(Lexer()->GetToken().Ident(), Allocator());
576 typeName->SetRange(Lexer()->GetToken().Loc());
578 type->SetRange(Lexer()->GetToken().Loc());
579 Lexer()->NextToken();
582 while (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_PERIOD) {
583 Lexer()->NextToken();
585 if (Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_IDENT) {
589 typeName = AllocNode<ir::Identifier>(Lexer()->GetToken().Ident(), Allocator());
590 typeName->SetRange(Lexer()->GetToken().Loc());
592 current->SetRange(Lexer()->GetToken().Loc());
595 Lexer()->NextToken();
599 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LESS_THAN) {
614 switch (Lexer()->GetToken().Type()) {
652 typeName->SetRange(Lexer()->GetToken().Loc());
654 type->SetRange(Lexer()->GetToken().Loc());
655 Lexer()->NextToken();
661 while (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_BITWISE_OR) {
662 Lexer()->NextToken();
664 if (Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_NULL) {
682 type->SetEnd(Lexer()->GetToken().End());
683 Lexer()->NextToken();
690 while (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_SQUARE_BRACKET) {
691 Lexer()->NextToken();
693 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_RIGHT_SQUARE_BRACKET) {
701 Lexer()->NextToken();
705 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_BITWISE_OR) {
706 Lexer()->NextToken();
708 bool isLiteralNull = Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_NULL;
723 typeName->SetRange(Lexer()->GetToken().Loc());
732 type->SetRange({startPos, Lexer()->GetToken().End()});
735 Lexer()->NextToken();
768 if (returnExpression == nullptr || Lexer()->GetToken().NewLine()) {
773 (*returnExpression)->SetRange({startLoc, Lexer()->GetToken().End()});
774 Lexer()->NextToken();
781 if (Lexer()->Lookahead() == lexer::LEX_CHAR_LESS_THAN ||
786 const auto savedPos = Lexer()->Save();
788 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_SHIFT) {
789 Lexer()->BackwardToken(lexer::TokenType::PUNCTUATOR_LESS_THAN, 1);
796 Lexer()->Rewind(savedPos);
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) {
823 Lexer()->Rewind(savedPos);
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) {
840 Lexer()->NextToken();
848 auto *identNode = AllocNode<ir::Identifier>(Lexer()->GetToken().Ident(), Allocator());
850 identNode->SetRange(Lexer()->GetToken().Loc());
852 Lexer()->NextToken();
863 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_RIGHT_PARENTHESIS) {
870 Lexer()->NextToken(); // eat extends keyword
872 if (Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_IDENT) {
876 const lexer::SourcePosition &heritageStart = Lexer()->GetToken().Start();
877 lexer::SourcePosition heritageEnd = Lexer()->GetToken().End();
878 auto *extendsName = AllocNode<ir::Identifier>(Lexer()->GetToken().Ident(), Allocator());
879 extendsName->SetRange(Lexer()->GetToken().Loc());
881 extendsClause->SetRange(Lexer()->GetToken().Loc());
882 Lexer()->NextToken();
885 while (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_PERIOD) {
886 Lexer()->NextToken();
888 if (Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_IDENT) {
892 extendsName = AllocNode<ir::Identifier>(Lexer()->GetToken().Ident(), Allocator());
893 extendsName->SetRange(Lexer()->GetToken().Loc());
895 current->SetRange(Lexer()->GetToken().Loc());
898 heritageEnd = Lexer()->GetToken().End();
899 Lexer()->NextToken();
902 if (Lexer()->Lookahead() == lexer::LEX_CHAR_LESS_THAN) {
903 Lexer()->ForwardToken(lexer::TokenType::PUNCTUATOR_LESS_THAN, 1);
905 Lexer()->NextToken();
908 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LESS_THAN) {
911 heritageEnd = Lexer()->GetToken().End();
916 if (Lexer()->GetToken().Type() == lexer::TokenType::KEYW_IMPLEMENTS) {
920 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_LEFT_BRACE) {
934 Lexer()->NextToken(); // eat '['
936 if (Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_IDENT) {
940 if (!Lexer()->GetToken().Ident().Is("key")) {
944 auto *key = AllocNode<ir::Identifier>(Lexer()->GetToken().Ident(), Allocator());
945 key->SetRange(Lexer()->GetToken().Loc());
947 Lexer()->NextToken(); // eat key
949 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_COLON) {
953 Lexer()->NextToken(); // eat ':'
963 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_RIGHT_SQUARE_BRACKET) {
967 Lexer()->NextToken(); // eat ']'
969 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_COLON) {
973 Lexer()->NextToken(); // eat ':'
982 indexSignature->SetRange({startLoc, Lexer()->GetToken().End()});
990 switch (Lexer()->GetToken().Type()) {
992 const util::StringView &ident = Lexer()->GetToken().Ident();
994 key->SetRange(Lexer()->GetToken().Loc());
998 const util::StringView &string = Lexer()->GetToken().String();
1000 key->SetRange(Lexer()->GetToken().Loc());
1004 if ((Lexer()->GetToken().Flags() & lexer::TokenFlags::NUMBER_BIGINT) != 0) {
1005 key = AllocNode<ir::BigIntLiteral>(Lexer()->GetToken().BigInt());
1007 key = AllocNode<ir::NumberLiteral>(Lexer()->GetToken().GetNumber());
1010 key->SetRange(Lexer()->GetToken().Loc());
1018 Lexer()->NextToken();
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) {
1046 Lexer()->NextToken(); // eat ':'
1053 methodSignature->SetRange({startLoc, Lexer()->GetToken().End()});
1057 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_COLON) {
1061 Lexer()->NextToken(); // eat ':'
1067 propertySignature->SetRange({startLoc, Lexer()->GetToken().End()});
1073 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_AT) {
1077 char32_t nextCp = Lexer()->Lookahead();
1078 lexer::SourcePosition startLoc = Lexer()->GetToken().Start();
1079 bool isReadonly = Lexer()->GetToken().KeywordType() == lexer::TokenType::KEYW_READONLY &&
1082 Lexer()->NextToken(); // eat 'readonly"
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();
1102 auto *implementsName = AllocNode<ir::Identifier>(Lexer()->GetToken().Ident(), Allocator());
1103 implementsName->SetRange(Lexer()->GetToken().Loc());
1105 implementsClause->SetRange(Lexer()->GetToken().Loc());
1106 Lexer()->NextToken();
1109 while (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_PERIOD) {
1110 Lexer()->NextToken();
1112 if (Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_IDENT) {
1116 implementsName = AllocNode<ir::Identifier>(Lexer()->GetToken().Ident(), Allocator());
1117 implementsName->SetRange(Lexer()->GetToken().Loc());
1119 current->SetRange(Lexer()->GetToken().Loc());
1122 Lexer()->NextToken();
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) {
1137 impl->SetRange({implementStart, Lexer()->GetToken().End()});
1140 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_COMMA) {
1141 Lexer()->NextToken();
1156 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_COLON) {
1157 Lexer()->NextToken(); // eat ':'
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)) {
1269 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_HASH_MARK) {
1276 Lexer()->NextToken(); // eat left square bracket
1278 if (Lexer()->GetToken().Type() == lexer::TokenType::LITERAL_IDENT &&
1279 Lexer()->Lookahead() == lexer::LEX_CHAR_COLON) {
1280 if (!Lexer()->GetToken().Ident().Is("key")) {
1284 auto id = AllocNode<ir::Identifier>(Lexer()->GetToken().Ident(), Allocator());
1285 id->SetRange(Lexer()->GetToken().Loc());
1287 Lexer()->NextToken(); // eat param
1289 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_COLON) {
1293 Lexer()->NextToken(); // eat ':'
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) {
1335 lexer::SourcePosition endLoc = Lexer()->GetToken().End();
1337 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_LEFT_BRACE) {
1357 ir::Identifier *local = ParseNamedImport(Lexer()->GetToken());
1358 Lexer()->NextToken(); // eat local name
1376 Lexer()->NextToken();
1378 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_COLON) {
1382 Lexer()->NextToken(); // eat ':'
1387 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_ARROW) {
1396 Lexer()->NextToken();
1398 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_COLON) {
1402 Lexer()->NextToken(); // eat ':'
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();
1424 Lexer()->NextToken();
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) {
1443 expr->SetRange({start, Lexer()->GetToken().End()});
1444 Lexer()->NextToken();
1446 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_ARROW) {
1450 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_COLON) {
1451 auto savedPos = Lexer()->Save();
1452 Lexer()->NextToken(); // eat ':'
1457 Lexer()->Rewind(savedPos);
1461 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_ARROW) {
1462 Lexer()->Rewind(savedPos);
1474 lexer::SourcePosition startPos = Lexer()->GetToken().Start();
1475 Lexer()->NextToken(); // eat <
1479 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_GREATER_THAN) {
1483 Lexer()->NextToken(); // eat >
1488 node->SetRange({startPos, Lexer()->GetToken().End()});
1494 lexer::SourcePosition constVarStar = Lexer()->GetToken().Start();
1495 Lexer()->NextToken();
1497 if (Lexer()->GetToken().Type() == lexer::TokenType::KEYW_ENUM) {
1514 if (Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_IDENT) {
1520 const util::StringView &identStr = Lexer()->GetToken().Ident();
1522 init->SetRange(Lexer()->GetToken().Loc());
1523 Lexer()->NextToken();
1525 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_COLON) {
1526 Lexer()->NextToken(); // eat ':'
1530 Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_SUBSTITUTION) {
1550 Lexer()->NextToken(); // eat `default` keyword or `=`
1555 switch (Lexer()->GetToken().Type()) {
1569 Lexer()->NextToken(); // eat 'namespace'
1578 if ((Lexer()->GetToken().Flags() & lexer::TokenFlags::HAS_ESCAPE) == 0) {
1579 Lexer()->NextToken(); // eat `async`
1611 if (parser->Lexer()->GetToken().KeywordType() == lexer::TokenType::KEYW_ABSTRACT) {
1612 parser->Lexer()->NextToken(); // eat 'abstract'
1656 if (Lexer()->GetToken().KeywordType() == lexer::TokenType::KEYW_DECLARE) {
1661 ParseNamedExportDeclarationHelper::GetParsedDeclaration(this, Lexer()->GetToken().KeywordType());
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) {
1694 char32_t nextChar = Lexer()->Lookahead();
1699 lexer::SourcePosition startLoc = Lexer()->GetToken().Start();
1700 Lexer()->NextToken(); // eat import
1706 if (Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_STRING) {