Lines Matching full:lexer
28 #include "lexer/lexer.h"
29 #include "lexer/ETSLexer.h"
107 static bool IsClassModifier(lexer::TokenType type) in IsClassModifier()
109 return type == lexer::TokenType::KEYW_STATIC || type == lexer::TokenType::KEYW_ABSTRACT || in IsClassModifier()
110 type == lexer::TokenType::KEYW_FINAL; in IsClassModifier()
117 while (IsClassModifier(Lexer()->GetToken().KeywordType())) { in ParseClassModifiers()
120 lexer::TokenFlags tokenFlags = Lexer()->GetToken().Flags(); in ParseClassModifiers()
121 if ((tokenFlags & lexer::TokenFlags::HAS_ESCAPE) != 0) { in ParseClassModifiers()
122 LogSyntaxError("Keyword must not contain escaped characters"); // Lexer will do it. in ParseClassModifiers()
125 switch (Lexer()->GetToken().KeywordType()) { in ParseClassModifiers()
126 case lexer::TokenType::KEYW_STATIC: { in ParseClassModifiers()
130 case lexer::TokenType::KEYW_FINAL: { in ParseClassModifiers()
134 case lexer::TokenType::KEYW_ABSTRACT: { in ParseClassModifiers()
147 Lexer()->NextToken(); in ParseClassModifiers()
164 if (Lexer()->GetToken().Type() == lexer::TokenType::KEYW_EXTENDS) { in ParseSuperClassReference()
165 Lexer()->NextToken(); in ParseSuperClassReference()
184 static bool IsClassMemberAccessModifier(lexer::TokenType type) in IsClassMemberAccessModifier()
186 return type == lexer::TokenType::KEYW_PUBLIC || type == lexer::TokenType::KEYW_PRIVATE || in IsClassMemberAccessModifier()
187 type == lexer::TokenType::KEYW_PROTECTED || type == lexer::TokenType::KEYW_INTERNAL; in IsClassMemberAccessModifier()
192 if (!IsClassMemberAccessModifier(Lexer()->GetToken().Type())) { in ParseClassMemberAccessModifiers()
196 char32_t nextCp = Lexer()->Lookahead(); in ParseClassMemberAccessModifiers()
197 if (!(nextCp != lexer::LEX_CHAR_EQUALS && nextCp != lexer::LEX_CHAR_COLON && in ParseClassMemberAccessModifiers()
198 nextCp != lexer::LEX_CHAR_LEFT_PAREN)) { in ParseClassMemberAccessModifiers()
202 lexer::TokenFlags tokenFlags = Lexer()->GetToken().Flags(); in ParseClassMemberAccessModifiers()
203 if ((tokenFlags & lexer::TokenFlags::HAS_ESCAPE) != 0) { in ParseClassMemberAccessModifiers()
204 LogSyntaxError("Keyword must not contain escaped characters"); // Lexer will do it. in ParseClassMemberAccessModifiers()
209 switch (Lexer()->GetToken().KeywordType()) { in ParseClassMemberAccessModifiers()
210 case lexer::TokenType::KEYW_PUBLIC: { in ParseClassMemberAccessModifiers()
214 case lexer::TokenType::KEYW_PRIVATE: { in ParseClassMemberAccessModifiers()
218 case lexer::TokenType::KEYW_PROTECTED: { in ParseClassMemberAccessModifiers()
222 case lexer::TokenType::KEYW_INTERNAL: { in ParseClassMemberAccessModifiers()
223 Lexer()->NextToken(lexer::NextTokenFlags::KEYWORD_TO_IDENT); in ParseClassMemberAccessModifiers()
224 if (Lexer()->GetToken().KeywordType() != lexer::TokenType::KEYW_PROTECTED) { in ParseClassMemberAccessModifiers()
238 …LogSyntaxError("Local class declaration members can not have access modifies", Lexer()->GetToken()… in ParseClassMemberAccessModifiers()
241 Lexer()->NextToken(lexer::NextTokenFlags::KEYWORD_TO_IDENT); in ParseClassMemberAccessModifiers()
245 static bool IsClassFieldModifier(lexer::TokenType type) in IsClassFieldModifier()
247 return type == lexer::TokenType::KEYW_STATIC || type == lexer::TokenType::KEYW_READONLY; in IsClassFieldModifier()
254 while (IsClassFieldModifier(Lexer()->GetToken().KeywordType())) { in ParseClassFieldModifiers()
255 char32_t nextCp = Lexer()->Lookahead(); in ParseClassFieldModifiers()
256 if (!(nextCp != lexer::LEX_CHAR_EQUALS && nextCp != lexer::LEX_CHAR_COLON)) { in ParseClassFieldModifiers()
262 lexer::TokenFlags tokenFlags = Lexer()->GetToken().Flags(); in ParseClassFieldModifiers()
263 if ((tokenFlags & lexer::TokenFlags::HAS_ESCAPE) != 0) { in ParseClassFieldModifiers()
264 LogSyntaxError("Keyword must not contain escaped characters"); // Lexer will do it. in ParseClassFieldModifiers()
267 switch (Lexer()->GetToken().KeywordType()) { in ParseClassFieldModifiers()
268 case lexer::TokenType::KEYW_STATIC: { in ParseClassFieldModifiers()
272 case lexer::TokenType::KEYW_READONLY: { in ParseClassFieldModifiers()
285 Lexer()->NextToken(lexer::NextTokenFlags::KEYWORD_TO_IDENT); in ParseClassFieldModifiers()
292 bool ETSParser::IsClassMethodModifier(lexer::TokenType type) noexcept in IsClassMethodModifier()
295 case lexer::TokenType::KEYW_STATIC: in IsClassMethodModifier()
296 case lexer::TokenType::KEYW_FINAL: in IsClassMethodModifier()
297 case lexer::TokenType::KEYW_NATIVE: in IsClassMethodModifier()
298 case lexer::TokenType::KEYW_ASYNC: in IsClassMethodModifier()
299 case lexer::TokenType::KEYW_OVERRIDE: in IsClassMethodModifier()
300 case lexer::TokenType::KEYW_ABSTRACT: { in IsClassMethodModifier()
316 switch (Lexer()->GetToken().KeywordType()) { in ParseClassMethodModifierFlag()
317 case lexer::TokenType::KEYW_STATIC: { in ParseClassMethodModifierFlag()
321 case lexer::TokenType::KEYW_FINAL: { in ParseClassMethodModifierFlag()
325 case lexer::TokenType::KEYW_NATIVE: { in ParseClassMethodModifierFlag()
329 case lexer::TokenType::KEYW_ASYNC: { in ParseClassMethodModifierFlag()
333 case lexer::TokenType::KEYW_OVERRIDE: { in ParseClassMethodModifierFlag()
337 case lexer::TokenType::KEYW_ABSTRACT: { in ParseClassMethodModifierFlag()
341 case lexer::TokenType::KEYW_DECLARE: { in ParseClassMethodModifierFlag()
357 while (IsClassMethodModifier(Lexer()->GetToken().KeywordType())) { in ParseClassMethodModifiers()
358 char32_t nextCp = Lexer()->Lookahead(); in ParseClassMethodModifiers()
359 if (!(nextCp != lexer::LEX_CHAR_LEFT_PAREN)) { in ParseClassMethodModifiers()
365 lexer::TokenFlags tokenFlags = Lexer()->GetToken().Flags(); in ParseClassMethodModifiers()
366 if ((tokenFlags & lexer::TokenFlags::HAS_ESCAPE) != 0) { in ParseClassMethodModifiers()
367 LogSyntaxError("Keyword must not contain escaped characters"); // Lexer will do it. in ParseClassMethodModifiers()
375 Lexer()->NextToken(lexer::NextTokenFlags::KEYWORD_TO_IDENT); in ParseClassMethodModifiers()
393 lexer::SourcePosition endLoc = fieldName->End(); in ParseClassFieldDefinition()
398 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_QUESTION_MARK) { in ParseClassFieldDefinition()
399 Lexer()->NextToken(); // eat '?' in ParseClassFieldDefinition()
402 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_COLON) { in ParseClassFieldDefinition()
403 Lexer()->NextToken(); // eat ':' in ParseClassFieldDefinition()
409 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_SUBSTITUTION) { in ParseClassFieldDefinition()
410 Lexer()->NextToken(); // eat '=' in ParseClassFieldDefinition()
430 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_COMMA) { in ParseClassFieldDefinition()
431 Lexer()->NextToken(); in ParseClassFieldDefinition()
484 … ir::Expression *propName, lexer::SourcePosition *propEnd) in ParseClassMethod()
521 char32_t nextCp = Lexer()->Lookahead(); in UpdateMemberModifiers()
522 …if (Lexer()->GetToken().KeywordType() == lexer::TokenType::KEYW_STATIC && nextCp != lexer::LEX_CHA… in UpdateMemberModifiers()
523 nextCp != lexer::LEX_CHAR_COLON && nextCp != lexer::LEX_CHAR_LEFT_PAREN && in UpdateMemberModifiers()
524 nextCp != lexer::LEX_CHAR_LESS_THAN) { in UpdateMemberModifiers()
525 Lexer()->NextToken(); in UpdateMemberModifiers()
532 if (IsClassFieldModifier(Lexer()->GetToken().KeywordType())) { in UpdateMemberModifiers()
534 } else if (IsClassMethodModifier(Lexer()->GetToken().Type())) { in UpdateMemberModifiers()
540 lexer::SourcePosition pos) in ApplyAnnotationsToNode()
564 auto startLoc = Lexer()->GetToken().Start(); in ParseClassElement()
567 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_AT) { in ParseClassElement()
568 Lexer()->NextToken(); in ParseClassElement()
574 Lexer()->GetToken().Type() == lexer::TokenType::KEYW_EXPORT) { in ParseClassElement()
575 Lexer()->NextToken(); // eat exported in ParseClassElement()
578 auto savedPos = Lexer()->Save(); // NOLINT(clang-analyzer-deadcode.DeadStores) in ParseClassElement()
580 if (Lexer()->GetToken().KeywordType() == lexer::TokenType::KEYW_STATIC && in ParseClassElement()
581 Lexer()->Lookahead() == lexer::LEX_CHAR_LEFT_BRACE) { in ParseClassElement()
592 …LogSyntaxError("Annotations cannot be applied to an abstract class or method.", Lexer()->GetToken(… in ParseClassElement()
595 auto savePos = Lexer()->GetToken().Start(); in ParseClassElement()
596 switch (Lexer()->GetToken().Type()) { in ParseClassElement()
597 case lexer::TokenType::KEYW_INTERFACE: in ParseClassElement()
598 case lexer::TokenType::KEYW_CLASS: in ParseClassElement()
599 case lexer::TokenType::KEYW_ENUM: in ParseClassElement()
601 case lexer::TokenType::KEYW_CONSTRUCTOR: in ParseClassElement()
603 case lexer::TokenType::KEYW_NAMESPACE: in ParseClassElement()
605 case lexer::TokenType::KEYW_PUBLIC: in ParseClassElement()
606 case lexer::TokenType::KEYW_PRIVATE: in ParseClassElement()
607 case lexer::TokenType::KEYW_PROTECTED: { in ParseClassElement()
609 Lexer()->NextToken(); in ParseClassElement()
625 …desc.methodKind = Lexer()->GetToken().KeywordType() == lexer::TokenType::KEYW_GET ? ir::MethodDefi… in ParseClassGetterSetterMethod()
627 Lexer()->NextToken(); // eat get/set in ParseClassGetterSetterMethod()
628 auto *methodName = AllocNode<ir::Identifier>(Lexer()->GetToken().Ident(), Allocator()); in ParseClassGetterSetterMethod()
635 Lexer()->NextToken(lexer::NextTokenFlags::KEYWORD_TO_IDENT); in ParseClassGetterSetterMethod()
639 desc.propStart = Lexer()->GetToken().Start(); in ParseClassGetterSetterMethod()
642 lexer::SourcePosition propEnd = methodName->End(); in ParseClassGetterSetterMethod()
657 …auto methodKind = Lexer()->GetToken().KeywordType() == lexer::TokenType::KEYW_GET ? ir::MethodDefi… in ParseInterfaceGetterSetterMethod()
659 Lexer()->NextToken(); // eat get/set in ParseInterfaceGetterSetterMethod()
660 ExpectToken(lexer::TokenType::LITERAL_IDENT, false); in ParseInterfaceGetterSetterMethod()
663 method->SetRange({Lexer()->GetToken().Start(), method->Id()->End()}); in ParseInterfaceGetterSetterMethod()
684 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LESS_THAN) { in ParseInterfaceBody()
691 if (Lexer()->GetToken().Type() == lexer::TokenType::KEYW_EXTENDS) { in ParseInterfaceBody()
695 lexer::SourcePosition bodyStart = Lexer()->GetToken().Start(); in ParseInterfaceBody()
709 body->SetRange({bodyStart, Lexer()->GetToken().End()}); in ParseInterfaceBody()
717 Lexer()->NextToken(); in ParseInterfaceBody()
725 lexer::SourcePosition interfaceStart = Lexer()->GetToken().Start(); in ParseInterfaceDeclaration()
726 Lexer()->NextToken(); // eat interface keyword in ParseInterfaceDeclaration()
732 declNode->SetRange({interfaceStart, Lexer()->GetToken().End()}); in ParseInterfaceDeclaration()
739 Lexer()->NextToken(); in ParseClassDefinition()
742 …if (identNode == nullptr && Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_LEFT_BRACE)… in ParseClassDefinition()
743 Lexer()->NextToken(); // Error processing. in ParseClassDefinition()
747 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LESS_THAN) { in ParseClassDefinition()
767 if (Lexer()->GetToken().KeywordType() == lexer::TokenType::KEYW_IMPLEMENTS) { in ParseClassDefinition()
768 Lexer()->NextToken(); in ParseClassDefinition()
774 lexer::SourceRange bodyRange; in ParseClassDefinition()
777 Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_LEFT_BRACE) { in ParseClassDefinition()
779 bodyRange = lexer::SourceRange {Lexer()->GetToken().Start(), Lexer()->GetToken().Start()}; in ParseClassDefinition()
781 ExpectToken(lexer::TokenType::PUNCTUATOR_LEFT_BRACE, false); in ParseClassDefinition()
800 if (Lexer()->GetToken().Type() == lexer::TokenType::LITERAL_IDENT) { in ParseInterfaceMethodModifiers()
805 if (Lexer()->GetToken().Type() == lexer::TokenType::KEYW_PRIVATE) { in ParseInterfaceMethodModifiers()
807 Lexer()->GetToken().Start()); in ParseInterfaceMethodModifiers()
811 if (Lexer()->GetToken().KeywordType() != lexer::TokenType::KEYW_PRIVATE) { in ParseInterfaceMethodModifiers()
815 Lexer()->NextToken(); in ParseInterfaceMethodModifiers()
821 ASSERT(Lexer()->GetToken().Type() == lexer::TokenType::LITERAL_IDENT); in ParseInterfaceField()
822 auto *name = AllocNode<ir::Identifier>(Lexer()->GetToken().Ident(), Allocator()); in ParseInterfaceField()
823 name->SetRange(Lexer()->GetToken().Loc()); in ParseInterfaceField()
824 Lexer()->NextToken(); in ParseInterfaceField()
827 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_QUESTION_MARK) { in ParseInterfaceField()
828 Lexer()->NextToken(); // eat '?' in ParseInterfaceField()
833 if (!Lexer()->TryEatTokenType(lexer::TokenType::PUNCTUATOR_COLON)) { in ParseInterfaceField()
837 Lexer()->GetToken().SetTokenType(lexer::TokenType::PUNCTUATOR_COLON); in ParseInterfaceField()
838 Lexer()->NextToken(); // additional check in ParseInterfaceField()
849 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_EQUAL) { in ParseInterfaceField()
851 Lexer()->NextToken(); // Error processing: eat '='. in ParseInterfaceField()
865 field->SetEnd(Lexer()->GetToken().End()); in ParseInterfaceField()
870 static lexer::SourcePosition GetEndLoc(ir::BlockStatement *body, ir::ScriptFunction *func, lexer::L… in GetEndLoc() argument
884 return lexer->GetToken().End(); in GetEndLoc()
889 if (Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_IDENT) { in ParseInterfaceMethod()
890 …LogSyntaxError({"Expected method name, got '", lexer::TokenToString(Lexer()->GetToken().Type()), "… in ParseInterfaceMethod()
894 auto *name = AllocNode<ir::Identifier>(Lexer()->GetToken().Ident(), Allocator()); in ParseInterfaceMethod()
895 name->SetRange(Lexer()->GetToken().Loc()); in ParseInterfaceMethod()
896 Lexer()->NextToken(); in ParseInterfaceMethod()
900 lexer::SourcePosition startLoc = Lexer()->GetToken().Start(); in ParseInterfaceMethod()
911 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_BRACE) { in ParseInterfaceMethod()
935 func->SetRange({startLoc, GetEndLoc(body, func, Lexer())}); in ParseInterfaceMethod()
953 auto startLoc = Lexer()->GetToken().Start(); in ParseTypeLiteralOrInterfaceMember()
955 …if (Lexer()->Lookahead() != lexer::LEX_CHAR_LEFT_PAREN && Lexer()->Lookahead() != lexer::LEX_CHAR_… in ParseTypeLiteralOrInterfaceMember()
956 (Lexer()->GetToken().KeywordType() == lexer::TokenType::KEYW_GET || in ParseTypeLiteralOrInterfaceMember()
957 Lexer()->GetToken().KeywordType() == lexer::TokenType::KEYW_SET)) { in ParseTypeLiteralOrInterfaceMember()
961 if (Lexer()->TryEatTokenKeyword(lexer::TokenType::KEYW_READONLY)) { in ParseTypeLiteralOrInterfaceMember()
962 char32_t nextCp = Lexer()->Lookahead(); in ParseTypeLiteralOrInterfaceMember()
963 if (nextCp == lexer::LEX_CHAR_LEFT_PAREN || nextCp == lexer::LEX_CHAR_LESS_THAN) { in ParseTypeLiteralOrInterfaceMember()
974 if (Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_IDENT) { in ParseTypeLiteralOrInterfaceMember()
979 char32_t nextCp = Lexer()->Lookahead(); in ParseTypeLiteralOrInterfaceMember()
980 if (nextCp == lexer::LEX_CHAR_LEFT_PAREN || nextCp == lexer::LEX_CHAR_LESS_THAN) { in ParseTypeLiteralOrInterfaceMember()
1027 void ETSParser::CheckPredefinedMethods(ir::ScriptFunction const *function, const lexer::SourcePosit… in CheckPredefinedMethods()
1077 … ir::ModifierFlags flags, const lexer::SourcePosition &startLoc) in CreateImplicitConstructor()
1096 std::pair<ir::ModifierFlags, lexer::SourcePosition> ETSParser::ParseMemberModifiers() in ParseMemberModifiers()
1100 if (Lexer()->TryEatTokenType(lexer::TokenType::KEYW_EXPORT)) { in ParseMemberModifiers()
1101 const auto savedPos = Lexer()->Save(); in ParseMemberModifiers()
1102 if (Lexer()->TryEatTokenKeyword(lexer::TokenType::KEYW_DEFAULT)) { in ParseMemberModifiers()
1104 } else if (Lexer()->TryEatTokenKeyword(lexer::TokenType::KEYW_TYPE)) { in ParseMemberModifiers()
1105 if (Lexer()->GetToken().Type() == lexer::TokenType::LITERAL_IDENT) { in ParseMemberModifiers()
1106 Lexer()->Rewind(savedPos); in ParseMemberModifiers()
1114 lexer::SourcePosition startLoc = Lexer()->GetToken().Start(); in ParseMemberModifiers()
1116 if (Lexer()->GetToken().KeywordType() == lexer::TokenType::KEYW_DECLARE) { in ParseMemberModifiers()
1120 const auto tokenType = Lexer()->GetToken().KeywordType(); in ParseMemberModifiers()
1121 if (tokenType == lexer::TokenType::KEYW_ASYNC || tokenType == lexer::TokenType::KEYW_NATIVE) { in ParseMemberModifiers()
1122 bool isAsync = tokenType == lexer::TokenType::KEYW_ASYNC; in ParseMemberModifiers()
1129 Lexer()->NextToken(); in ParseMemberModifiers()
1131 if (Lexer()->GetToken().Type() != lexer::TokenType::KEYW_FUNCTION) { in ParseMemberModifiers()
1135 Lexer()->GetToken().SetTokenType(lexer::TokenType::KEYW_FUNCTION); in ParseMemberModifiers()