clang  6.0.0svn
Classes | Public Types | Public Member Functions | Static Public Member Functions | 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:
Inheritance graph
Collaboration diagram for clang::Parser:
Collaboration graph


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< DeclGroupRefDeclGroupPtrTy
typedef OpaquePtr< TemplateNameTemplateTy
typedef SmallVector< TemplateParameterList *, 4 > TemplateParameterLists
typedef Sema::FullExprArg FullExprArg

Public Member Functions

 Parser (Preprocessor &PP, Sema &Actions, bool SkipFunctionBodies)
 ~Parser () override
const LangOptionsgetLangOpts () const
const TargetInfogetTargetInfo () const
PreprocessorgetPreprocessor () const
SemagetActions () const
AttributeFactorygetAttrFactory ()
const TokengetCurToken () const
ScopegetCurScope () const
void incrementMSManglingNumber () const
DeclgetObjCDeclContext () 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 ConsumeAnyToken (bool ConsumeCodeCompletionTok=false)
 ConsumeAnyToken - Dispatch to the right Consume* method based on the current token type. More...
SourceLocation getEndOfPreviousToken ()
IdentifierInfogetNullabilityKeyword (NullabilityKind nullability)
 Retrieve the underscored keyword (_Nonnull, _Nullable) that corresponds to the given nullability kind. More...
const TokenNextToken ()
 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, 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...


class ColonProtectionRAIIObject
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

Definition at line 287 of file Parser.h.

◆ FullExprArg

Definition at line 292 of file Parser.h.

◆ TemplateParameterLists

Definition at line 290 of file Parser.h.

◆ TemplateTy

Definition at line 288 of file Parser.h.

Member Enumeration Documentation

◆ SkipUntilFlags

Control flags for SkipUntil functions.


Stop skipping at semicolon.


Stop skipping at specified token, but don't skip the token itself.


Stop at code completion.

Definition at line 918 of file Parser.h.

◆ TypeCastState

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


Definition at line 1462 of file Parser.h.

Constructor & Destructor Documentation

◆ Parser()

