|
clang
5.0.0
|
Parser - This implements a parser for the C family of languages. More...
#include "clang/Parse/Parser.h"
Classes | |
| struct | ConditionDeclarationOrInitStatementState |
| class | ObjCTypeParamListScope |
| Class to handle popping type parameters when leaving the scope. More... | |
| struct | OpenMPVarListDataTy |
| Data used for parsing list of variables in OpenMP clauses. More... | |
| class | ParseScope |
| ParseScope - Introduces a new scope for parsing. More... | |
| class | UnannotatedTentativeParsingAction |
| A tentative parsing action that can also revert token annotations. More... | |
Public Types | |
| enum | SkipUntilFlags { StopAtSemi = 1 << 0, StopBeforeMatch = 1 << 1, StopAtCodeCompletion = 1 << 2 } |
| Control flags for SkipUntil functions. More... | |
| enum | TypeCastState { NotTypeCast = 0, MaybeTypeCast, IsTypeCast } |
| TypeCastState - State whether an expression is or may be a type cast. More... | |
| typedef OpaquePtr< DeclGroupRef > | DeclGroupPtrTy |
| typedef OpaquePtr< TemplateName > | TemplateTy |
| typedef SmallVector < TemplateParameterList *, 4 > | TemplateParameterLists |
| typedef Sema::FullExprArg | FullExprArg |
Public Member Functions | |
| Parser (Preprocessor &PP, Sema &Actions, bool SkipFunctionBodies) | |
| ~Parser () override | |
| const LangOptions & | getLangOpts () const |
| const TargetInfo & | getTargetInfo () const |
| Preprocessor & | getPreprocessor () const |
| Sema & | getActions () const |
| AttributeFactory & | getAttrFactory () |
| const Token & | getCurToken () const |
| Scope * | getCurScope () const |
| void | incrementMSManglingNumber () const |
| Decl * | getObjCDeclContext () const |
| void | Initialize () |
| Initialize - Warm up the parser. More... | |
| bool | ParseFirstTopLevelDecl (DeclGroupPtrTy &Result) |
| Parse the first top-level declaration in a translation unit. More... | |
| bool | ParseTopLevelDecl (DeclGroupPtrTy &Result) |
| ParseTopLevelDecl - Parse one top-level declaration. More... | |
| bool | ParseTopLevelDecl () |
| SourceLocation | ConsumeToken () |
| ConsumeToken - Consume the current 'peek token' and lex the next one. More... | |
| bool | TryConsumeToken (tok::TokenKind Expected) |
| bool | TryConsumeToken (tok::TokenKind Expected, SourceLocation &Loc) |
| SourceLocation | getEndOfPreviousToken () |
| IdentifierInfo * | getNullabilityKeyword (NullabilityKind nullability) |
| Retrieve the underscored keyword (_Nonnull, _Nullable) that corresponds to the given nullability kind. More... | |
| const Token & | NextToken () |
| NextToken - This peeks ahead one token and returns it without consuming it. More... | |
| bool | TryAnnotateTypeOrScopeToken () |
| TryAnnotateTypeOrScopeToken - If the current token position is on a typename (possibly qualified in C++) or a C++ scope specifier not followed by a typename, TryAnnotateTypeOrScopeToken will replace one or more tokens with a single annotation token representing the typename or C++ scope respectively. More... | |
| bool | TryAnnotateTypeOrScopeTokenAfterScopeSpec (CXXScopeSpec &SS, bool IsNewScope) |
| Try to annotate a type or scope token, having already parsed an optional scope specifier. More... | |
| bool | TryAnnotateCXXScopeToken (bool EnteringContext=false) |
| TryAnnotateScopeToken - Like TryAnnotateTypeOrScopeToken but only annotates C++ scope specifiers and template-ids. More... | |
| void | EnterScope (unsigned ScopeFlags) |
| EnterScope - Start a new scope. More... | |
| void | ExitScope () |
| ExitScope - Pop a scope off the scope stack. More... | |
| DiagnosticBuilder | Diag (SourceLocation Loc, unsigned DiagID) |
| DiagnosticBuilder | Diag (const Token &Tok, unsigned DiagID) |
| DiagnosticBuilder | Diag (unsigned DiagID) |
| bool | SkipUntil (tok::TokenKind T, SkipUntilFlags Flags=static_cast< SkipUntilFlags >(0)) |
| SkipUntil - Read tokens until we get to the specified token, then consume it (unless StopBeforeMatch is specified). More... | |
| bool | SkipUntil (tok::TokenKind T1, tok::TokenKind T2, SkipUntilFlags Flags=static_cast< SkipUntilFlags >(0)) |
| bool | SkipUntil (tok::TokenKind T1, tok::TokenKind T2, tok::TokenKind T3, SkipUntilFlags Flags=static_cast< SkipUntilFlags >(0)) |
| bool | SkipUntil (ArrayRef< tok::TokenKind > Toks, SkipUntilFlags Flags=static_cast< SkipUntilFlags >(0)) |
| SkipUntil - Read tokens until we get to the specified token, then consume it (unless no flag StopBeforeMatch). More... | |
| void | SkipMalformedDecl () |
| SkipMalformedDecl - Read tokens until we get to some likely good stopping point for skipping past a simple-declaration. More... | |
| ExprResult | ParseExpression (TypeCastState isTypeCast=NotTypeCast) |
| Simple precedence-based parser for binary/ternary operators. More... | |
| ExprResult | ParseConstantExpressionInExprEvalContext (TypeCastState isTypeCast=NotTypeCast) |
| ExprResult | ParseConstantExpression (TypeCastState isTypeCast=NotTypeCast) |
| ExprResult | ParseConstraintExpression () |
| Parse a constraint-expression. More... | |
| ExprResult | ParseAssignmentExpression (TypeCastState isTypeCast=NotTypeCast) |
| Parse an expr that doesn't include (top-level) commas. More... | |
| ExprResult | ParseMSAsmIdentifier (llvm::SmallVectorImpl< Token > &LineToks, unsigned &NumLineToksConsumed, void *Info, bool IsUnevaluated) |
| Parse an identifier in an MS-style inline assembly block. More... | |
| TypeResult | ParseTypeName (SourceRange *Range=nullptr, Declarator::TheContext Context=Declarator::TypeNameContext, AccessSpecifier AS=AS_none, Decl **OwnedType=nullptr, ParsedAttributes *Attrs=nullptr) |
| ParseTypeName type-name: [C99 6.7.6] specifier-qualifier-list abstract-declarator[opt]. More... | |
| ExprResult | ParseOpenMPParensExpr (StringRef ClauseName, SourceLocation &RLoc) |
| Parses simple expression in parens for single-expression clauses of OpenMP constructs. More... | |
| bool | ParseOpenMPVarList (OpenMPDirectiveKind DKind, OpenMPClauseKind Kind, SmallVectorImpl< Expr * > &Vars, OpenMPVarListDataTy &Data) |
| Parses clauses with list. More... | |
| bool | ParseUnqualifiedId (CXXScopeSpec &SS, bool EnteringContext, bool AllowDestructorName, bool AllowConstructorName, bool AllowDeductionGuide, ParsedType ObjectType, SourceLocation &TemplateKWLoc, UnqualifiedId &Result) |
| Parse a C++ unqualified-id (or a C identifier), which describes the name of an entity. More... | |
Public Member Functions inherited from clang::CodeCompletionHandler | |
| virtual | ~CodeCompletionHandler () |
Static Public Member Functions | |
| static ParsedType | getTypeAnnotation (const Token &Tok) |
| getTypeAnnotation - Read a parsed type out of an annotation token. More... | |
Friends | |
| class | ColonProtectionRAIIObject |
| class | InMessageExpressionRAIIObject |
| class | PoisonSEHIdentifiersRAIIObject |
| class | ObjCDeclContextSwitch |
| class | ParenBraceBracketBalancer |
| class | BalancedDelimiterTracker |
| constexpr SkipUntilFlags | operator| (SkipUntilFlags L, SkipUntilFlags R) |
Parser - This implements a parser for the C family of languages.
After parsing units of the grammar, productions are invoked to handle whatever has been read.
| Parser::Parser | ( | Preprocessor & | PP, |
| Sema & | Actions, | ||
| bool | SkipFunctionBodies | ||
| ) |
Definition at line 50 of file Parser.cpp.
References clang::Preprocessor::addCommentHandler(), clang::comments::tok::eof, clang::Preprocessor::isCodeCompletionEnabled(), clang::Preprocessor::setCodeCompletionHandler(), clang::Token::setKind(), and clang::Token::startToken().
|
override |
Definition at line 408 of file Parser.cpp.
References clang::Preprocessor::clearCodeCompletionHandler(), getCurScope(), getLangOpts(), clang::Preprocessor::isIncrementalProcessingEnabled(), and clang::Preprocessor::removeCommentHandler().
|
inline |
ConsumeToken - Consume the current 'peek token' and lex the next one.
This does not work with special tokens: string literals, code completion, annotation tokens and balanced tokens must be handled using the specific consume methods. Returns the location of the consumed token.
Definition at line 312 of file Parser.h.
References clang::Token::getLocation(), and clang::Preprocessor::Lex().
Referenced by clang::BalancedDelimiterTracker::consumeClose(), Initialize(), parseDeclareSimdClauses(), ParseMSAsmIdentifier(), ParseOpenMPDirectiveKind(), parseOpenMPReductionId(), ParseOpenMPVarList(), ParseReductionId(), ParseTopLevelDecl(), ParseUnqualifiedId(), SkipMalformedDecl(), TryAnnotateTypeOrScopeToken(), TryAnnotateTypeOrScopeTokenAfterScopeSpec(), and tryConsumeMutableOrConstexprToken().
| DiagnosticBuilder Parser::Diag | ( | SourceLocation | Loc, |
| unsigned | DiagID | ||
| ) |
Definition at line 72 of file Parser.cpp.
References clang::DiagnosticsEngine::Report().
Referenced by addConstexprToLambdaDeclSpecifier(), CheckArrayDesignatorSyntax(), CheckAvailabilitySpecList(), clang::BalancedDelimiterTracker::consumeClose(), Diag(), diagnoseDynamicExceptionSpecification(), diagnoseExpectedAttributeSubjectSubRule(), diagnoseUnknownAttributeSubjectSubRule(), FixDigraph(), parseDeclareSimdClauses(), ParseFirstTopLevelDecl(), parseOpenMPReductionId(), ParseOpenMPVarList(), ParseUnqualifiedId(), TryAnnotateTypeOrScopeToken(), and tryConsumeMutableOrConstexprToken().
| DiagnosticBuilder Parser::Diag | ( | const Token & | Tok, |
| unsigned | DiagID | ||
| ) |
Definition at line 76 of file Parser.cpp.
References Diag(), and clang::Token::getLocation().
|
inline |
| void Parser::EnterScope | ( | unsigned | ScopeFlags | ) |
EnterScope - Start a new scope.
Definition at line 358 of file Parser.cpp.
References getCurScope(), and clang::Scope::Init().
Referenced by Initialize(), and clang::Parser::ParseScope::ParseScope().
| void Parser::ExitScope | ( | ) |
ExitScope - Pop a scope off the scope stack.
Definition at line 369 of file Parser.cpp.
References clang::Sema::ActOnPopScope(), getCurScope(), clang::Token::getLocation(), and clang::Scope::getParent().
Referenced by clang::Parser::ParseScope::Exit().
|
inline |
Definition at line 270 of file Parser.h.
Referenced by clang::ParseAST(), parseDeclareSimdClauses(), and parseOpenMPReductionId().
|
inline |
|
inline |
Definition at line 274 of file Parser.h.
References clang::Sema::getCurScope().
Referenced by EnterScope(), ExitScope(), Initialize(), ParseAssignmentExpression(), ParseTypeName(), ParseUnqualifiedId(), TryAnnotateTypeOrScopeToken(), TryAnnotateTypeOrScopeTokenAfterScopeSpec(), and ~Parser().
|
inline |
Definition at line 273 of file Parser.h.
Referenced by parseDeclareSimdClauses(), ParseOpenMPDirectiveKind(), parseOpenMPReductionId(), ParseReductionId(), and tryConsumeMutableOrConstexprToken().
|
inline |
Definition at line 337 of file Parser.h.
References clang::Preprocessor::getLocForEndOfToken().
|
inline |
Definition at line 267 of file Parser.h.
References clang::Preprocessor::getLangOpts().
Referenced by addConstexprToLambdaDeclSpecifier(), clang::BalancedDelimiterTracker::consumeOpen(), diagnoseDynamicExceptionSpecification(), Initialize(), ParseFirstTopLevelDecl(), ParseMSAsmIdentifier(), ParseOpenMPVarList(), ParseTopLevelDecl(), ParseUnqualifiedId(), TryAnnotateCXXScopeToken(), TryAnnotateTypeOrScopeToken(), TryAnnotateTypeOrScopeTokenAfterScopeSpec(), and ~Parser().
|
inline |
Retrieve the underscored keyword (_Nonnull, _Nullable) that corresponds to the given nullability kind.
Definition at line 343 of file Parser.h.
References clang::Sema::getNullabilityKeyword().
Referenced by addContextSensitiveTypeNullability().
|
inline |
Definition at line 279 of file Parser.h.
References clang::Sema::getObjCDeclContext().
|
inline |
Definition at line 269 of file Parser.h.
Referenced by ParseOpenMPDirectiveKind().
|
inline |
Definition at line 268 of file Parser.h.
References clang::Preprocessor::getTargetInfo().
|
inlinestatic |
getTypeAnnotation - Read a parsed type out of an annotation token.
Definition at line 607 of file Parser.h.
References clang::Token::getAnnotationValue(), and clang::OpaquePtr< QualType >::getFromOpaquePtr().
|
inline |
Definition at line 275 of file Parser.h.
References clang::Sema::incrementMSManglingNumber().
Referenced by clang::Parser::ParseScope::ParseScope().
| void Parser::Initialize | ( | ) |
Initialize - Warm up the parser.
Definition at line 437 of file Parser.cpp.
References clang::Sema::ActOnTranslationUnitScope(), ConsumeToken(), clang::Scope::DeclScope, EnterScope(), clang::IdentifierTable::get(), getCurScope(), clang::Preprocessor::getIdentifierInfo(), clang::Preprocessor::getIdentifierTable(), getLangOpts(), clang::Sema::Initialize(), and clang::Preprocessor::SetPoisonReason().
Referenced by clang::ParseAST().
|
inline |
NextToken - This peeks ahead one token and returns it without consuming it.
Definition at line 602 of file Parser.h.
References clang::Preprocessor::LookAhead().
Referenced by clang::BalancedDelimiterTracker::consumeClose(), ParseTopLevelDecl(), ParseUnqualifiedId(), SkipMalformedDecl(), TryAnnotateCXXScopeToken(), TryAnnotateTypeOrScopeToken(), and TryAnnotateTypeOrScopeTokenAfterScopeSpec().
| ExprResult Parser::ParseAssignmentExpression | ( | TypeCastState | isTypeCast = NotTypeCast | ) |
Parse an expr that doesn't include (top-level) commas.
Definition at line 156 of file ParseExpr.cpp.
References clang::prec::Assignment, clang::Sema::CodeCompleteOrdinaryName(), clang::ExprError(), getCurScope(), clang::Token::is(), and clang::Sema::PCC_Expression.
Referenced by ParseExpression(), and ParseOpenMPVarList().
| ExprResult Parser::ParseConstantExpression | ( | TypeCastState | isTypeCast = NotTypeCast | ) |
Definition at line 206 of file ParseExpr.cpp.
References clang::Sema::ConstantEvaluated, and ParseConstantExpressionInExprEvalContext().
| ExprResult Parser::ParseConstantExpressionInExprEvalContext | ( | TypeCastState | isTypeCast = NotTypeCast | ) |
Definition at line 196 of file ParseExpr.cpp.
References clang::Sema::ActOnConstantExpression(), clang::prec::Conditional, clang::Sema::ConstantEvaluated, and clang::Sema::ExprEvalContexts.
Referenced by ParseConstantExpression().
| ExprResult Parser::ParseConstraintExpression | ( | ) |
Parse a constraint-expression.
/// constraint-expression: [Concepts TS temp.constr.decl p1] /// logical-or-expression ///
Definition at line 222 of file ParseExpr.cpp.
References clang::prec::LogicalOr.
| ExprResult Parser::ParseExpression | ( | TypeCastState | isTypeCast = NotTypeCast | ) |
Simple precedence-based parser for binary/ternary operators.
Note: we diverge from the C99 grammar when parsing the assignment-expression production. C99 specifies that the LHS of an assignment operator should be parsed as a unary-expression, but consistency dictates that it be a conditional-expession. In practice, the important thing here is that the LHS of an assignment has to be an l-value, which productions between unary-expression and conditional-expression don't produce. Because we want consistency, we parse the LHS as a conditional-expression, then check for l-value-ness in semantic analysis stages.
/// pm-expression: [C++ 5.5] /// cast-expression /// pm-expression '.*' cast-expression /// pm-expression '->*' cast-expression /// /// multiplicative-expression: [C99 6.5.5] /// Note: in C++, apply pm-expression instead of cast-expression /// cast-expression /// multiplicative-expression '*' cast-expression /// multiplicative-expression '/' cast-expression /// multiplicative-expression '%' cast-expression /// /// additive-expression: [C99 6.5.6] /// multiplicative-expression /// additive-expression '+' multiplicative-expression /// additive-expression '-' multiplicative-expression /// /// shift-expression: [C99 6.5.7] /// additive-expression /// shift-expression '<<' additive-expression /// shift-expression '>>' additive-expression /// /// relational-expression: [C99 6.5.8] /// shift-expression /// relational-expression '<' shift-expression /// relational-expression '>' shift-expression /// relational-expression '<=' shift-expression /// relational-expression '>=' shift-expression /// /// equality-expression: [C99 6.5.9] /// relational-expression /// equality-expression '==' relational-expression /// equality-expression '!=' relational-expression /// /// AND-expression: [C99 6.5.10] /// equality-expression /// AND-expression '&' equality-expression /// /// exclusive-OR-expression: [C99 6.5.11] /// AND-expression /// exclusive-OR-expression '^' AND-expression /// /// inclusive-OR-expression: [C99 6.5.12] /// exclusive-OR-expression /// inclusive-OR-expression '|' exclusive-OR-expression /// /// logical-AND-expression: [C99 6.5.13] /// inclusive-OR-expression /// logical-AND-expression '&&' inclusive-OR-expression /// /// logical-OR-expression: [C99 6.5.14] /// logical-AND-expression /// logical-OR-expression '||' logical-AND-expression /// /// conditional-expression: [C99 6.5.15] /// logical-OR-expression /// logical-OR-expression '?' expression ':' conditional-expression /// [GNU] logical-OR-expression '?' ':' conditional-expression /// [C++] the third operand is an assignment-expression /// /// assignment-expression: [C99 6.5.16] /// conditional-expression /// unary-expression assignment-operator assignment-expression /// [C++] throw-expression [C++ 15] /// /// assignment-operator: one of /// = *= /= %= += -= <<= >>= &= ^= |= /// /// expression: [C99 6.5.17] /// assignment-expression ...[opt] /// expression ',' assignment-expression ...[opt] ///
Definition at line 119 of file ParseExpr.cpp.
References clang::prec::Comma, and ParseAssignmentExpression().
| bool Parser::ParseFirstTopLevelDecl | ( | DeclGroupPtrTy & | Result | ) |
Parse the first top-level declaration in a translation unit.
Definition at line 528 of file Parser.cpp.
References clang::Sema::ActOnStartOfTranslationUnit(), Diag(), clang::Sema::getASTContext(), clang::ASTContext::getExternalSource(), getLangOpts(), and ParseTopLevelDecl().
Referenced by clang::ParseAST().
| ExprResult Parser::ParseMSAsmIdentifier | ( | llvm::SmallVectorImpl< Token > & | LineToks, |
| unsigned & | NumLineToksConsumed, | ||
| void * | CastInfo, | ||
| bool | IsUnevaluatedContext | ||
| ) |
Parse an identifier in an MS-style inline assembly block.
| CastInfo | - a void* so that we don't have to teach Parser.h about the actual type. |
Definition at line 184 of file ParseStmtAsm.cpp.
References ConsumeToken(), clang::frontend::CPlusPlus, clang::ActionResult< PtrTy, CompressInvalid >::get(), clang::Token::getIdentifierInfo(), getLangOpts(), clang::Token::getLocation(), clang::IdentifierInfo::getName(), clang::Token::is(), clang::Token::isNot(), clang::ActionResult< PtrTy, CompressInvalid >::isUsable(), clang::Preprocessor::LookAhead(), clang::Sema::LookupInlineAsmIdentifier(), clang::Sema::LookupInlineAsmVarDeclField(), ParseUnqualifiedId(), clang::Result, clang::Token::setKind(), and clang::Token::startToken().
| ExprResult Parser::ParseOpenMPParensExpr | ( | StringRef | ClauseName, |
| SourceLocation & | RLoc | ||
| ) |
Parses simple expression in parens for single-expression clauses of OpenMP constructs.
| RLoc | Returned location of right paren. |
Definition at line 1255 of file ParseOpenMP.cpp.
References clang::prec::Conditional, clang::BalancedDelimiterTracker::consumeClose(), clang::BalancedDelimiterTracker::expectAndConsume(), clang::ExprError(), clang::ActionResult< PtrTy, CompressInvalid >::get(), clang::BalancedDelimiterTracker::getCloseLocation(), clang::Token::getLocation(), and NotTypeCast.
Referenced by parseDeclareSimdClauses().
| bool Parser::ParseOpenMPVarList | ( | OpenMPDirectiveKind | DKind, |
| OpenMPClauseKind | Kind, | ||
| SmallVectorImpl< Expr * > & | Vars, | ||
| OpenMPVarListDataTy & | Data | ||
| ) |
Parses clauses with list.
The map clause modifier token can be either a identifier or the C++ delete keyword.
Definition at line 1571 of file ParseOpenMP.cpp.
References clang::Parser::OpenMPVarListDataTy::ColonLoc, clang::BalancedDelimiterTracker::consumeClose(), clang::BalancedDelimiterTracker::consumeOpen(), ConsumeToken(), clang::frontend::CPlusPlus, clang::Parser::OpenMPVarListDataTy::DepKind, clang::Parser::OpenMPVarListDataTy::DepLinMapLoc, Diag(), clang::BalancedDelimiterTracker::expectAndConsume(), clang::ActionResult< PtrTy, CompressInvalid >::get(), getLangOpts(), clang::Token::getLocation(), clang::getOpenMPClauseName(), clang::getOpenMPDirectiveName(), clang::getOpenMPSimpleClauseType(), clang::Preprocessor::getSpelling(), clang::Token::is(), clang::Parser::OpenMPVarListDataTy::IsMapTypeImplicit, clang::Token::isNot(), clang::Token::isOneOf(), clang::ActionResult< PtrTy, CompressInvalid >::isUsable(), clang::Parser::OpenMPVarListDataTy::LinKind, clang::Preprocessor::LookAhead(), clang::Parser::OpenMPVarListDataTy::MapType, clang::Parser::OpenMPVarListDataTy::MapTypeModifier, clang::OMPC_DEPEND_unknown, clang::OMPC_MAP_unknown, ParseAssignmentExpression(), ParseReductionId(), clang::Parser::OpenMPVarListDataTy::ReductionId, clang::Parser::OpenMPVarListDataTy::ReductionIdScopeSpec, SkipUntil(), StopBeforeMatch, and clang::Parser::OpenMPVarListDataTy::TailExpr.
Referenced by parseDeclareSimdClauses().
| bool Parser::ParseTopLevelDecl | ( | DeclGroupPtrTy & | Result | ) |
ParseTopLevelDecl - Parse one top-level declaration.
ParseTopLevelDecl - Parse one top-level declaration, return whatever the action tells us to.
Returns true if the EOF was encountered.
This returns true if the EOF was encountered.
Definition at line 545 of file Parser.cpp.
References clang::Sema::ActOnEndOfTranslationUnit(), clang::Sema::ActOnModuleBegin(), clang::Sema::ActOnModuleEnd(), clang::Sema::ActOnModuleInclude(), ConsumeToken(), clang::comments::tok::eof, clang::Token::getAnnotationValue(), clang::Token::getKind(), getLangOpts(), clang::Token::getLocation(), clang::Token::is(), clang::Preprocessor::isIncrementalProcessingEnabled(), NextToken(), and clang::Sema::SetLateTemplateParser().
Referenced by clang::ParseAST().
|
inline |
Definition at line 302 of file Parser.h.
References clang::Result.
Referenced by ParseFirstTopLevelDecl().
| TypeResult Parser::ParseTypeName | ( | SourceRange * | Range = nullptr, |
| Declarator::TheContext | Context = Declarator::TypeNameContext, |
||
| AccessSpecifier | AS = AS_none, |
||
| Decl ** | OwnedType = nullptr, |
||
| ParsedAttributes * | Attrs = nullptr |
||
| ) |
ParseTypeName type-name: [C99 6.7.6] specifier-qualifier-list abstract-declarator[opt].
Called type-id in C++.
Definition at line 45 of file ParseDecl.cpp.
References clang::Sema::ActOnTypeName(), clang::DeclSpec::addAttributes(), getCurScope(), clang::ParsedAttributes::getList(), clang::DeclSpec::getRepAsDecl(), clang::Declarator::getSourceRange(), clang::Declarator::isInvalidType(), and clang::DeclSpec::isTypeSpecOwned().
| bool Parser::ParseUnqualifiedId | ( | CXXScopeSpec & | SS, |
| bool | EnteringContext, | ||
| bool | AllowDestructorName, | ||
| bool | AllowConstructorName, | ||
| bool | AllowDeductionGuide, | ||
| ParsedType | ObjectType, | ||
| SourceLocation & | TemplateKWLoc, | ||
| UnqualifiedId & | Result | ||
| ) |
Parse a C++ unqualified-id (or a C identifier), which describes the name of an entity.
| SS | The nested-name-specifier that preceded this unqualified-id. If non-empty, then we are parsing the unqualified-id of a qualified-id. |
| EnteringContext | whether we are entering the scope of the nested-name-specifier. |
| AllowDestructorName | whether we allow parsing of a destructor name. |
| AllowConstructorName | whether we allow parsing a constructor name. |
| AllowDeductionGuide | whether we allow parsing a deduction guide name. |
| ObjectType | if this unqualified-id occurs within a member access expression, the type of the base object whose member is being accessed. |
| Result | on a successful parse, contains the parsed unqualified-id. |
Definition at line 2430 of file ParseExprCXX.cpp.
References clang::CXXScopeSpec::clear(), ConsumeToken(), clang::frontend::CPlusPlus, clang::frontend::CPlusPlus1z, clang::FixItHint::CreateInsertion(), clang::FixItHint::CreateRemoval(), Diag(), getCurScope(), clang::Sema::getDestructorName(), clang::Sema::getDestructorTypeForDecltype(), clang::Token::getIdentifierInfo(), clang::UnqualifiedId::getKind(), getLangOpts(), clang::Token::getLocation(), clang::Sema::getTypeName(), clang::UnqualifiedId::IK_LiteralOperatorId, clang::UnqualifiedId::IK_OperatorFunctionId, clang::Token::is(), clang::Sema::isCurrentClassName(), clang::Sema::isDeductionGuideName(), clang::CXXScopeSpec::isEmpty(), clang::Token::isNot(), clang::CXXScopeSpec::isNotEmpty(), clang::CXXScopeSpec::isSet(), clang::TemplateIdAnnotation::LAngleLoc, clang::TemplateIdAnnotation::Name, NextToken(), clang::TemplateIdAnnotation::RAngleLoc, clang::UnqualifiedId::setConstructorName(), clang::UnqualifiedId::setConstructorTemplateId(), clang::UnqualifiedId::setDeductionGuideName(), clang::UnqualifiedId::setDestructorName(), clang::UnqualifiedId::setIdentifier(), clang::UnqualifiedId::setTemplateId(), clang::Sema::ShouldEnterDeclaratorScope(), clang::TemplateIdAnnotation::TemplateKWLoc, and clang::TemplateIdAnnotation::TemplateNameLoc.
Referenced by ParseMSAsmIdentifier(), and ParseReductionId().
| void Parser::SkipMalformedDecl | ( | ) |
SkipMalformedDecl - Read tokens until we get to some likely good stopping point for skipping past a simple-declaration.
Skip until we reach something which seems like a sensible place to pick up parsing after a malformed declaration.
This will sometimes stop sooner than SkipUntil(tok::r_brace) would, but will never stop later.
Definition at line 1810 of file ParseDecl.cpp.
References ConsumeToken(), clang::comments::tok::eof, clang::Token::getKind(), clang::Token::is(), clang::Token::isAtStartOfLine(), clang::Token::isObjCAtKeyword(), clang::Token::isOneOf(), NextToken(), SkipUntil(), and TryConsumeToken().
|
inline |
SkipUntil - Read tokens until we get to the specified token, then consume it (unless StopBeforeMatch is specified).
Because we cannot guarantee that the token will ever occur, this skips to the next token, or to some likely good stopping point. If Flags has StopAtSemi flag, skipping will stop at a ';' character.
If SkipUntil finds the specified token, it returns true, otherwise it returns false.
Definition at line 934 of file Parser.h.
Referenced by clang::Parser::ConditionDeclarationOrInitStatementState::markNotExpression(), parseOpenMPReductionId(), ParseOpenMPVarList(), SkipMalformedDecl(), and SkipUntil().
|
inline |
Definition at line 938 of file Parser.h.
References SkipUntil().
|
inline |
Definition at line 943 of file Parser.h.
References SkipUntil().
| bool Parser::SkipUntil | ( | ArrayRef< tok::TokenKind > | Toks, |
| SkipUntilFlags | Flags = static_cast<SkipUntilFlags>(0) |
||
| ) |
SkipUntil - Read tokens until we get to the specified token, then consume it (unless no flag StopBeforeMatch).
Because we cannot guarantee that the token will ever occur, this skips to the next token, or to some likely good stopping point. If StopAtSemi is true, skipping will stop at a ';' character.
If SkipUntil finds the specified token, it returns true, otherwise it returns false.
Definition at line 245 of file Parser.cpp.
References clang::comments::tok::eof, clang::Token::getKind(), HasFlagsSet(), clang::Token::is(), clang::Token::isNot(), SkipUntil(), StopAtCodeCompletion, StopAtSemi, and StopBeforeMatch.
TryAnnotateScopeToken - Like TryAnnotateTypeOrScopeToken but only annotates C++ scope specifiers and template-ids.
This returns true if there was an error that could not be recovered from.
Note that this routine emits an error if you call it with ::new or ::delete as the current tokens, so only call it in contexts where these are invalid.
Definition at line 1841 of file Parser.cpp.
References clang::frontend::CPlusPlus, getLangOpts(), clang::Token::is(), clang::CXXScopeSpec::isEmpty(), and NextToken().
| bool Parser::TryAnnotateTypeOrScopeToken | ( | ) |
TryAnnotateTypeOrScopeToken - If the current token position is on a typename (possibly qualified in C++) or a C++ scope specifier not followed by a typename, TryAnnotateTypeOrScopeToken will replace one or more tokens with a single annotation token representing the typename or C++ scope respectively.
This simplifies handling of C++ scope specifiers and allows efficient backtracking without the need to re-parse and resolve nested-names and typenames. It will mainly be called when we expect to treat identifiers as typenames (if they are typenames). For example, in C we do not expect identifiers inside expressions to be treated as typenames so it will not be called for expressions in C. The benefit for C/ObjC is that a typename will be annotated and Actions.getTypeName will not be needed to be called again (e.g. getTypeName will not be called twice, once to check whether we have a declaration specifier, and another one to get the actual type inside ParseDeclarationSpecifiers).
This returns true if an error occurred.
Note that this routine emits an error if you call it with ::new or ::delete as the current tokens, so only call it in contexts where these are invalid.
Definition at line 1620 of file Parser.cpp.
References clang::Sema::ActOnTypenameType(), clang::Preprocessor::AnnotateCachedTokens(), ConsumeToken(), clang::frontend::CPlusPlus, Diag(), clang::Preprocessor::EnterToken(), clang::ActionResult< PtrTy, CompressInvalid >::get(), clang::Token::getAnnotationRange(), getCurScope(), clang::Token::getIdentifierInfo(), getLangOpts(), clang::Token::getLastLoc(), clang::Token::getLocation(), clang::CXXScopeSpec::getRange(), clang::TemplateIdAnnotation::getTemplateArgs(), clang::Token::is(), clang::Token::isAnnotation(), clang::Token::isEditorPlaceholder(), clang::ActionResult< PtrTy, CompressInvalid >::isInvalid(), clang::CXXScopeSpec::isSet(), clang::TemplateIdAnnotation::Kind, clang::TemplateIdAnnotation::LAngleLoc, clang::Preprocessor::Lex(), clang::TemplateIdAnnotation::Name, NextToken(), clang::TemplateIdAnnotation::NumArgs, clang::TemplateIdAnnotation::RAngleLoc, clang::Result, clang::Token::setAnnotationEndLoc(), clang::Token::setKind(), clang::Token::setLocation(), clang::TemplateIdAnnotation::Template, clang::TemplateIdAnnotation::TemplateKWLoc, clang::TemplateIdAnnotation::TemplateNameLoc, clang::TNK_Dependent_template_name, clang::TNK_Type_template, and TryAnnotateTypeOrScopeTokenAfterScopeSpec().
| bool Parser::TryAnnotateTypeOrScopeTokenAfterScopeSpec | ( | CXXScopeSpec & | SS, |
| bool | IsNewScope | ||
| ) |
Try to annotate a type or scope token, having already parsed an optional scope specifier.
IsNewScope should be true unless the scope specifier was extracted from an existing tok::annot_cxxscope annotation.
An Objective-C object type followed by '<' is a specialization of a parameterized class type or a protocol-qualified type.
Definition at line 1734 of file Parser.cpp.
References clang::Preprocessor::AnnotateCachedTokens(), ConsumeToken(), clang::frontend::CPlusPlus, clang::comments::tok::eof, clang::OpaquePtr< PtrTy >::get(), clang::ActionResult< PtrTy, CompressInvalid >::get(), clang::CXXScopeSpec::getBeginLoc(), getCurScope(), clang::Token::getIdentifierInfo(), getLangOpts(), clang::Token::getLocation(), clang::Sema::getTypeName(), clang::Token::is(), clang::CXXScopeSpec::isEmpty(), clang::CXXScopeSpec::isNotEmpty(), clang::Type::isObjCObjectPointerType(), clang::Type::isObjCObjectType(), clang::Sema::isTemplateName(), clang::ActionResult< PtrTy, CompressInvalid >::isUsable(), clang::TemplateIdAnnotation::Kind, NextToken(), clang::Token::setAnnotationEndLoc(), clang::UnqualifiedId::setIdentifier(), clang::Token::setKind(), clang::Token::setLocation(), and clang::TNK_Type_template.
Referenced by TryAnnotateTypeOrScopeToken().
|
inline |
Definition at line 320 of file Parser.h.
References clang::Token::getLocation(), clang::Token::isNot(), and clang::Preprocessor::Lex().
Referenced by SkipMalformedDecl(), and TryConsumeToken().
|
inline |
Definition at line 330 of file Parser.h.
References TryConsumeToken().
|
friend |
|
friend |
|
friend |
|
friend |
|
friend |
|
friend |
1.8.6