clang 10.0.0git

Classes | Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | Friends | List of all members
clang::Parser Class Reference

Parser - This implements a parser for the C family of languages. More...

`#include "clang/Parse/Parser.h"`

Inheritance diagram for clang::Parser:
[legend]
Collaboration diagram for clang::Parser:
[legend]

## 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, bool IsFirstDecl=false)
| 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 | ConsumeAnyToken (bool ConsumeCodeCompletionTok=false)
| ConsumeAnyToken - Dispatch to the right Consume* method based on the current token type. More...
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...
bool | MightBeCXXScopeToken ()
bool | TryAnnotateOptionalCXXScopeToken (bool EnteringContext=false)
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 | ParseCaseExpression (SourceLocation CaseLoc)
ExprResult | ParseConstraintExpression ()
| Parse a constraint-expression. More...
ExprResult | ParseConstraintLogicalAndExpression (bool IsTrailingRequiresClause)
| Parse a constraint-logical-and-expression. More...
ExprResult | ParseConstraintLogicalOrExpression (bool IsTrailingRequiresClause)
| Parse a constraint-logical-or-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, bool IsUnevaluated)
| Parse an identifier in an MS-style inline assembly block. More...
TypeResult | ParseTypeName (SourceRange *Range=nullptr, DeclaratorContext Context=DeclaratorContext::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, bool IsAddressOfOperand=false)
| 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...
bool | parseMapperModifier (OpenMPVarListDataTy &Data)
| Parses the mapper modifier in map, to, and from clauses. More...
bool | parseMapTypeModifiers (OpenMPVarListDataTy &Data)
| Parses map-type-modifiers in map clause. 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...

## Public Attributes
SourceLocation | MisleadingIndentationElseLoc
| The location of the first statement inside an else that might have a missleading indentation. More...

## Friends
class | ColonProtectionRAIIObject
class | ParsingOpenMPDirectiveRAII
class | InMessageExpressionRAIIObject
class | PoisonSEHIdentifiersRAIIObject
class | ObjCDeclContextSwitch
class | ParenBraceBracketBalancer
class | BalancedDelimiterTracker
constexpr SkipUntilFlags | operator| (SkipUntilFlags L, SkipUntilFlags R)

## Detailed Description

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.

Definition at line 57 of file Parser.h.

## Member Typedef Documentation

## ◆ DeclGroupPtrTy

typedef OpaquePtr<DeclGroupRef> clang::Parser::DeclGroupPtrTy

Definition at line 423 of file Parser.h.

## ◆ FullExprArg

typedef Sema::FullExprArg clang::Parser::FullExprArg

Definition at line 428 of file Parser.h.

## ◆ TemplateParameterLists

typedef SmallVector<TemplateParameterList *, 4> clang::Parser::TemplateParameterLists

Definition at line 426 of file Parser.h.

## ◆ TemplateTy

typedef OpaquePtr<TemplateName> clang::Parser::TemplateTy

Definition at line 424 of file Parser.h.

## Member Enumeration Documentation

## ◆ SkipUntilFlags

enum clang::Parser::SkipUntilFlags

Control flags for SkipUntil functions.

Enumerator
StopAtSemi | Stop skipping at semicolon.
StopBeforeMatch | Stop skipping at specified token, but don't skip the token itself.
StopAtCodeCompletion | Stop at code completion.

Definition at line 1097 of file Parser.h.

## ◆ TypeCastState

enum clang::Parser::TypeCastState

TypeCastState - State whether an expression is or may be a type cast.

Enumerator
NotTypeCast |
MaybeTypeCast |
IsTypeCast |

Definition at line 1680 of file Parser.h.

## Constructor & Destructor Documentation

## ◆ Parser()

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().

Referenced by clang::Parser::AngleBracketTracker::Loc::isActiveOrNested().

## ◆ ~Parser()

Parser::~Parser | ( |  | ) |
| override

Definition at line 420 of file Parser.cpp.

References clang::Preprocessor::clearCodeCompletionHandler(), getCurScope(), getLangOpts(), clang::Preprocessor::isIncrementalProcessingEnabled(), and clang::Preprocessor::removeCommentHandler().

Referenced by clang::Parser::AngleBracketTracker::Loc::isActiveOrNested().

## Member Function Documentation

## ◆ ConsumeAnyToken()

SourceLocation clang::Parser::ConsumeAnyToken | ( | bool | ConsumeCodeCompletionTok = `false` | ) |
| inline

ConsumeAnyToken - Dispatch to the right Consume* method based on the current token type.

This should only be used in cases where the type of the token really isn't known, e.g. in error recovery.

Definition at line 480 of file Parser.h.

References ConsumeToken(), clang::Token::is(), and clang::Token::isAnnotation().

Referenced by IsBuiltInOrStandardCXX11Attribute(), IsCommonTypo(), parseContextScore(), parseOpenMPSimpleClause(), ParseUnqualifiedId(), SkipMalformedDecl(), SkipUntil(), and TypeTraitArity().

## ◆ ConsumeToken()

SourceLocation clang::Parser::ConsumeToken | ( |  | ) |
| 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 452 of file Parser.h.

References clang::Token::getLocation(), and clang::Preprocessor::Lex().

Referenced by addConstevalToLambdaDeclSpecifier(), addContextSensitiveTypeNullability(), attributeParsedArgsUnevaluated(), CheckArrayDesignatorSyntax(), CheckAvailabilitySpecList(), ConsumeAnyToken(), clang::BalancedDelimiterTracker::consumeClose(), diagnoseDynamicExceptionSpecification(), diagnoseRedundantPropertyNullability(), FindLocsWithCommonFileID(), getMissingDeclaratorIdLoc(), Initialize(), IsBuiltInOrStandardCXX11Attribute(), IsCommonTypo(), isEndOfTemplateArgument(), isPipeDeclerator(), isValidAfterIdentifierInDeclarator(), clang::Parser::ObjCTypeParamListScope::leave(), clang::Parser::ConditionDeclarationOrInitStatementState::markNotExpression(), ParseConstraintLogicalAndExpression(), ParseConstraintLogicalOrExpression(), parseContextScore(), parseDeclareSimdClauses(), parseDeviceSelector(), parseImplementationSelector(), parseMapType(), parseOpenMPDirectiveKind(), parseOpenMPReductionId(), parseOpenMPSimpleClause(), ParseReductionId(), ParseTopLevelDecl(), ParseUnqualifiedId(), clang::Parser::UnannotatedTentativeParsingAction::RevertAnnotations(), SkipMalformedDecl(), SkipUntil(), takeDeclAttributes(), TryAnnotateTypeOrScopeToken(), TryAnnotateTypeOrScopeTokenAfterScopeSpec(), tryConsumeLambdaSpecifierToken(), TypeTraitArity(), and VersionNumberSeparator().

