clang  3.7.0
Public Types | Public Member Functions | Friends | List of all members
clang::Declarator Class Reference

Information about one declarator, including the parsed type information and the identifier. More...

#include <DeclSpec.h>

Inheritance diagram for clang::Declarator:
[legend]

Public Types

enum  TheContext {
  FileContext, PrototypeContext, ObjCResultContext, ObjCParameterContext,
  KNRTypeListContext, TypeNameContext, MemberContext, BlockContext,
  ForContext, ConditionContext, TemplateParamContext, CXXNewContext,
  CXXCatchContext, ObjCCatchContext, BlockLiteralContext, LambdaExprContext,
  LambdaExprParameterContext, ConversionIdContext, TrailingReturnContext, TemplateTypeArgContext,
  AliasDeclContext, AliasTemplateContext
}
 
typedef SmallVectorImpl
< DeclaratorChunk >
::const_iterator 
type_object_iterator
 
typedef llvm::iterator_range
< type_object_iterator
type_object_range
 

Public Member Functions

 Declarator (const DeclSpec &ds, TheContext C)
 
 ~Declarator ()
 
const DeclSpecgetDeclSpec () const
 
DeclSpecgetMutableDeclSpec ()
 
AttributePoolgetAttributePool () const
 
const CXXScopeSpecgetCXXScopeSpec () const
 
CXXScopeSpecgetCXXScopeSpec ()
 
UnqualifiedIdgetName ()
 Retrieve the name specified by this declarator. More...
 
TheContext getContext () const
 
bool isPrototypeContext () const
 
const SourceRangegetSourceRange () const LLVM_READONLY
 Get the source range that spans this declarator. More...
 
SourceLocation getLocStart () const LLVM_READONLY
 
SourceLocation getLocEnd () const LLVM_READONLY
 
void SetSourceRange (SourceRange R)
 
void SetRangeBegin (SourceLocation Loc)
 
void SetRangeEnd (SourceLocation Loc)
 SetRangeEnd - Set the end of the source range to Loc, unless it's invalid. More...
 
void ExtendWithDeclSpec (const DeclSpec &DS)
 
void clear ()
 Reset the contents of this Declarator. More...
 
bool mayOmitIdentifier () const
 
bool mayHaveIdentifier () const
 
bool diagnoseIdentifier () const
 
bool mayBeFollowedByCXXDirectInit () const
 
bool isPastIdentifier () const
 
bool hasName () const
 
IdentifierInfogetIdentifier () const
 
SourceLocation getIdentifierLoc () const
 
void SetIdentifier (IdentifierInfo *Id, SourceLocation IdLoc)
 Set the name of this declarator to be the given identifier. More...
 
void AddTypeInfo (const DeclaratorChunk &TI, ParsedAttributes &attrs, SourceLocation EndLoc)
 
void AddInnermostTypeInfo (const DeclaratorChunk &TI)
 Add a new innermost chunk to this declarator. More...
 
unsigned getNumTypeObjects () const
 Return the number of types applied to this declarator. More...
 
const DeclaratorChunkgetTypeObject (unsigned i) const
 
DeclaratorChunkgetTypeObject (unsigned i)
 
type_object_range type_objects () const
 Returns the range of type objects, from the identifier outwards. More...
 
void DropFirstTypeObject ()
 
const DeclaratorChunkgetInnermostNonParenChunk () const
 
const DeclaratorChunkgetOutermostNonParenChunk () const
 
bool isArrayOfUnknownBound () const
 
bool isFunctionDeclarator (unsigned &idx) const
 
bool isFunctionDeclarator () const
 
DeclaratorChunk::FunctionTypeInfogetFunctionTypeInfo ()
 
const
DeclaratorChunk::FunctionTypeInfo
getFunctionTypeInfo () const
 
bool isDeclarationOfFunction () const
 Determine whether the declaration that will be produced from this declaration will be a function. More...
 
bool isFunctionDeclarationContext () const
 Return true if this declaration appears in a context where a function declarator would be a function declaration. More...
 
bool isFunctionDeclaratorAFunctionDeclaration () const
 Return true if a function declarator at this position would be a function declaration. More...
 
void takeAttributes (ParsedAttributes &attrs, SourceLocation lastLoc)
 
const AttributeListgetAttributes () const
 
AttributeListgetAttributes ()
 
AttributeList *& getAttrListRef ()
 
bool hasAttributes () const
 hasAttributes - do we contain any attributes? More...
 
void getCXX11AttributeRanges (SmallVectorImpl< SourceRange > &Ranges)
 Return a source range list of C++11 attributes associated with the declarator. More...
 
