Lines Matching full:lexer
24 #include "lexer/ASLexer.h"
81 std::unique_ptr<lexer::Lexer> ASParser::InitLexer(const SourceFile &sourceFile) in InitLexer()
84 auto lexer = std::make_unique<lexer::ASLexer>(&GetContext(), DiagnosticEngine()); in InitLexer() local
85 SetLexer(lexer.get()); in InitLexer()
86 return lexer; in InitLexer()
91 ES2PANDA_ASSERT(Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_AT); in ParseDecorator()
93 lexer::SourcePosition start = Lexer()->GetToken().Start(); in ParseDecorator()
94 Lexer()->NextToken(); // eat '@' in ParseDecorator()
118 ES2PANDA_ASSERT(Lexer()->GetToken().KeywordType() == lexer::TokenType::KEYW_TYPE); in ParseTypeAliasDeclaration()
119 lexer::SourcePosition typeStart = Lexer()->GetToken().Start(); in ParseTypeAliasDeclaration()
120 Lexer()->NextToken(); // eat type keyword in ParseTypeAliasDeclaration()
121 if (Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_IDENT) { in ParseTypeAliasDeclaration()
125 const util::StringView &ident = Lexer()->GetToken().Ident(); in ParseTypeAliasDeclaration()
129 id->SetRange(Lexer()->GetToken().Loc()); in ParseTypeAliasDeclaration()
130 Lexer()->NextToken(); in ParseTypeAliasDeclaration()
133 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LESS_THAN) { in ParseTypeAliasDeclaration()
138 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_SUBSTITUTION) { in ParseTypeAliasDeclaration()
142 Lexer()->NextToken(); // eat '=' in ParseTypeAliasDeclaration()
144 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_BITWISE_OR) { in ParseTypeAliasDeclaration()
145 Lexer()->NextToken(); // eat '|' in ParseTypeAliasDeclaration()
152 typeAliasDecl->SetRange({typeStart, Lexer()->GetToken().End()}); in ParseTypeAliasDeclaration()
167 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_QUESTION_MARK) { in ParseOptionalFunctionParameter()
176 Lexer()->NextToken(); // eat '?' in ParseOptionalFunctionParameter()
179 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_COLON) { in ParseOptionalFunctionParameter()
180 Lexer()->NextToken(); // eat ':' in ParseOptionalFunctionParameter()
187 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_SUBSTITUTION) { in ParseOptionalFunctionParameter()
285 … return ArrowFunctionDescriptor {std::move(params), Lexer()->GetToken().Start(), arrowStatus}; in ConvertToArrowParameter()
337 switch (Lexer()->GetToken().Type()) { in ParsePatternElementToken()
338 case lexer::TokenType::PUNCTUATOR_PERIOD_PERIOD_PERIOD: { in ParsePatternElementToken()
346 case lexer::TokenType::LITERAL_IDENT: { in ParsePatternElementToken()
347 returnNode = AllocNode<ir::Identifier>(Lexer()->GetToken().Ident(), Allocator()); in ParsePatternElementToken()
349 returnNode->SetRange(Lexer()->GetToken().Loc()); in ParsePatternElementToken()
350 Lexer()->NextToken(); in ParsePatternElementToken()
352 … bool questionMark = Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_QUESTION_MARK; in ParsePatternElementToken()
361 Lexer()->NextToken(); in ParsePatternElementToken()
364 if (!isOptional && Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_COLON) { in ParsePatternElementToken()
366 } else if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_COLON) { in ParsePatternElementToken()
367 Lexer()->NextToken(); // eat ':' in ParsePatternElementToken()
387 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_SUBSTITUTION) { in ParsePatternElement()
403 Lexer()->NextToken(); in ParsePatternElement()
406 Lexer()->GetToken().Type() == lexer::TokenType::KEYW_YIELD) { in ParsePatternElement()
413 …ir::AstNodeType::ASSIGNMENT_PATTERN, returnNode, rightNode, lexer::TokenType::PUNCTUATOR_SUBSTITUT… in ParsePatternElement()
422 Lexer()->NextToken(lexer::NextTokenFlags::KEYWORD_TO_IDENT); in ParsePropertyDefinition()
426 if (Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_IDENT) { in ParsePropertyDefinition()
427 if (Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_STRING) { in ParsePropertyDefinition()
431 key = AllocNode<ir::StringLiteral>(Lexer()->GetToken().String()); in ParsePropertyDefinition()
433 key = AllocNode<ir::Identifier>(Lexer()->GetToken().Ident(), Allocator()); in ParsePropertyDefinition()
437 key->SetRange(Lexer()->GetToken().Loc()); in ParsePropertyDefinition()
439 Lexer()->NextToken(); in ParsePropertyDefinition()
443 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_COLON) { in ParsePropertyDefinition()
444 Lexer()->NextToken(); in ParsePropertyDefinition()
460 switch (Lexer()->GetToken().Type()) { in CurrentIsBasicType()
461 case lexer::TokenType::LITERAL_STRING: in CurrentIsBasicType()
462 case lexer::TokenType::LITERAL_FALSE: in CurrentIsBasicType()
463 case lexer::TokenType::LITERAL_TRUE: in CurrentIsBasicType()
464 case lexer::TokenType::LITERAL_NULL: in CurrentIsBasicType()
465 case lexer::TokenType::KEYW_VOID: { in CurrentIsBasicType()
468 case lexer::TokenType::LITERAL_IDENT: { in CurrentIsBasicType()
469 switch (Lexer()->GetToken().KeywordType()) { in CurrentIsBasicType()
470 case lexer::TokenType::KEYW_I8: in CurrentIsBasicType()
471 case lexer::TokenType::KEYW_I16: in CurrentIsBasicType()
472 case lexer::TokenType::KEYW_I32: in CurrentIsBasicType()
473 case lexer::TokenType::KEYW_I64: in CurrentIsBasicType()
474 case lexer::TokenType::KEYW_ISIZE: in CurrentIsBasicType()
475 case lexer::TokenType::KEYW_U8: in CurrentIsBasicType()
476 case lexer::TokenType::KEYW_U16: in CurrentIsBasicType()
477 case lexer::TokenType::KEYW_U32: in CurrentIsBasicType()
478 case lexer::TokenType::KEYW_U64: in CurrentIsBasicType()
479 case lexer::TokenType::KEYW_USIZE: in CurrentIsBasicType()
480 case lexer::TokenType::KEYW_F32: in CurrentIsBasicType()
481 case lexer::TokenType::KEYW_F64: in CurrentIsBasicType()
482 case lexer::TokenType::KEYW_V128: in CurrentIsBasicType()
483 case lexer::TokenType::KEYW_FUNCREF: in CurrentIsBasicType()
484 case lexer::TokenType::KEYW_EXTERNREF: in CurrentIsBasicType()
485 case lexer::TokenType::KEYW_ANYREF: in CurrentIsBasicType()
486 case lexer::TokenType::KEYW_EQREF: in CurrentIsBasicType()
487 case lexer::TokenType::KEYW_I31REF: in CurrentIsBasicType()
488 case lexer::TokenType::KEYW_DATAREF: { in CurrentIsBasicType()
505 ir::TypeNode *ASParser::ParseFunctionType(lexer::SourcePosition startLoc) in ParseFunctionType()
509 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_ARROW) { in ParseFunctionType()
513 Lexer()->NextToken(); // eat '=>' in ParseFunctionType()
529 lexer::SourcePosition typeStart = Lexer()->GetToken().Start(); in ParseParenthesizedOrFunctionType()
530 const auto startPos = Lexer()->Save(); in ParseParenthesizedOrFunctionType()
531 ES2PANDA_ASSERT(Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_PARENTHESIS); in ParseParenthesizedOrFunctionType()
532 Lexer()->NextToken(); // eat '(' in ParseParenthesizedOrFunctionType()
538 Lexer()->Rewind(startPos); in ParseParenthesizedOrFunctionType()
540 if (Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_IDENT) { in ParseParenthesizedOrFunctionType()
551 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_COMMA || in ParseParenthesizedOrFunctionType()
552 Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_QUESTION_MARK || in ParseParenthesizedOrFunctionType()
553 Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_COLON) { in ParseParenthesizedOrFunctionType()
554 Lexer()->Rewind(startPos); in ParseParenthesizedOrFunctionType()
558 … if (throwError && Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_RIGHT_PARENTHESIS) { in ParseParenthesizedOrFunctionType()
562 lexer::SourcePosition endLoc = Lexer()->GetToken().End(); in ParseParenthesizedOrFunctionType()
563 Lexer()->NextToken(); // eat ')' in ParseParenthesizedOrFunctionType()
565 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_ARROW) { in ParseParenthesizedOrFunctionType()
566 Lexer()->Rewind(startPos); in ParseParenthesizedOrFunctionType()
577 auto *typeName = AllocNode<ir::Identifier>(Lexer()->GetToken().Ident(), Allocator()); in ParseTypeAnnotationLiteralIdentHelper()
579 typeName->SetRange(Lexer()->GetToken().Loc()); in ParseTypeAnnotationLiteralIdentHelper()
582 type->SetRange(Lexer()->GetToken().Loc()); in ParseTypeAnnotationLiteralIdentHelper()
583 Lexer()->NextToken(); in ParseTypeAnnotationLiteralIdentHelper()
586 while (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_PERIOD) { in ParseTypeAnnotationLiteralIdentHelper()
587 Lexer()->NextToken(); in ParseTypeAnnotationLiteralIdentHelper()
589 if (Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_IDENT) { in ParseTypeAnnotationLiteralIdentHelper()
593 typeName = AllocNode<ir::Identifier>(Lexer()->GetToken().Ident(), Allocator()); in ParseTypeAnnotationLiteralIdentHelper()
595 typeName->SetRange(Lexer()->GetToken().Loc()); in ParseTypeAnnotationLiteralIdentHelper()
597 current->SetRange(Lexer()->GetToken().Loc()); in ParseTypeAnnotationLiteralIdentHelper()
600 Lexer()->NextToken(); in ParseTypeAnnotationLiteralIdentHelper()
604 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LESS_THAN) { in ParseTypeAnnotationLiteralIdentHelper()
619 switch (Lexer()->GetToken().Type()) { in ParseTypeAnnotationTokens()
620 case lexer::TokenType::PUNCTUATOR_LEFT_PARENTHESIS: { in ParseTypeAnnotationTokens()
623 case lexer::TokenType::KEYW_VOID: { in ParseTypeAnnotationTokens()
627 case lexer::TokenType::KEYW_THIS: { in ParseTypeAnnotationTokens()
631 case lexer::TokenType::LITERAL_FALSE: in ParseTypeAnnotationTokens()
632 case lexer::TokenType::LITERAL_TRUE: { in ParseTypeAnnotationTokens()
636 case lexer::TokenType::LITERAL_NULL: { in ParseTypeAnnotationTokens()
640 case lexer::TokenType::LITERAL_STRING: { in ParseTypeAnnotationTokens()
644 case lexer::TokenType::LITERAL_IDENT: { in ParseTypeAnnotationTokens()
658 typeName->SetRange(Lexer()->GetToken().Loc()); in ParseTypeAnnotationTokens()
661 type->SetRange(Lexer()->GetToken().Loc()); in ParseTypeAnnotationTokens()
662 Lexer()->NextToken(); in ParseTypeAnnotationTokens()
668 while (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_BITWISE_OR) { in ParseTypeAnnotationTokensBitwiseOr()
669 Lexer()->NextToken(); in ParseTypeAnnotationTokensBitwiseOr()
671 if (Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_NULL) { in ParseTypeAnnotationTokensBitwiseOr()
689 type->SetEnd(Lexer()->GetToken().End()); in ParseTypeAnnotationTokensBitwiseOr()
690 Lexer()->NextToken(); in ParseTypeAnnotationTokensBitwiseOr()
697 while (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_SQUARE_BRACKET) { in ParseTypeAnnotationTokenLeftSquareBracket()
698 Lexer()->NextToken(); in ParseTypeAnnotationTokenLeftSquareBracket()
700 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_RIGHT_SQUARE_BRACKET) { in ParseTypeAnnotationTokenLeftSquareBracket()
708 Lexer()->NextToken(); in ParseTypeAnnotationTokenLeftSquareBracket()
712 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_BITWISE_OR) { in ParseTypeAnnotationTokenLeftSquareBracket()
713 Lexer()->NextToken(); in ParseTypeAnnotationTokenLeftSquareBracket()
715 bool isLiteralNull = Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_NULL; in ParseTypeAnnotationTokenLeftSquareBracket()
726 const lexer::SourcePosition &startPos = type->Start(); in ParseTypeAnnotationTokenLeftSquareBracket()
731 typeName->SetRange(Lexer()->GetToken().Loc()); in ParseTypeAnnotationTokenLeftSquareBracket()
740 type->SetRange({startPos, Lexer()->GetToken().End()}); in ParseTypeAnnotationTokenLeftSquareBracket()
743 Lexer()->NextToken(); in ParseTypeAnnotationTokenLeftSquareBracket()
770 …[[maybe_unused]] ir::Expression **returnExpression, [[maybe_unused]] const lexer::SourcePosition &… in ParsePotentialArrowExpression()
775 bool ASParser::ParsePotentialNonNullExpression(ir::Expression **returnExpression, lexer::SourcePosi… in ParsePotentialNonNullExpression()
777 if (returnExpression == nullptr || Lexer()->GetToken().NewLine()) { in ParsePotentialNonNullExpression()
784 (*returnExpression)->SetRange({startLoc, Lexer()->GetToken().End()}); in ParsePotentialNonNullExpression()
785 Lexer()->NextToken(); in ParsePotentialNonNullExpression()
790 … const lexer::SourcePosition &startLoc, bool ignoreCallExpression) in ParsePotentialGenericFunctionCall()
792 if (Lexer()->Lookahead() == lexer::LEX_CHAR_LESS_THAN || in ParsePotentialGenericFunctionCall()
797 const auto savedPos = Lexer()->Save(); in ParsePotentialGenericFunctionCall()
799 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_SHIFT) { in ParsePotentialGenericFunctionCall()
800 Lexer()->BackwardToken(lexer::TokenType::PUNCTUATOR_LESS_THAN, 1); in ParsePotentialGenericFunctionCall()
807 Lexer()->Rewind(savedPos); in ParsePotentialGenericFunctionCall()
811 if (Lexer()->GetToken().Type() == lexer::TokenType::EOS) { in ParsePotentialGenericFunctionCall()
815 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_PARENTHESIS) { in ParsePotentialGenericFunctionCall()
825 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_BACK_TICK) { in ParsePotentialGenericFunctionCall()
827 lexer::SourcePosition endLoc = propertyNode->End(); in ParsePotentialGenericFunctionCall()
836 Lexer()->Rewind(savedPos); in ParsePotentialGenericFunctionCall()
842 return Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_LEFT_PARENTHESIS && in IsNamedFunctionExpression()
843 Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_LESS_THAN; in IsNamedFunctionExpression()
848 if (Lexer()->GetToken().KeywordType() != lexer::TokenType::KEYW_AS) { in ParsePotentialAsExpression()
853 Lexer()->NextToken(); in ParsePotentialAsExpression()
861 auto *identNode = AllocNode<ir::Identifier>(Lexer()->GetToken().Ident(), Allocator()); in ParsePrimaryExpressionIdent()
863 identNode->SetRange(Lexer()->GetToken().Loc()); in ParsePrimaryExpressionIdent()
865 Lexer()->NextToken(); in ParsePrimaryExpressionIdent()
876 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_RIGHT_PARENTHESIS) { in ValidateArrowFunctionRestParameter()
886 Lexer()->NextToken(); // eat extends keyword in ParseInterfaceExtendsClause()
888 if (Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_IDENT) { in ParseInterfaceExtendsClause()
892 const lexer::SourcePosition &heritageStart = Lexer()->GetToken().Start(); in ParseInterfaceExtendsClause()
893 lexer::SourcePosition heritageEnd = Lexer()->GetToken().End(); in ParseInterfaceExtendsClause()
894 auto *extendsName = AllocNode<ir::Identifier>(Lexer()->GetToken().Ident(), Allocator()); in ParseInterfaceExtendsClause()
896 extendsName->SetRange(Lexer()->GetToken().Loc()); in ParseInterfaceExtendsClause()
899 extendsClause->SetRange(Lexer()->GetToken().Loc()); in ParseInterfaceExtendsClause()
900 Lexer()->NextToken(); in ParseInterfaceExtendsClause()
903 while (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_PERIOD) { in ParseInterfaceExtendsClause()
904 Lexer()->NextToken(); in ParseInterfaceExtendsClause()
906 if (Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_IDENT) { in ParseInterfaceExtendsClause()
910 extendsName = AllocNode<ir::Identifier>(Lexer()->GetToken().Ident(), Allocator()); in ParseInterfaceExtendsClause()
911 extendsName->SetRange(Lexer()->GetToken().Loc()); in ParseInterfaceExtendsClause()
913 current->SetRange(Lexer()->GetToken().Loc()); in ParseInterfaceExtendsClause()
916 heritageEnd = Lexer()->GetToken().End(); in ParseInterfaceExtendsClause()
917 Lexer()->NextToken(); in ParseInterfaceExtendsClause()
920 if (Lexer()->Lookahead() == lexer::LEX_CHAR_LESS_THAN) { in ParseInterfaceExtendsClause()
921 Lexer()->ForwardToken(lexer::TokenType::PUNCTUATOR_LESS_THAN, 1); in ParseInterfaceExtendsClause()
923 Lexer()->NextToken(); in ParseInterfaceExtendsClause()
926 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LESS_THAN) { in ParseInterfaceExtendsClause()
929 heritageEnd = Lexer()->GetToken().End(); in ParseInterfaceExtendsClause()
934 if (Lexer()->GetToken().Type() == lexer::TokenType::KEYW_IMPLEMENTS) { in ParseInterfaceExtendsClause()
938 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_LEFT_BRACE) { in ParseInterfaceExtendsClause()
950 ir::TSIndexSignature *ASParser::ParseIndexSignature(const lexer::SourcePosition &startLoc, bool isR… in ParseIndexSignature()
952 Lexer()->NextToken(); // eat '[' in ParseIndexSignature()
954 if (Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_IDENT) { in ParseIndexSignature()
958 if (!Lexer()->GetToken().Ident().Is("key")) { in ParseIndexSignature()
962 auto *key = AllocNode<ir::Identifier>(Lexer()->GetToken().Ident(), Allocator()); in ParseIndexSignature()
964 key->SetRange(Lexer()->GetToken().Loc()); in ParseIndexSignature()
966 Lexer()->NextToken(); // eat key in ParseIndexSignature()
968 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_COLON) { in ParseIndexSignature()
972 Lexer()->NextToken(); // eat ':' in ParseIndexSignature()
982 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_RIGHT_SQUARE_BRACKET) { in ParseIndexSignature()
986 Lexer()->NextToken(); // eat ']' in ParseIndexSignature()
988 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_COLON) { in ParseIndexSignature()
992 Lexer()->NextToken(); // eat ':' in ParseIndexSignature()
1001 indexSignature->SetRange({startLoc, Lexer()->GetToken().End()}); in ParseIndexSignature()
1009 switch (Lexer()->GetToken().Type()) { in ParseInterfacePropertyKey()
1010 case lexer::TokenType::LITERAL_IDENT: { in ParseInterfacePropertyKey()
1011 const util::StringView &ident = Lexer()->GetToken().Ident(); in ParseInterfacePropertyKey()
1014 key->SetRange(Lexer()->GetToken().Loc()); in ParseInterfacePropertyKey()
1017 case lexer::TokenType::LITERAL_STRING: { in ParseInterfacePropertyKey()
1018 const util::StringView &string = Lexer()->GetToken().String(); in ParseInterfacePropertyKey()
1021 key->SetRange(Lexer()->GetToken().Loc()); in ParseInterfacePropertyKey()
1024 case lexer::TokenType::LITERAL_NUMBER: { in ParseInterfacePropertyKey()
1025 if ((Lexer()->GetToken().Flags() & lexer::TokenFlags::NUMBER_BIGINT) != 0) { in ParseInterfacePropertyKey()
1026 key = AllocNode<ir::BigIntLiteral>(Lexer()->GetToken().BigInt()); in ParseInterfacePropertyKey()
1028 key = AllocNode<ir::NumberLiteral>(Lexer()->GetToken().GetNumber()); in ParseInterfacePropertyKey()
1032 key->SetRange(Lexer()->GetToken().Loc()); in ParseInterfacePropertyKey()
1040 Lexer()->NextToken(); in ParseInterfacePropertyKey()
1044 ir::AstNode *ASParser::ParsePropertyOrMethodSignature(const lexer::SourcePosition &startLoc, bool i… in ParsePropertyOrMethodSignature()
1048 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_QUESTION_MARK) { in ParsePropertyOrMethodSignature()
1052 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_PARENTHESIS || in ParsePropertyOrMethodSignature()
1053 Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LESS_THAN) { in ParsePropertyOrMethodSignature()
1056 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LESS_THAN) { in ParsePropertyOrMethodSignature()
1064 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_COLON) { in ParsePropertyOrMethodSignature()
1068 Lexer()->NextToken(); // eat ':' in ParsePropertyOrMethodSignature()
1075 methodSignature->SetRange({startLoc, Lexer()->GetToken().End()}); in ParsePropertyOrMethodSignature()
1079 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_COLON) { in ParsePropertyOrMethodSignature()
1083 Lexer()->NextToken(); // eat ':' in ParsePropertyOrMethodSignature()
1089 propertySignature->SetRange({startLoc, Lexer()->GetToken().End()}); in ParsePropertyOrMethodSignature()
1095 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_AT) { in ParseTypeLiteralOrInterfaceMember()
1099 char32_t nextCp = Lexer()->Lookahead(); in ParseTypeLiteralOrInterfaceMember()
1100 lexer::SourcePosition startLoc = Lexer()->GetToken().Start(); in ParseTypeLiteralOrInterfaceMember()
1101 bool isReadonly = Lexer()->GetToken().KeywordType() == lexer::TokenType::KEYW_READONLY && in ParseTypeLiteralOrInterfaceMember()
1102 nextCp != lexer::LEX_CHAR_LEFT_PAREN && nextCp != lexer::LEX_CHAR_COLON; in ParseTypeLiteralOrInterfaceMember()
1104 Lexer()->NextToken(); // eat 'readonly" in ParseTypeLiteralOrInterfaceMember()
1107 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_SQUARE_BRACKET) { in ParseTypeLiteralOrInterfaceMember()
1118 while (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_LEFT_BRACE) { in ParseClassImplementClause()
1119 if (Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_IDENT) { in ParseClassImplementClause()
1123 const lexer::SourcePosition &implementStart = Lexer()->GetToken().Start(); in ParseClassImplementClause()
1124 auto *implementsName = AllocNode<ir::Identifier>(Lexer()->GetToken().Ident(), Allocator()); in ParseClassImplementClause()
1126 implementsName->SetRange(Lexer()->GetToken().Loc()); in ParseClassImplementClause()
1129 implementsClause->SetRange(Lexer()->GetToken().Loc()); in ParseClassImplementClause()
1130 Lexer()->NextToken(); in ParseClassImplementClause()
1133 while (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_PERIOD) { in ParseClassImplementClause()
1134 Lexer()->NextToken(); in ParseClassImplementClause()
1136 if (Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_IDENT) { in ParseClassImplementClause()
1140 implementsName = AllocNode<ir::Identifier>(Lexer()->GetToken().Ident(), Allocator()); in ParseClassImplementClause()
1142 implementsName->SetRange(Lexer()->GetToken().Loc()); in ParseClassImplementClause()
1144 current->SetRange(Lexer()->GetToken().Loc()); in ParseClassImplementClause()
1147 Lexer()->NextToken(); in ParseClassImplementClause()
1151 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_SHIFT) { in ParseClassImplementClause()
1152 Lexer()->BackwardToken(lexer::TokenType::PUNCTUATOR_LESS_THAN, 1); in ParseClassImplementClause()
1155 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LESS_THAN || in ParseClassImplementClause()
1156 Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_SHIFT) { in ParseClassImplementClause()
1163 impl->SetRange({implementStart, Lexer()->GetToken().End()}); in ParseClassImplementClause()
1166 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_COMMA) { in ParseClassImplementClause()
1167 Lexer()->NextToken(); in ParseClassImplementClause()
1170 ExpectToken(lexer::TokenType::PUNCTUATOR_LEFT_BRACE, false); in ParseClassImplementClause()
1182 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_COLON) { in ParseClassKeyAnnotation()
1183 Lexer()->NextToken(); // eat ':' in ParseClassKeyAnnotation()
1189 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_LEFT_PARENTHESIS && in ParseClassKeyAnnotation()
1190 Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_LESS_THAN) { in ParseClassKeyAnnotation()
1199 …if (typeAnnotation == nullptr && (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_… in ValidateClassMethodStart()
1200 … Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LESS_THAN)) { in ValidateClassMethodStart()
1272 bool ASParser::IsModifierKind(const lexer::Token &token) in IsModifierKind()
1275 case lexer::TokenType::KEYW_PUBLIC: in IsModifierKind()
1276 case lexer::TokenType::KEYW_PRIVATE: in IsModifierKind()
1277 case lexer::TokenType::KEYW_PROTECTED: in IsModifierKind()
1278 case lexer::TokenType::KEYW_STATIC: in IsModifierKind()
1279 case lexer::TokenType::KEYW_ASYNC: in IsModifierKind()
1280 case lexer::TokenType::KEYW_DECLARE: in IsModifierKind()
1281 case lexer::TokenType::KEYW_READONLY: in IsModifierKind()
1293 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_HASH_MARK) { in ConsumeClassPrivateIdentifier()
1300 Lexer()->NextToken(); // eat left square bracket in ParseComputedClassFieldOrIndexSignature()
1302 if (Lexer()->GetToken().Type() == lexer::TokenType::LITERAL_IDENT && in ParseComputedClassFieldOrIndexSignature()
1303 Lexer()->Lookahead() == lexer::LEX_CHAR_COLON) { in ParseComputedClassFieldOrIndexSignature()
1304 if (!Lexer()->GetToken().Ident().Is("key")) { in ParseComputedClassFieldOrIndexSignature()
1308 auto id = AllocNode<ir::Identifier>(Lexer()->GetToken().Ident(), Allocator()); in ParseComputedClassFieldOrIndexSignature()
1310 id->SetRange(Lexer()->GetToken().Loc()); in ParseComputedClassFieldOrIndexSignature()
1312 Lexer()->NextToken(); // eat param in ParseComputedClassFieldOrIndexSignature()
1314 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_COLON) { in ParseComputedClassFieldOrIndexSignature()
1318 Lexer()->NextToken(); // eat ':' in ParseComputedClassFieldOrIndexSignature()
1329 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_RIGHT_SQUARE_BRACKET) { in ParseComputedClassFieldOrIndexSignature()
1333 Lexer()->NextToken(lexer::NextTokenFlags::KEYWORD_TO_IDENT); in ParseComputedClassFieldOrIndexSignature()
1345 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_RIGHT_SQUARE_BRACKET) { in ParseComputedClassFieldOrIndexSignature()
1352 std::tuple<bool, ir::BlockStatement *, lexer::SourcePosition, bool> ASParser::ParseFunctionBody( in ParseFunctionBody()
1361 lexer::SourcePosition endLoc = Lexer()->GetToken().End(); in ParseFunctionBody()
1363 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_LEFT_BRACE) { in ParseFunctionBody()
1384 ir::Identifier *local = ParseNamedImport(&Lexer()->GetToken()); in ParseImportDefaultSpecifier()
1385 Lexer()->NextToken(); // eat local name in ParseImportDefaultSpecifier()
1395 ir::Expression *ASParser::ParseArrowFunctionRestParameter(lexer::SourcePosition start) in ParseArrowFunctionRestParameter()
1404 Lexer()->NextToken(); in ParseArrowFunctionRestParameter()
1406 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_COLON) { in ParseArrowFunctionRestParameter()
1410 Lexer()->NextToken(); // eat ':' in ParseArrowFunctionRestParameter()
1415 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_ARROW) { in ParseArrowFunctionRestParameter()
1422 ir::Expression *ASParser::ParseArrowFunctionNoParameter(lexer::SourcePosition start) in ParseArrowFunctionNoParameter()
1424 Lexer()->NextToken(); in ParseArrowFunctionNoParameter()
1426 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_COLON) { in ParseArrowFunctionNoParameter()
1430 Lexer()->NextToken(); // eat ':' in ParseArrowFunctionNoParameter()
1435 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_ARROW) { in ParseArrowFunctionNoParameter()
1450 ES2PANDA_ASSERT(Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_PARENTHESIS); in ParseCoverParenthesizedExpressionAndArrowParameterList()
1451 lexer::SourcePosition start = Lexer()->GetToken().Start(); in ParseCoverParenthesizedExpressionAndArrowParameterList()
1452 Lexer()->NextToken(); in ParseCoverParenthesizedExpressionAndArrowParameterList()
1455 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_PERIOD_PERIOD_PERIOD) { in ParseCoverParenthesizedExpressionAndArrowParameterList()
1459 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_RIGHT_PARENTHESIS) { in ParseCoverParenthesizedExpressionAndArrowParameterList()
1466 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_RIGHT_PARENTHESIS) { in ParseCoverParenthesizedExpressionAndArrowParameterList()
1471 expr->SetRange({start, Lexer()->GetToken().End()}); in ParseCoverParenthesizedExpressionAndArrowParameterList()
1472 Lexer()->NextToken(); in ParseCoverParenthesizedExpressionAndArrowParameterList()
1474 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_ARROW) { in ParseCoverParenthesizedExpressionAndArrowParameterList()
1478 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_COLON) { in ParseCoverParenthesizedExpressionAndArrowParameterList()
1479 auto savedPos = Lexer()->Save(); in ParseCoverParenthesizedExpressionAndArrowParameterList()
1480 Lexer()->NextToken(); // eat ':' in ParseCoverParenthesizedExpressionAndArrowParameterList()
1485 Lexer()->Rewind(savedPos); in ParseCoverParenthesizedExpressionAndArrowParameterList()
1489 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_ARROW) { in ParseCoverParenthesizedExpressionAndArrowParameterList()
1490 Lexer()->Rewind(savedPos); in ParseCoverParenthesizedExpressionAndArrowParameterList()
1502 lexer::SourcePosition startPos = Lexer()->GetToken().Start(); in ParsePrefixAssertionExpression()
1503 Lexer()->NextToken(); // eat < in ParsePrefixAssertionExpression()
1507 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_GREATER_THAN) { in ParsePrefixAssertionExpression()
1511 Lexer()->NextToken(); // eat > in ParsePrefixAssertionExpression()
1516 node->SetRange({startPos, Lexer()->GetToken().End()}); in ParsePrefixAssertionExpression()
1522 lexer::SourcePosition constVarStar = Lexer()->GetToken().Start(); in ParseConstStatement()
1523 Lexer()->NextToken(); in ParseConstStatement()
1525 if (Lexer()->GetToken().Type() == lexer::TokenType::KEYW_ENUM) { in ParseConstStatement()
1543 if (Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_IDENT) { in ParseVariableDeclaratorKey()
1549 const util::StringView &identStr = Lexer()->GetToken().Ident(); in ParseVariableDeclaratorKey()
1552 init->SetRange(Lexer()->GetToken().Loc()); in ParseVariableDeclaratorKey()
1553 Lexer()->NextToken(); in ParseVariableDeclaratorKey()
1555 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_COLON) { in ParseVariableDeclaratorKey()
1556 Lexer()->NextToken(); // eat ':' in ParseVariableDeclaratorKey()
1560 Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_SUBSTITUTION) { in ParseVariableDeclaratorKey()
1577 ir::ExportDefaultDeclaration *ASParser::ParseExportDefaultDeclaration(const lexer::SourcePosition &… in ParseExportDefaultDeclaration()
1580 Lexer()->NextToken(); // eat `default` keyword or `=` in ParseExportDefaultDeclaration()
1585 switch (Lexer()->GetToken().Type()) { in ParseExportDefaultDeclaration()
1586 case lexer::TokenType::KEYW_FUNCTION: { in ParseExportDefaultDeclaration()
1590 case lexer::TokenType::KEYW_CLASS: { in ParseExportDefaultDeclaration()
1594 case lexer::TokenType::KEYW_INTERFACE: { in ParseExportDefaultDeclaration()
1598 case lexer::TokenType::KEYW_NAMESPACE: { in ParseExportDefaultDeclaration()
1599 Lexer()->NextToken(); // eat 'namespace' in ParseExportDefaultDeclaration()
1603 case lexer::TokenType::KEYW_ENUM: { in ParseExportDefaultDeclaration()
1607 case lexer::TokenType::KEYW_ASYNC: { in ParseExportDefaultDeclaration()
1608 if ((Lexer()->GetToken().Flags() & lexer::TokenFlags::HAS_ESCAPE) == 0) { in ParseExportDefaultDeclaration()
1609 Lexer()->NextToken(); // eat `async` in ParseExportDefaultDeclaration()
1623 lexer::SourcePosition endLoc = declNode->End(); in ParseExportDefaultDeclaration()
1636 …friend ir::Statement *ASParser::ParseNamedExportDeclaration(const lexer::SourcePosition &startLoc);
1639 static ir::Statement *GetParsedDeclaration(ASParser *parser, lexer::TokenType type) in GetParsedDeclaration()
1642 if (parser->Lexer()->GetToken().KeywordType() == lexer::TokenType::KEYW_ABSTRACT) { in GetParsedDeclaration()
1643 parser->Lexer()->NextToken(); // eat 'abstract' in GetParsedDeclaration()
1648 case lexer::TokenType::KEYW_VAR: { in GetParsedDeclaration()
1651 case lexer::TokenType::KEYW_CONST: { in GetParsedDeclaration()
1654 case lexer::TokenType::KEYW_LET: { in GetParsedDeclaration()
1657 case lexer::TokenType::KEYW_FUNCTION: { in GetParsedDeclaration()
1660 case lexer::TokenType::KEYW_CLASS: { in GetParsedDeclaration()
1663 case lexer::TokenType::KEYW_ENUM: { in GetParsedDeclaration()
1666 case lexer::TokenType::KEYW_INTERFACE: { in GetParsedDeclaration()
1669 case lexer::TokenType::KEYW_TYPE: { in GetParsedDeclaration()
1672 case lexer::TokenType::KEYW_GLOBAL: in GetParsedDeclaration()
1673 case lexer::TokenType::KEYW_MODULE: in GetParsedDeclaration()
1674 case lexer::TokenType::KEYW_NAMESPACE: { in GetParsedDeclaration()
1678 parser->ExpectToken(lexer::TokenType::KEYW_ASYNC); in GetParsedDeclaration()
1685 ir::Statement *ASParser::ParseNamedExportDeclaration(const lexer::SourcePosition &startLoc) in ParseNamedExportDeclaration()
1687 if (Lexer()->GetToken().KeywordType() == lexer::TokenType::KEYW_DECLARE) { in ParseNamedExportDeclaration()
1692 … ParseNamedExportDeclarationHelper::GetParsedDeclaration(this, Lexer()->GetToken().KeywordType()); in ParseNamedExportDeclaration()
1710 if (Lexer()->GetToken().Type() == lexer::TokenType::LITERAL_IDENT) { in ParseImportSpecifiers()
1715 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_MULTIPLY) { in ParseImportSpecifiers()
1717 } else if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_BRACE) { in ParseImportSpecifiers()
1726 char32_t nextChar = Lexer()->Lookahead(); in ParseImportDeclaration()
1727 if (nextChar == lexer::LEX_CHAR_LEFT_PAREN || nextChar == lexer::LEX_CHAR_DOT) { in ParseImportDeclaration()
1731 lexer::SourcePosition startLoc = Lexer()->GetToken().Start(); in ParseImportDeclaration()
1732 Lexer()->NextToken(); // eat import in ParseImportDeclaration()
1738 if (Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_STRING) { in ParseImportDeclaration()
1746 lexer::SourcePosition endLoc = source->End(); in ParseImportDeclaration()
1756 void ASParser::ReportIllegalBreakError(const lexer::SourcePosition &pos) in ReportIllegalBreakError()