## ◆ Diag() [1/3]

DiagnosticBuilder Parser::Diag | ( | SourceLocation | Loc,
|  | unsigned | DiagID
| ) |  |

Definition at line 72 of file Parser.cpp.

References clang::DiagnosticsEngine::Report().

Referenced by addConstevalToLambdaDeclSpecifier(), addConstexprToLambdaDeclSpecifier(), addContextSensitiveTypeNullability(), CheckArrayDesignatorSyntax(), CheckAvailabilitySpecList(), clang::BalancedDelimiterTracker::consumeClose(), Diag(), diagnoseDynamicExceptionSpecification(), diagnoseExpectedAttributeSubjectSubRule(), diagnoseRedundantPropertyNullability(), diagnoseUnknownAttributeSubjectSubRule(), FixDigraph(), getMissingDeclaratorIdLoc(), IsBuiltInOrStandardCXX11Attribute(), IsCommonTypo(), isPipeDeclerator(), isValidAfterIdentifierInDeclarator(), clang::Parser::ObjCTypeParamListScope::leave(), ParseConstraintLogicalAndExpression(), ParseConstraintLogicalOrExpression(), parseContextScore(), parseDeclareSimdClauses(), parseDeviceSelector(), ParseFirstTopLevelDecl(), parseImplementationSelector(), parseMapType(), parseOpenMPReductionId(), ParseTopLevelDecl(), ParseUnqualifiedId(), takeDeclAttributes(), TryAnnotateCXXScopeToken(), TryAnnotateOptionalCXXScopeToken(), TryAnnotateTypeOrScopeToken(), tryConsumeLambdaSpecifierToken(), TypeTraitArity(), VersionNumberSeparator(), and clang::Parser::ParseScope::~ParseScope().

## ◆ Diag() [2/3]

DiagnosticBuilder Parser::Diag | ( | const Token & | Tok,
|  | unsigned | DiagID
| ) |  |

Definition at line 76 of file Parser.cpp.

References clang::FixItHint::CreateInsertion(), Diag(), clang::SourceRange::getBegin(), clang::SourceRange::getEnd(), clang::Token::getLocation(), clang::Preprocessor::getLocForEndOfToken(), clang::SourceLocation::isFileID(), and clang::SourceLocation::isInvalid().

## ◆ Diag() [3/3]

DiagnosticBuilder clang::Parser::Diag | ( | unsigned | DiagID | ) |
| inline

Definition at line 1085 of file Parser.h.

References Diag().

## ◆ EnterScope()

void Parser::EnterScope | ( | unsigned | ScopeFlags | ) |

EnterScope - Start a new scope.

Definition at line 370 of file Parser.cpp.

References getCurScope(), and clang::Scope::Init().

Referenced by Initialize(), clang::Parser::ParseScope::ParseScope(), and clang::Parser::ParseScope::~ParseScope().

## ◆ ExitScope()

void Parser::ExitScope | ( |  | ) |

ExitScope - Pop a scope off the scope stack.

Definition at line 381 of file Parser.cpp.

References clang::Sema::ActOnPopScope(), getCurScope(), clang::Token::getLocation(), and clang::Scope::getParent().

Referenced by clang::Parser::ParseScope::Exit(), and clang::Parser::ParseScope::~ParseScope().

## ◆ getActions()

Sema& clang::Parser::getActions | ( |  | ) | const
| inline

Definition at line 410 of file Parser.h.

Referenced by parseDeclareSimdClauses(), and parseOpenMPReductionId().

## ◆ getAttrFactory()

AttributeFactory& clang::Parser::getAttrFactory | ( |  | ) |
| inline

Definition at line 411 of file Parser.h.

Referenced by ParseUnqualifiedId().

## ◆ getCurScope()

Scope* clang::Parser::getCurScope | ( |  | ) | const
| inline

Definition at line 414 of file Parser.h.

References clang::Sema::getCurScope().

Referenced by addConstevalToLambdaDeclSpecifier(), addContextSensitiveTypeNullability(), CheckArrayDesignatorSyntax(), diagnoseDynamicExceptionSpecification(), diagnoseRedundantPropertyNullability(), EnterScope(), ExitScope(), getMissingDeclaratorIdLoc(), Initialize(), isValidAfterIdentifierInDeclarator(), clang::Parser::ObjCTypeParamListScope::leave(), ParseAssignmentExpression(), ParseConstraintLogicalAndExpression(), ParseConstraintLogicalOrExpression(), ParseExpression(), ParseTopLevelDecl(), ParseUnqualifiedId(), SetupFixedPointError(), takeDeclAttributes(), TryAnnotateTypeOrScopeToken(), TryAnnotateTypeOrScopeTokenAfterScopeSpec(), TypeTraitArity(), and ~Parser().

## ◆ getCurToken()

const Token& clang::Parser::getCurToken | ( |  | ) | const
| inline

Definition at line 413 of file Parser.h.

Referenced by isMapModifier(), isMapType(), parseContextScore(), parseDeclareSimdClauses(), parseDeviceSelector(), parseImplementationSelector(), parseMapType(), parseOpenMPDirectiveKind(), parseOpenMPReductionId(), parseOpenMPSimpleClause(), ParseReductionId(), and tryConsumeLambdaSpecifierToken().

## ◆ getEndOfPreviousToken()

SourceLocation clang::Parser::getEndOfPreviousToken | ( |  | ) |
| inline

Definition at line 498 of file Parser.h.

References clang::Preprocessor::getLocForEndOfToken().

Referenced by getMissingDeclaratorIdLoc().

## ◆ getLangOpts()

const LangOptions& clang::Parser::getLangOpts | ( |  | ) | const
| inline

Definition at line 407 of file Parser.h.

References clang::Preprocessor::getLangOpts().

Referenced by addConstevalToLambdaDeclSpecifier(), addConstexprToLambdaDeclSpecifier(), CheckArrayDesignatorSyntax(), clang::BalancedDelimiterTracker::consumeOpen(), diagnoseDynamicExceptionSpecification(), diagnoseRedundantPropertyNullability(), getMissingDeclaratorIdLoc(), Initialize(), IsBuiltInOrStandardCXX11Attribute(), IsCommonTypo(), isPipeDeclerator(), isValidAfterIdentifierInDeclarator(), clang::Parser::ObjCTypeParamListScope::leave(), ParseConstraintLogicalOrExpression(), ParseFirstTopLevelDecl(), ParseTopLevelDecl(), ParseUnqualifiedId(), clang::Parser::ConditionDeclarationOrInitStatementState::result(), clang::Parser::UnannotatedTentativeParsingAction::RevertAnnotations(), SetupFixedPointError(), takeDeclAttributes(), TryAnnotateCXXScopeToken(), TryAnnotateOptionalCXXScopeToken(), TryAnnotateTypeOrScopeToken(), TryAnnotateTypeOrScopeTokenAfterScopeSpec(), TypeTraitArity(), and ~Parser().