void setAsmLabel (Expr *E)
 
ExprgetAsmLabel () const
 
void setExtension (bool Val=true)
 
bool getExtension () const
 
void setObjCIvar (bool Val=true)
 
bool isObjCIvar () const
 
void setObjCWeakProperty (bool Val=true)
 
bool isObjCWeakProperty () const
 
void setInvalidType (bool Val=true)
 
bool isInvalidType () const
 
void setGroupingParens (bool flag)
 
bool hasGroupingParens () const
 
bool isFirstDeclarator () const
 
SourceLocation getCommaLoc () const
 
void setCommaLoc (SourceLocation CL)
 
bool hasEllipsis () const
 
SourceLocation getEllipsisLoc () const
 
void setEllipsisLoc (SourceLocation EL)
 
void setFunctionDefinitionKind (FunctionDefinitionKind Val)
 
bool isFunctionDefinition () const
 
FunctionDefinitionKind getFunctionDefinitionKind () const
 
bool isFirstDeclarationOfMember ()
 Returns true if this declares a real member and not a friend. More...
 
bool isStaticMember ()
 
void setRedeclaration (bool Val)
 
bool isRedeclaration () const
 

Friends

struct DeclaratorChunk
 

Detailed Description

Information about one declarator, including the parsed type information and the identifier.

When the declarator is fully formed, this is turned into the appropriate Decl object.

Declarators come in two types: normal declarators and abstract declarators. Abstract declarators are used when parsing types, and don't have an identifier. Normal declarators do have ID's.

Instances of this class should be a transient object that lives on the stack, not objects that are allocated in large quantities on the heap.

Definition at line 1572 of file DeclSpec.h.

Member Typedef Documentation

Definition at line 1960 of file DeclSpec.h.

Definition at line 1961 of file DeclSpec.h.

Member Enumeration Documentation

Enumerator
FileContext 
PrototypeContext 
ObjCResultContext 
ObjCParameterContext 
KNRTypeListContext 
TypeNameContext 
MemberContext 
BlockContext 
ForContext 
ConditionContext 
TemplateParamContext 
CXXNewContext 
CXXCatchContext 
ObjCCatchContext 
BlockLiteralContext 
LambdaExprContext 
LambdaExprParameterContext 
ConversionIdContext 
TrailingReturnContext 
TemplateTypeArgContext 
AliasDeclContext 
AliasTemplateContext 

Definition at line 1574 of file DeclSpec.h.

Constructor & Destructor Documentation

clang::Declarator::Declarator ( const DeclSpec ds,
TheContext  C 
)
inline

Definition at line 1661 of file DeclSpec.h.

clang::Declarator::~Declarator ( )
inline

Definition at line 1671 of file DeclSpec.h.

References clear().

Member Function Documentation

void clang::Declarator::AddInnermostTypeInfo ( const DeclaratorChunk TI)
inline

Add a new innermost chunk to this declarator.

Definition at line 1942 of file DeclSpec.h.

Referenced by maybeSynthesizeBlockSignature().

void clang::Declarator::AddTypeInfo ( const DeclaratorChunk TI,
ParsedAttributes attrs,
SourceLocation  EndLoc 
)
inline
void clang::Declarator::clear ( )
inline
bool clang::Declarator::diagnoseIdentifier ( ) const
inline
void clang::Declarator::DropFirstTypeObject ( )
inline

Definition at line 1968 of file DeclSpec.h.

Referenced by clang::Sema::ActOnCXXNew().

void clang::Declarator::ExtendWithDeclSpec ( const DeclSpec DS)
inline

ExtendWithDeclSpec - Extend the declarator source range to include the given declspec, unless its location is invalid. Adopts the range start if the current range start is invalid.

Definition at line 1726 of file DeclSpec.h.

References clang::SourceRange::getBegin(), clang::SourceRange::getEnd(), clang::DeclSpec::getSourceRange(), clang::SourceLocation::isInvalid(), clang::SourceRange::setBegin(), and clang::SourceRange::setEnd().

Expr* clang::Declarator::getAsmLabel ( ) const
inline
AttributePool& clang::Declarator::getAttributePool ( ) const
inline
const AttributeList* clang::Declarator::getAttributes ( ) const
inline
AttributeList* clang::Declarator::getAttributes ( )
inline

Definition at line 2126 of file DeclSpec.h.

References clang::ParsedAttributes::getList().

AttributeList*& clang::Declarator::getAttrListRef ( )
inline
SourceLocation clang::Declarator::getCommaLoc ( ) const
inline

