• Home
  • Raw
  • Download

Lines Matching full:lexer

31 #include "lexer/lexer.h"
32 #include "lexer/ETSLexer.h"
102 std::unique_ptr<lexer::Lexer> ETSParser::InitLexer(const SourceFile &sourceFile) in InitLexer()
106 auto lexer = std::make_unique<lexer::ETSLexer>(&GetContext(), DiagnosticEngine()); in InitLexer() local
108 SetLexer(lexer.get()); in InitLexer()
109 return lexer; in InitLexer()
114 lexer::SourcePosition startLoc = Lexer()->GetToken().Start(); in ParseProgram()
115 Lexer()->NextToken(); in ParseProgram()
151 void ETSParser::ParseFileHeaderFlag(lexer::SourcePosition startLoc, ArenaVector<ir::Statement *> *s… in ParseFileHeaderFlag()
153 if (Lexer()->GetToken().KeywordType() != lexer::TokenType::LITERAL_STRING || in ParseFileHeaderFlag()
154 Lexer()->GetToken().String() != compiler::Signatures::STATIC_PROGRAM_FLAG) { in ParseFileHeaderFlag()
168 ir::ETSModule *ETSParser::ParseETSGlobalScript(lexer::SourcePosition startLoc, ArenaVector<ir::Stat… in ParseETSGlobalScript()
185 etsModule->SetRange({startLoc, Lexer()->GetToken().End()}); in ParseETSGlobalScript()
189 ir::ETSModule *ETSParser::ParseImportsOnly(lexer::SourcePosition startLoc, ArenaVector<ir::Statemen… in ParseImportsOnly()
194 if (Lexer()->TryEatTokenType(lexer::TokenType::JS_DOC_START)) { in ParseImportsOnly()
206 etsModule->SetRange({startLoc, Lexer()->GetToken().End()}); in ParseImportsOnly()
258 auto lexer = InitLexer(source); in ParseDefaultSources() local
260 Lexer()->NextToken(); in ParseDefaultSources()
424 auto lexer = InitLexer(sourceFile); in ParseSource() local
426 lexer::SourcePosition startLoc = Lexer()->GetToken().Start(); in ParseSource()
427 Lexer()->NextToken(); in ParseSource()
437 Lexer()->GetToken().Start()); in ParseSource()
452 const auto token = Lexer()->GetToken(); in ParseIdentKeyword()
453 ES2PANDA_ASSERT(token.Type() == lexer::TokenType::LITERAL_IDENT); in ParseIdentKeyword()
455 case lexer::TokenType::KEYW_STRUCT: { in ParseIdentKeyword()
458 case lexer::TokenType::KEYW_TYPE: { in ParseIdentKeyword()
471 lexer::SourcePosition startLoc = Lexer()->GetToken().Start(); in ParseFunction()
475 lexer::SourcePosition endLoc = startLoc; in ParseFunction()
484 ExpectToken(lexer::TokenType::PUNCTUATOR_ARROW); in ParseFunction()
490 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_BRACE) { in ParseFunction()
530 std::tuple<bool, ir::BlockStatement *, lexer::SourcePosition, bool> ETSParser::ParseFunctionBody( in ParseFunctionBody()
535 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_LEFT_BRACE) { in ParseFunctionBody()
536 … LogError(diagnostic::EXPECTED_PARAM_GOT_PARAM, {"{", TokenToString(Lexer()->GetToken().Type())}); in ParseFunctionBody()
537 return {false, nullptr, Lexer()->GetToken().End(), false}; in ParseFunctionBody()
550 if (Lexer()->GetToken().Type() == lexer::TokenType::LITERAL_IDENT) { in ParseFunctionThrowMarker()
551 if (Lexer()->TryEatTokenKeyword(lexer::TokenType::KEYW_THROWS)) { in ParseFunctionThrowMarker()
553 } else if (Lexer()->TryEatTokenKeyword(lexer::TokenType::KEYW_RETHROWS)) { in ParseFunctionThrowMarker()
565 ir::AstNode *ETSParser::ParseInnerTypeDeclaration(ir::ModifierFlags memberModifiers, lexer::LexerPo… in ParseInnerTypeDeclaration()
573 Lexer()->Rewind(savedPos); in ParseInnerTypeDeclaration()
575 Lexer()->NextToken(); in ParseInnerTypeDeclaration()
578 Lexer()->GetToken().SetTokenType(Lexer()->GetToken().KeywordType()); in ParseInnerTypeDeclaration()
581 return AllocBrokenStatement({savedPos.GetToken().Start(), Lexer()->GetToken().End()}); in ParseInnerTypeDeclaration()
599 … const lexer::SourcePosition &startLoc, bool isDefault) in ParseInnerConstructorDeclaration()
605 auto *memberName = AllocNode<ir::Identifier>(Lexer()->GetToken().Ident(), Allocator()); in ParseInnerConstructorDeclaration()
607 Lexer()->NextToken(); in ParseInnerConstructorDeclaration()
620 ident->SetRange({Lexer()->GetToken().Start(), Lexer()->GetToken().End()}); in CreateInvokeIdentifier()
626 if (Lexer()->GetToken().KeywordType() != lexer::TokenType::KEYW_GET && in CheckAccessorDeclaration()
627 Lexer()->GetToken().KeywordType() != lexer::TokenType::KEYW_SET) { in CheckAccessorDeclaration()
636 auto pos = Lexer()->Save(); in CheckAccessorDeclaration()
637 Lexer()->NextToken(); in CheckAccessorDeclaration()
638 if (Lexer()->TryEatTokenType(lexer::TokenType::LITERAL_IDENT) || in CheckAccessorDeclaration()
639 Lexer()->TryEatTokenType(lexer::TokenType::PUNCTUATOR_FORMAT)) { in CheckAccessorDeclaration()
640 Lexer()->Rewind(pos); in CheckAccessorDeclaration()
643 Lexer()->Rewind(pos); in CheckAccessorDeclaration()
650 const lexer::SourcePosition &startLoc, bool isDefault) in ParseInnerRest()
672 LogUnexpectedToken(Lexer()->GetToken()); in ParseInnerRest()
673 const auto &rangeToken = Lexer()->GetToken().Loc(); in ParseInnerRest()
674 Lexer()->NextToken(); in ParseInnerRest()
678 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_PARENTHESIS || in ParseInnerRest()
679 Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LESS_THAN) { in ParseInnerRest()
697 if (Lexer()->GetToken().Type() == lexer::TokenType::KEYW_CLASS) { in ParseTypeDeclarationAbstractFinal()
705 LogUnexpectedToken(Lexer()->GetToken()); in ParseTypeDeclarationAbstractFinal()
711 auto savedPos = Lexer()->Save(); in ParseTypeDeclaration()
715 auto tokenType = Lexer()->GetToken().Type(); in ParseTypeDeclaration()
717 case lexer::TokenType::KEYW_STATIC: in ParseTypeDeclaration()
719 LogUnexpectedToken(Lexer()->GetToken()); in ParseTypeDeclaration()
722 Lexer()->NextToken(); in ParseTypeDeclaration()
724 if (Lexer()->GetToken().Type() == lexer::TokenType::KEYW_INTERFACE) { in ParseTypeDeclaration()
728 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_BRACE) { in ParseTypeDeclaration()
729 Lexer()->Rewind(savedPos); in ParseTypeDeclaration()
733 Lexer()->Rewind(savedPos); in ParseTypeDeclaration()
735 case lexer::TokenType::KEYW_ABSTRACT: in ParseTypeDeclaration()
736 case lexer::TokenType::KEYW_FINAL: in ParseTypeDeclaration()
738 case lexer::TokenType::KEYW_ENUM: in ParseTypeDeclaration()
740 case lexer::TokenType::KEYW_INTERFACE: in ParseTypeDeclaration()
742 case lexer::TokenType::KEYW_CLASS: in ParseTypeDeclaration()
744 case lexer::TokenType::KEYW_STRUCT: in ParseTypeDeclaration()
746 case lexer::TokenType::LITERAL_IDENT: in ParseTypeDeclaration()
747 if (Lexer()->GetToken().KeywordType() == lexer::TokenType::KEYW_STRUCT) { in ParseTypeDeclaration()
752 const auto &tokenNow = Lexer()->GetToken(); in ParseTypeDeclaration()
760 ES2PANDA_ASSERT(Lexer()->GetToken().KeywordType() == lexer::TokenType::KEYW_TYPE); in ParseTypeAliasDeclaration()
762 const auto start = Lexer()->Save(); in ParseTypeAliasDeclaration()
767 lexer::SourcePosition typeStart = Lexer()->GetToken().Start(); in ParseTypeAliasDeclaration()
768 Lexer()->NextToken(); // eat type keyword in ParseTypeAliasDeclaration()
770 if (Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_IDENT) { in ParseTypeAliasDeclaration()
771 Lexer()->Rewind(start); in ParseTypeAliasDeclaration()
775 if (Lexer()->GetToken().IsReservedTypeName() && !util::Helpers::IsStdLib(GetProgram())) { in ParseTypeAliasDeclaration()
776 … LogError(diagnostic::TYPE_ALIAS_INVALID_NAME, {TokenToString(Lexer()->GetToken().KeywordType())}); in ParseTypeAliasDeclaration()
784 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LESS_THAN) { in ParseTypeAliasDeclaration()
792 ExpectToken(lexer::TokenType::PUNCTUATOR_SUBSTITUTION); in ParseTypeAliasDeclaration()
801 typeAliasDecl->SetRange({typeStart, Lexer()->GetToken().End()}); in ParseTypeAliasDeclaration()
949 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_RIGHT_PARENTHESIS) { in ValidateRestParameter()
952 const auto pos = Lexer()->Save(); in ValidateRestParameter()
953 Lexer()->NextToken(); in ValidateRestParameter()
954 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_RIGHT_PARENTHESIS) { in ValidateRestParameter()
956 Lexer()->Rewind(pos); in ValidateRestParameter()
957 Lexer()->GetToken().SetTokenType(lexer::TokenType::PUNCTUATOR_RIGHT_PARENTHESIS); in ValidateRestParameter()
991 (Lexer()->GetToken().Type() == lexer::TokenType::KEYW_CLASS || IsStructKeyword())) { in ParseTypeReferencePart()
996 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_SHIFT || in ParseTypeReferencePart()
997 Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LESS_THAN) { in ParseTypeReferencePart()
998 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_SHIFT) { in ParseTypeReferencePart()
999 Lexer()->BackwardToken(lexer::TokenType::PUNCTUATOR_LESS_THAN, 1); in ParseTypeReferencePart()
1011 auto startPos = Lexer()->GetToken().Start(); in ParseTypeReference()
1014 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_FORMAT) { in ParseTypeReference()
1019 auto partPos = Lexer()->GetToken().Start(); in ParseTypeReference()
1027 typeRefPart->SetRange({partPos, Lexer()->GetToken().End()}); in ParseTypeReference()
1029 if (!Lexer()->TryEatTokenType(lexer::TokenType::PUNCTUATOR_PERIOD)) { in ParseTypeReference()
1034 (Lexer()->GetToken().Type() == lexer::TokenType::KEYW_CLASS || IsStructKeyword())) { in ParseTypeReference()
1041 typeReference->SetRange({startPos, Lexer()->GetToken().End()}); in ParseTypeReference()
1047 switch (Lexer()->GetToken().KeywordType()) { in ParseBaseTypeReference()
1048 case lexer::TokenType::KEYW_BOOLEAN: in ParseBaseTypeReference()
1050 case lexer::TokenType::KEYW_BYTE: in ParseBaseTypeReference()
1052 case lexer::TokenType::KEYW_CHAR: in ParseBaseTypeReference()
1054 case lexer::TokenType::KEYW_DOUBLE: in ParseBaseTypeReference()
1056 case lexer::TokenType::KEYW_FLOAT: in ParseBaseTypeReference()
1058 case lexer::TokenType::KEYW_INT: in ParseBaseTypeReference()
1060 case lexer::TokenType::KEYW_LONG: in ParseBaseTypeReference()
1062 case lexer::TokenType::KEYW_SHORT: in ParseBaseTypeReference()
1071 if (Lexer()->GetToken().IsDefinableTypeName()) { in ParseLiteralIdent()
1072 return GetTypeAnnotationOfPrimitiveType(Lexer()->GetToken().KeywordType(), options); in ParseLiteralIdent()
1075 if (Lexer()->TryEatTokenFromKeywordType(lexer::TokenType::KEYW_KEYOF)) { in ParseLiteralIdent()
1080 typeAnnotation->SetRange(Lexer()->GetToken().Loc()); in ParseLiteralIdent()
1088 lexer::LexerPosition savedPos) in ParseRightParenthesis()
1090 if (!Lexer()->TryEatTokenType(lexer::TokenType::PUNCTUATOR_RIGHT_PARENTHESIS)) { in ParseRightParenthesis()
1092 LogExpectedToken(lexer::TokenType::PUNCTUATOR_RIGHT_PARENTHESIS); in ParseRightParenthesis()
1093 Lexer()->NextToken(); // eat ')' in ParseRightParenthesis()
1097 Lexer()->Rewind(savedPos); in ParseRightParenthesis()
1109 ir::Statement *ETSParser::ParseExport(lexer::SourcePosition startLoc, ir::ModifierFlags modifiers) in ParseExport()
1115 [[maybe_unused]] auto tokenType = Lexer()->GetToken().Type(); in ParseExport()
1117 …if ((modifiers & ir::ModifierFlags::DEFAULT_EXPORT) != 0U && tokenType != lexer::TokenType::PUNCTU… in ParseExport()
1118 …tokenType != lexer::TokenType::PUNCTUATOR_LEFT_BRACE && tokenType != lexer::TokenType::LITERAL_IDE… in ParseExport()
1124 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_MULTIPLY) { in ParseExport()
1128 } else if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_BRACE) { in ParseExport()
1131 if (Lexer()->GetToken().KeywordType() == lexer::TokenType::KEYW_FROM) { in ParseExport()
1169 auto startLoc = Lexer()->GetToken().Start(); in ParsePackageDeclaration()
1170 auto savedPos = Lexer()->Save(); in ParsePackageDeclaration()
1171 if (Lexer()->TryEatTokenType(lexer::TokenType::JS_DOC_START)) { in ParsePackageDeclaration()
1176 if (!Lexer()->TryEatTokenType(lexer::TokenType::KEYW_PACKAGE)) { in ParsePackageDeclaration()
1182 Lexer()->Rewind(savedPos); in ParsePackageDeclaration()
1189 packageDeclaration->SetRange({startLoc, Lexer()->GetToken().End()}); in ParsePackageDeclaration()
1201 … bool requireFrom, lexer::SourcePosition startLoc, in ParseImportPathBuildImport()
1204 if (Lexer()->GetToken().KeywordType() != lexer::TokenType::KEYW_FROM && requireFrom) { in ParseImportPathBuildImport()
1205 LogExpectedToken(lexer::TokenType::KEYW_FROM); in ParseImportPathBuildImport()
1207 Lexer()->NextToken(); // eat `from` in ParseImportPathBuildImport()
1209 if (Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_STRING) { in ParseImportPathBuildImport()
1210 LogExpectedToken(lexer::TokenType::LITERAL_STRING); in ParseImportPathBuildImport()
1214 errorLiteral->SetRange(Lexer()->GetToken().Loc()); in ParseImportPathBuildImport()
1222 ES2PANDA_ASSERT(Lexer()->GetToken().Type() == lexer::TokenType::LITERAL_STRING); in ParseImportPathBuildImport()
1223 auto pathToResolve = Lexer()->GetToken().Ident(); in ParseImportPathBuildImport()
1226 importPathStringLiteral->SetRange(Lexer()->GetToken().Loc()); in ParseImportPathBuildImport()
1227 Lexer()->NextToken(); in ParseImportPathBuildImport()
1250 lexer::LexerPosition ETSParser::HandleJsDocLikeComments() in HandleJsDocLikeComments()
1252 auto savedPos = Lexer()->Save(); in HandleJsDocLikeComments()
1253 if (Lexer()->TryEatTokenType(lexer::TokenType::JS_DOC_START)) { in HandleJsDocLikeComments()
1264 while (Lexer()->GetToken().Type() == lexer::TokenType::KEYW_IMPORT) { in ParseImportDeclarations()
1265 auto startLoc = Lexer()->GetToken().Start(); in ParseImportDeclarations()
1266 Lexer()->NextToken(); // eat import in ParseImportDeclarations()
1269Lexer()->TryEatTokenKeyword(lexer::TokenType::KEYW_TYPE) ? ir::ImportKinds::TYPES : ir::ImportKind… in ParseImportDeclarations()
1274 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_MULTIPLY) { in ParseImportDeclarations()
1279 } else if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_BRACE) { in ParseImportDeclarations()
1286 auto pos = Lexer()->Save(); in ParseImportDeclarations()
1294 Lexer()->Rewind(pos); in ParseImportDeclarations()
1307 Lexer()->Rewind(savedPos); in ParseImportDeclarations()
1320 exported->SetRange(Lexer()->GetToken().Loc()); in ParseSingleExportForAnonymousConst()
1339 lexer::Token token = Lexer()->GetToken(); in ParseSingleExport()
1340 …if (((modifiers & ir::ModifierFlags::DEFAULT_EXPORT) != 0) && token.Type() != lexer::TokenType::LI… in ParseSingleExport()
1344 if (token.Type() != lexer::TokenType::LITERAL_IDENT) { in ParseSingleExport()
1350 exported->SetRange(Lexer()->GetToken().Loc()); in ParseSingleExport()
1352 Lexer()->NextToken(); // eat exported variable name in ParseSingleExport()
1368 if (Lexer()->TryEatTokenKeyword(lexer::TokenType::KEYW_DEFAULT)) { in IsDefaultImport()
1369 if (Lexer()->TryEatTokenKeyword(lexer::TokenType::KEYW_AS)) { in IsDefaultImport()
1377 bool TypedParser::IsPrimitiveType(const lexer::TokenType &tokenType) in IsPrimitiveType()
1380 case lexer::TokenType::KEYW_BIGINT: in IsPrimitiveType()
1381 case lexer::TokenType::KEYW_BOOLEAN: in IsPrimitiveType()
1382 case lexer::TokenType::KEYW_BYTE: in IsPrimitiveType()
1383 case lexer::TokenType::KEYW_CHAR: in IsPrimitiveType()
1384 case lexer::TokenType::KEYW_DOUBLE: in IsPrimitiveType()
1385 case lexer::TokenType::KEYW_FLOAT: in IsPrimitiveType()
1386 case lexer::TokenType::KEYW_INT: in IsPrimitiveType()
1387 case lexer::TokenType::KEYW_LONG: in IsPrimitiveType()
1388 case lexer::TokenType::KEYW_SHORT: in IsPrimitiveType()
1389 case lexer::TokenType::KEYW_VOID: in IsPrimitiveType()
1399 auto *imported = AllocNode<ir::Identifier>(Lexer()->GetToken().Ident(), Allocator()); in ParseNamedSpecifiesDefaultImport()
1401 imported->SetRange(Lexer()->GetToken().Loc()); in ParseNamedSpecifiesDefaultImport()
1402 Lexer()->NextToken(); in ParseNamedSpecifiesDefaultImport()
1416 if (Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_IDENT) { in ParseNamedSpecifiesImport()
1421 exported->SetRange(Lexer()->GetToken().Loc()); in ParseNamedSpecifiesImport()
1427 return Lexer()->TryEatTokenType(lexer::TokenType::KEYW_AS) && in ParseNamedSpecifiesImport()
1428 Lexer()->TryEatTokenType(lexer::TokenType::KEYW_DEFAULT); in ParseNamedSpecifiesImport()
1431 lexer::Token importedToken = Lexer()->GetToken(); in ParseNamedSpecifiesImport()
1435 if (CheckModuleAsModifier() && Lexer()->TryEatTokenType(lexer::TokenType::KEYW_AS)) { in ParseNamedSpecifiesImport()
1436 if (Lexer()->TryEatTokenType(lexer::TokenType::KEYW_DEFAULT)) { in ParseNamedSpecifiesImport()
1442 local = ParseNamedImport(&Lexer()->GetToken()); in ParseNamedSpecifiesImport()
1443 Lexer()->NextToken(); in ParseNamedSpecifiesImport()
1461 if (!Lexer()->TryEatTokenType(lexer::TokenType::PUNCTUATOR_LEFT_BRACE)) { in ParseNamedSpecifiers()
1463 // current token is lexer::TokenType::PUNCTUATOR_LEFT_BRACE in ParseNamedSpecifiers()
1465 LogExpectedToken(lexer::TokenType::PUNCTUATOR_LEFT_BRACE); in ParseNamedSpecifiers()
1466 Lexer()->NextToken(); in ParseNamedSpecifiers()
1476 lexer::TokenType::PUNCTUATOR_RIGHT_BRACE, lexer::NextTokenFlags::KEYWORD_TO_IDENT, in ParseNamedSpecifiers()
1478 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_MULTIPLY) { in ParseNamedSpecifiers()
1494 lexer::SourcePosition namespaceStart = Lexer()->GetToken().Start(); in ParseNameSpaceSpecifier()
1495 Lexer()->NextToken(); // eat `*` character in ParseNameSpaceSpecifier()
1503 if (Lexer()->GetToken().KeywordType() == lexer::TokenType::KEYW_FROM && !isReExport && in ParseNameSpaceSpecifier()
1505 LogExpectedToken(lexer::TokenType::KEYW_AS); // invalid_namespace_import.ets in ParseNameSpaceSpecifier()
1509 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_COMMA || in ParseNameSpaceSpecifier()
1510 Lexer()->GetToken().KeywordType() == lexer::TokenType::KEYW_FROM) { in ParseNameSpaceSpecifier()
1513 specifier->SetRange({namespaceStart, Lexer()->GetToken().End()}); in ParseNameSpaceSpecifier()
1518 ExpectToken(lexer::TokenType::KEYW_AS, true); // eat `as` literal in ParseNameSpaceSpecifier()
1519 local = ParseNamedImport(&Lexer()->GetToken()); in ParseNameSpaceSpecifier()
1523 specifier->SetRange({namespaceStart, Lexer()->GetToken().End()}); in ParseNameSpaceSpecifier()
1526 Lexer()->NextToken(); // eat local name in ParseNameSpaceSpecifier()
1531 if (Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_IDENT) { in ParseImportDefaultSpecifier()
1532 LogExpectedToken(lexer::TokenType::LITERAL_IDENT); in ParseImportDefaultSpecifier()
1535 auto *imported = AllocNode<ir::Identifier>(Lexer()->GetToken().Ident(), Allocator()); in ParseImportDefaultSpecifier()
1537 imported->SetRange(Lexer()->GetToken().Loc()); in ParseImportDefaultSpecifier()
1538 Lexer()->NextToken(); // Eat import specifier. in ParseImportDefaultSpecifier()
1543 if (Lexer()->TryEatTokenType(lexer::TokenType::PUNCTUATOR_COMMA)) { in ParseImportDefaultSpecifier()
1544 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_MULTIPLY) { in ParseImportDefaultSpecifier()
1546 } else if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_BRACE) { in ParseImportDefaultSpecifier()
1553 if (Lexer()->GetToken().KeywordType() != lexer::TokenType::KEYW_FROM) { in ParseImportDefaultSpecifier()
1554 LogExpectedToken(lexer::TokenType::KEYW_FROM); in ParseImportDefaultSpecifier()
1555 Lexer()->NextToken(); // eat 'from' in ParseImportDefaultSpecifier()
1568 if ((Lexer()->GetToken().Flags() & lexer::TokenFlags::HAS_ESCAPE) != 0U) { in CheckModuleAsModifier()
1579 switch (Lexer()->GetToken().Type()) { in GetAnnotatedExpressionFromParam()
1580 case lexer::TokenType::LITERAL_IDENT: { in GetAnnotatedExpressionFromParam()
1581 parameter = AllocNode<ir::Identifier>(Lexer()->GetToken().Ident(), Allocator()); in GetAnnotatedExpressionFromParam()
1584 parameter->SetRange(Lexer()->GetToken().Loc()); in GetAnnotatedExpressionFromParam()
1587 … {parameter->AsIdentifier()->Decorators().front()->Start(), Lexer()->GetToken().End()}); in GetAnnotatedExpressionFromParam()
1592 case lexer::TokenType::PUNCTUATOR_PERIOD_PERIOD_PERIOD: { in GetAnnotatedExpressionFromParam()
1593 const auto startLoc = Lexer()->GetToken().Start(); in GetAnnotatedExpressionFromParam()
1594 Lexer()->NextToken(); in GetAnnotatedExpressionFromParam()
1596 if (Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_IDENT) { in GetAnnotatedExpressionFromParam()
1597 LogExpectedToken(lexer::TokenType::LITERAL_IDENT); in GetAnnotatedExpressionFromParam()
1600 … auto *const restIdent = AllocNode<ir::Identifier>(Lexer()->GetToken().Ident(), Allocator()); in GetAnnotatedExpressionFromParam()
1602 restIdent->SetRange(Lexer()->GetToken().Loc()); in GetAnnotatedExpressionFromParam()
1606 parameter->SetRange({startLoc, Lexer()->GetToken().End()}); in GetAnnotatedExpressionFromParam()
1612 return AllocBrokenExpression(Lexer()->GetToken().Loc()); in GetAnnotatedExpressionFromParam()
1616 Lexer()->NextToken(); in GetAnnotatedExpressionFromParam()
1622 Lexer()->NextToken(); // eat '@' in ParseFunctionParameterAnnotations()
1625 auto savePos = Lexer()->GetToken().Start(); in ParseFunctionParameterAnnotations()
1635 ES2PANDA_ASSERT(Lexer()->GetToken().Type() == lexer::TokenType::KEYW_THIS); in ParseFunctionReceiver()
1636 auto thisLoc = Lexer()->GetToken().Start(); in ParseFunctionReceiver()
1637 Lexer()->NextToken(); // eat 'this'; in ParseFunctionReceiver()
1638 if (!Lexer()->TryEatTokenType(lexer::TokenType::PUNCTUATOR_COLON)) { in ParseFunctionReceiver()
1640 return AllocBrokenExpression(Lexer()->GetToken().Loc()); in ParseFunctionReceiver()
1658 while (Lexer()->GetToken().Type() != lexer::TokenType::EOS && in SkipInvalidType()
1659 … !(Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_COMMA && openBraceCount == 0)) { in SkipInvalidType()
1660 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_BRACE) { in SkipInvalidType()
1663 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_RIGHT_BRACE) { in SkipInvalidType()
1666 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_PARENTHESIS) { in SkipInvalidType()
1669 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_RIGHT_PARENTHESIS) { in SkipInvalidType()
1675 Lexer()->NextToken(); in SkipInvalidType()
1687 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_AT) { in ParseFunctionParameter()
1691 if (Lexer()->GetToken().Type() == lexer::TokenType::KEYW_THIS) { in ParseFunctionParameter()
1698 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_QUESTION_MARK) { in ParseFunctionParameter()
1703 Lexer()->NextToken(); // eat '?' in ParseFunctionParameter()
1708 if (Lexer()->TryEatTokenType(lexer::TokenType::PUNCTUATOR_COLON)) { in ParseFunctionParameter()
1724 paramIdent->SetTsTypeAnnotation(AllocBrokenType(Lexer()->GetToken().Loc())); in ParseFunctionParameter()
1734 paramIdent->SetRange(Lexer()->GetToken().Loc()); in CreateParameterThis()
1751 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_QUESTION_MARK) { in ParseVariableDeclaratorKey()
1755 Lexer()->NextToken(); // eat '?' in ParseVariableDeclaratorKey()
1759 …if (auto const tokenType = Lexer()->GetToken().Type(); tokenType == lexer::TokenType::PUNCTUATOR_C… in ParseVariableDeclaratorKey()
1760 Lexer()->NextToken(); // eat ':' in ParseVariableDeclaratorKey()
1763 …} else if (tokenType != lexer::TokenType::PUNCTUATOR_SUBSTITUTION && (flags & VariableParsingFlags… in ParseVariableDeclaratorKey()
1774 … const lexer::SourcePosition &startLoc) in ParseVariableDeclaratorInitializer()
1780 Lexer()->NextToken(); in ParseVariableDeclaratorInitializer()
1783 lexer::SourcePosition endLoc = initializer->End(); in ParseVariableDeclaratorInitializer()
1791 ir::VariableDeclarator *ETSParser::ParseVariableDeclarator(ir::Expression *init, lexer::SourcePosit… in ParseVariableDeclarator()
1794 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_SUBSTITUTION) { in ParseVariableDeclarator()
1802 lexer::SourcePosition endLoc = init->End(); in ParseVariableDeclarator()
1812 ExpectToken(lexer::TokenType::PUNCTUATOR_LEFT_PARENTHESIS); in ParseCatchParam()
1816 if (Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_IDENT) { in ParseCatchParam()
1819 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_RIGHT_PARENTHESIS) { in ParseCatchParam()
1822 Lexer()->GetToken().SetTokenType(lexer::TokenType::LITERAL_IDENT); in ParseCatchParam()
1823 Lexer()->GetToken().SetTokenStr(ERROR_LITERAL); in ParseCatchParam()
1827 ExpectToken(lexer::TokenType::PUNCTUATOR_RIGHT_PARENTHESIS); in ParseCatchParam()
1835 ExpectToken(lexer::TokenType::PUNCTUATOR_RIGHT_PARENTHESIS); in ParseCatchParam()
1841 if (Lexer()->TryEatTokenType(lexer::TokenType::PUNCTUATOR_COLON)) { in ParseCatchParamTypeAnnotation()
1850 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_SUBSTITUTION) { in ParseCatchParamTypeAnnotation()
1863 char32_t nextChar = Lexer()->Lookahead(); in ParseImportDeclaration()
1864 if (nextChar == lexer::LEX_CHAR_LEFT_PAREN || nextChar == lexer::LEX_CHAR_DOT) { in ParseImportDeclaration()
1868 lexer::SourcePosition startLoc = Lexer()->GetToken().Start(); in ParseImportDeclaration()
1869 Lexer()->NextToken(); // eat import in ParseImportDeclaration()
1874 if (Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_STRING) { in ParseImportDeclaration()
1878 astNode->SetRange({startLoc, Lexer()->GetToken().End()}); in ParseImportDeclaration()
1892 LogUnexpectedToken(lexer::TokenType::KEYW_EXPORT); in ParseExportDeclaration()
1893 return AllocBrokenStatement(Lexer()->GetToken().Loc()); in ParseExportDeclaration()
1896 ir::Expression *ETSParser::ParseExpressionOrTypeAnnotation(lexer::TokenType type, in ParseExpressionOrTypeAnnotation()
1899 if (type == lexer::TokenType::KEYW_INSTANCEOF) { in ParseExpressionOrTypeAnnotation()
1903 if (Lexer()->GetToken().Type() == lexer::TokenType::LITERAL_NULL) { in ParseExpressionOrTypeAnnotation()
1906 typeAnnotation->SetRange(Lexer()->GetToken().Loc()); in ParseExpressionOrTypeAnnotation()
1907 Lexer()->NextToken(); in ParseExpressionOrTypeAnnotation()
1919 … [[maybe_unused]] const lexer::SourcePosition &startLoc, in ParsePotentialGenericFunctionCall()
1922 if (Lexer()->Lookahead() == lexer::LEX_CHAR_LESS_THAN || in ParsePotentialGenericFunctionCall()
1927 const auto savedPos = Lexer()->Save(); in ParsePotentialGenericFunctionCall()
1929 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_SHIFT) { in ParsePotentialGenericFunctionCall()
1930 Lexer()->BackwardToken(lexer::TokenType::PUNCTUATOR_LESS_THAN, 1); in ParsePotentialGenericFunctionCall()
1938 Lexer()->Rewind(savedPos); in ParsePotentialGenericFunctionCall()
1943 …if (!Lexer()->GetToken().NewLine() && Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_L… in ParsePotentialGenericFunctionCall()
1944 LogExpectedToken(lexer::TokenType::PUNCTUATOR_LEFT_PARENTHESIS); in ParsePotentialGenericFunctionCall()
1947 if (Lexer()->GetToken().NewLine()) { in ParsePotentialGenericFunctionCall()
1951 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_PARENTHESIS) { in ParsePotentialGenericFunctionCall()
1961 Lexer()->Rewind(savedPos); in ParsePotentialGenericFunctionCall()
1972 switch (Lexer()->GetToken().KeywordType()) { in ParseTypeVarianceModifier()
1973 case lexer::TokenType::KEYW_IN: { in ParseTypeVarianceModifier()
1974 Lexer()->NextToken(); in ParseTypeVarianceModifier()
1977 case lexer::TokenType::KEYW_OUT: { in ParseTypeVarianceModifier()
1978 Lexer()->NextToken(); in ParseTypeVarianceModifier()
1987 ir::AstNode *ETSParser::ParseAmbientSignature(const lexer::SourcePosition &startPos) in ParseAmbientSignature()
1989 if (Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_IDENT) { in ParseAmbientSignature()
1991 LogUnexpectedToken(Lexer()->GetToken()); in ParseAmbientSignature()
1992 auto pos = Lexer()->Save(); in ParseAmbientSignature()
1993 Lexer()->NextToken(); in ParseAmbientSignature()
1994 while (Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_IDENT) { in ParseAmbientSignature()
1996 Lexer()->Rewind(pos); in ParseAmbientSignature()
1997 Lexer()->NextToken(); in ParseAmbientSignature()
1998 pos = Lexer()->Save(); in ParseAmbientSignature()
2000 if (Lexer()->GetToken().Type() == lexer::TokenType::LITERAL_IDENT) { in ParseAmbientSignature()
2003 Lexer()->GetToken().SetTokenType(lexer::TokenType::LITERAL_IDENT); in ParseAmbientSignature()
2004 Lexer()->GetToken().SetTokenStr(ERROR_LITERAL); in ParseAmbientSignature()
2007 auto const indexName = Lexer()->GetToken().Ident(); in ParseAmbientSignature()
2009 if (Lexer()->NextToken(); Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_COLON) { in ParseAmbientSignature()
2013 Lexer()->GetToken().SetTokenType(lexer::TokenType::PUNCTUATOR_COLON); in ParseAmbientSignature()
2017 if (Lexer()->NextToken(); Lexer()->GetToken().KeywordType() != lexer::TokenType::KEYW_NUMBER) { in ParseAmbientSignature()
2021 Lexer()->GetToken().SetTokenType(lexer::TokenType::KEYW_NUMBER); in ParseAmbientSignature()
2025 …if (Lexer()->NextToken(); Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_RIGHT_SQUARE_… in ParseAmbientSignature()
2029 Lexer()->GetToken().SetTokenType(lexer::TokenType::PUNCTUATOR_RIGHT_SQUARE_BRACKET); in ParseAmbientSignature()
2033 if (Lexer()->NextToken(); Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_COLON) { in ParseAmbientSignature()
2037 Lexer()->GetToken().SetTokenType(lexer::TokenType::PUNCTUATOR_COLON); in ParseAmbientSignature()
2041 if (Lexer()->NextToken(); Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_IDENT) { in ParseAmbientSignature()
2045 Lexer()->GetToken().SetTokenType(lexer::TokenType::LITERAL_IDENT); in ParseAmbientSignature()
2046 Lexer()->GetToken().SetTokenStr(ERROR_LITERAL); in ParseAmbientSignature()
2049 AllocNode<ir::Identifier>(Lexer()->GetToken().Ident(), Allocator()), Allocator()); in ParseAmbientSignature()
2054 dummyNode->SetRange({startPos, Lexer()->GetToken().End()}); in ParseAmbientSignature()
2055 Lexer()->NextToken(); // eat return type in ParseAmbientSignature()
2061 lexer::SourcePosition startLoc = Lexer()->GetToken().Start(); in ParseTypeParameter()
2063 if (Lexer()->TryEatTokenType(lexer::TokenType::PUNCTUATOR_AT)) { in ParseTypeParameter()
2068 switch (Lexer()->GetToken().KeywordType()) { in ParseTypeParameter()
2069 case lexer::TokenType::KEYW_IN: in ParseTypeParameter()
2070 case lexer::TokenType::KEYW_OUT: in ParseTypeParameter()
2077 if (Lexer()->TryEatTokenType(lexer::TokenType::PUNCTUATOR_AT)) { in ParseTypeParameter()
2083 auto saveLoc = Lexer()->GetToken().Start(); in ParseTypeParameter()
2087 if (Lexer()->GetToken().Type() == lexer::TokenType::KEYW_EXTENDS) { in ParseTypeParameter()
2088 Lexer()->NextToken(); in ParseTypeParameter()
2096 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_SUBSTITUTION) { in ParseTypeParameter()
2097 Lexer()->NextToken(); // eat '=' in ParseTypeParameter()
2106 typeParam->SetRange({startLoc, Lexer()->GetToken().End()}); in ParseTypeParameter()
2117 return (Lexer()->GetToken().Type() == lexer::TokenType::LITERAL_IDENT && in IsStructKeyword()
2118 Lexer()->GetToken().KeywordType() == lexer::TokenType::KEYW_STRUCT); in IsStructKeyword()
2123 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_BRACE) { in ParseTrailingBlock()
2125 callExpr->SetIsTrailingBlockInNewLine(Lexer()->GetToken().NewLine()); in ParseTrailingBlock()
2132 ES2PANDA_ASSERT(Lexer()->GetToken().KeywordType() == lexer::TokenType::KEYW_DECLARE); in CheckDeclare()
2140 Lexer()->NextToken(); // eat 'declare' in CheckDeclare()
2142 switch (Lexer()->GetToken().KeywordType()) { in CheckDeclare()
2143 case lexer::TokenType::KEYW_LET: in CheckDeclare()
2144 case lexer::TokenType::KEYW_CONST: in CheckDeclare()
2145 case lexer::TokenType::KEYW_FUNCTION: in CheckDeclare()
2146 case lexer::TokenType::KEYW_CLASS: in CheckDeclare()
2147 case lexer::TokenType::KEYW_NAMESPACE: in CheckDeclare()
2148 case lexer::TokenType::KEYW_ENUM: in CheckDeclare()
2149 case lexer::TokenType::KEYW_ABSTRACT: in CheckDeclare()
2150 case lexer::TokenType::KEYW_FINAL: in CheckDeclare()
2151 case lexer::TokenType::KEYW_INTERFACE: in CheckDeclare()
2152 case lexer::TokenType::KEYW_TYPE: in CheckDeclare()
2153 case lexer::TokenType::KEYW_ASYNC: in CheckDeclare()
2154 case lexer::TokenType::KEYW_STRUCT: { in CheckDeclare()
2158 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_AT) { in CheckDeclare()
2161 LogUnexpectedToken(Lexer()->GetToken()); in CheckDeclare()
2168 lexer::SourcePosition startLoc = Lexer()->GetToken().Start(); in ParseFunctionDeclaration()
2170 ES2PANDA_ASSERT(Lexer()->GetToken().Type() == lexer::TokenType::KEYW_FUNCTION); in ParseFunctionDeclaration()
2171 Lexer()->NextToken(); in ParseFunctionDeclaration()
2178 if (Lexer()->TryEatTokenType(lexer::TokenType::PUNCTUATOR_MULTIPLY)) { in ParseFunctionDeclaration()
2184 if (Lexer()->GetToken().Type() == lexer::TokenType::LITERAL_IDENT) { in ParseFunctionDeclaration()
2189 funcIdentNode = AllocBrokenExpression(Lexer()->GetToken().Loc()); in ParseFunctionDeclaration()
2204 … if (func->IsOverload() && Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_SEMI_COLON) { in ParseFunctionDeclaration()
2205 Lexer()->NextToken(); in ParseFunctionDeclaration()
2217 ES2PANDA_ASSERT(Lexer()->GetToken().KeywordType() == lexer::TokenType::KEYW_GET || in ParseAccessorWithReceiver()
2218 Lexer()->GetToken().KeywordType() == lexer::TokenType::KEYW_SET); in ParseAccessorWithReceiver()
2220 bool isGetter = Lexer()->GetToken().KeywordType() == lexer::TokenType::KEYW_GET; in ParseAccessorWithReceiver()
2221 lexer::SourcePosition startLoc = Lexer()->GetToken().Start(); in ParseAccessorWithReceiver()
2223 Lexer()->NextToken(); in ParseAccessorWithReceiver()
2265 Lexer()->GetToken().Start()); in AddPackageSourcesToParseList()
2278 savedLexer_(parser_->Lexer()), in ExternalSourceParser()
2299 savedLexer_(parser_->Lexer()), in InnerSourceParser()