## ◆ getNullabilityKeyword()

IdentifierInfo* clang::Parser::getNullabilityKeyword | ( | NullabilityKind | nullability | ) |
| inline

Retrieve the underscored keyword (_Nonnull, _Nullable) that corresponds to the given nullability kind.

Definition at line 504 of file Parser.h.

References clang::Token::getKind(), clang::Sema::getNullabilityKeyword(), clang::Token::is(), clang::Token::isAnnotation(), clang::Token::isOneOf(), and clang::tok::isStringLiteral().

Referenced by addContextSensitiveTypeNullability().

## ◆ getObjCDeclContext()

Decl* clang::Parser::getObjCDeclContext | ( |  | ) | const
| inline

Definition at line 419 of file Parser.h.

References clang::Sema::getObjCDeclContext().

Referenced by getMissingDeclaratorIdLoc(), and TryAnnotateOptionalCXXScopeToken().

## ◆ getPreprocessor()

Preprocessor& clang::Parser::getPreprocessor | ( |  | ) | const
| inline

Definition at line 409 of file Parser.h.

Referenced by isMapModifier(), isMapType(), parseContextScore(), parseDeviceSelector(), parseImplementationSelector(), parseOpenMPDirectiveKind(), and parseOpenMPSimpleClause().

## ◆ getTargetInfo()

const TargetInfo& clang::Parser::getTargetInfo | ( |  | ) | const
| inline

Definition at line 408 of file Parser.h.

References clang::Preprocessor::getTargetInfo().

Referenced by IsBuiltInOrStandardCXX11Attribute(), and takeDeclAttributes().

## ◆ getTypeAnnotation()

static ParsedType clang::Parser::getTypeAnnotation | ( | const Token & | Tok | ) |
| inline static

getTypeAnnotation - Read a parsed type out of an annotation token.

Definition at line 764 of file Parser.h.

References clang::Token::getAnnotationValue(), clang::OpaquePtr< PtrTy >::getAsOpaquePtr(), clang::OpaquePtr< QualType >::getFromOpaquePtr(), clang::Token::setAnnotationValue(), TryAnnotateCXXScopeToken(), TryAnnotateTypeOrScopeToken(), and TryAnnotateTypeOrScopeTokenAfterScopeSpec().

Referenced by takeDeclAttributes().

## ◆ incrementMSManglingNumber()

void clang::Parser::incrementMSManglingNumber | ( |  | ) | const
| inline

Definition at line 415 of file Parser.h.

References clang::Sema::incrementMSManglingNumber().

Referenced by clang::Parser::ParseScope::ParseScope().

## ◆ Initialize()

void Parser::Initialize | ( |  | ) |

Initialize - Warm up the parser.

Definition at line 449 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(), clang::ObjC, P, and clang::Preprocessor::SetPoisonReason().

## ◆ MightBeCXXScopeToken()

bool clang::Parser::MightBeCXXScopeToken | ( |  | ) |
| inline

Definition at line 809 of file Parser.h.

References clang::Token::is(), and NextToken().

Referenced by TryAnnotateCXXScopeToken(), and TryAnnotateOptionalCXXScopeToken().

## ◆ NextToken()

const Token& clang::Parser::NextToken | ( |  | ) |
| inline

NextToken - This peeks ahead one token and returns it without consuming it.

Definition at line 759 of file Parser.h.

References clang::Preprocessor::LookAhead().

Referenced by addConstevalToLambdaDeclSpecifier(), CheckArrayDesignatorSyntax(), clang::BalancedDelimiterTracker::consumeClose(), getMissingDeclaratorIdLoc(), IsBuiltInOrStandardCXX11Attribute(), IsCommonTypo(), isPipeDeclerator(), isValidAfterIdentifierInDeclarator(), MightBeCXXScopeToken(), ParseConstraintLogicalAndExpression(), ParseTopLevelDecl(), ParseUnqualifiedId(), SkipMalformedDecl(), takeDeclAttributes(), TryAnnotateTypeOrScopeToken(), TryAnnotateTypeOrScopeTokenAfterScopeSpec(), and TypeTraitArity().

## ◆ ParseAssignmentExpression()

ExprResult Parser::ParseAssignmentExpression | ( | TypeCastState | isTypeCast = `NotTypeCast` | ) |

Parse an expr that doesn't include (top-level) commas.

Definition at line 160 of file ParseExpr.cpp.

References clang::prec::Assignment, clang::Sema::CodeCompleteExpression(), clang::ExprError(), clang::PreferredTypeBuilder::get(), getCurScope(), clang::Token::getLocation(), and clang::Token::is().

Referenced by CheckArrayDesignatorSyntax(), getMissingDeclaratorIdLoc(), ParseConstraintLogicalOrExpression(), and ParseExpression().

## ◆ ParseCaseExpression()

ExprResult Parser::ParseCaseExpression | ( | SourceLocation | CaseLoc | ) |

Definition at line 221 of file ParseExpr.cpp.

References clang::Sema::ActOnCaseExpr(), clang::prec::Conditional, clang::Sema::ConstantEvaluated, and NotTypeCast.

## ◆ ParseConstantExpression()

ExprResult Parser::ParseConstantExpression | ( | TypeCastState | isTypeCast = `NotTypeCast` | ) |

Definition at line 211 of file ParseExpr.cpp.

References clang::Sema::ConstantEvaluated, and ParseConstantExpressionInExprEvalContext().

Referenced by CheckArrayDesignatorSyntax(), getMissingDeclaratorIdLoc(), and ParseUnqualifiedId().

## ◆ ParseConstantExpressionInExprEvalContext()

ExprResult Parser::ParseConstantExpressionInExprEvalContext | ( | TypeCastState | isTypeCast = `NotTypeCast` | ) |

Definition at line 201 of file ParseExpr.cpp.

References clang::Sema::ActOnConstantExpression(), clang::prec::Conditional, clang::Sema::ConstantEvaluated, and clang::Sema::ExprEvalContexts.

Referenced by ParseConstantExpression().

## ◆ ParseConstraintExpression()

ExprResult Parser::ParseConstraintExpression | ( |  | ) |

Parse a constraint-expression.

    ///       constraint-expression: C++2a[temp.constr.decl]p1
    ///         logical-or-expression
    ///

Definition at line 235 of file ParseExpr.cpp.