Parser::Parser ( Preprocessor PP,
Sema Actions,
bool  SkipFunctionBodies 

◆ ~Parser()

Parser::~Parser ( )

Member Function Documentation

◆ ConsumeAnyToken()

SourceLocation clang::Parser::ConsumeAnyToken ( bool  ConsumeCodeCompletionTok = false)

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 344 of file Parser.h.

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

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

◆ ConsumeToken()

SourceLocation clang::Parser::ConsumeToken ( )

◆ Diag() [1/3]

DiagnosticBuilder Parser::Diag ( SourceLocation  Loc,
unsigned  DiagID 

◆ Diag() [2/3]

DiagnosticBuilder Parser::Diag ( const Token Tok,
unsigned  DiagID 

◆ Diag() [3/3]

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

Definition at line 906 of file Parser.h.

References Diag().

◆ EnterScope()

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(), clang::Parser::ParseScope::ParseScope(), and clang::Parser::ParseScope::~ParseScope().

◆ ExitScope()

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(), and clang::Parser::ParseScope::~ParseScope().

◆ getActions()

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

Definition at line 274 of file Parser.h.

Referenced by parseDeclareSimdClauses(), and parseOpenMPReductionId().

◆ getAttrFactory()

AttributeFactory& clang::Parser::getAttrFactory ( )

Definition at line 275 of file Parser.h.

◆ getCurScope()

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

◆ getCurToken()

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

◆ getEndOfPreviousToken()

SourceLocation clang::Parser::getEndOfPreviousToken ( )

Definition at line 362 of file Parser.h.

References clang::Preprocessor::getLocForEndOfToken().

Referenced by getMissingDeclaratorIdLoc().

◆ getLangOpts()

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

◆ getNullabilityKeyword()

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

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

Definition at line 368 of file Parser.h.

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

Referenced by addContextSensitiveTypeNullability().

◆ getObjCDeclContext()

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

Definition at line 283 of file Parser.h.

References clang::Sema::getObjCDeclContext().

Referenced by getMissingDeclaratorIdLoc(), and getTypeAnnotation().

◆ getPreprocessor()

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

Definition at line 273 of file Parser.h.

Referenced by ParseOpenMPDirectiveKind().

◆ getTargetInfo()

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

Definition at line 272 of file Parser.h.

References clang::Preprocessor::getTargetInfo().

Referenced by IsBuiltInOrStandardCXX11Attribute().

◆ getTypeAnnotation()

static ParsedType clang::Parser::getTypeAnnotation ( const Token Tok)

◆ incrementMSManglingNumber()

void clang::Parser::incrementMSManglingNumber ( ) const

Definition at line 279 of file Parser.h.

References clang::Sema::incrementMSManglingNumber().

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

◆ Initialize()

void Parser::Initialize ( )

◆ NextToken()

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

◆ ParseAssignmentExpression()

ExprResult Parser::ParseAssignmentExpression ( TypeCastState  isTypeCast = NotTypeCast)

◆ ParseConstantExpression()

ExprResult Parser::ParseConstantExpression ( TypeCastState  isTypeCast = NotTypeCast)

◆ ParseConstantExpressionInExprEvalContext()

ExprResult Parser::ParseConstantExpressionInExprEvalContext ( TypeCastState  isTypeCast = NotTypeCast)

◆ ParseConstraintExpression()

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::Sema::diagnoseExprIntendedAsTemplateName(), getCurScope(), clang::Token::getKind(), clang::prec::LogicalOr, SkipUntil(), StopAtSemi, and StopBeforeMatch.

◆ 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
///       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::Sema::ActOnUnaryOp(), clang::prec::Comma, clang::ActionResult< PtrTy, CompressInvalid >::get(), getCurScope(), clang::ActionResult< PtrTy, CompressInvalid >::isInvalid(), and ParseAssignmentExpression().

Referenced by addConstexprToLambdaDeclSpecifier(), isFoldOperator(), ParseUnqualifiedId(), and TypeTraitArity().

◆ ParseFirstTopLevelDecl()

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

◆ ParseMSAsmIdentifier()

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

◆ ParseOpenMPParensExpr()

ExprResult Parser::ParseOpenMPParensExpr ( StringRef  ClauseName,
SourceLocation RLoc 

◆ ParseOpenMPVarList()

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

◆ ParseTopLevelDecl() [1/2]

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::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::CodeCompleteOrdinaryName(), clang::ParsingDeclSpec::complete(), clang::ParsingDeclarator::complete(), clang::Scope::CompoundStmtScope, clang::BalancedDelimiterTracker::consumeClose(), clang::BalancedDelimiterTracker::consumeOpen(), ConsumeToken(), clang::Sema::ConvertDeclToDeclGroup(), clang::frontend::CPlusPlus, clang::frontend::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::Declarator::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::Declarator::getIdentifierLoc(), clang::Token::getKind(), getLangOpts(), clang::AttributeList::getLoc(), clang::Token::getLocation(), clang::Preprocessor::getLocForEndOfToken(), clang::ParsingDeclarator::getMutableDeclSpec(), clang::AttributeList::getName(), clang::AttributeList::getNext(), 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::Sema::HandleDeclarator(), clang::DeclSpec::hasTagDefinition(), Id, clang::DeclaratorChunk::ParamInfo::Ident, clang::frontend::ImplicitInt, clang::Token::is(), clang::Preprocessor::isBacktrackEnabled(), clang::Preprocessor::isCodeCompletionReached(), clang::AttributeList::isCXX11Attribute(), clang::Token::isEditorPlaceholder(), clang::DeclSpec::isEmpty(), clang::Declarator::isFunctionDeclarator(), clang::Preprocessor::isIncrementalProcessingEnabled(), clang::ActionResult< PtrTy, CompressInvalid >::isInvalid(), clang::CXXScopeSpec::isInvalid(), clang::AttributeList::isKnownToGCC(), clang::DeclaratorChunk::FunctionTypeInfo::isKNRPrototype(), clang::Token::isNot(), clang::Token::isObjCAtKeyword(), clang::DeclContext::isTranslationUnit(), clang::Declarator::KNRTypeListContext, clang::Sema::MarkAsLateParsedTemplate(), NextToken(), clang::DeclaratorChunk::FunctionTypeInfo::NumParams, 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::T, clang::DeclSpec::takeAttributesFrom(), TryAnnotateTypeOrScopeTokenAfterScopeSpec(), TryConsumeToken(), clang::DeclSpec::TSCS_unspecified, clang::DeclSpec::TST_int, and clang::DeclSpec::TST_unspecified.

◆ ParseTopLevelDecl() [2/2]

bool clang::Parser::ParseTopLevelDecl ( )

Definition at line 306 of file Parser.h.

References clang::Result.

Referenced by ParseFirstTopLevelDecl().

◆ ParseTypeName()

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.

Referenced by addConstexprToLambdaDeclSpecifier(), addContextSensitiveTypeNullability(), attributeParsedArgsUnevaluated(), diagnoseDynamicExceptionSpecification(), 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]
[C++0x] literal-operator-id [TODO]
~ class-name
SSThe nested-name-specifier that preceded this unqualified-id. If non-empty, then we are parsing the unqualified-id of a qualified-id.
EnteringContextwhether we are entering the scope of the nested-name-specifier.
AllowDestructorNamewhether we allow parsing of a destructor name.
AllowConstructorNamewhether we allow parsing a constructor name.
AllowDeductionGuidewhether we allow parsing a deduction guide name.
ObjectTypeif this unqualified-id occurs within a member access expression, the type of the base object whose member is being accessed.
Resulton a successful parse, contains the parsed unqualified-id.
true if parsing fails, false otherwise.

Definition at line 2435 of file ParseExprCXX.cpp.

References clang::Sema::ActOnCXXDelete(), clang::Sema::ActOnCXXNew(), clang::Sema::ActOnParenListExpr(), clang::Sema::ActOnTypeName(), clang::Declarator::AddTypeInfo(), clang::CXXScopeSpec::clear(), clang::Sema::CodeCompleteConstructor(), clang::BalancedDelimiterTracker::consumeClose(), clang::BalancedDelimiterTracker::consumeOpen(), ConsumeToken(), clang::frontend::CPlusPlus, clang::frontend::CPlusPlus1z, clang::FixItHint::CreateInsertion(), clang::FixItHint::CreateRemoval(), clang::Declarator::CXXNewContext, Diag(), clang::ExprError(), clang::OpaquePtr< PtrTy >::get(), clang::ActionResult< PtrTy, CompressInvalid >::get(), clang::DeclaratorChunk::getArray(), clang::Type::getCanonicalTypeInternal(), clang::BalancedDelimiterTracker::getCloseLocation(), getCurScope(), clang::Declarator::getDeclSpec(), clang::Sema::getDestructorName(), clang::Sema::getDestructorTypeForDecltype(), clang::Token::getIdentifierInfo(), clang::UnqualifiedId::getKind(), getLangOpts(), clang::Token::getLocation(), clang::Declarator::getLocEnd(), clang::Declarator::getMutableDeclSpec(), clang::BalancedDelimiterTracker::getOpenLocation(), clang::BalancedDelimiterTracker::getRange(), clang::DeclSpec::getSourceRange(), clang::Sema::getTypeName(), clang::UnqualifiedId::IK_LiteralOperatorId, clang::UnqualifiedId::IK_OperatorFunctionId, clang::Token::is(), 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::CXXScopeSpec::isSet(), clang::TemplateIdAnnotation::LAngleLoc, clang::TemplateIdAnnotation::Name, NextToken(), ParseConstantExpression(), ParseExpression(), clang::TemplateIdAnnotation::RAngleLoc, 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(), SkipUntil(), StopAtSemi, StopBeforeMatch, clang::T, clang::TemplateIdAnnotation::TemplateKWLoc, and clang::TemplateIdAnnotation::TemplateNameLoc.

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 1817 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) 

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 939 of file Parser.h.

Referenced by addConstexprToLambdaDeclSpecifier(), addContextSensitiveTypeNullability(), CheckArrayDesignatorSyntax(), CheckAvailabilitySpecList(), diagnoseRedundantPropertyNullability(), getMissingDeclaratorIdLoc(), isAttributeLateParsed(), IsBuiltInOrStandardCXX11Attribute(), clang::Parser::ObjCTypeParamListScope::leave(), clang::Parser::ConditionDeclarationOrInitStatementState::markNotExpression(), ParseConstraintExpression(), 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) 

Definition at line 943 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) 

