Lines Matching full:lexer
28 #include "lexer/lexer.h"
29 #include "lexer/ETSLexer.h"
91 std::unique_ptr<lexer::Lexer> ETSParser::InitLexer(const SourceFile &sourceFile) in InitLexer()
94 auto lexer = std::make_unique<lexer::ETSLexer>(&GetContext(), ErrorLogger()); in InitLexer() local
95 SetLexer(lexer.get()); in InitLexer()
96 return lexer; in InitLexer()
101 lexer::SourcePosition startLoc = Lexer()->GetToken().Start(); in ParseProgram()
102 Lexer()->NextToken(); in ParseProgram()
124 ir::ETSScript *ETSParser::ParseETSGlobalScript(lexer::SourcePosition startLoc, ArenaVector<ir::Stat… in ParseETSGlobalScript()
138 etsScript->SetRange({startLoc, Lexer()->GetToken().End()}); in ParseETSGlobalScript()
161 auto lexer = InitLexer(source); in ParseDefaultSources() local
163 Lexer()->NextToken(); in ParseDefaultSources()
280 auto lexer = InitLexer(sourceFile); in ParseSource() local
282 lexer::SourcePosition startLoc = Lexer()->GetToken().Start(); in ParseSource()
283 Lexer()->NextToken(); in ParseSource()
298 const auto token = Lexer()->GetToken(); in ParseIdentKeyword()
299 ASSERT(token.Type() == lexer::TokenType::LITERAL_IDENT); in ParseIdentKeyword()
301 case lexer::TokenType::KEYW_STRUCT: { in ParseIdentKeyword()
305 case lexer::TokenType::KEYW_TYPE: { in ParseIdentKeyword()
318 lexer::SourcePosition startLoc = Lexer()->GetToken().Start(); in ParseFunction()
322 lexer::SourcePosition endLoc = startLoc; in ParseFunction()
331 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_ARROW) { in ParseFunction()
332 LogExpectedToken(lexer::TokenType::PUNCTUATOR_ARROW); in ParseFunction()
336 Lexer()->NextToken(); in ParseFunction()
339 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_BRACE) { in ParseFunction()
379 std::tuple<bool, ir::BlockStatement *, lexer::SourcePosition, bool> ETSParser::ParseFunctionBody( in ParseFunctionBody()
384 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_LEFT_BRACE) { in ParseFunctionBody()
385 … LogSyntaxError({"Expected token '{', got '", TokenToString(Lexer()->GetToken().Type()), "'"}); in ParseFunctionBody()
386 return {false, nullptr, Lexer()->GetToken().End(), false}; in ParseFunctionBody()
398 if (Lexer()->GetToken().Type() == lexer::TokenType::LITERAL_IDENT) { in ParseFunctionThrowMarker()
399 if (Lexer()->GetToken().KeywordType() == lexer::TokenType::KEYW_THROWS) { in ParseFunctionThrowMarker()
400 Lexer()->NextToken(); // eat 'throws' in ParseFunctionThrowMarker()
402 } else if (Lexer()->GetToken().KeywordType() == lexer::TokenType::KEYW_RETHROWS) { in ParseFunctionThrowMarker()
404 Lexer()->NextToken(); // eat 'rethrows' in ParseFunctionThrowMarker()
415 ir::AstNode *ETSParser::ParseInnerTypeDeclaration(ir::ModifierFlags memberModifiers, lexer::LexerPo… in ParseInnerTypeDeclaration()
423 Lexer()->Rewind(savedPos); in ParseInnerTypeDeclaration()
425 Lexer()->NextToken(); in ParseInnerTypeDeclaration()
428 Lexer()->GetToken().SetTokenType(Lexer()->GetToken().KeywordType()); in ParseInnerTypeDeclaration()
446 const lexer::SourcePosition &startLoc) in ParseInnerConstructorDeclaration()
456 auto *memberName = AllocNode<ir::Identifier>(Lexer()->GetToken().Ident(), Allocator()); in ParseInnerConstructorDeclaration()
458 Lexer()->NextToken(); in ParseInnerConstructorDeclaration()
469 ident->SetRange({Lexer()->GetToken().Start(), Lexer()->GetToken().End()}); in CreateInvokeIdentifier()
483 const lexer::SourcePosition &startLoc) in ParseInnerRest()
485 …if (Lexer()->Lookahead() != lexer::LEX_CHAR_LEFT_PAREN && Lexer()->Lookahead() != lexer::LEX_CHAR_… in ParseInnerRest()
486 (Lexer()->GetToken().KeywordType() == lexer::TokenType::KEYW_GET || in ParseInnerRest()
487 Lexer()->GetToken().KeywordType() == lexer::TokenType::KEYW_SET)) { in ParseInnerRest()
493 auto type = Lexer()->GetToken().Type(); in ParseInnerRest()
494 if (type == lexer::TokenType::KEYW_FUNCTION || type == lexer::TokenType::KEYW_LET || in ParseInnerRest()
495 type == lexer::TokenType::KEYW_CONST) { in ParseInnerRest()
496 Lexer()->NextToken(); in ParseInnerRest()
507 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_PARENTHESIS && in ParseInnerRest()
514 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_SQUARE_BRACKET) { in ParseInnerRest()
515 auto const savePos = Lexer()->Save(); in ParseInnerRest()
516 Lexer()->NextToken(); in ParseInnerRest()
517 if (Lexer()->GetToken().Ident().Is("Symbol")) { in ParseInnerRest()
518 Lexer()->Rewind(savePos); in ParseInnerRest()
530 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_PARENTHESIS || in ParseInnerRest()
531 Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LESS_THAN) { in ParseInnerRest()
554 if (Lexer()->Lookahead() == '.') { in ParseAnnotationName()
568 const lexer::SourcePosition startLoc = Lexer()->GetToken().Start(); in ParseAnnotationDeclaration()
575 Lexer()->NextToken(); in ParseAnnotationDeclaration()
578 ExpectToken(lexer::TokenType::PUNCTUATOR_LEFT_BRACE, false); in ParseAnnotationDeclaration()
581 lexer::SourcePosition endLoc = Lexer()->GetToken().End(); in ParseAnnotationDeclaration()
589 static bool IsMemberAccessModifiers(lexer::TokenType type) in IsMemberAccessModifiers()
591 return type == lexer::TokenType::KEYW_STATIC || type == lexer::TokenType::KEYW_ASYNC || in IsMemberAccessModifiers()
592 type == lexer::TokenType::KEYW_PUBLIC || type == lexer::TokenType::KEYW_PROTECTED || in IsMemberAccessModifiers()
593 type == lexer::TokenType::KEYW_PRIVATE || type == lexer::TokenType::KEYW_DECLARE || in IsMemberAccessModifiers()
594 type == lexer::TokenType::KEYW_READONLY || type == lexer::TokenType::KEYW_ABSTRACT || in IsMemberAccessModifiers()
595 type == lexer::TokenType::KEYW_CONST || type == lexer::TokenType::KEYW_FINAL || in IsMemberAccessModifiers()
596 type == lexer::TokenType::KEYW_NATIVE; in IsMemberAccessModifiers()
601 Lexer()->NextToken(lexer::NextTokenFlags::KEYWORD_TO_IDENT); in ParseAnnotationProperties()
604 while (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_RIGHT_BRACE) { in ParseAnnotationProperties()
606 Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_SEMI_COLON) { in ParseAnnotationProperties()
607 Lexer()->NextToken(); // eat ';' in ParseAnnotationProperties()
611 if (IsMemberAccessModifiers(Lexer()->GetToken().Type())) { in ParseAnnotationProperties()
612 …ThrowSyntaxError("Annotation property can not have access modifiers", Lexer()->GetToken().Start()); in ParseAnnotationProperties()
623 Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_RIGHT_BRACE) { in ParseAnnotationProperties()
624 ExpectToken(lexer::TokenType::PUNCTUATOR_COMMA); // eat ',' in ParseAnnotationProperties()
628 Lexer()->NextToken(); // eat "}" in ParseAnnotationProperties()
649 lexer::SourcePosition endLoc = fieldName->End(); in ParseAnnotationProperty()
651 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_PARENTHESIS || in ParseAnnotationProperty()
652 Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LESS_THAN) { in ParseAnnotationProperty()
653 ThrowSyntaxError("Annotation can not have method as property", Lexer()->GetToken().Start()); in ParseAnnotationProperty()
658 if (needTypeAnnotation && Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_COLON) { in ParseAnnotationProperty()
659 Lexer()->NextToken(); // eat ':' in ParseAnnotationProperty()
669 … ThrowSyntaxError("Missing type annotation for property" + logField, Lexer()->GetToken().Start()); in ParseAnnotationProperty()
677 lexer::SourcePosition savePos; in ParseAnnotationProperty()
678 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_SUBSTITUTION || in ParseAnnotationProperty()
679 (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_COLON)) { in ParseAnnotationProperty()
680 Lexer()->NextToken(); // eat '=' or ':' in ParseAnnotationProperty()
681 savePos = Lexer()->GetToken().Start(); in ParseAnnotationProperty()
686 …ThrowSyntaxError("Invalid argument passed to '" + fieldName->Name().Mutf8() + "'", Lexer()->GetTok… in ParseAnnotationProperty()
706 if (Lexer()->GetToken().Type() == lexer::TokenType::KEYW_INTERFACE) { in ParseAnnotations()
719 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_AT) { in ParseAnnotations()
722 Lexer()->NextToken(); in ParseAnnotations()
731 const lexer::SourcePosition startLoc = Lexer()->GetToken().Start(); in ParseAnnotationUsage()
737 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_PARENTHESIS) { in ParseAnnotationUsage()
738 Lexer()->NextToken(); // eat '(' in ParseAnnotationUsage()
739 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_BRACE) { in ParseAnnotationUsage()
741 } else if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_RIGHT_PARENTHESIS) { in ParseAnnotationUsage()
744 singleParamName->SetRange({Lexer()->GetToken().Start(), Lexer()->GetToken().End()}); in ParseAnnotationUsage()
746 const auto savePos = Lexer()->GetToken().Start(); in ParseAnnotationUsage()
758 ExpectToken(lexer::TokenType::PUNCTUATOR_RIGHT_PARENTHESIS, true); // eat ')' in ParseAnnotationUsage()
763 annotationUsage->SetRange({startLoc, Lexer()->GetToken().End()}); in ParseAnnotationUsage()
774 if (Lexer()->GetToken().Type() == lexer::TokenType::KEYW_CLASS) { in ParseTypeDeclarationAbstractFinal()
782 ThrowUnexpectedToken(Lexer()->GetToken().Type()); in ParseTypeDeclarationAbstractFinal()
787 auto savedPos = Lexer()->Save(); in ParseTypeDeclaration()
791 auto tokenType = Lexer()->GetToken().Type(); in ParseTypeDeclaration()
793 case lexer::TokenType::KEYW_STATIC: { in ParseTypeDeclaration()
795 ThrowUnexpectedToken(Lexer()->GetToken().Type()); in ParseTypeDeclaration()
798 Lexer()->NextToken(); in ParseTypeDeclaration()
800 if (Lexer()->GetToken().Type() == lexer::TokenType::KEYW_INTERFACE) { in ParseTypeDeclaration()
804 Lexer()->Rewind(savedPos); in ParseTypeDeclaration()
807 case lexer::TokenType::KEYW_ABSTRACT: in ParseTypeDeclaration()
808 case lexer::TokenType::KEYW_FINAL: { in ParseTypeDeclaration()
811 case lexer::TokenType::KEYW_ENUM: { in ParseTypeDeclaration()
814 case lexer::TokenType::KEYW_INTERFACE: { in ParseTypeDeclaration()
817 case lexer::TokenType::KEYW_NAMESPACE: { in ParseTypeDeclaration()
826 case lexer::TokenType::KEYW_CLASS: { in ParseTypeDeclaration()
829 case lexer::TokenType::LITERAL_IDENT: { in ParseTypeDeclaration()
830 if (Lexer()->GetToken().KeywordType() == lexer::TokenType::KEYW_STRUCT) { in ParseTypeDeclaration()
836 LogUnexpectedToken(Lexer()->GetToken().Type()); in ParseTypeDeclaration()
844 ASSERT(Lexer()->GetToken().KeywordType() == lexer::TokenType::KEYW_TYPE); in ParseTypeAliasDeclaration()
846 lexer::SourcePosition typeStart = Lexer()->GetToken().Start(); in ParseTypeAliasDeclaration()
847 Lexer()->NextToken(); // eat type keyword in ParseTypeAliasDeclaration()
849 if (Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_IDENT) { in ParseTypeAliasDeclaration()
850 LogExpectedToken(lexer::TokenType::LITERAL_IDENT); in ParseTypeAliasDeclaration()
853 if (Lexer()->GetToken().IsReservedTypeName()) { in ParseTypeAliasDeclaration()
855 errMsg.append(TokenToString(Lexer()->GetToken().KeywordType())); in ParseTypeAliasDeclaration()
860 const util::StringView ident = Lexer()->GetToken().Ident(); in ParseTypeAliasDeclaration()
862 id->SetRange(Lexer()->GetToken().Loc()); in ParseTypeAliasDeclaration()
866 Lexer()->NextToken(); // eat alias name in ParseTypeAliasDeclaration()
868 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LESS_THAN) { in ParseTypeAliasDeclaration()
876 if (!Lexer()->TryEatTokenType(lexer::TokenType::PUNCTUATOR_SUBSTITUTION)) { in ParseTypeAliasDeclaration()
877 LogExpectedToken(lexer::TokenType::PUNCTUATOR_SUBSTITUTION); in ParseTypeAliasDeclaration()
878 Lexer()->NextToken(); // eat '=' in ParseTypeAliasDeclaration()
888 typeAliasDecl->SetRange({typeStart, Lexer()->GetToken().End()}); in ParseTypeAliasDeclaration()
1037 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_RIGHT_PARENTHESIS) { in ValidateRestParameter()
1040 const auto pos = Lexer()->Save(); in ValidateRestParameter()
1041 Lexer()->NextToken(); in ValidateRestParameter()
1042 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_RIGHT_PARENTHESIS) { in ValidateRestParameter()
1044 Lexer()->Rewind(pos); in ValidateRestParameter()
1045 Lexer()->GetToken().SetTokenType(lexer::TokenType::PUNCTUATOR_RIGHT_PARENTHESIS); in ValidateRestParameter()
1083 (Lexer()->GetToken().Type() == lexer::TokenType::KEYW_CLASS || IsStructKeyword())) { in ParseTypeReferencePart()
1088 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_SHIFT || in ParseTypeReferencePart()
1089 Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LESS_THAN) { in ParseTypeReferencePart()
1090 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_SHIFT) { in ParseTypeReferencePart()
1091 Lexer()->BackwardToken(lexer::TokenType::PUNCTUATOR_LESS_THAN, 1); in ParseTypeReferencePart()
1103 auto startPos = Lexer()->GetToken().Start(); in ParseTypeReference()
1106 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_FORMAT) { in ParseTypeReference()
1111 auto partPos = Lexer()->GetToken().Start(); in ParseTypeReference()
1118 typeRefPart->SetRange({partPos, Lexer()->GetToken().End()}); in ParseTypeReference()
1120 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_PERIOD) { in ParseTypeReference()
1124 Lexer()->NextToken(); in ParseTypeReference()
1127 (Lexer()->GetToken().Type() == lexer::TokenType::KEYW_CLASS || IsStructKeyword())) { in ParseTypeReference()
1133 typeReference->SetRange({startPos, Lexer()->GetToken().End()}); in ParseTypeReference()
1141 switch (Lexer()->GetToken().KeywordType()) { in ParseBaseTypeReference()
1142 case lexer::TokenType::KEYW_BOOLEAN: { in ParseBaseTypeReference()
1146 case lexer::TokenType::KEYW_BYTE: { in ParseBaseTypeReference()
1150 case lexer::TokenType::KEYW_CHAR: { in ParseBaseTypeReference()
1154 case lexer::TokenType::KEYW_DOUBLE: { in ParseBaseTypeReference()
1158 case lexer::TokenType::KEYW_FLOAT: { in ParseBaseTypeReference()
1162 case lexer::TokenType::KEYW_INT: { in ParseBaseTypeReference()
1166 case lexer::TokenType::KEYW_LONG: { in ParseBaseTypeReference()
1170 case lexer::TokenType::KEYW_SHORT: { in ParseBaseTypeReference()
1183 std::optional<lexer::SourcePosition> ETSParser::GetDefaultParamPosition(ArenaVector<ir::Expression … in GetDefaultParamPosition()
1195 if (const auto keyword = Lexer()->GetToken().KeywordType(); in ParseLiteralIdent()
1196 keyword == lexer::TokenType::KEYW_IN || keyword == lexer::TokenType::KEYW_OUT) { in ParseLiteralIdent()
1200 if (Lexer()->GetToken().IsDefinableTypeName()) { in ParseLiteralIdent()
1201 return GetTypeAnnotationOfPrimitiveType(Lexer()->GetToken().KeywordType(), options); in ParseLiteralIdent()
1208 lexer::LexerPosition savedPos) in ParseRightParenthesis()
1210 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_RIGHT_PARENTHESIS) { in ParseRightParenthesis()
1212 LogExpectedToken(lexer::TokenType::PUNCTUATOR_RIGHT_PARENTHESIS); in ParseRightParenthesis()
1213 Lexer()->NextToken(); // eat ')' in ParseRightParenthesis()
1217 Lexer()->Rewind(savedPos); in ParseRightParenthesis()
1220 Lexer()->NextToken(); // eat ')' in ParseRightParenthesis()
1227 LogUnexpectedToken(lexer::TokenType::KEYW_VAR); in ReportIfVarDeclaration()
1231 ir::Statement *ETSParser::ParseExport(lexer::SourcePosition startLoc, ir::ModifierFlags modifiers) in ParseExport()
1233 ASSERT(Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_MULTIPLY || in ParseExport()
1234 Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_BRACE || in ParseExport()
1235 Lexer()->GetToken().Type() == lexer::TokenType::LITERAL_IDENT); in ParseExport()
1238 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_MULTIPLY) { in ParseExport()
1240 } else if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_BRACE) { in ParseExport()
1243 if (Lexer()->GetToken().KeywordType() == lexer::TokenType::KEYW_FROM) { in ParseExport()
1262 lexer::SourcePosition endLoc = reExportSource->Source()->End(); in ParseExport()
1276 auto startLoc = Lexer()->GetToken().Start(); in ParsePackageDeclaration()
1278 if (Lexer()->GetToken().Type() != lexer::TokenType::KEYW_PACKAGE) { in ParsePackageDeclaration()
1285 Lexer()->NextToken(); in ParsePackageDeclaration()
1293 packageDeclaration->SetRange({startLoc, Lexer()->GetToken().End()}); in ParsePackageDeclaration()
1307 if (Lexer()->GetToken().KeywordType() != lexer::TokenType::KEYW_FROM && requireFrom) { in ParseSourceFromClause()
1308 LogExpectedToken(lexer::TokenType::KEYW_FROM); in ParseSourceFromClause()
1310 Lexer()->NextToken(); // eat `from` in ParseSourceFromClause()
1312 if (Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_STRING) { in ParseSourceFromClause()
1313 LogExpectedToken(lexer::TokenType::LITERAL_STRING); in ParseSourceFromClause()
1316 ASSERT(Lexer()->GetToken().Type() == lexer::TokenType::LITERAL_STRING); in ParseSourceFromClause()
1317 auto importPath = Lexer()->GetToken().Ident(); in ParseSourceFromClause()
1334 source->SetRange(Lexer()->GetToken().Loc()); in ParseSourceFromClause()
1336 Lexer()->NextToken(); in ParseSourceFromClause()
1346 while (Lexer()->GetToken().Type() == lexer::TokenType::KEYW_IMPORT) { in ParseImportDeclarations()
1347 auto startLoc = Lexer()->GetToken().Start(); in ParseImportDeclarations()
1348 Lexer()->NextToken(); // eat import in ParseImportDeclarations()
1351 …Lexer()->TryEatTokenKeyword(lexer::TokenType::KEYW_TYPE) ? ir::ImportKinds::TYPE : ir::ImportKinds… in ParseImportDeclarations()
1356 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_MULTIPLY) { in ParseImportDeclarations()
1361 } else if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_BRACE) { in ParseImportDeclarations()
1368 auto pos = Lexer()->Save(); in ParseImportDeclarations()
1372 lexer::SourcePosition endLoc = importSource->Source()->End(); in ParseImportDeclarations()
1382 Lexer()->Rewind(pos); in ParseImportDeclarations()
1385 lexer::SourcePosition endLocDef = importSourceDefault->Source()->End(); in ParseImportDeclarations()
1404 lexer::Token token = Lexer()->GetToken(); in ParseSingleExport()
1406 exported->SetRange(Lexer()->GetToken().Loc()); in ParseSingleExport()
1408 Lexer()->NextToken(); // eat exported variable name in ParseSingleExport()
1423 if (Lexer()->GetToken().KeywordType() == lexer::TokenType::KEYW_DEFAULT) { in IsDefaultImport()
1424 Lexer()->NextToken(); in IsDefaultImport()
1425 if (Lexer()->GetToken().KeywordType() == lexer::TokenType::KEYW_AS) { in IsDefaultImport()
1426 Lexer()->NextToken(); in IsDefaultImport()
1436 if (Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_IDENT) { in ParseNamedSpecifiesHelper()
1439 const auto pos = Lexer()->Save(); in ParseNamedSpecifiesHelper()
1440 Lexer()->NextToken(); in ParseNamedSpecifiesHelper()
1441 if (lexer::Token::IsPunctuatorToken(Lexer()->GetToken().Type())) { in ParseNamedSpecifiesHelper()
1443 Lexer()->Rewind(pos); in ParseNamedSpecifiesHelper()
1444 Lexer()->GetToken().SetTokenType(lexer::TokenType::LITERAL_IDENT); in ParseNamedSpecifiesHelper()
1445 Lexer()->GetToken().SetTokenStr(ERROR_LITERAL); in ParseNamedSpecifiesHelper()
1449 Lexer()->Rewind(pos); in ParseNamedSpecifiesHelper()
1450 Lexer()->GetToken().SetTokenType(lexer::TokenType::PUNCTUATOR_RIGHT_PARENTHESIS); in ParseNamedSpecifiesHelper()
1461 auto *imported = AllocNode<ir::Identifier>(Lexer()->GetToken().Ident(), Allocator()); in ParseNamedSpecifiesDefaultImport()
1462 imported->SetRange(Lexer()->GetToken().Loc()); in ParseNamedSpecifiesDefaultImport()
1463 Lexer()->NextToken(); in ParseNamedSpecifiesDefaultImport()
1477 if (!Lexer()->TryEatTokenType(lexer::TokenType::PUNCTUATOR_LEFT_BRACE)) { in ParseNamedSpecifiers()
1479 // current token is lexer::TokenType::PUNCTUATOR_LEFT_BRACE in ParseNamedSpecifiers()
1481 LogExpectedToken(lexer::TokenType::PUNCTUATOR_LEFT_BRACE); in ParseNamedSpecifiers()
1482 Lexer()->NextToken(); in ParseNamedSpecifiers()
1490 while (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_RIGHT_BRACE) { in ParseNamedSpecifiers()
1491 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_MULTIPLY) { in ParseNamedSpecifiers()
1501 lexer::Token importedToken = Lexer()->GetToken(); in ParseNamedSpecifiers()
1504 imported->SetRange(Lexer()->GetToken().Loc()); in ParseNamedSpecifiers()
1506 Lexer()->NextToken(); in ParseNamedSpecifiers()
1508 if (CheckModuleAsModifier() && Lexer()->TryEatTokenType(lexer::TokenType::KEYW_AS)) { in ParseNamedSpecifiers()
1509 local = ParseNamedImport(&Lexer()->GetToken()); in ParseNamedSpecifiers()
1510 Lexer()->NextToken(); in ParseNamedSpecifiers()
1524 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_COMMA) { in ParseNamedSpecifiers()
1525 Lexer()->NextToken(lexer::NextTokenFlags::KEYWORD_TO_IDENT); // eat comma in ParseNamedSpecifiers()
1532 Lexer()->NextToken(); // eat '}' in ParseNamedSpecifiers()
1541 lexer::SourcePosition namespaceStart = Lexer()->GetToken().Start(); in ParseNameSpaceSpecifier()
1542 Lexer()->NextToken(); // eat `*` character in ParseNameSpaceSpecifier()
1550 if (Lexer()->GetToken().KeywordType() == lexer::TokenType::KEYW_FROM && !isReExport && in ParseNameSpaceSpecifier()
1552 LogExpectedToken(lexer::TokenType::KEYW_AS); // invalid_namespce_import.sts in ParseNameSpaceSpecifier()
1556 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_COMMA || in ParseNameSpaceSpecifier()
1557 Lexer()->GetToken().KeywordType() == lexer::TokenType::KEYW_FROM || isReExport) { in ParseNameSpaceSpecifier()
1559 specifier->SetRange({namespaceStart, Lexer()->GetToken().End()}); in ParseNameSpaceSpecifier()
1564 ExpectToken(lexer::TokenType::KEYW_AS, true); // eat `as` literal in ParseNameSpaceSpecifier()
1565 local = ParseNamedImport(&Lexer()->GetToken()); in ParseNameSpaceSpecifier()
1568 specifier->SetRange({namespaceStart, Lexer()->GetToken().End()}); in ParseNameSpaceSpecifier()
1571 Lexer()->NextToken(); // eat local name in ParseNameSpaceSpecifier()
1576 if (Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_IDENT) { in ParseImportDefaultSpecifier()
1577 LogExpectedToken(lexer::TokenType::LITERAL_IDENT); in ParseImportDefaultSpecifier()
1580 auto *imported = AllocNode<ir::Identifier>(Lexer()->GetToken().Ident(), Allocator()); in ParseImportDefaultSpecifier()
1581 imported->SetRange(Lexer()->GetToken().Loc()); in ParseImportDefaultSpecifier()
1582 Lexer()->NextToken(); // Eat import specifier. in ParseImportDefaultSpecifier()
1584 if (Lexer()->GetToken().KeywordType() != lexer::TokenType::KEYW_FROM) { in ParseImportDefaultSpecifier()
1585 LogExpectedToken(lexer::TokenType::KEYW_FROM); in ParseImportDefaultSpecifier()
1586 Lexer()->NextToken(); // eat 'from' in ParseImportDefaultSpecifier()
1598 if ((Lexer()->GetToken().Flags() & lexer::TokenFlags::HAS_ESCAPE) != 0U) { in CheckModuleAsModifier()
1609 switch (Lexer()->GetToken().Type()) { in GetAnnotatedExpressionFromParam()
1610 case lexer::TokenType::LITERAL_IDENT: { in GetAnnotatedExpressionFromParam()
1611 parameter = AllocNode<ir::Identifier>(Lexer()->GetToken().Ident(), Allocator()); in GetAnnotatedExpressionFromParam()
1613 parameter->SetRange(Lexer()->GetToken().Loc()); in GetAnnotatedExpressionFromParam()
1616 … {parameter->AsIdentifier()->Decorators().front()->Start(), Lexer()->GetToken().End()}); in GetAnnotatedExpressionFromParam()
1621 case lexer::TokenType::PUNCTUATOR_PERIOD_PERIOD_PERIOD: { in GetAnnotatedExpressionFromParam()
1622 const auto startLoc = Lexer()->GetToken().Start(); in GetAnnotatedExpressionFromParam()
1623 Lexer()->NextToken(); in GetAnnotatedExpressionFromParam()
1625 if (Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_IDENT) { in GetAnnotatedExpressionFromParam()
1626 LogExpectedToken(lexer::TokenType::LITERAL_IDENT); in GetAnnotatedExpressionFromParam()
1629 … auto *const restIdent = AllocNode<ir::Identifier>(Lexer()->GetToken().Ident(), Allocator()); in GetAnnotatedExpressionFromParam()
1630 restIdent->SetRange(Lexer()->GetToken().Loc()); in GetAnnotatedExpressionFromParam()
1633 parameter->SetRange({startLoc, Lexer()->GetToken().End()}); in GetAnnotatedExpressionFromParam()
1643 Lexer()->NextToken(); in GetAnnotatedExpressionFromParam()
1680 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_QUESTION_MARK) { in ParseFunctionParameter()
1685 defaultUndef->SetRange({Lexer()->GetToken().Start(), Lexer()->GetToken().End()}); in ParseFunctionParameter()
1686 Lexer()->NextToken(); // eat '?' in ParseFunctionParameter()
1691 if (Lexer()->TryEatTokenType(lexer::TokenType::PUNCTUATOR_COLON)) { in ParseFunctionParameter()
1719 paramIdent->SetRange(Lexer()->GetToken().Loc()); in CreateParameterThis()
1734 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_QUESTION_MARK) { in ParseVariableDeclaratorKey()
1738 Lexer()->NextToken(); // eat '?' in ParseVariableDeclaratorKey()
1742 …if (auto const tokenType = Lexer()->GetToken().Type(); tokenType == lexer::TokenType::PUNCTUATOR_C… in ParseVariableDeclaratorKey()
1743 Lexer()->NextToken(); // eat ':' in ParseVariableDeclaratorKey()
1746 …} else if (tokenType != lexer::TokenType::PUNCTUATOR_SUBSTITUTION && (flags & VariableParsingFlags… in ParseVariableDeclaratorKey()
1759 … const lexer::SourcePosition &startLoc) in ParseVariableDeclaratorInitializer()
1765 Lexer()->NextToken(); in ParseVariableDeclaratorInitializer()
1772 lexer::SourcePosition endLoc = initializer->End(); in ParseVariableDeclaratorInitializer()
1780 ir::VariableDeclarator *ETSParser::ParseVariableDeclarator(ir::Expression *init, lexer::SourcePosit… in ParseVariableDeclarator()
1783 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_SUBSTITUTION) { in ParseVariableDeclarator()
1796 lexer::SourcePosition endLoc = init->End(); in ParseVariableDeclarator()
1806 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_LEFT_PARENTHESIS) { in ParseCatchParam()
1807 LogExpectedToken(lexer::TokenType::PUNCTUATOR_LEFT_PARENTHESIS); in ParseCatchParam()
1812 Lexer()->NextToken(); // eat left paren in ParseCatchParam()
1815 if (Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_IDENT) { in ParseCatchParam()
1818 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_RIGHT_PARENTHESIS) { in ParseCatchParam()
1821 Lexer()->GetToken().SetTokenType(lexer::TokenType::LITERAL_IDENT); in ParseCatchParam()
1822 Lexer()->GetToken().SetTokenStr(ERROR_LITERAL); in ParseCatchParam()
1826 Lexer()->NextToken(); // eat right paren in ParseCatchParam()
1834 if (Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_RIGHT_PARENTHESIS) { in ParseCatchParam()
1835 LogExpectedToken(lexer::TokenType::PUNCTUATOR_RIGHT_PARENTHESIS); in ParseCatchParam()
1838 Lexer()->NextToken(); // eat right paren in ParseCatchParam()
1845 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_COLON) { in ParseCatchParamTypeAnnotation()
1846 Lexer()->NextToken(); // eat ':' in ParseCatchParamTypeAnnotation()
1855 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_SUBSTITUTION) { in ParseCatchParamTypeAnnotation()
1862 char32_t nextChar = Lexer()->Lookahead(); in ParseImportDeclaration()
1863 if (nextChar == lexer::LEX_CHAR_LEFT_PAREN || nextChar == lexer::LEX_CHAR_DOT) { in ParseImportDeclaration()
1867 lexer::SourcePosition startLoc = Lexer()->GetToken().Start(); in ParseImportDeclaration()
1868 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()
1887 lexer::SourcePosition endLoc = importSource->Source()->End(); in ParseImportDeclaration()
1898 ThrowUnexpectedToken(lexer::TokenType::KEYW_EXPORT); in ParseExportDeclaration()
1901 ir::Expression *ETSParser::ParseExpressionOrTypeAnnotation(lexer::TokenType type, in ParseExpressionOrTypeAnnotation()
1904 if (type == lexer::TokenType::KEYW_INSTANCEOF) { in ParseExpressionOrTypeAnnotation()
1907 if (Lexer()->GetToken().Type() == lexer::TokenType::LITERAL_NULL) { in ParseExpressionOrTypeAnnotation()
1909 typeAnnotation->SetRange(Lexer()->GetToken().Loc()); in ParseExpressionOrTypeAnnotation()
1910 Lexer()->NextToken(); in ParseExpressionOrTypeAnnotation()
1922 … [[maybe_unused]] const lexer::SourcePosition &startLoc, in ParsePotentialGenericFunctionCall()
1925 if (Lexer()->Lookahead() == lexer::LEX_CHAR_LESS_THAN || in ParsePotentialGenericFunctionCall()
1930 const auto savedPos = Lexer()->Save(); in ParsePotentialGenericFunctionCall()
1932 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_SHIFT) { in ParsePotentialGenericFunctionCall()
1933 Lexer()->BackwardToken(lexer::TokenType::PUNCTUATOR_LESS_THAN, 1); in ParsePotentialGenericFunctionCall()
1941 Lexer()->Rewind(savedPos); in ParsePotentialGenericFunctionCall()
1946 …if (!Lexer()->GetToken().NewLine() && Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_L… in ParsePotentialGenericFunctionCall()
1947 LogExpectedToken(lexer::TokenType::PUNCTUATOR_LEFT_PARENTHESIS); in ParsePotentialGenericFunctionCall()
1950 if (Lexer()->GetToken().NewLine()) { in ParsePotentialGenericFunctionCall()
1954 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_PARENTHESIS) { in ParsePotentialGenericFunctionCall()
1964 Lexer()->Rewind(savedPos); in ParsePotentialGenericFunctionCall()
1975 switch (Lexer()->GetToken().KeywordType()) { in ParseTypeVarianceModifier()
1976 case lexer::TokenType::KEYW_IN: { in ParseTypeVarianceModifier()
1977 Lexer()->NextToken(); in ParseTypeVarianceModifier()
1980 case lexer::TokenType::KEYW_OUT: { in ParseTypeVarianceModifier()
1981 Lexer()->NextToken(); in ParseTypeVarianceModifier()
1992 auto const startPos = Lexer()->GetToken().Start(); in ParseAmbientSignature()
1994 if (Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_IDENT) { in ParseAmbientSignature()
1996 LogSyntaxError("Unexpected token at", Lexer()->GetToken().Start()); in ParseAmbientSignature()
1997 auto pos = Lexer()->Save(); in ParseAmbientSignature()
1998 Lexer()->NextToken(); in ParseAmbientSignature()
1999 while (Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_IDENT) { in ParseAmbientSignature()
2001 Lexer()->Rewind(pos); in ParseAmbientSignature()
2002 Lexer()->NextToken(); in ParseAmbientSignature()
2003 pos = Lexer()->Save(); in ParseAmbientSignature()
2005 if (Lexer()->GetToken().Type() == lexer::TokenType::LITERAL_IDENT) { in ParseAmbientSignature()
2008 Lexer()->GetToken().SetTokenType(lexer::TokenType::LITERAL_IDENT); in ParseAmbientSignature()
2009 Lexer()->GetToken().SetTokenStr(ERROR_LITERAL); in ParseAmbientSignature()
2012 auto const indexName = Lexer()->GetToken().Ident(); in ParseAmbientSignature()
2014 if (Lexer()->NextToken(); Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_COLON) { in ParseAmbientSignature()
2016 LogSyntaxError("Index type expected in index signature", Lexer()->GetToken().Start()); in ParseAmbientSignature()
2018 Lexer()->GetToken().SetTokenType(lexer::TokenType::PUNCTUATOR_COLON); in ParseAmbientSignature()
2022 if (Lexer()->NextToken(); Lexer()->GetToken().KeywordType() != lexer::TokenType::KEYW_NUMBER) { in ParseAmbientSignature()
2024 LogSyntaxError("Index type must be number in index signature", Lexer()->GetToken().Start()); in ParseAmbientSignature()
2026 Lexer()->GetToken().SetTokenType(lexer::TokenType::KEYW_NUMBER); in ParseAmbientSignature()
2030 …if (Lexer()->NextToken(); Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_RIGHT_SQUARE_… in ParseAmbientSignature()
2032 LogSyntaxError("] expected in index signature", Lexer()->GetToken().Start()); in ParseAmbientSignature()
2034 Lexer()->GetToken().SetTokenType(lexer::TokenType::PUNCTUATOR_RIGHT_SQUARE_BRACKET); in ParseAmbientSignature()
2038 if (Lexer()->NextToken(); Lexer()->GetToken().Type() != lexer::TokenType::PUNCTUATOR_COLON) { in ParseAmbientSignature()
2040 … LogSyntaxError("An index signature must have a type annotation.", Lexer()->GetToken().Start()); in ParseAmbientSignature()
2042 Lexer()->GetToken().SetTokenType(lexer::TokenType::PUNCTUATOR_COLON); in ParseAmbientSignature()
2046 if (Lexer()->NextToken(); Lexer()->GetToken().Type() != lexer::TokenType::LITERAL_IDENT) { in ParseAmbientSignature()
2049 Lexer()->GetToken().Start()); in ParseAmbientSignature()
2051 Lexer()->GetToken().SetTokenType(lexer::TokenType::LITERAL_IDENT); in ParseAmbientSignature()
2052 Lexer()->GetToken().SetTokenStr(ERROR_LITERAL); in ParseAmbientSignature()
2055 …AllocNode<ir::ETSTypeReferencePart>(AllocNode<ir::Identifier>(Lexer()->GetToken().Ident(), Allocat… in ParseAmbientSignature()
2059 dummyNode->SetRange({startPos, Lexer()->GetToken().End()}); in ParseAmbientSignature()
2060 Lexer()->NextToken(); // eat return type in ParseAmbientSignature()
2066 lexer::SourcePosition startLoc = Lexer()->GetToken().Start(); in ParseTypeParameter()
2069 switch (Lexer()->GetToken().KeywordType()) { in ParseTypeParameter()
2070 case lexer::TokenType::KEYW_IN: in ParseTypeParameter()
2071 case lexer::TokenType::KEYW_OUT: in ParseTypeParameter()
2081 if (Lexer()->GetToken().Type() == lexer::TokenType::KEYW_EXTENDS) { in ParseTypeParameter()
2082 Lexer()->NextToken(); in ParseTypeParameter()
2090 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_SUBSTITUTION) { in ParseTypeParameter()
2091 Lexer()->NextToken(); // eat '=' in ParseTypeParameter()
2097 typeParam->SetRange({startLoc, Lexer()->GetToken().End()}); in ParseTypeParameter()
2108 return (Lexer()->GetToken().Type() == lexer::TokenType::LITERAL_IDENT && in IsStructKeyword()
2109 Lexer()->GetToken().KeywordType() == lexer::TokenType::KEYW_STRUCT); in IsStructKeyword()
2114 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_LEFT_BRACE) { in ParseTrailingBlock()
2115 callExpr->SetIsTrailingBlockInNewLine(Lexer()->GetToken().NewLine()); in ParseTrailingBlock()
2122 ASSERT(Lexer()->GetToken().KeywordType() == lexer::TokenType::KEYW_DECLARE); in CheckDeclare()
2130 Lexer()->NextToken(); // eat 'declare' in CheckDeclare()
2132 switch (Lexer()->GetToken().KeywordType()) { in CheckDeclare()
2133 case lexer::TokenType::KEYW_LET: in CheckDeclare()
2134 case lexer::TokenType::KEYW_CONST: in CheckDeclare()
2135 case lexer::TokenType::KEYW_FUNCTION: in CheckDeclare()
2136 case lexer::TokenType::KEYW_CLASS: in CheckDeclare()
2137 case lexer::TokenType::KEYW_NAMESPACE: in CheckDeclare()
2138 case lexer::TokenType::KEYW_ENUM: in CheckDeclare()
2139 case lexer::TokenType::KEYW_ABSTRACT: in CheckDeclare()
2140 case lexer::TokenType::KEYW_FINAL: in CheckDeclare()
2141 case lexer::TokenType::KEYW_INTERFACE: in CheckDeclare()
2142 case lexer::TokenType::KEYW_ASYNC: { in CheckDeclare()
2146 if (Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_AT) { in CheckDeclare()
2156 const char32_t savedHead = Lexer()->Lookahead(); in ParseExtensionFunctionsTypeAnnotation()
2168 if (savedHead == lexer::LEX_CHAR_LEFT_SQUARE) { in ParseExtensionFunctionsTypeAnnotation()
2177 lexer::SourcePosition startLoc = Lexer()->GetToken().Start(); in ParseFunctionDeclaration()
2179 ASSERT(Lexer()->GetToken().Type() == lexer::TokenType::KEYW_FUNCTION); in ParseFunctionDeclaration()
2180 Lexer()->NextToken(); in ParseFunctionDeclaration()
2187 if (Lexer()->TryEatTokenType(lexer::TokenType::PUNCTUATOR_MULTIPLY)) { in ParseFunctionDeclaration()
2194 …if (Lexer()->Lookahead() == lexer::LEX_CHAR_DOT || Lexer()->Lookahead() == lexer::LEX_CHAR_LEFT_SQ… in ParseFunctionDeclaration()
2198 Lexer()->NextToken(); // eat '.' in ParseFunctionDeclaration()
2200 } else if (Lexer()->GetToken().Type() == lexer::TokenType::LITERAL_IDENT) { in ParseFunctionDeclaration()
2217 … if (func->IsOverload() && Lexer()->GetToken().Type() == lexer::TokenType::PUNCTUATOR_SEMI_COLON) { in ParseFunctionDeclaration()
2218 Lexer()->NextToken(); in ParseFunctionDeclaration()
2247 savedLexer_(parser_->Lexer()), in ExternalSourceParser()
2268 savedLexer_(parser_->Lexer()), in InnerSourceParser()