clang API Documentation

Public Types | Public Member Functions | Static Public Member Functions
clang::NestedNameSpecifier Class Reference

Represents a C++ nested name specifier, such as "\::std::vector<int>::". More...

#include <NestedNameSpecifier.h>

Inheritance diagram for clang::NestedNameSpecifier:
Inheritance graph
[legend]
Collaboration diagram for clang::NestedNameSpecifier:
Collaboration graph
[legend]

List of all members.

Public Types

enum  SpecifierKind {
  Identifier, Namespace, NamespaceAlias, TypeSpec,
  TypeSpecWithTemplate, Global, Super
}
 The kind of specifier that completes this nested name specifier. More...

Public Member Functions

NestedNameSpecifier * getPrefix () const
 Return the prefix of this nested name specifier.
SpecifierKind getKind () const
 Determine what kind of nested name specifier is stored.
IdentifierInfo * getAsIdentifier () const
 Retrieve the identifier stored in this nested name specifier.
NamespaceDecl * getAsNamespace () const
 Retrieve the namespace stored in this nested name specifier.
NamespaceAliasDecl * getAsNamespaceAlias () const
 Retrieve the namespace alias stored in this nested name specifier.
CXXRecordDecl * getAsRecordDecl () const
 Retrieve the record declaration stored in this nested name specifier.
const Type * getAsType () const
 Retrieve the type stored in this nested name specifier.
bool isDependent () const
 Whether this nested name specifier refers to a dependent type or not.
bool isInstantiationDependent () const
 Whether this nested name specifier involves a template parameter.
bool containsUnexpandedParameterPack () const
 Whether this nested-name-specifier contains an unexpanded parameter pack (for C++11 variadic templates).
void print (raw_ostream &OS, const PrintingPolicy &Policy) const
 Print this nested name specifier to the given output stream.
void Profile (llvm::FoldingSetNodeID &ID) const
void dump (const LangOptions &LO)
 Dump the nested name specifier to standard output to aid in debugging.

Static Public Member Functions

static NestedNameSpecifier * Create (const ASTContext &Context, NestedNameSpecifier *Prefix, IdentifierInfo *II)
 Builds a specifier combining a prefix and an identifier.
static NestedNameSpecifier * Create (const ASTContext &Context, NestedNameSpecifier *Prefix, const NamespaceDecl *NS)
 Builds a nested name specifier that names a namespace.
static NestedNameSpecifier * Create (const ASTContext &Context, NestedNameSpecifier *Prefix, NamespaceAliasDecl *Alias)
 Builds a nested name specifier that names a namespace alias.
static NestedNameSpecifier * Create (const ASTContext &Context, NestedNameSpecifier *Prefix, bool Template, const Type *T)
 Builds a nested name specifier that names a type.
static NestedNameSpecifier * Create (const ASTContext &Context, IdentifierInfo *II)
 Builds a specifier that consists of just an identifier.
static NestedNameSpecifier * GlobalSpecifier (const ASTContext &Context)
 Returns the nested name specifier representing the global scope.
static NestedNameSpecifier * SuperSpecifier (const ASTContext &Context, CXXRecordDecl *RD)
 Returns the nested name specifier representing the __super scope for the given CXXRecordDecl.

Detailed Description

Represents a C++ nested name specifier, such as "\::std::vector<int>::".

C++ nested name specifiers are the prefixes to qualified namespaces. For example, "foo::" in "foo::x" is a nested name specifier. Nested name specifiers are made up of a sequence of specifiers, each of which can be a namespace, type, identifier (for dependent names), decltype specifier, or the global specifier ('::'). The last two specifiers can only appear at the start of a nested-namespace-specifier.

Definition at line 44 of file NestedNameSpecifier.h.


Member Enumeration Documentation

The kind of specifier that completes this nested name specifier.

Enumerator:
Identifier 

An identifier, stored as an IdentifierInfo*.

Namespace 

A namespace, stored as a NamespaceDecl*.

NamespaceAlias 

A namespace alias, stored as a NamespaceAliasDecl*.

TypeSpec 

A type, stored as a Type*.

TypeSpecWithTemplate 

A type that was preceded by the 'template' keyword, stored as a Type*.

Global 

The global specifier '::'. There is no stored value.

Super 

Microsoft's '__super' specifier, stored as a CXXRecordDecl* of the class it appeared in.

Definition at line 74 of file NestedNameSpecifier.h.


Member Function Documentation

NestedNameSpecifier * NestedNameSpecifier::Create ( const ASTContext &  Context,
NestedNameSpecifier *  Prefix,
IdentifierInfo *  II 
) [static]
NestedNameSpecifier * NestedNameSpecifier::Create ( const ASTContext &  Context,
NestedNameSpecifier *  Prefix,
const NamespaceDecl *  NS 
) [static]

Builds a nested name specifier that names a namespace.

Definition at line 59 of file NestedNameSpecifier.cpp.

References getAsIdentifier(), and getAsType().

NestedNameSpecifier * NestedNameSpecifier::Create ( const ASTContext &  Context,
NestedNameSpecifier *  Prefix,
NamespaceAliasDecl *  Alias 
) [static]

Builds a nested name specifier that names a namespace alias.

Definition at line 75 of file NestedNameSpecifier.cpp.

References getAsIdentifier(), and getAsType().

NestedNameSpecifier * NestedNameSpecifier::Create ( const ASTContext &  Context,
NestedNameSpecifier *  Prefix,
bool  Template,
const Type *  T 
) [static]

Builds a nested name specifier that names a type.

Definition at line 91 of file NestedNameSpecifier.cpp.

NestedNameSpecifier * NestedNameSpecifier::Create ( const ASTContext &  Context,
IdentifierInfo *  II 
) [static]

Builds a specifier that consists of just an identifier.

The nested-name-specifier is assumed to be dependent, but has no prefix because the prefix is implied by something outside of the nested name specifier, e.g., in "x->Base::f", the "x" has a dependent type.

Definition at line 103 of file NestedNameSpecifier.cpp.

void NestedNameSpecifier::dump ( const LangOptions &  LO)

Dump the nested name specifier to standard output to aid in debugging.

Definition at line 321 of file NestedNameSpecifier.cpp.

References print().

const Type* clang::NestedNameSpecifier::getAsType ( ) const [inline]

Returns the nested name specifier representing the global scope.

Definition at line 113 of file NestedNameSpecifier.cpp.

References Context.

Referenced by clang::ASTImporter::Import(), clang::NestedNameSpecifierLocBuilder::MakeGlobal(), clang::ASTReader::ReadNestedNameSpecifier(), and synthesizeCurrentNestedNameSpecifier().

Whether this nested name specifier involves a template parameter.

Whether this nested name specifier refers to a dependent type or not.

Definition at line 212 of file NestedNameSpecifier.cpp.

References getAsType(), getKind(), Global, Identifier, clang::Type::isInstantiationDependentType(), Namespace, NamespaceAlias, Super, TypeSpec, and TypeSpecWithTemplate.

Referenced by clang::MemberExpr::Create().

void NestedNameSpecifier::print ( raw_ostream &  OS,
const PrintingPolicy &  Policy 
) const
void clang::NestedNameSpecifier::Profile ( llvm::FoldingSetNodeID &  ID) const [inline]

Definition at line 213 of file NestedNameSpecifier.h.

Returns the nested name specifier representing the __super scope for the given CXXRecordDecl.

Definition at line 122 of file NestedNameSpecifier.cpp.

Referenced by clang::ASTImporter::Import(), clang::NestedNameSpecifierLocBuilder::MakeSuper(), and clang::ASTReader::ReadNestedNameSpecifier().


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