Definition at line 948 of file Parser.h.

References clang::C, P, 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(), 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 1844 of file Parser.cpp.

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

Referenced by getTypeAnnotation().

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

Referenced by getTypeAnnotation().

◆ TryAnnotateTypeOrScopeTokenAfterScopeSpec()

bool Parser::TryAnnotateTypeOrScopeTokenAfterScopeSpec ( CXXScopeSpec SS,
bool  IsNewScope 

◆ TryConsumeToken() [1/2]

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

◆ TryConsumeToken() [2/2]

bool clang::Parser::TryConsumeToken ( tok::TokenKind  Expected,
SourceLocation Loc 

Definition at line 334 of file Parser.h.

References TryConsumeToken().

Friends And Related Function Documentation

◆ BalancedDelimiterTracker

friend class BalancedDelimiterTracker

Definition at line 63 of file Parser.h.

◆ ColonProtectionRAIIObject

friend class ColonProtectionRAIIObject

Definition at line 58 of file Parser.h.

◆ InMessageExpressionRAIIObject

friend class InMessageExpressionRAIIObject

Definition at line 59 of file Parser.h.

◆ ObjCDeclContextSwitch

friend class ObjCDeclContextSwitch

Definition at line 61 of file Parser.h.

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

◆ operator|

constexpr SkipUntilFlags operator| ( SkipUntilFlags  L,
SkipUntilFlags  R 

Definition at line 925 of file Parser.h.

◆ ParenBraceBracketBalancer

friend class ParenBraceBracketBalancer

Definition at line 62 of file Parser.h.

◆ PoisonSEHIdentifiersRAIIObject

friend class PoisonSEHIdentifiersRAIIObject

Definition at line 60 of file Parser.h.

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