clang  6.0.0svn
Public Member Functions | Static Public Member Functions | List of all members
clang::CanQual< T > Class Template Reference

Represents a canonical, potentially-qualified type. More...

#include "clang/AST/CanonicalType.h"

Inheritance diagram for clang::CanQual< T >:
Inheritance graph
[legend]

Public Member Functions

 CanQual ()=default
 Constructs a NULL canonical type. More...
 
template<typename U >
 CanQual (const CanQual< U > &Other, typename std::enable_if< std::is_base_of< T, U >::value, int >::type=0)
 Converting constructor that permits implicit upcasting of canonical type pointers. More...
 
const TgetTypePtr () const
 Retrieve the underlying type pointer, which refers to a canonical type. More...
 
const TgetTypePtrOrNull () const
 Retrieve the underlying type pointer, which refers to a canonical type, or nullptr. More...
 
 operator QualType () const
 Implicit conversion to a qualified type. More...
 
 operator bool () const
 Implicit conversion to bool. More...
 
bool isNull () const
 
SplitQualType split () const
 
template<typename U >
CanProxy< U > getAs () const
 Retrieve a canonical type pointer with a different static type, upcasting or downcasting as needed. More...
 
template<typename U >
CanProxy< U > castAs () const
 
CanProxy< Toperator-> () const
 Overloaded arrow operator that produces a canonical type proxy. More...
 
Qualifiers getQualifiers () const
 Retrieve all qualifiers. More...
 
unsigned getCVRQualifiers () const
 Retrieve the const/volatile/restrict qualifiers. More...
 
bool hasQualifiers () const
 Determines whether this type has any qualifiers. More...
 
bool isConstQualified () const
 
bool isVolatileQualified () const
 
bool isRestrictQualified () const
 
bool isCanonicalAsParam () const
 Determines if this canonical type is furthermore canonical as a parameter. More...
 
CanQual< TgetUnqualifiedType () const
 Retrieve the unqualified form of this type. More...
 
QualType withConst () const
 Retrieves a version of this type with const applied. More...
 
bool isMoreQualifiedThan (CanQual< T > Other) const
 Determines whether this canonical type is more qualified than the Other canonical type. More...
 
bool isAtLeastAsQualifiedAs (CanQual< T > Other) const
 Determines whether this canonical type is at least as qualified as the Other canonical type. More...
 
CanQual< TypegetNonReferenceType () const
 If the canonical type is a reference type, returns the type that it refers to; otherwise, returns the type itself. More...
 
void * getAsOpaquePtr () const
 Retrieve the internal representation of this canonical type. More...
 
void dump () const
 
void Profile (llvm::FoldingSetNodeID &ID) const
 

Static Public Member Functions

static CanQual< TgetFromOpaquePtr (void *Ptr)
 Construct a canonical type from its internal representation. More...
 
static CanQual< TCreateUnsafe (QualType Other)
 Builds a canonical type from a QualType. More...
 

Detailed Description

template<typename T = Type>
class clang::CanQual< T >

Represents a canonical, potentially-qualified type.

The CanQual template is a lightweight smart pointer that provides access to the canonical representation of a type, where all typedefs and other syntactic sugar has been eliminated. A CanQualType may also have various qualifiers (const, volatile, restrict) attached to it.

The template type parameter T is one of the Type classes (PointerType, BuiltinType, etc.). The type stored within CanQual<T> will be of that type (or some subclass of that type). The typedef CanQualType is just a shorthand for CanQual<Type>.

An instance of CanQual<T> can be implicitly converted to a CanQual<U> when T is derived from U, which essentially provides an implicit upcast. For example, CanQual<LValueReferenceType> can be converted to CanQual<ReferenceType>. Note that any CanQual type can be implicitly converted to a QualType, but the reverse operation requires a call to ASTContext::getCanonicalType().

Definition at line 66 of file CanonicalType.h.

Constructor & Destructor Documentation