Definition at line 2171 of file DeclSpec.h.

Referenced by warnAboutAmbiguousFunction().

TheContext clang::Declarator::getContext ( ) const
inline
void clang::Declarator::getCXX11AttributeRanges ( SmallVectorImpl< SourceRange > &  Ranges)
inline

Return a source range list of C++11 attributes associated with the declarator.

Definition at line 2141 of file DeclSpec.h.

References clang::ParsedAttributes::getList(), clang::AttributeList::getNext(), clang::AttributeList::getRange(), and clang::AttributeList::isCXX11Attribute().

const CXXScopeSpec& clang::Declarator::getCXXScopeSpec ( ) const
inline
CXXScopeSpec& clang::Declarator::getCXXScopeSpec ( )
inline

Definition at line 1692 of file DeclSpec.h.

const DeclSpec& clang::Declarator::getDeclSpec ( ) const
inline

getDeclSpec - Return the declaration-specifier that this declarator was declared with.

Definition at line 1676 of file DeclSpec.h.

Referenced by clang::Sema::ActOnCXXConditionDeclaration(), clang::Sema::ActOnCXXMemberDeclarator(), clang::Sema::ActOnCXXNew(), clang::Sema::ActOnExplicitInstantiation(), clang::Sema::ActOnFriendFunctionDecl(), clang::Sema::ActOnFunctionDeclarator(), clang::Sema::ActOnIvar(), clang::Sema::ActOnObjCExceptionDecl(), clang::Sema::ActOnParamDeclarator(), clang::Sema::ActOnTypedefDeclarator(), clang::Sema::ActOnVariableDeclarator(), clang::Sema::canDelayFunctionBody(), clang::Sema::CheckConstructorDeclarator(), clang::Sema::CheckConversionDeclarator(), clang::Sema::CheckDestructorDeclarator(), clang::Sema::CheckFieldDecl(), clang::Sema::checkUnusedDeclAttributes(), clang::Sema::containsUnexpandedParameterPacks(), ConvertDeclSpecToType(), CreateNewFunctionDecl(), diagnoseRedundantReturnTypeQualifiers(), getCCForDeclaratorChunk(), clang::ParsingDeclarator::getDeclSpec(), GetDeclSpecTypeForDeclarator(), GetFullTypeForDeclarator(), getFunctionStorageClass(), clang::Sema::GetTypeSourceInfoForDeclarator(), clang::Sema::HandleDeclarator(), clang::Sema::HandleField(), clang::Sema::HandleMSProperty(), hasAttributes(), hasParsedAttr(), isFirstDeclarationOfMember(), isFunctionDeclarationContext(), isOmittedBlockReturnType(), isStaticMember(), mayBeFollowedByCXXDirectInit(), clang::Sema::ParseTypedefDecl(), clang::Sema::ProcessDeclAttributes(), takeDeclAttributes(), and warnAboutAmbiguousFunction().

SourceLocation clang::Declarator::getEllipsisLoc ( ) const
inline
bool clang::Declarator::getExtension ( ) const
inline

Definition at line 2154 of file DeclSpec.h.

FunctionDefinitionKind clang::Declarator::getFunctionDefinitionKind ( ) const
inline
DeclaratorChunk::FunctionTypeInfo& clang::Declarator::getFunctionTypeInfo ( )
inline
const DeclaratorChunk::FunctionTypeInfo& clang::Declarator::getFunctionTypeInfo ( ) const
inline

getFunctionTypeInfo - Retrieves the function type info object (looking through parentheses).

Definition at line 2048 of file DeclSpec.h.

References getFunctionTypeInfo().

IdentifierInfo* clang::Declarator::getIdentifier ( ) const
inline
SourceLocation clang::Declarator::getIdentifierLoc ( ) const
inline
const DeclaratorChunk* clang::Declarator::getInnermostNonParenChunk ( ) const
inline

Return the innermost (closest to the declarator) chunk of this declarator that is not a parens chunk, or null if there are no non-parens chunks.

Definition at line 1977 of file DeclSpec.h.

Referenced by GetFullTypeForDeclarator(), and isArrayOfUnknownBound().

SourceLocation clang::Declarator::getLocEnd ( ) const
inline

Definition at line 1709 of file DeclSpec.h.

References clang::SourceRange::getEnd().

Referenced by clang::Sema::ActOnCXXNew().

SourceLocation clang::Declarator::getLocStart ( ) const
inline
DeclSpec& clang::Declarator::getMutableDeclSpec ( )
inline

