Lines Matching defs:lexer
28 #include "lexer/lexer.h"
29 #include "lexer/ETSLexer.h"
91 std::unique_ptr<lexer::Lexer> ETSParser::InitLexer(const SourceFile &sourceFile)
94 auto lexer = std::make_unique<lexer::ETSLexer>(&GetContext());
95 SetLexer(lexer.get());
96 return lexer;
101 lexer::SourcePosition startLoc = Lexer()->GetToken().Start();
124 ir::ETSScript *ETSParser::ParseETSGlobalScript(lexer::SourcePosition startLoc, ArenaVector<ir::Statement *> &statements)
161 auto lexer = InitLexer(source);
297 auto lexer = InitLexer(sourceFile);
299 lexer::SourcePosition startLoc = Lexer()->GetToken().Start();
316 ASSERT(token.Type() == lexer::TokenType::LITERAL_IDENT);
318 case lexer::TokenType::KEYW_STRUCT: {
322 case lexer::TokenType::KEYW_TYPE: {
335 lexer::SourcePosition startLoc = Lexer()->GetToken().Start();
339 lexer::SourcePosition endLoc = startLoc;
348 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_ARROW) {
356 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_BRACE) {
389 std::tuple<bool, ir::BlockStatement *, lexer::SourcePosition, bool> ETSParser::ParseFunctionBody(
393 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_LEFT_BRACE) {
407 if (Lexer()->GetToken().Type() == lexer::TokenType::LITERAL_IDENT) {
408 if (Lexer()->GetToken().KeywordType() == lexer::TokenType::KEYW_THROWS) {
411 } else if (Lexer()->GetToken().KeywordType() == lexer::TokenType::KEYW_RETHROWS) {
424 ir::AstNode *ETSParser::ParseInnerTypeDeclaration(ir::ModifierFlags memberModifiers, lexer::LexerPosition savedPos,
455 const lexer::SourcePosition &startLoc)
493 const lexer::SourcePosition &startLoc)
495 if (Lexer()->Lookahead() != lexer::LEX_CHAR_LEFT_PAREN && Lexer()->Lookahead() != lexer::LEX_CHAR_LESS_THAN &&
496 (Lexer()->GetToken().KeywordType() == lexer::TokenType::KEYW_GET ||
497 Lexer()->GetToken().KeywordType() == lexer::TokenType::KEYW_SET)) {
504 if (type == lexer::TokenType::KEYW_FUNCTION || type == lexer::TokenType::KEYW_LET ||
505 type == lexer::TokenType::KEYW_CONST) {
517 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_PARENTHESIS &&
524 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_SQUARE_BRACKET) {
540 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_PARENTHESIS ||
541 Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LESS_THAN) {
558 if (Lexer()->GetToken().Type() == lexer::TokenType::KEYW_CLASS) {
577 case lexer::TokenType::KEYW_STATIC: {
584 if (Lexer()->GetToken().Type() == lexer::TokenType::KEYW_INTERFACE) {
591 case lexer::TokenType::KEYW_ABSTRACT:
592 case lexer::TokenType::KEYW_FINAL: {
595 case lexer::TokenType::KEYW_ENUM: {
598 case lexer::TokenType::KEYW_INTERFACE: {
601 case lexer::TokenType::KEYW_NAMESPACE: {
610 case lexer::TokenType::KEYW_CLASS: {
613 case lexer::TokenType::LITERAL_IDENT: {
614 if (Lexer()->GetToken().KeywordType() == lexer::TokenType::KEYW_STRUCT) {
627 ASSERT(Lexer()->GetToken().KeywordType() == lexer::TokenType::KEYW_TYPE);
629 lexer::SourcePosition typeStart = Lexer()->GetToken().Start();
632 if (Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_IDENT) {
651 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LESS_THAN) {
659 if (!Lexer()->TryEatTokenType(lexer::TokenType::PUNCTUATOR_SUBSTITUTION)) {
816 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_RIGHT_PARENTHESIS) {
854 (Lexer()->GetToken().Type() == lexer::TokenType::KEYW_CLASS || IsStructKeyword())) {
859 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_SHIFT ||
860 Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LESS_THAN) {
861 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_SHIFT) {
862 Lexer()->BackwardToken(lexer::TokenType::PUNCTUATOR_LESS_THAN, 1);
877 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_FORMAT) {
891 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_PERIOD) {
898 (Lexer()->GetToken().Type() == lexer::TokenType::KEYW_CLASS || IsStructKeyword())) {
913 case lexer::TokenType::KEYW_BOOLEAN: {
917 case lexer::TokenType::KEYW_BYTE: {
921 case lexer::TokenType::KEYW_CHAR: {
925 case lexer::TokenType::KEYW_DOUBLE: {
929 case lexer::TokenType::KEYW_FLOAT: {
933 case lexer::TokenType::KEYW_INT: {
937 case lexer::TokenType::KEYW_LONG: {
941 case lexer::TokenType::KEYW_SHORT: {
954 std::optional<lexer::SourcePosition> ETSParser::GetDefaultParamPosition(ArenaVector<ir::Expression *> params)
967 keyword == lexer::TokenType::KEYW_IN || keyword == lexer::TokenType::KEYW_OUT) {
979 lexer::LexerPosition savedPos)
981 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_RIGHT_PARENTHESIS) {
983 ThrowExpectedToken(lexer::TokenType::PUNCTUATOR_RIGHT_PARENTHESIS);
996 ThrowUnexpectedToken(lexer::TokenType::KEYW_VAR);
1000 ir::Statement *ETSParser::ParseExport(lexer::SourcePosition startLoc, ir::ModifierFlags modifiers)
1002 ASSERT(Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_MULTIPLY ||
1003 Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_BRACE ||
1004 Lexer()->GetToken().Type() == lexer::TokenType::LITERAL_IDENT);
1007 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_MULTIPLY) {
1009 } else if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_BRACE) {
1012 if (Lexer()->GetToken().KeywordType() == lexer::TokenType::KEYW_FROM) {
1031 lexer::SourcePosition endLoc = reExportSource->Source()->End();
1047 if (Lexer()->GetToken().Type() != lexer::TokenType::KEYW_PACKAGE) {
1073 if (Lexer()->GetToken().KeywordType() != lexer::TokenType::KEYW_FROM) {
1081 if (Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_STRING) {
1085 ASSERT(Lexer()->GetToken().Type() == lexer::TokenType::LITERAL_STRING);
1115 while (Lexer()->GetToken().Type() == lexer::TokenType::KEYW_IMPORT) {
1120 Lexer()->TryEatTokenKeyword(lexer::TokenType::KEYW_TYPE) ? ir::ImportKinds::TYPE : ir::ImportKinds::VALUE;
1125 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_MULTIPLY) {
1130 } else if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_BRACE) {
1141 lexer::SourcePosition endLoc = importSource->Source()->End();
1154 lexer::SourcePosition endLocDef = importSourceDefault->Source()->End();
1173 lexer::Token token = Lexer()->GetToken();
1193 if (Lexer()->GetToken().KeywordType() == lexer::TokenType::KEYW_DEFAULT) {
1195 if (Lexer()->GetToken().KeywordType() == lexer::TokenType::KEYW_AS) {
1209 if (!Lexer()->TryEatTokenType(lexer::TokenType::PUNCTUATOR_LEFT_BRACE)) {
1210 ThrowExpectedToken(lexer::TokenType::PUNCTUATOR_LEFT_BRACE);
1218 while (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_RIGHT_BRACE) {
1219 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_MULTIPLY) {
1224 if (Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_IDENT) {
1228 lexer::Token importedToken = Lexer()->GetToken();
1236 if (CheckModuleAsModifier() && Lexer()->TryEatTokenType(lexer::TokenType::KEYW_AS)) {
1261 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_COMMA) {
1262 Lexer()->NextToken(lexer::NextTokenFlags::KEYWORD_TO_IDENT); // eat comma
1274 lexer::SourcePosition namespaceStart = Lexer()->GetToken().Start();
1283 if (Lexer()->GetToken().KeywordType() == lexer::TokenType::KEYW_FROM && !isReExport &&
1289 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_COMMA ||
1290 Lexer()->GetToken().KeywordType() == lexer::TokenType::KEYW_FROM || isReExport) {
1298 ExpectToken(lexer::TokenType::KEYW_AS, true); // eat `as` literal
1310 if (Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_IDENT) {
1319 if (Lexer()->GetToken().KeywordType() != lexer::TokenType::KEYW_FROM) {
1332 if ((Lexer()->GetToken().Flags() & lexer::TokenFlags::HAS_ESCAPE) != 0U) {
1344 case lexer::TokenType::LITERAL_IDENT: {
1355 case lexer::TokenType::PUNCTUATOR_PERIOD_PERIOD_PERIOD: {
1359 if (Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_IDENT) {
1410 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_QUESTION_MARK) {
1421 if (Lexer()->TryEatTokenType(lexer::TokenType::PUNCTUATOR_COLON)) {
1471 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_QUESTION_MARK) {
1479 if (auto const tokenType = Lexer()->GetToken().Type(); tokenType == lexer::TokenType::PUNCTUATOR_COLON) {
1483 } else if (tokenType != lexer::TokenType::PUNCTUATOR_SUBSTITUTION && (flags & VariableParsingFlags::FOR_OF) == 0U) {
1496 const lexer::SourcePosition &startLoc)
1506 lexer::SourcePosition endLoc = initializer->End();
1514 ir::VariableDeclarator *ETSParser::ParseVariableDeclarator(ir::Expression *init, lexer::SourcePosition startLoc,
1517 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_SUBSTITUTION) {
1530 lexer::SourcePosition endLoc = init->End();
1540 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_LEFT_PARENTHESIS) {
1548 if (Lexer()->GetToken().Type() == lexer::TokenType::LITERAL_IDENT) {
1557 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_RIGHT_PARENTHESIS) {
1568 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_COLON) {
1578 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_SUBSTITUTION) {
1586 if (nextChar == lexer::LEX_CHAR_LEFT_PAREN || nextChar == lexer::LEX_CHAR_DOT) {
1590 lexer::SourcePosition startLoc = Lexer()->GetToken().Start();
1597 if (Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_STRING) {
1610 lexer::SourcePosition endLoc = importSource->Source()->End();
1621 ThrowUnexpectedToken(lexer::TokenType::KEYW_EXPORT);
1624 ir::Expression *ETSParser::ParseExpressionOrTypeAnnotation(lexer::TokenType type,
1627 if (type == lexer::TokenType::KEYW_INSTANCEOF) {
1630 if (Lexer()->GetToken().Type() == lexer::TokenType::LITERAL_NULL) {
1645 [[maybe_unused]] const lexer::SourcePosition &startLoc,
1648 if (Lexer()->Lookahead() == lexer::LEX_CHAR_LESS_THAN ||
1655 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_SHIFT) {
1656 Lexer()->BackwardToken(lexer::TokenType::PUNCTUATOR_LESS_THAN, 1);
1668 if (Lexer()->GetToken().Type() == lexer::TokenType::EOS) {
1672 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_PARENTHESIS) {
1694 case lexer::TokenType::KEYW_IN: {
1698 case lexer::TokenType::KEYW_OUT: {
1712 if (Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_IDENT) {
1718 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_COLON) {
1723 if (Lexer()->GetToken().KeywordType() != lexer::TokenType::KEYW_NUMBER) {
1728 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_RIGHT_SQUARE_BRACKET) {
1733 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_COLON) {
1738 if (Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_IDENT) {
1754 lexer::SourcePosition startLoc = Lexer()->GetToken().Start();
1758 case lexer::TokenType::KEYW_IN:
1759 case lexer::TokenType::KEYW_OUT:
1769 if (Lexer()->GetToken().Type() == lexer::TokenType::KEYW_EXTENDS) {
1778 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_SUBSTITUTION) {
1796 return (Lexer()->GetToken().Type() == lexer::TokenType::LITERAL_IDENT &&
1797 Lexer()->GetToken().KeywordType() == lexer::TokenType::KEYW_STRUCT);
1802 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_BRACE) {
1810 if ((Lexer()->GetToken().Flags() & lexer::TokenFlags::NUMBER_FLOAT) != 0U) {
1826 ASSERT(Lexer()->GetToken().KeywordType() == lexer::TokenType::KEYW_DECLARE);
1837 case lexer::TokenType::KEYW_LET:
1838 case lexer::TokenType::KEYW_CONST:
1839 case lexer::TokenType::KEYW_FUNCTION:
1840 case lexer::TokenType::KEYW_CLASS:
1841 case lexer::TokenType::KEYW_NAMESPACE:
1842 case lexer::TokenType::KEYW_ENUM:
1843 case lexer::TokenType::KEYW_TYPE:
1844 case lexer::TokenType::KEYW_ABSTRACT:
1845 case lexer::TokenType::KEYW_FINAL:
1846 case lexer::TokenType::KEYW_INTERFACE:
1847 case lexer::TokenType::KEYW_ASYNC: {
1858 lexer::SourcePosition startLoc = Lexer()->GetToken().Start();
1860 ASSERT(Lexer()->GetToken().Type() == lexer::TokenType::KEYW_FUNCTION);
1867 if (Lexer()->TryEatTokenType(lexer::TokenType::PUNCTUATOR_MULTIPLY)) {
1873 if (Lexer()->Lookahead() == lexer::LEX_CHAR_DOT) {
1880 } else if (Lexer()->GetToken().Type() == lexer::TokenType::LITERAL_IDENT) {
1896 if (func->IsOverload() && Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_SEMI_COLON) {