References clang::Sema::CheckConstraintExpression(), clang::Sema::CorrectDelayedTyposInExpr(), clang::ExprError(), clang::ActionResult< PtrTy, CompressInvalid >::get(), clang::ActionResult< PtrTy, CompressInvalid >::isUsable(), clang::prec::LogicalOr, and clang::Sema::Unevaluated.

Referenced by ParseUnqualifiedId().

## ◆ ParseConstraintLogicalAndExpression()

ExprResult Parser::ParseConstraintLogicalAndExpression | ( | bool | IsTrailingRequiresClause | ) |

Parse a constraint-logical-and-expression.

    ///       C++2a[temp.constr.decl]p1
    ///       constraint-logical-and-expression:
    ///         primary-expression
    ///         constraint-logical-and-expression '&&' primary-expression
    ///
    ///

Definition at line 257 of file ParseExpr.cpp.

References clang::Sema::ActOnBinOp(), clang::Sema::CheckConstraintExpression(), ConsumeToken(), clang::Sema::CorrectDelayedTyposInExpr(), clang::FixItHint::CreateInsertion(), Diag(), clang::ExprError(), clang::ActionResult< PtrTy, CompressInvalid >::get(), clang::getBinOpPrecedence(), getCurScope(), clang::Token::getKind(), clang::Preprocessor::getLocForEndOfToken(), clang::prec::InclusiveOr, clang::Token::is(), clang::ActionResult< PtrTy, CompressInvalid >::isInvalid(), clang::Token::isOneOf(), clang::ActionResult< PtrTy, CompressInvalid >::isUsable(), clang::prec::LogicalAnd, NextToken(), clang::Note, NotTypeCast, and clang::Sema::Unevaluated.

Referenced by ParseConstraintLogicalOrExpression().

## ◆ ParseConstraintLogicalOrExpression()

ExprResult Parser::ParseConstraintLogicalOrExpression | ( | bool | IsTrailingRequiresClause | ) |

Parse a constraint-logical-or-expression.

    ///       C++2a[temp.constr.decl]p1
    ///       constraint-logical-or-expression:
    ///         constraint-logical-and-expression
    ///         constraint-logical-or-expression '||'
    ///             constraint-logical-and-expression
    ///
    ///

Definition at line 349 of file ParseExpr.cpp.

References clang::Sema::ActOnBinOp(), clang::Sema::ActOnConditionalOp(), clang::prec::Assignment, ColonLoc, clang::prec::Conditional, ConsumeToken(), clang::Sema::CorrectDelayedTyposInExpr(), clang::CPlusPlus, clang::CPlusPlus11, clang::FixItHint::CreateInsertion(), Diag(), clang::PreferredTypeBuilder::enterBinary(), clang::Preprocessor::EnterToken(), clang::ExprError(), clang::ActionResult< PtrTy, CompressInvalid >::get(), clang::getBinOpPrecedence(), clang::SourceManager::getCharacterData(), getCurScope(), clang::Sema::getExprRange(), clang::Token::getIdentifierInfo(), clang::Token::getKind(), getLangOpts(), clang::Token::getLocation(), clang::SourceLocation::getLocWithOffset(), clang::Preprocessor::getSourceManager(), clang::Preprocessor::getSpelling(), clang::Token::is(), clang::Preprocessor::isAtStartOfMacroExpansion(), clang::SourceLocation::isFileID(), clang::ActionResult< PtrTy, CompressInvalid >::isInvalid(), clang::Token::isNot(), clang::Token::isOneOf(), clang::ActionResult< PtrTy, CompressInvalid >::isUsable(), clang::ObjC, ParseAssignmentExpression(), ParseConstraintLogicalAndExpression(), ParseExpression(), SM, clang::prec::Spaceship, TryConsumeToken(), clang::prec::Unknown, and X.

Referenced by diagnoseDynamicExceptionSpecification(), and getMissingDeclaratorIdLoc().

## ◆ ParseExpression()

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
    ///
    ///       compare-expression: [C++20 expr.spaceship]
    ///         shift-expression
    ///         compare-expression '<=>' shift-expression
    ///
    ///       relational-expression: [C99 6.5.8]
    ///         compare-expression
    ///         relational-expression '<' compare-expression
    ///         relational-expression '>' compare-expression
    ///         relational-expression '<=' compare-expression
    ///         relational-expression '>=' compare-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 123 of file ParseExpr.cpp.

References clang::Sema::ActOnUnaryOp(), clang::prec::Comma, clang::ActionResult< PtrTy, CompressInvalid >::get(), getCurScope(), clang::ActionResult< PtrTy, CompressInvalid >::isInvalid(), and ParseAssignmentExpression().

Referenced by addConstevalToLambdaDeclSpecifier(), ParseConstraintLogicalOrExpression(), ParseUnqualifiedId(), takeDeclAttributes(), and TypeTraitArity().

## ◆ ParseFirstTopLevelDecl()

bool Parser::ParseFirstTopLevelDecl | ( | DeclGroupPtrTy & | Result | ) |

Parse the first top-level declaration in a translation unit.

translation-unit: [C] external-declaration [C] translation-unit external-declaration [C++] top-level-declaration-seq[opt] [C++20] global-module-fragment[opt] module-declaration top-level-declaration-seq[opt] private-module-fragment[opt]

Note that in C, it is an error if there is no first declaration.

Definition at line 557 of file Parser.cpp.

References clang::Sema::ActOnStartOfTranslationUnit(), Diag(), clang::Sema::getASTContext(), clang::ASTContext::getExternalSource(), getLangOpts(), and ParseTopLevelDecl().

## ◆ parseMapperModifier()

bool Parser::parseMapperModifier | ( | OpenMPVarListDataTy & | Data | ) |

Parses the mapper modifier in map, to, and from clauses.

Parse the mapper modifier in map, to, and from clauses.

Definition at line 2595 of file ParseOpenMP.cpp.

References clang::BalancedDelimiterTracker::consumeClose(), clang::CPlusPlus, Diag(), clang::BalancedDelimiterTracker::expectAndConsume(), clang::format::FormatToken::isNot(), clang::Parser::OpenMPVarListDataTy::ReductionOrMapperId, clang::Parser::OpenMPVarListDataTy::ReductionOrMapperIdScopeSpec, and clang::format::Tok.

## ◆ parseMapTypeModifiers()

bool Parser::parseMapTypeModifiers | ( | OpenMPVarListDataTy & | Data | ) |

Parses map-type-modifiers in map clause.

Parse map-type-modifiers in map clause.