getMutableDeclSpec - Return a non-const version of the DeclSpec. This should be used with extreme care: declspecs can often be shared between multiple declarators, so mutating the DeclSpec affects all of the Declarators. This should only be done when the declspec is known to not be shared or when in error recovery etc.

Definition at line 1683 of file DeclSpec.h.

Referenced by clang::Sema::ActOnCXXMemberDeclarator(), clang::Sema::ActOnExplicitInstantiation(), clang::Sema::ActOnObjCExceptionDecl(), clang::Sema::ActOnParamDeclarator(), addContextSensitiveTypeNullability(), distributeObjCPointerTypeAttrFromDeclarator(), GetFullTypeForDeclarator(), and RebuildDeclaratorInCurrentInstantiation().

UnqualifiedId& clang::Declarator::getName ( )
inline
unsigned clang::Declarator::getNumTypeObjects ( ) const
inline
const DeclaratorChunk* clang::Declarator::getOutermostNonParenChunk ( ) const
inline

Return the outermost (furthest from the declarator) chunk of this declarator that is not a parens chunk, or null if there are no non-parens chunks.

Definition at line 1988 of file DeclSpec.h.

const SourceRange& clang::Declarator::getSourceRange ( ) const
inline
const DeclaratorChunk& clang::Declarator::getTypeObject ( unsigned  i) const
inline
DeclaratorChunk& clang::Declarator::getTypeObject ( unsigned  i)
inline

Definition at line 1955 of file DeclSpec.h.

bool clang::Declarator::hasAttributes ( ) const
inline

hasAttributes - do we contain any attributes?

Definition at line 2131 of file DeclSpec.h.

References getAttributes(), getDeclSpec(), getNumTypeObjects(), and getTypeObject().

bool clang::Declarator::hasEllipsis ( ) const
inline
bool clang::Declarator::hasGroupingParens ( ) const
inline

Definition at line 2168 of file DeclSpec.h.

Referenced by mayBeFollowedByCXXDirectInit().

bool clang::Declarator::hasName ( ) const
inline

hasName - Whether this declarator has a name, which might be an identifier (accessible via getIdentifier()) or some kind of special C++ name (constructor, destructor, etc.).

Definition at line 1911 of file DeclSpec.h.

References clang::UnqualifiedId::getKind(), clang::UnqualifiedId::Identifier, and clang::UnqualifiedId::IK_Identifier.

Referenced by clang::Sema::ActOnParamDeclarator().

bool clang::Declarator::isArrayOfUnknownBound ( ) const
inline

isArrayOfUnknownBound - This method returns true if the declarator is a declarator for an array of unknown bound (looking through parentheses).

Definition at line 1999 of file DeclSpec.h.

References clang::DeclaratorChunk::Arr, clang::DeclaratorChunk::Array, getInnermostNonParenChunk(), clang::DeclaratorChunk::Kind, and clang::DeclaratorChunk::ArrayTypeInfo::NumElts.

bool Declarator::isDeclarationOfFunction ( ) const
bool clang::Declarator::isFirstDeclarationOfMember ( )
inline

Returns true if this declares a real member and not a friend.

Definition at line 2191 of file DeclSpec.h.

References getContext(), getDeclSpec(), clang::DeclSpec::isFriendSpecified(), and MemberContext.

Referenced by clang::Sema::ActOnFunctionDeclarator(), and getCCForDeclaratorChunk().

bool clang::Declarator::isFirstDeclarator ( ) const
inline

Definition at line 2170 of file DeclSpec.h.

References clang::SourceLocation::isValid().

Referenced by warnAboutAmbiguousFunction().

bool clang::Declarator::isFunctionDeclarationContext ( ) const
inline
bool clang::Declarator::isFunctionDeclarator ( unsigned idx) const
inline
bool clang::Declarator::isFunctionDeclarator ( ) const
inline

isFunctionDeclarator - Once this declarator is fully parsed and formed, this method returns true if the identifier is a function declarator (looking through parentheses).

Definition at line 2032 of file DeclSpec.h.

Referenced by getFunctionTypeInfo().

bool clang::Declarator::isFunctionDeclaratorAFunctionDeclaration ( ) const
inline

Return true if a function declarator at this position would be a function declaration.

Definition at line 2098 of file DeclSpec.h.

References getNumTypeObjects(), getTypeObject(), isFunctionDeclarationContext(), and clang::DeclaratorChunk::Paren.

bool clang::Declarator::isFunctionDefinition ( ) const
inline
bool clang::Declarator::isInvalidType ( ) const
inline
bool clang::Declarator::isObjCIvar ( ) const
inline

Definition at line 2157 of file DeclSpec.h.