◆ CanQual() [1/2]

template<typename T = Type>
clang::CanQual< T >::CanQual ( )
default

Constructs a NULL canonical type.

◆ CanQual() [2/2]

template<typename T = Type>
template<typename U >
clang::CanQual< T >::CanQual ( const CanQual< U > &  Other,
typename std::enable_if< std::is_base_of< T, U >::value, int >::type  = 0 
)

Converting constructor that permits implicit upcasting of canonical type pointers.

Member Function Documentation

◆ castAs()

template<typename T >
template<typename U >
CanProxy< U > clang::CanQual< T >::castAs ( ) const

◆ CreateUnsafe()

template<typename T >
CanQual< T > clang::CanQual< T >::CreateUnsafe ( QualType  Other)
static

Builds a canonical type from a QualType.

This routine is inherently unsafe, because it requires the user to ensure that the given type is a canonical type with the correct

Definition at line 641 of file CanonicalType.h.

Referenced by clang::CanQual< ObjCObjectType >::castAs(), clang::CanQual< ObjCObjectType >::getAs(), clang::CanQual< ObjCObjectType >::getAsOpaquePtr(), and clang::CanQual< ObjCObjectType >::getUnqualifiedType().

◆ dump()

template<typename T = Type>
void clang::CanQual< T >::dump ( ) const
inline

Definition at line 195 of file CanonicalType.h.

◆ getAs()

template<typename T >
template<typename U >
CanProxy< U > clang::CanQual< T >::getAs ( ) const

Retrieve a canonical type pointer with a different static type, upcasting or downcasting as needed.

The getAs() function is typically used to try to downcast to a more specific (canonical) type in the type system. For example:

void f(CanQual<Type> T) {
if (CanQual<PointerType> Ptr = T->getAs<PointerType>()) {
// look at Ptr's pointee type
}
}
Returns
A proxy pointer to the same type, but with the specified static type (U). If the dynamic type is not the specified static type or a derived class thereof, a NULL canonical type.

Definition at line 652 of file CanonicalType.h.

Referenced by clang::CodeGen::CodeGenTypes::arrangeCXXMethodType(), clang::CodeGen::CodeGenTypes::arrangeFunctionDeclaration(), GetFormalType(), clang::getSimplifiedTypeClass(), clang::Sema::isSameOrCompatibleFunctionType(), clang::CanQual< ObjCObjectType >::split(), and TryStaticDowncast().

◆ getAsOpaquePtr()

template<typename T = Type>
void* clang::CanQual< T >::getAsOpaquePtr ( ) const
inline

◆ getCVRQualifiers()

template<typename T = Type>
unsigned clang::CanQual< T >::getCVRQualifiers ( ) const
inline

Retrieve the const/volatile/restrict qualifiers.

Definition at line 133 of file CanonicalType.h.

◆ getFromOpaquePtr()

template<typename T >
CanQual< T > clang::CanQual< T >::getFromOpaquePtr ( void *  Ptr)
static

Construct a canonical type from its internal representation.

Definition at line 632 of file CanonicalType.h.

Referenced by clang::CanQual< ObjCObjectType >::getAsOpaquePtr(), and llvm::PointerLikeTypeTraits< clang::CanQual< T > >::getFromVoidPointer().

◆ getNonReferenceType()

template<typename T >
CanQual< Type > clang::CanQual< T >::getNonReferenceType ( ) const
inline

If the canonical type is a reference type, returns the type that it refers to; otherwise, returns the type itself.

Definition at line 624 of file CanonicalType.h.

Referenced by clang::CanQual< ObjCObjectType >::isAtLeastAsQualifiedAs().

◆ getQualifiers()

template<typename T = Type>
Qualifiers clang::CanQual< T >::getQualifiers ( ) const
inline

◆ getTypePtr()

template<typename T = Type>
const T* clang::CanQual< T >::getTypePtr ( ) const
inline