map([ [map-type-modifier[,] [map-type-modifier[,] ...] map-type : ] list) where, map-type-modifier ::= always | close | mapper(mapper-identifier)

Definition at line 2625 of file ParseOpenMP.cpp.

References Diag(), clang::format::FormatToken::is(), isMapModifier(), clang::Parser::OpenMPVarListDataTy::MapTypeModifiers, clang::Parser::OpenMPVarListDataTy::MapTypeModifiersLoc, and clang::format::Tok.

## ◆ ParseMSAsmIdentifier()

ExprResult Parser::ParseMSAsmIdentifier | ( | llvm::SmallVectorImpl< Token > & | LineToks,
|  | unsigned & | NumLineToksConsumed,
|  | bool | IsUnevaluated
| ) |  |

Parse an identifier in an MS-style inline assembly block.

Definition at line 200 of file ParseStmtAsm.cpp.

References clang::CPlusPlus, clang::ActionResult< PtrTy, CompressInvalid >::get(), clang::Token::getIdentifierInfo(), clang::Token::getLocation(), clang::IdentifierInfo::getName(), Id, clang::Token::is(), clang::Token::isNot(), clang::ActionResult< PtrTy, CompressInvalid >::isUsable(), clang::Result, clang::Token::setKind(), and clang::Token::startToken().

## ◆ ParseOpenMPParensExpr()

ExprResult Parser::ParseOpenMPParensExpr | ( | StringRef | ClauseName,
|  | SourceLocation & | RLoc,
|  | bool | IsAddressOfOperand = `false`
| ) |  |

Parses simple expression in parens for single-expression clauses of OpenMP constructs.

Parameters

  RLoc | Returned location of right paren.

Definition at line 2259 of file ParseOpenMP.cpp.

References clang::prec::Conditional, clang::BalancedDelimiterTracker::consumeClose(), Diag(), clang::BalancedDelimiterTracker::expectAndConsume(), clang::ExprError(), clang::ActionResult< PtrTy, CompressInvalid >::get(), clang::BalancedDelimiterTracker::getCloseLocation(), clang::BalancedDelimiterTracker::getOpenLocation(), clang::getOpenMPClauseName(), clang::getOpenMPSimpleClauseType(), clang::format::FormatToken::is(), clang::ActionResult< PtrTy, CompressInvalid >::isInvalid(), clang::format::FormatToken::isNot(), clang::SourceLocation::isValid(), Modifier, clang::OMPC_DEFAULTMAP_MODIFIER_unknown, clang::OMPC_SCHEDULE_MODIFIER_unknown, clang::OMPC_SCHEDULE_unknown, parseOpenMPDirectiveKind(), parseOpenMPSimpleClause(), and clang::format::Tok.

Referenced by parseContextScore(), and parseDeclareSimdClauses().

## ◆ ParseOpenMPVarList()

bool Parser::ParseOpenMPVarList | ( | OpenMPDirectiveKind | DKind,
|  | OpenMPClauseKind | Kind,
|  | SmallVectorImpl< Expr *> & | Vars,
|  | OpenMPVarListDataTy & | Data
| ) |  |

Parses clauses with list.

Definition at line 2688 of file ParseOpenMP.cpp.

References clang::Parser::OpenMPVarListDataTy::ColonLoc, clang::BalancedDelimiterTracker::consumeClose(), clang::BalancedDelimiterTracker::consumeOpen(), clang::CPlusPlus, clang::Parser::OpenMPVarListDataTy::DepLinMapLastLoc, Diag(), clang::BalancedDelimiterTracker::expectAndConsume(), clang::Parser::OpenMPVarListDataTy::ExtraModifier, clang::ActionResult< PtrTy, CompressInvalid >::get(), clang::BalancedDelimiterTracker::getCloseLocation(), clang::BalancedDelimiterTracker::getOpenLocation(), clang::getOpenMPClauseName(), clang::getOpenMPSimpleClauseType(), clang::format::FormatToken::is(), clang::Parser::OpenMPVarListDataTy::IsMapTypeImplicit, clang::format::FormatToken::isNot(), clang::isOpenMPDistributeDirective(), clang::isOpenMPTaskLoopDirective(), clang::ActionResult< PtrTy, CompressInvalid >::isUsable(), clang::Parser::OpenMPVarListDataTy::MapTypeModifiers, clang::Parser::OpenMPVarListDataTy::MapTypeModifiersLoc, Modifier, clang::OMPC_DEPEND_unknown, clang::OMPC_LASTPRIVATE_unknown, clang::OMPC_MAP_unknown, parseMapType(), ParseReductionId(), clang::Parser::OpenMPVarListDataTy::ReductionOrMapperId, clang::Parser::OpenMPVarListDataTy::ReductionOrMapperIdScopeSpec, clang::Parser::OpenMPVarListDataTy::RLoc, clang::Parser::OpenMPVarListDataTy::TailExpr, and clang::format::Tok.

Referenced by parseDeclareSimdClauses().

## ◆ ParseTopLevelDecl() [1/2]

bool Parser::ParseTopLevelDecl | ( | DeclGroupPtrTy & | Result,
|  | bool | IsFirstDecl = `false`
| ) |  |

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.

top-level-declaration: declaration [C++20] module-import-declaration

Definition at line 578 of file Parser.cpp.

References clang::ParsingDeclSpec::abort(), clang::Sema::ActOnDefaultCtorInitializers(), clang::Sema::ActOnEmptyDeclaration(), clang::Sema::ActOnEndOfTranslationUnit(), clang::Sema::ActOnFileScopeAsmDecl(), clang::Sema::ActOnFinishFunctionBody(), clang::Sema::ActOnFinishKNRParamDeclarations(), clang::Sema::ActOnModuleBegin(), clang::Sema::ActOnModuleEnd(), clang::Sema::ActOnModuleInclude(), clang::Sema::ActOnParamDeclarator(), clang::Sema::ActOnSkippedFunctionBody(), clang::Sema::ActOnStartOfFunctionDef(), clang::Preprocessor::AnnotateCachedTokens(), clang::AS_none, clang::Sema::BuildDeclaratorGroup(), clang::Sema::canDelayFunctionBody(), clang::Sema::canSkipFunctionBody(), clang::Sema::CheckForFunctionRedefinition(), clang::Declarator::clear(), clang::DeclSpec::ClearStorageClassSpecs(), clang::Sema::CodeCompleteObjCMethodDecl(), clang::Sema::CodeCompleteOrdinaryName(), clang::ParsingDeclSpec::complete(), clang::ParsingDeclarator::complete(), clang::Scope::CompoundStmtScope, clang::BalancedDelimiterTracker::consumeClose(), clang::BalancedDelimiterTracker::consumeOpen(), ConsumeToken(), clang::Sema::ConvertDeclToDeclGroup(), clang::CPlusPlus, clang::CPlusPlus11, clang::FixItHint::CreateRemoval(), clang::Sema::CurContext, clang::Scope::DeclScope, clang::diff::Delete, Diag(), clang::Preprocessor::EnterToken(), clang::comments::tok::eof, clang::Parser::ParseScope::Exit(), clang::ExprError(), clang::FDK_Definition, clang::FileContext, clang::Scope::FnScope, clang::Scope::FunctionDeclarationScope, clang::Scope::FunctionPrototypeScope, clang::ActionResult< PtrTy, CompressInvalid >::get(), clang::Token::getAnnotationValue(), clang::Decl::getAsFunction(), clang::Sema::getASTContext(), clang::DeclSpec::getAttributes(), clang::Declarator::getAttributes(), clang::SourceRange::getBegin(), clang::Decl::getBody(), clang::BalancedDelimiterTracker::getCloseLocation(), getCurScope(), clang::ParsingDeclarator::getDeclSpec(), clang::Declarator::getFunctionTypeInfo(), clang::Declarator::getIdentifier(), clang::Token::getIdentifierInfo(), clang::Declarator::getIdentifierLoc(), clang::Token::getKind(), getKind(), getLangOpts(), clang::Token::getLocation(), clang::Preprocessor::getLocForEndOfToken(), clang::SourceLocation::getLocWithOffset(), clang::ParsingDeclarator::getMutableDeclSpec(), clang::Scope::getParent(), clang::DeclSpec::getParsedSpecifiers(), clang::ASTContext::getPrintingPolicy(), clang::CXXScopeSpec::getRange(), clang::DeclSpec::getSourceRange(), clang::DeclSpec::getStorageClassSpec(), clang::DeclSpec::getStorageClassSpecLoc(), clang::DeclSpec::getThreadStorageClassSpec(), clang::DeclSpec::getThreadStorageClassSpecLoc(), clang::DeclSpec::getTypeSpecType(), clang::DeclSpec::getTypeSpecTypeLoc(), clang::Sema::HandleDeclarator(), clang::DeclSpec::hasTagDefinition(), Id, clang::DeclaratorChunk::ParamInfo::Ident, clang::ImplicitInt, clang::Token::is(), clang::Preprocessor::isBacktrackEnabled(), clang::Preprocessor::isCodeCompletionReached(), clang::DeclSpec::isDeclRep(), clang::Token::isEditorPlaceholder(), clang::DeclSpec::isEmpty(), clang::Declarator::isFunctionDeclarator(), clang::Preprocessor::isIncrementalProcessingEnabled(), clang::ActionResult< PtrTy, CompressInvalid >::isInvalid(), clang::CXXScopeSpec::isInvalid(), clang::DeclaratorChunk::FunctionTypeInfo::isKNRPrototype(), clang::Token::isNot(), clang::Token::isObjCAtKeyword(), clang::DeclContext::isTranslationUnit(), clang::KNRTypeListContext, clang::Sema::MarkAsLateParsedTemplate(), NextToken(), clang::None, clang::DeclaratorChunk::FunctionTypeInfo::NumParams, clang::ObjC, ObjCDeclContextSwitch, clang::OpenCL, clang::DeclaratorChunk::ParamInfo::Param, clang::DeclaratorChunk::FunctionTypeInfo::Params, clang::Sema::ParsedFreeStandingDeclSpec(), clang::Sema::PCC_Namespace, clang::Sema::PCC_ObjCImplementation, clang::DeclSpec::PQ_StorageClassSpecifier, clang::Result, clang::Preprocessor::RevertCachedTokens(), clang::Sema::SaveNestedNameSpecifierAnnotation(), clang::DeclSpec::SCS_extern, clang::DeclSpec::SCS_register, clang::DeclSpec::SCS_unspecified, clang::Token::setAnnotationRange(), clang::Token::setAnnotationValue(), clang::Declarator::setCommaLoc(), clang::Sema::setCurrentOpenCLExtensionForDecl(), clang::Sema::SetDeclDefaulted(), clang::Sema::SetDeclDeleted(), clang::Declarator::setFunctionDefinitionKind(), clang::Token::setKind(), clang::Sema::SetLateTemplateParser(), clang::Declarator::SetRangeBegin(), clang::DeclSpec::SetTypeSpecType(), clang::Sema::SkipBodyInfo::ShouldSkip, SkipMalformedDecl(), SkipUntil(), StopAtSemi, StopBeforeMatch, clang::DeclSpec::takeAttributesFrom(), TryAnnotateTypeOrScopeTokenAfterScopeSpec(), TryConsumeToken(), clang::DeclSpec::TSCS_unspecified, clang::DeclSpec::TST_class, clang::DeclSpec::TST_enum, clang::DeclSpec::TST_int, clang::DeclSpec::TST_interface, clang::DeclSpec::TST_struct, clang::DeclSpec::TST_union, and clang::DeclSpec::TST_unspecified.

## ◆ ParseTopLevelDecl() [2/2]

bool clang::Parser::ParseTopLevelDecl | ( |  | ) |
| inline

Definition at line 442 of file Parser.h.

References clang::Result.

Referenced by ParseFirstTopLevelDecl().

## ◆ ParseTypeName()

TypeResult Parser::ParseTypeName | ( | SourceRange * | Range = `nullptr`,
|  | DeclaratorContext | Context = `DeclaratorContext::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 42 of file ParseDecl.cpp.

Referenced by addConstevalToLambdaDeclSpecifier(), addContextSensitiveTypeNullability(), attributeParsedArgsUnevaluated(), diagnoseDynamicExceptionSpecification(), getMissingDeclaratorIdLoc(), takeDeclAttributes(), and TypeTraitArity().

## ◆ ParseUnqualifiedId()

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.

unqualified-id: [C++ expr.prim.general]
identifier
operator-function-id
conversion-function-id
[C++0x] literal-operator-id [TODO]
~ class-name
template-id

Parameters

  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.

Returns
  true if parsing fails, false otherwise.

Definition at line 2699 of file ParseExprCXX.cpp.

References clang::Sema::ActOnCompoundRequirement(), clang::Sema::ActOnCXXDelete(), clang::Sema::ActOnCXXNew(), clang::Sema::ActOnDependentTemplateName(), clang::Sema::ActOnFinishRequiresExpr(), clang::Sema::ActOnNestedRequirement(), clang::Sema::ActOnParenListExpr(), clang::Sema::ActOnRequiresExpr(), clang::Sema::ActOnSimpleRequirement(), clang::Sema::ActOnStartRequiresExpr(), clang::Sema::ActOnTypeName(), clang::Sema::ActOnTypeRequirement(), clang::Declarator::AddTypeInfo(), clang::CXXScopeSpec::clear(), ConsumeAnyToken(), clang::BalancedDelimiterTracker::consumeClose(), clang::BalancedDelimiterTracker::consumeOpen(), ConsumeToken(), clang::Sema::CorrectDelayedTyposInExpr(), clang::CPlusPlus, clang::CPlusPlus17, clang::FixItHint::CreateInsertion(), clang::FixItHint::CreateRemoval(), clang::CXXNewContext, clang::Scope::DeclScope, Depth, Diag(), clang::PreferredTypeBuilder::enterFunctionArgument(), clang::BalancedDelimiterTracker::expectAndConsume(), clang::ExprError(), clang::Scope::FunctionPrototypeScope, clang::OpaquePtr< PtrTy >::get(), clang::ActionResult< PtrTy, CompressInvalid >::get(), clang::Token::getAnnotationRange(), clang::Token::getAnnotationValue(), clang::DeclaratorChunk::getArray(), getAttrFactory(), clang::Type::getCanonicalTypeInternal(), clang::BalancedDelimiterTracker::getCloseLocation(), clang::Sema::getConstructorName(), getCurScope(), clang::Declarator::getDeclSpec(), clang::Sema::getDestructorName(), clang::Sema::getDestructorTypeForDecltype(), clang::Declarator::getEndLoc(), clang::Token::getIdentifierInfo(), clang::Token::getKind(), clang::UnqualifiedId::getKind(), getLangOpts(), clang::Token::getLocation(), clang::Lexer::getLocForEndOfToken(), clang::Declarator::getMutableDeclSpec(), clang::BalancedDelimiterTracker::getOpenLocation(), clang::BalancedDelimiterTracker::getRange(), clang::Sema::getSourceManager(), clang::DeclSpec::getSourceRange(), clang::DiagnosticErrorTrap::hasErrorOccurred(), Id, clang::IK_LiteralOperatorId, clang::IK_OperatorFunctionId, clang::Initializer, clang::Token::is(), clang::Preprocessor::isCodeCompletionReached(), clang::Sema::isCurrentClassName(), clang::Sema::isDeductionGuideName(), clang::CXXScopeSpec::isEmpty(), clang::SourceLocation::isInvalid(), clang::ActionResult< PtrTy, CompressInvalid >::isInvalid(), clang::Declarator::isInvalidType(), clang::Token::isNot(), clang::CXXScopeSpec::isNotEmpty(), clang::Token::isOneOf(), clang::CXXScopeSpec::isSet(), clang::ActionResult< PtrTy, CompressInvalid >::isUsable(), clang::SourceLocation::isValid(), clang::TemplateIdAnnotation::LAngleLoc, clang::TemplateIdAnnotation::Name, NextToken(), ParseConstantExpression(), ParseConstraintExpression(), ParseExpression(), clang::Sema::ProduceConstructorSignatureHelp(), clang::TemplateIdAnnotation::RAngleLoc, clang::RequiresExprContext, clang::Sema::RestoreNestedNameSpecifierAnnotation(), clang::Result, clang::UnqualifiedId::setConstructorName(), clang::UnqualifiedId::setConstructorTemplateId(), clang::UnqualifiedId::setDeductionGuideName(), clang::UnqualifiedId::setDestructorName(), clang::UnqualifiedId::setIdentifier(), clang::Declarator::setInvalidType(), clang::Declarator::SetSourceRange(), clang::UnqualifiedId::setTemplateId(), clang::Sema::ShouldEnterDeclaratorScope(), clang::BalancedDelimiterTracker::skipToEnd(), SkipUntil(), StopAtSemi, StopBeforeMatch, clang::TemplateIdAnnotation::TemplateKWLoc, clang::TemplateIdAnnotation::TemplateNameLoc, clang::TNK_Non_template, TryAnnotateCXXScopeToken(), TryConsumeToken(), and clang::Sema::Unevaluated.

Referenced by getMissingDeclaratorIdLoc(), and ParseReductionId().

## ◆ SkipMalformedDecl()

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 1922 of file ParseDecl.cpp.

References ConsumeAnyToken(), ConsumeToken(), clang::comments::tok::eof, clang::Token::getKind(), clang::Token::is(), clang::Token::isAtStartOfLine(), clang::Token::isObjCAtKeyword(), clang::Token::isOneOf(), NextToken(), SkipUntil(), and TryConsumeToken().

Referenced by ParseTopLevelDecl(), and SkipUntil().

## ◆ SkipUntil() [1/4]

bool clang::Parser::SkipUntil | ( | tok::TokenKind | T,
|  | SkipUntilFlags | Flags = `static_cast<SkipUntilFlags>(0)`
| ) |  |
| 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 1118 of file Parser.h.

Referenced by addConstevalToLambdaDeclSpecifier(), addContextSensitiveTypeNullability(), CheckArrayDesignatorSyntax(), CheckAvailabilitySpecList(), diagnoseDynamicExceptionSpecification(), diagnoseRedundantPropertyNullability(), FindLocsWithCommonFileID(), getMissingDeclaratorIdLoc(), IsBuiltInOrStandardCXX11Attribute(), clang::Parser::ObjCTypeParamListScope::leave(), clang::Parser::ConditionDeclarationOrInitStatementState::markNotExpression(), parseDeviceSelector(), parseImplementationSelector(), parseOpenMPReductionId(), ParseTopLevelDecl(), ParseUnqualifiedId(), clang::Parser::ConditionDeclarationOrInitStatementState::result(), SkipMalformedDecl(), SkipUntil(), takeDeclAttributes(), TypeTraitArity(), and VersionNumberSeparator().

## ◆ SkipUntil() [2/4]

bool clang::Parser::SkipUntil | ( | tok::TokenKind | T1,
|  | tok::TokenKind | T2,
|  | SkipUntilFlags | Flags = `static_cast<SkipUntilFlags>(0)`
| ) |  |
| inline

Definition at line 1122 of file Parser.h.

References SkipUntil().

## ◆ SkipUntil() [3/4]

bool clang::Parser::SkipUntil | ( | tok::TokenKind | T1,
|  | tok::TokenKind | T2,
|  | tok::TokenKind | T3,
|  | SkipUntilFlags | Flags = `static_cast<SkipUntilFlags>(0)`
| ) |  |
| inline

Definition at line 1127 of file Parser.h.

References SkipMalformedDecl(), and SkipUntil().

## ◆ SkipUntil() [4/4]

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 ConsumeAnyToken(), ConsumeToken(), clang::comments::tok::eof, clang::Token::getKind(), HasFlagsSet(), clang::Token::is(), clang::Token::isNot(), SkipUntil(), StopAtCodeCompletion, StopAtSemi, and StopBeforeMatch.

## ◆ TryAnnotateCXXScopeToken()

bool Parser::TryAnnotateCXXScopeToken | ( | bool | EnteringContext = `false` | ) |

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 2029 of file Parser.cpp.

References clang::CPlusPlus, clang::FixItHint::CreateReplacement(), Diag(), clang::Token::getKind(), getLangOpts(), clang::Token::getLocation(), clang::Token::is(), clang::CXXScopeSpec::isEmpty(), and MightBeCXXScopeToken().

Referenced by getTypeAnnotation(), ParseUnqualifiedId(), SetupFixedPointError(), and TryAnnotateOptionalCXXScopeToken().

## ◆ TryAnnotateOptionalCXXScopeToken()

bool clang::Parser::TryAnnotateOptionalCXXScopeToken | ( | bool | EnteringContext = `false` | ) |
| inline

Definition at line 815 of file Parser.h.

References clang::Sema::ActOnObjCReenterContainerContext(), clang::Sema::ActOnObjCTemporaryExitContainerContext(), clang::Preprocessor::Backtrack(), clang::Preprocessor::CommitBacktrackedTokens(), Diag(), clang::Preprocessor::EnableBacktrackAtThisPos(), clang::Token::getIdentifierInfo(), clang::Preprocessor::getIdentifierInfo(), getLangOpts(), getObjCDeclContext(), clang::Token::isAnnotation(), isInvalid(), MightBeCXXScopeToken(), clang::ObjC, ObjCDeclContextSwitch, P, TryAnnotateCXXScopeToken(), and clang::TST_unspecified.

## ◆ TryAnnotateTypeOrScopeToken()

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 1800 of file Parser.cpp.

References clang::Sema::ActOnTypenameType(), clang::Preprocessor::AnnotateCachedTokens(), ConsumeToken(), clang::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::CXXScopeSpec::isEmpty(), clang::ActionResult< PtrTy, CompressInvalid >::isInvalid(), 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, clang::TNK_Undeclared_template, and TryAnnotateTypeOrScopeTokenAfterScopeSpec().

Referenced by getMissingDeclaratorIdLoc(), getTypeAnnotation(), and takeDeclAttributes().

## ◆ 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 1915 of file Parser.cpp.

References clang::Preprocessor::AnnotateCachedTokens(), ConsumeToken(), clang::CPlusPlus, clang::comments::tok::eof, 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::Sema::isTemplateName(), clang::ActionResult< PtrTy, CompressInvalid >::isUsable(), clang::TemplateIdAnnotation::Kind, NextToken(), clang::ObjC, clang::Token::setAnnotationEndLoc(), clang::UnqualifiedId::setIdentifier(), clang::Token::setKind(), clang::Token::setLocation(), clang::TNK_Type_template, and clang::TNK_Undeclared_template.

Referenced by getTypeAnnotation(), ParseTopLevelDecl(), and TryAnnotateTypeOrScopeToken().

## ◆ TryConsumeToken() [1/2]

bool clang::Parser::TryConsumeToken | ( | tok::TokenKind | Expected | ) |
| inline

Definition at line 460 of file Parser.h.

References clang::Token::getLocation(), clang::Token::isNot(), and clang::Preprocessor::Lex().

Referenced by addContextSensitiveTypeNullability(), CheckAvailabilitySpecList(), diagnoseDynamicExceptionSpecification(), FindLocsWithCommonFileID(), getMissingDeclaratorIdLoc(), IsBuiltInOrStandardCXX11Attribute(), IsCommonTypo(), clang::Parser::ObjCTypeParamListScope::leave(), ParseConstraintLogicalOrExpression(), parseDeviceSelector(), parseImplementationSelector(), ParseTopLevelDecl(), ParseUnqualifiedId(), clang::Parser::ConditionDeclarationOrInitStatementState::result(), SkipMalformedDecl(), takeDeclAttributes(), TryConsumeToken(), and TypeTraitArity().

## ◆ TryConsumeToken() [2/2]

bool clang::Parser::TryConsumeToken | ( | tok::TokenKind | Expected,
|  | SourceLocation & | Loc
| ) |  |
| inline

Definition at line 470 of file Parser.h.

References TryConsumeToken().

## Friends And Related Function Documentation

## ◆ BalancedDelimiterTracker

friend class BalancedDelimiterTracker
| friend

Definition at line 64 of file Parser.h.

## ◆ ColonProtectionRAIIObject

friend class ColonProtectionRAIIObject
| friend

Definition at line 58 of file Parser.h.

## ◆ InMessageExpressionRAIIObject

friend class InMessageExpressionRAIIObject
| friend

Definition at line 60 of file Parser.h.

## ◆ ObjCDeclContextSwitch

friend class ObjCDeclContextSwitch
| friend

Definition at line 62 of file Parser.h.

Referenced by ParseTopLevelDecl(), takeDeclAttributes(), and TryAnnotateOptionalCXXScopeToken().

## ◆ operator|

constexpr SkipUntilFlags operator| | ( | SkipUntilFlags | L,
|  | SkipUntilFlags | R
| ) |  |
| friend

Definition at line 1104 of file Parser.h.

## ◆ ParenBraceBracketBalancer

friend class ParenBraceBracketBalancer
| friend

Definition at line 63 of file Parser.h.

## ◆ ParsingOpenMPDirectiveRAII

friend class ParsingOpenMPDirectiveRAII
| friend

Definition at line 59 of file Parser.h.

## ◆ PoisonSEHIdentifiersRAIIObject

friend class PoisonSEHIdentifiersRAIIObject
| friend

Definition at line 61 of file Parser.h.

## Member Data Documentation

## ◆ MisleadingIndentationElseLoc

SourceLocation clang::Parser::MisleadingIndentationElseLoc

The location of the first statement inside an else that might have a missleading indentation.

If there is no MisleadingIndentationChecker on an else active, this location is invalid.

Definition at line 1142 of file Parser.h.

The documentation for this class was generated from the following files:

- include/clang/Parse/Parser.h
- lib/Parse/ParseCXXInlineMethods.cpp
- lib/Parse/ParseDecl.cpp
- lib/Parse/ParseDeclCXX.cpp
- lib/Parse/ParseExpr.cpp
- lib/Parse/ParseExprCXX.cpp
- lib/Parse/ParseInit.cpp
- lib/Parse/ParseObjc.cpp
- lib/Parse/ParseOpenMP.cpp
- lib/Parse/ParsePragma.cpp
- lib/Parse/Parser.cpp
- lib/Parse/ParseStmt.cpp
- lib/Parse/ParseStmtAsm.cpp
- lib/Parse/ParseTemplate.cpp
- lib/Parse/ParseTentative.cpp