clang API Documentation

Public Member Functions | Static Public Member Functions
clang::CanQual< T > Class Template Reference

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

#include <CanonicalType.h>

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

List of all members.

Public Member Functions

 CanQual ()
 Constructs a NULL canonical type.
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.
const T * getTypePtr () const
 Retrieve the underlying type pointer, which refers to a canonical type.
const T * getTypePtrOrNull () const
 Retrieve the underlying type pointer, which refers to a canonical type, or NULL.
 operator QualType () const
 Implicit conversion to a qualified type.
LLVM_EXPLICIT operator bool () const
 Implicit conversion to bool.
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.
template<typename U >
CanProxy< U > castAs () const
CanProxy< T > operator-> () const
 Overloaded arrow operator that produces a canonical type proxy.
Qualifiers getQualifiers () const
 Retrieve all qualifiers.
unsigned getCVRQualifiers () const
 Retrieve the const/volatile/restrict qualifiers.
bool hasQualifiers () const
 Determines whether this type has any qualifiers.
bool isConstQualified () const
bool isVolatileQualified () const
bool isRestrictQualified () const
bool isCanonicalAsParam () const
 Determines if this canonical type is furthermore canonical as a parameter. The parameter-canonicalization process decays arrays to pointers and drops top-level qualifiers.
CanQual< T > getUnqualifiedType () const
 Retrieve the unqualified form of this type.
QualType withConst () const
 Retrieves a version of this type with const applied. Note that this does not always yield a canonical type.
bool isMoreQualifiedThan (CanQual< T > Other) const
 Determines whether this canonical type is more qualified than the Other canonical type.
bool isAtLeastAsQualifiedAs (CanQual< T > Other) const
 Determines whether this canonical type is at least as qualified as the Other canonical type.
CanQual< TypegetNonReferenceType () const
 If the canonical type is a reference type, returns the type that it refers to; otherwise, returns the type itself.
void * getAsOpaquePtr () const
 Retrieve the internal representation of this canonical type.
void dump () const
void Profile (llvm::FoldingSetNodeID &ID) const

Static Public Member Functions

static CanQual< T > getFromOpaquePtr (void *Ptr)
 Construct a canonical type from its internal representation.
static CanQual< T > CreateUnsafe (QualType Other)
 Builds a canonical type from a QualType.

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 52 of file CanonicalType.h.


Constructor & Destructor Documentation

template<typename T = Type>
clang::CanQual< T >::CanQual ( ) [inline]

Constructs a NULL canonical type.

Definition at line 58 of file CanonicalType.h.

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

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

Definition at line 717 of file CanonicalType.h.

References clang::CanQual< T >::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 691 of file CanonicalType.h.

References clang::QualType::getTypePtr(), clang::QualType::isCanonical(), and clang::QualType::isNull().

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

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

Definition at line 180 of file CanonicalType.h.

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 702 of file CanonicalType.h.

References clang::CanQual< T >::CreateUnsafe().

Referenced by clang::CodeGen::CodeGenTypes::arrangeCXXMethodType(), clang::CodeGen::CodeGenTypes::arrangeFunctionDeclaration(), DiagnoseBadConversion(), GetFormalType(), clang::getSimplifiedTypeClass(), IsModifiable(), clang::Sema::IsNoReturnConversion(), clang::Sema::isSameOrCompatibleFunctionType(), MatchesFriend(), and TryStaticDowncast().

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

Retrieve the const/volatile/restrict qualifiers.

Definition at line 120 of file CanonicalType.h.

Referenced by clang::CXXConstructorDecl::isCopyOrMoveConstructor().

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

Construct a canonical type from its internal representation.

Definition at line 682 of file CanonicalType.h.

References clang::QualType::getAsOpaquePtr(), clang::QualType::getFromOpaquePtr(), and clang::QualType::isCanonical().

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 674 of file CanonicalType.h.

Referenced by clang::ConversionFixItGenerator::compareTypesSimple().

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

Retrieve all qualifiers.

Definition at line 117 of file CanonicalType.h.

Referenced by BuildFieldReferenceExpr(), DiagnoseBadConversion(), InitCatchParam(), IsModifiable(), and MightInstantiateTo().

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

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

Definition at line 75 of file CanonicalType.h.

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

Determines whether this type has any qualifiers.

Definition at line 123 of file CanonicalType.h.

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

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 159 of file CanonicalType.h.

Referenced by clang::ConversionFixItGenerator::compareTypesSimple(), DiagnoseBadConversion(), and TryStaticDowncast().

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 138 of file CanonicalType.h.

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

Definition at line 125 of file CanonicalType.h.

Referenced by IsModifiable().

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 153 of file CanonicalType.h.

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

Definition at line 131 of file CanonicalType.h.

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

Definition at line 128 of file CanonicalType.h.

Referenced by AddBuiltinAssignmentOperatorCandidates().

template<typename T = Type>
LLVM_EXPLICIT clang::CanQual< T >::operator bool ( ) const [inline]

Implicit conversion to bool.

Definition at line 83 of file CanonicalType.h.

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

Implicit conversion to a qualified type.

Definition at line 80 of file CanonicalType.h.

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

Overloaded arrow operator that produces a canonical type proxy.

Definition at line 726 of file CanonicalType.h.

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

Definition at line 182 of file CanonicalType.h.

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

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

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