◆ getTypePtrOrNull()

template<typename T = Type>
const T* clang::CanQual< T >::getTypePtrOrNull ( ) const
inline

Retrieve the underlying type pointer, which refers to a canonical type, or nullptr.

Definition at line 88 of file CanonicalType.h.

Referenced by clang::CanProxyBase< VectorType >::operator const VectorType *().

◆ getUnqualifiedType()

template<typename T >
CanQual< T > clang::CanQual< T >::getUnqualifiedType ( ) const
inline

◆ hasQualifiers()

template<typename T = Type>
bool clang::CanQual< T >::hasQualifiers ( ) const
inline

Determines whether this type has any qualifiers.

Definition at line 136 of file CanonicalType.h.

Referenced by clang::DeclarationNameTable::getCXXSpecialName().

◆ isAtLeastAsQualifiedAs()

template<typename T = Type>
bool clang::CanQual< T >::isAtLeastAsQualifiedAs ( CanQual< T Other) const
inline

Determines whether this canonical type is at least as qualified as the Other canonical type.

Definition at line 174 of file CanonicalType.h.

Referenced by TryStaticDowncast().

◆ isCanonicalAsParam()

template<typename T = Type>
bool clang::CanQual< T >::isCanonicalAsParam ( ) const
inline

Determines if this canonical type is furthermore canonical as a parameter.

The parameter-canonicalization process decays arrays to pointers and drops top-level qualifiers.

Definition at line 153 of file CanonicalType.h.

◆ isConstQualified()

template<typename T = Type>
bool clang::CanQual< T >::isConstQualified ( ) const
inline

Definition at line 138 of file CanonicalType.h.

◆ isMoreQualifiedThan()

template<typename T = Type>
bool clang::CanQual< T >::isMoreQualifiedThan ( CanQual< T Other) const
inline

Determines whether this canonical type is more qualified than the Other canonical type.

Definition at line 168 of file CanonicalType.h.

◆ isNull()

template<typename T = Type>
bool clang::CanQual< T >::isNull ( ) const
inline

◆ isRestrictQualified()

template<typename T = Type>
bool clang::CanQual< T >::isRestrictQualified ( ) const
inline

Definition at line 146 of file CanonicalType.h.

◆ isVolatileQualified()

template<typename T = Type>
bool clang::CanQual< T >::isVolatileQualified ( ) const
inline

Definition at line 142 of file CanonicalType.h.

◆ operator bool()

template<typename T = Type>
clang::CanQual< T >::operator bool ( ) const
inlineexplicit

Implicit conversion to bool.

Definition at line 96 of file CanonicalType.h.

◆ operator QualType()

template<typename T = Type>
clang::CanQual< T >::operator QualType ( ) const
inline

Implicit conversion to a qualified type.

Definition at line 93 of file CanonicalType.h.

◆ operator->()

template<typename T >
CanProxy< T > clang::CanQual< T >::operator-> ( ) const

Overloaded arrow operator that produces a canonical type proxy.

Definition at line 676 of file CanonicalType.h.

Referenced by clang::CanQual< ObjCObjectType >::split().

◆ Profile()

template<typename T = Type>
void clang::CanQual< T >::Profile ( llvm::FoldingSetNodeID &  ID) const
inline

Definition at line 197 of file CanonicalType.h.

Referenced by clang::CodeGen::CGFunctionInfo::Profile().

◆ split()

template<typename T = Type>
SplitQualType clang::CanQual< T >::split ( ) const
inline

◆ withConst()

template<typename T = Type>
QualType clang::CanQual< T >::withConst ( ) const
inline

Retrieves a version of this type with const applied.

Note that this does not always yield a canonical type.

Definition at line 162 of file CanonicalType.h.

Referenced by clang::analyze_printf::PrintfSpecifier::getArgType(), clang::ASTContext::getCFConstantStringDecl(), and GetGCAttrTypeForType().


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