clang
3.7.0
|
#include <Type.h>
Public Types | |
typedef ObjCProtocolDecl *const * | qual_iterator |
typedef llvm::iterator_range < qual_iterator > | qual_range |
![]() | |
enum | TypeClass { TagFirst = Record, TagLast = Enum } |
enum | ScalarTypeKind { STK_CPointer, STK_BlockPointer, STK_ObjCObjectPointer, STK_MemberPointer, STK_Bool, STK_Integral, STK_Floating, STK_IntegralComplex, STK_FloatingComplex } |
Public Member Functions | |
QualType | getBaseType () const |
bool | isObjCId () const |
bool | isObjCClass () const |
bool | isObjCUnqualifiedId () const |
bool | isObjCUnqualifiedClass () const |
bool | isObjCUnqualifiedIdOrClass () const |
bool | isObjCQualifiedId () const |
bool | isObjCQualifiedClass () const |
ObjCInterfaceDecl * | getInterface () const |
bool | isSpecialized () const |
bool | isSpecializedAsWritten () const |
Determine whether this object type was written with type arguments. More... | |
bool | isUnspecialized () const |
bool | isUnspecializedAsWritten () const |
ArrayRef< QualType > | getTypeArgs () const |
Retrieve the type arguments of this object type (semantically). More... | |
ArrayRef< QualType > | getTypeArgsAsWritten () const |
qual_range | quals () const |
qual_iterator | qual_begin () const |
qual_iterator | qual_end () const |
bool | qual_empty () const |
unsigned | getNumProtocols () const |
ObjCProtocolDecl * | getProtocol (unsigned I) const |
Fetch a protocol by index. More... | |
ArrayRef< ObjCProtocolDecl * > | getProtocols () const |
Retrieve all of the protocol qualifiers. More... | |
bool | isKindOfTypeAsWritten () const |
Whether this is a "__kindof" type as written. More... | |
bool | isKindOfType () const |
Whether this ia a "__kindof" type (semantically). More... | |
QualType | getSuperClassType () const |
QualType | stripObjCKindOfTypeAndQuals (const ASTContext &ctx) const |
bool | isSugared () const |
QualType | desugar () const |
![]() | |
TypeClass | getTypeClass () const |
bool | isFromAST () const |
Whether this type comes from an AST file. More... | |
bool | containsUnexpandedParameterPack () const |
Whether this type is or contains an unexpanded parameter pack, used to support C++0x variadic templates. More... | |
bool | isCanonicalUnqualified () const |
QualType | getLocallyUnqualifiedSingleStepDesugaredType () const |
bool | isIncompleteType (NamedDecl **Def=nullptr) const |
Def If non-NULL, and the type refers to some kind of declaration that can be completed (such as a C struct, C++ class, or Objective-C class), will be set to the declaration. More... | |
bool | isIncompleteOrObjectType () const |
bool | isObjectType () const |
Determine whether this type is an object type. More... | |
bool | isLiteralType (const ASTContext &Ctx) const |
bool | isStandardLayoutType () const |
Test if this type is a standard-layout type. (C++0x [basic.type]p9) More... | |
bool | isBuiltinType () const |
isBuiltinType - returns true if the type is a builtin type. More... | |
bool | isSpecificBuiltinType (unsigned K) const |
isSpecificBuiltinType - Test for a particular builtin type. More... | |
bool | isPlaceholderType () const |
const BuiltinType * | getAsPlaceholderType () const |
bool | isSpecificPlaceholderType (unsigned K) const |
isSpecificPlaceholderType - Test for a specific placeholder type. More... | |
bool | isNonOverloadPlaceholderType () const |
bool | isIntegerType () const |
bool | isEnumeralType () const |
bool | isBooleanType () const |
bool | isCharType () const |
bool | isWideCharType () const |
bool | isChar16Type () const |
bool | isChar32Type () const |
bool | isAnyCharacterType () const |
Determine whether this type is any of the built-in character types. More... | |
bool | isIntegralType (ASTContext &Ctx) const |
Determine whether this type is an integral type. More... | |
bool | isIntegralOrEnumerationType () const |
Determine whether this type is an integral or enumeration type. More... | |
bool | isIntegralOrUnscopedEnumerationType () const |
Determine whether this type is an integral or unscoped enumeration type. More... | |
bool | isRealFloatingType () const |
Floating point categories. More... | |
bool | isComplexType () const |
bool | isAnyComplexType () const |
bool | isFloatingType () const |
bool | isHalfType () const |
bool | isRealType () const |
bool | isArithmeticType () const |
bool | isVoidType () const |
bool | isScalarType () const |
bool | isAggregateType () const |
Determines whether the type is a C++ aggregate type or C aggregate or union type. More... | |
bool | isFundamentalType () const |
Tests whether the type is categorized as a fundamental type. More... | |
bool | isCompoundType () const |
Tests whether the type is categorized as a compound type. More... | |
bool | isFunctionType () const |
bool | isFunctionNoProtoType () const |
bool | isFunctionProtoType () const |
bool | isPointerType () const |
bool | isAnyPointerType () const |
bool | isBlockPointerType () const |
bool | isVoidPointerType () const |
bool | isReferenceType () const |
bool | isLValueReferenceType () const |
bool | isRValueReferenceType () const |
bool | isFunctionPointerType () const |
bool | isMemberPointerType () const |
bool | isMemberFunctionPointerType () const |
bool | isMemberDataPointerType () const |
bool | isArrayType () const |
bool | isConstantArrayType () const |
bool | isIncompleteArrayType () const |
bool | isVariableArrayType () const |
bool | isDependentSizedArrayType () const |
bool | isRecordType () const |
bool | isClassType () const |
bool | isStructureType () const |
bool | isObjCBoxableRecordType () const |
bool | isInterfaceType () const |
bool | isStructureOrClassType () const |
bool | isUnionType () const |
bool | isComplexIntegerType () const |
bool | isVectorType () const |
bool | isExtVectorType () const |
bool | isObjCObjectPointerType () const |
bool | isObjCRetainableType () const |
bool | isObjCLifetimeType () const |
bool | isObjCIndirectLifetimeType () const |
bool | isObjCNSObjectType () const |
bool | isObjCIndependentClassType () const |
bool | isObjCObjectType () const |
bool | isObjCQualifiedInterfaceType () const |
bool | isObjCQualifiedIdType () const |
bool | isObjCQualifiedClassType () const |
bool | isObjCObjectOrInterfaceType () const |
bool | isObjCIdType () const |
bool | isObjCIdOrObjectKindOfType (const ASTContext &ctx, const ObjCObjectType *&bound) const |
bool | isObjCClassType () const |
bool | isObjCClassOrClassKindOfType () const |
bool | isBlockCompatibleObjCPointerType (ASTContext &ctx) const |
bool | isObjCSelType () const |
bool | isObjCBuiltinType () const |
bool | isObjCARCBridgableType () const |
Determine whether the given type T is a "bridgable" Objective-C type, which is either an Objective-C object pointer type or an. More... | |
bool | isCARCBridgableType () const |
Determine whether the given type T is a "bridgeable" C type. More... | |
bool | isTemplateTypeParmType () const |
bool | isNullPtrType () const |
bool | isAtomicType () const |
bool | isImage1dT () const |
bool | isImage1dArrayT () const |
bool | isImage1dBufferT () const |
bool | isImage2dT () const |
bool | isImage2dArrayT () const |
bool | isImage3dT () const |
bool | isImageType () const |
bool | isSamplerT () const |
bool | isEventT () const |
bool | isOpenCLSpecificType () const |
bool | isObjCARCImplicitlyUnretainedType () const |
Qualifiers::ObjCLifetime | getObjCARCImplicitLifetime () const |
Return the implicit lifetime for this type, which must not be dependent. More... | |
ScalarTypeKind | getScalarTypeKind () const |
getScalarTypeKind - Given that this is a scalar type, classify it. More... | |
bool | isDependentType () const |
bool | isInstantiationDependentType () const |
Determine whether this type is an instantiation-dependent type, meaning that the type involves a template parameter (even if the definition does not actually depend on the type substituted for that template parameter). More... | |
bool | isUndeducedType () const |
Determine whether this type is an undeduced type, meaning that it somehow involves a C++11 'auto' type which has not yet been deduced. More... | |
bool | isVariablyModifiedType () const |
Whether this type is a variably-modified type (C99 6.7.5). More... | |
bool | hasSizedVLAType () const |
Whether this type involves a variable-length array type with a definite size. More... | |
bool | hasUnnamedOrLocalType () const |
Whether this type is or contains a local or unnamed type. More... | |
bool | isOverloadableType () const |
Determines whether this is a type for which one can define an overloaded operator. More... | |
bool | isElaboratedTypeSpecifier () const |
Determine wither this type is a C++ elaborated-type-specifier. More... | |
bool | canDecayToPointerType () const |
Determines whether this type can decay to a pointer type. More... | |
bool | hasPointerRepresentation () const |
bool | hasObjCPointerRepresentation () const |
bool | hasIntegerRepresentation () const |
Determine whether this type has an integer representation of some sort, e.g., it is an integer type or a vector. More... | |
bool | hasSignedIntegerRepresentation () const |
Determine whether this type has an signed integer representation of some sort, e.g., it is an signed integer type or a vector. More... | |
bool | hasUnsignedIntegerRepresentation () const |
Determine whether this type has an unsigned integer representation of some sort, e.g., it is an unsigned integer type or a vector. More... | |
bool | hasFloatingRepresentation () const |
Determine whether this type has a floating-point representation of some sort, e.g., it is a floating-point type or a vector thereof. More... | |
const RecordType * | getAsStructureType () const |
const RecordType * | getAsUnionType () const |
NOTE: getAs*ArrayType are methods on ASTContext. More... | |
const ComplexType * | getAsComplexIntegerType () const |
const ObjCObjectType * | getAsObjCInterfaceType () const |
const ObjCObjectPointerType * | getAsObjCInterfacePointerType () const |
const ObjCObjectPointerType * | getAsObjCQualifiedIdType () const |
const ObjCObjectPointerType * | getAsObjCQualifiedClassType () const |
const ObjCObjectType * | getAsObjCQualifiedInterfaceType () const |
CXXRecordDecl * | getAsCXXRecordDecl () const |
Retrieves the CXXRecordDecl that this type refers to, either because the type is a RecordType or because it is the injected-class-name type of a class template or class template partial specialization. More... | |
TagDecl * | getAsTagDecl () const |
Retrieves the TagDecl that this type refers to, either because the type is a TagType or because it is the injected-class-name type of a class template or class template partial specialization. More... | |
const CXXRecordDecl * | getPointeeCXXRecordDecl () const |
AutoType * | getContainedAutoType () const |
Get the AutoType whose type will be deduced for a variable with an initializer of this type. This looks through declarators like pointer types, but not through decltype or typedefs. More... | |
template<typename T > | |
const T * | getAs () const |
const ArrayType * | getAsArrayTypeUnsafe () const |
template<typename T > | |
const T * | castAs () const |
const ArrayType * | castAsArrayTypeUnsafe () const |
const Type * | getBaseElementTypeUnsafe () const |
const Type * | getArrayElementTypeNoTypeQual () const |
QualType | getPointeeType () const |
const Type * | getUnqualifiedDesugaredType () const |
bool | isPromotableIntegerType () const |
More type predicates useful for type checking/promotion. More... | |
bool | isSignedIntegerType () const |
bool | isUnsignedIntegerType () const |
bool | isSignedIntegerOrEnumerationType () const |
bool | isUnsignedIntegerOrEnumerationType () const |
bool | isConstantSizeType () const |
bool | isSpecifierType () const |
Linkage | getLinkage () const |
Determine the linkage of this type. More... | |
Visibility | getVisibility () const |
Determine the visibility of this type. More... | |
bool | isVisibilityExplicit () const |
Return true if the visibility was explicitly set is the code. More... | |
LinkageInfo | getLinkageAndVisibility () const |
Determine the linkage and visibility of this type. More... | |
bool | isLinkageValid () const |
True if the computed linkage is valid. Used for consistency checking. Should always return true. More... | |
Optional< NullabilityKind > | getNullability (const ASTContext &context) const |
bool | canHaveNullability () const |
Optional< ArrayRef< QualType > > | getObjCSubstitutions (const DeclContext *dc) const |
bool | acceptsObjCTypeParams () const |
const char * | getTypeClassName () const |
QualType | getCanonicalTypeInternal () const |
CanQualType | getCanonicalTypeUnqualified () const |
void | dump () const |
template<> | |
const TypedefType * | getAs () const |
This will check for a TypedefType by removing any existing sugar until it reaches a TypedefType or a non-sugared type. More... | |
template<> | |
const TemplateSpecializationType * | getAs () const |
This will check for a TemplateSpecializationType by removing any existing sugar until it reaches a TemplateSpecializationType or a non-sugared type. More... | |
template<> | |
const AttributedType * | getAs () const |
This will check for an AttributedType by removing any existing sugar until it reaches an AttributedType or a non-sugared type. More... | |
Static Public Member Functions | |
static bool | classof (const Type *T) |
Protected Types | |
enum | Nonce_ObjCInterface { Nonce_ObjCInterface } |
Protected Member Functions | |
ObjCObjectType (QualType Canonical, QualType Base, ArrayRef< QualType > typeArgs, ArrayRef< ObjCProtocolDecl * > protocols, bool isKindOf) | |
ObjCObjectType (enum Nonce_ObjCInterface) | |
void | computeSuperClassTypeSlow () const |
![]() | |
Type * | this_ () |
Type (TypeClass tc, QualType canon, bool Dependent, bool InstantiationDependent, bool VariablyModified, bool ContainsUnexpandedParameterPack) | |
void | setDependent (bool D=true) |
void | setInstantiationDependent (bool D=true) |
void | setVariablyModified (bool VM=true) |
void | setContainsUnexpandedParameterPack (bool PP=true) |
Additional Inherited Members | |
![]() | |
union { | |
TypeBitfields TypeBits | |
ArrayTypeBitfields ArrayTypeBits | |
AttributedTypeBitfields AttributedTypeBits | |
AutoTypeBitfields AutoTypeBits | |
BuiltinTypeBitfields BuiltinTypeBits | |
FunctionTypeBitfields FunctionTypeBits | |
ObjCObjectTypeBitfields ObjCObjectTypeBits | |
ReferenceTypeBitfields ReferenceTypeBits | |
TypeWithKeywordBitfields TypeWithKeywordBits | |
VectorTypeBitfields VectorTypeBits | |
}; | |
ObjCObjectType - Represents a class type in Objective C.
Every Objective C type is a combination of a base type, a set of type arguments (optional, for parameterized classes) and a list of protocols.
Given the following declarations:
'C' is an ObjCInterfaceType C. It is sugar for an ObjCObjectType with base C and no protocols.
'C
' is an unspecialized ObjCObjectType with base C and protocol list [P]. 'C<C*>' is a specialized ObjCObjectType with type arguments 'C*' and no protocol list. 'C<C*>
' is a specialized ObjCObjectType with base C, type arguments 'C*', and protocol list [P].
'id' is a TypedefType which is sugar for an ObjCObjectPointerType whose pointee is an ObjCObjectType with base BuiltinType::ObjCIdType and no protocols.
'id
' is an ObjCObjectPointerType whose pointee is an ObjCObjectType with base BuiltinType::ObjCIdType and protocol list [P]. Eventually this should get its own sugar class to better represent the source.
typedef ObjCProtocolDecl* const* clang::ObjCObjectType::qual_iterator |
typedef llvm::iterator_range<qual_iterator> clang::ObjCObjectType::qual_range |
|
protected |
|
inlineprotected |
Definition at line 4552 of file Type.h.
References clang::Type::ObjCObjectTypeBits.
Definition at line 4671 of file Type.h.
References clang::Type::getTypeClass().
|
protected |
Definition at line 1353 of file Type.cpp.
References clang::Type::castAs(), clang::Decl::getASTContext(), getInterface(), clang::ASTContext::getObjCInterfaceType(), clang::ObjCInterfaceDecl::getSuperClassType(), getTypeArgs(), clang::ObjCInterfaceDecl::getTypeParamList(), isUnspecialized(), clang::ObjCTypeParamList::size(), clang::QualType::substObjCTypeArgs(), and clang::Superclass.
|
inline |
Definition at line 4669 of file Type.h.
References clang::ExtQualsTypeCommonBase::QualType.
|
inline |
getBaseType - Gets the base type of this object type. This is always (possibly sugar for) one of:
Definition at line 4569 of file Type.h.
Referenced by getTypeArgs(), isKindOfType(), isSpecialized(), IsStructurallyEquivalent(), clang::ObjCObjectTypeImpl::Profile(), stripObjCKindOfTypeAndQuals(), and clang::ASTNodeImporter::VisitObjCObjectType().
|
inline |
Gets the interface declaration for this object type, if the base type really is an interface.
Definition at line 4758 of file Type.h.
References clang::Type::getAs().
Referenced by clang::Sema::ActOnCompatibilityAlias(), clang::Sema::ActOnSuperClassOfClassInterface(), clang::ASTContext::areCommonBaseCompatible(), clang::Sema::BuildClassMessage(), clang::ASTContext::canAssignObjCInterfaces(), clang::Sema::checkInitMethod(), clang::Sema::CheckObjCForCollectionOperand(), computeSuperClassTypeSlow(), clang::CodeGen::CodeGenFunction::EmitObjCCollectionLiteral(), clang::CodeGen::CodeGenFunction::EmitObjCMessageExpr(), getIntersectionOfProtocols(), isNSStringType(), clang::Sema::LookupMethodInObjectType(), maybeAdjustInterfaceForSubscriptingCheck(), and ShouldTryAgainWithRedefinitionType().
|
inline |
getNumProtocols - Return the number of qualifying protocols in this interface type, or 0 if there are none.
Definition at line 4631 of file Type.h.
References clang::Type::ObjCObjectTypeBits.
Referenced by clang::ASTContext::canAssignObjCInterfaces(), IsStructurallyEquivalent(), ObjCObjectType(), and clang::ObjCObjectTypeImpl::Profile().
|
inline |
Fetch a protocol by index.
Definition at line 4634 of file Type.h.
Referenced by IsStructurallyEquivalent().
|
inline |
|
inline |
Retrieve the type of the superclass of this object type.
This operation substitutes any type arguments into the superclass of the current class type, potentially producing a specialization of the superclass type. Produces a null type if there is no superclass.
Definition at line 4656 of file Type.h.
References clang::ExtQualsTypeCommonBase::QualType.
Referenced by clang::ASTContext::areCommonBaseCompatible(), clang::ASTContext::canAssignObjCInterfaces(), and clang::ObjCObjectPointerType::getSuperClassType().
Retrieve the type arguments of this object type (semantically).
Definition at line 566 of file Type.cpp.
References getBaseType(), getTypeArgsAsWritten(), and isSpecializedAsWritten().
Referenced by clang::ASTContext::areCommonBaseCompatible(), clang::ASTContext::canAssignObjCInterfaces(), and computeSuperClassTypeSlow().
Retrieve the type arguments of this object type as they were written.
Definition at line 4615 of file Type.h.
References clang::Type::ObjCObjectTypeBits.
Referenced by clang::ASTContext::areCommonBaseCompatible(), getTypeArgs(), ObjCObjectType(), clang::ObjCObjectTypeImpl::Profile(), stripObjCKindOfTypeAndQuals(), and clang::ASTNodeImporter::VisitObjCObjectType().
bool ObjCObjectType::isKindOfType | ( | ) | const |
Whether this ia a "__kindof" type (semantically).
Definition at line 584 of file Type.cpp.
References getBaseType(), and isKindOfTypeAsWritten().
Referenced by clang::ASTContext::areCommonBaseCompatible(), clang::ASTContext::canAssignObjCInterfaces(), and stripObjCKindOfTypeAndQuals().
|
inline |
Whether this is a "__kindof" type as written.
Definition at line 4645 of file Type.h.
References clang::Type::ObjCObjectTypeBits.
Referenced by isKindOfType(), clang::ObjCObjectTypeImpl::Profile(), and clang::ASTNodeImporter::VisitObjCObjectType().
|
inline |
Definition at line 4574 of file Type.h.
Referenced by clang::Sema::checkInitMethod(), LookupMemberExpr(), and ShouldTryAgainWithRedefinitionType().
|
inline |
Definition at line 4571 of file Type.h.
Referenced by clang::Sema::checkInitMethod(), LookupMemberExpr(), and ShouldTryAgainWithRedefinitionType().
|
inline |
Definition at line 4587 of file Type.h.
Referenced by clang::ASTContext::canAssignObjCInterfaces().
|
inline |
Definition at line 4586 of file Type.h.
Referenced by clang::ASTContext::canAssignObjCInterfaces().
|
inline |
|
inline |
|
inline |
Definition at line 4579 of file Type.h.
Referenced by clang::ASTContext::canAssignObjCInterfaces().
bool ObjCObjectType::isSpecialized | ( | ) | const |
Determine whether this object type is "specialized", meaning that it has type arguments.
Definition at line 548 of file Type.cpp.
References getBaseType(), and clang::Type::ObjCObjectTypeBits.
Referenced by clang::ASTContext::areCommonBaseCompatible(), and clang::ASTContext::canAssignObjCInterfaces().
|
inline |
Determine whether this object type was written with type arguments.
Definition at line 4598 of file Type.h.
References clang::Type::ObjCObjectTypeBits.
Referenced by getTypeArgs().
|
inline |
Determine whether this object type is "unspecialized", meaning that it has no type arguments.
Definition at line 4604 of file Type.h.
Referenced by computeSuperClassTypeSlow().
|
inline |
|
inline |
Definition at line 4624 of file Type.h.
Referenced by clang::ObjCObjectTypeImpl::Profile().
|
inline |
Definition at line 4627 of file Type.h.
Referenced by clang::Sema::CheckObjCForCollectionOperand(), and stripObjCKindOfTypeAndQuals().
|
inline |
|
inline |
Definition at line 4623 of file Type.h.
Referenced by clang::ASTContext::canAssignObjCInterfaces(), getIntersectionOfProtocols(), clang::Sema::LookupMethodInObjectType(), and clang::ASTNodeImporter::VisitObjCObjectType().
QualType ObjCObjectType::stripObjCKindOfTypeAndQuals | ( | const ASTContext & | ctx | ) | const |
Strip off the Objective-C "kindof" type and (with it) any protocol qualifiers.
Definition at line 601 of file Type.cpp.
References clang::Type::getAs(), getBaseType(), clang::ASTContext::getObjCObjectType(), clang::ASTContext::getQualifiedType(), getTypeArgsAsWritten(), isKindOfType(), qual_empty(), clang::SplitQualType::Quals, clang::ExtQualsTypeCommonBase::QualType, clang::QualType::split(), and clang::SplitQualType::Ty.
Referenced by clang::Type::isObjCIdOrObjectKindOfType(), and clang::ObjCObjectPointerType::stripObjCKindOfTypeAndQuals().