bool clang::Declarator::isObjCWeakProperty ( ) const
inline

Definition at line 2160 of file DeclSpec.h.

bool clang::Declarator::isPastIdentifier ( ) const
inline

isPastIdentifier - Return true if we have parsed beyond the point where the

Definition at line 1906 of file DeclSpec.h.

References clang::UnqualifiedId::isValid().

bool clang::Declarator::isPrototypeContext ( ) const
inline
bool clang::Declarator::isRedeclaration ( ) const
inline
bool Declarator::isStaticMember ( )

Returns true if this declares a static member. This cannot be called on a declarator outside of a MemberContext because we won't know until redeclaration time if the decl is static.

Definition at line 345 of file DeclSpec.cpp.

References getContext(), getDeclSpec(), getName(), clang::DeclSpec::getStorageClassSpec(), clang::UnqualifiedId::IK_OperatorFunctionId, clang::CXXMethodDecl::isStaticOverloadedOperator(), clang::UnqualifiedId::Kind, MemberContext, and clang::DeclSpec::SCS_static.

Referenced by clang::Sema::ActOnFunctionDeclarator(), and getCCForDeclaratorChunk().

bool clang::Declarator::mayBeFollowedByCXXDirectInit ( ) const
inline
bool clang::Declarator::mayHaveIdentifier ( ) const
inline
bool clang::Declarator::mayOmitIdentifier ( ) const
inline
void clang::Declarator::setAsmLabel ( Expr E)
inline

Definition at line 2150 of file DeclSpec.h.

void clang::Declarator::setCommaLoc ( SourceLocation  CL)
inline

Definition at line 2172 of file DeclSpec.h.

void clang::Declarator::setEllipsisLoc ( SourceLocation  EL)
inline

Definition at line 2176 of file DeclSpec.h.

Referenced by GetFullTypeForDeclarator().

void clang::Declarator::setExtension ( bool  Val = true)
inline

Definition at line 2153 of file DeclSpec.h.

void clang::Declarator::setFunctionDefinitionKind ( FunctionDefinitionKind  Val)
inline
void clang::Declarator::setGroupingParens ( bool  flag)
inline

Definition at line 2167 of file DeclSpec.h.

void clang::Declarator::SetIdentifier ( IdentifierInfo Id,
SourceLocation  IdLoc 
)
inline
void clang::Declarator::setInvalidType ( bool  Val = true)
inline
void clang::Declarator::setObjCIvar ( bool  Val = true)
inline

Definition at line 2156 of file DeclSpec.h.

void clang::Declarator::setObjCWeakProperty ( bool  Val = true)
inline

Definition at line 2159 of file DeclSpec.h.

Referenced by clang::Sema::ActOnProperty().

void clang::Declarator::SetRangeBegin ( SourceLocation  Loc)
inline

SetRangeBegin - Set the start of the source range to Loc, unless it's invalid.

Definition at line 1714 of file DeclSpec.h.

References clang::SourceLocation::isInvalid(), and clang::SourceRange::setBegin().

void clang::Declarator::SetRangeEnd ( SourceLocation  Loc)
inline

SetRangeEnd - Set the end of the source range to Loc, unless it's invalid.

Definition at line 1719 of file DeclSpec.h.

References clang::SourceLocation::isInvalid(), and clang::SourceRange::setEnd().

Referenced by AddTypeInfo(), and takeAttributes().

void clang::Declarator::setRedeclaration ( bool  Val)
inline
void clang::Declarator::SetSourceRange ( SourceRange  R)
inline

Definition at line 1711 of file DeclSpec.h.

void clang::Declarator::takeAttributes ( ParsedAttributes attrs,
SourceLocation  lastLoc 
)
inline

takeAttributes - Takes attributes from the given parsed-attributes set and add them to this declarator.

These examples both add 3 attributes to "var": short int var attribute((aligned(16),common,deprecated)); short int x, attribute((aligned(16)) var attribute((common,deprecated));

Also extends the range of the declarator.

Definition at line 2118 of file DeclSpec.h.

References clang::SourceLocation::isInvalid(), SetRangeEnd(), and clang::ParsedAttributes::takeAllFrom().

Referenced by clang::Sema::ActOnCXXForRangeIdentifier().

type_object_range clang::Declarator::type_objects ( ) const
inline

Returns the range of type objects, from the identifier outwards.

Definition at line 1964 of file DeclSpec.h.

Referenced by clang::Sema::CheckConversionDeclarator().

Friends And Related Function Documentation

friend struct DeclaratorChunk
friend

Definition at line 1658 of file DeclSpec.h.


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