[cfe-commits] r130655 - in /cfe/trunk: include/clang/AST/Type.h lib/Sema/SemaExprCXX.cpp
Chandler Carruth
chandlerc at gmail.com
Sun May 1 02:29:58 PDT 2011
Author: chandlerc
Date: Sun May 1 04:29:58 2011
New Revision: 130655
URL: http://llvm.org/viewvc/llvm-project?rev=130655&view=rev
Log:
Move several more type traits' implementations into the AST. A few were
already present in the AST, and I added the ones that weren't.
Modified:
cfe/trunk/include/clang/AST/Type.h
cfe/trunk/lib/Sema/SemaExprCXX.cpp
Modified: cfe/trunk/include/clang/AST/Type.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/Type.h?rev=130655&r1=130654&r2=130655&view=diff
==============================================================================
--- cfe/trunk/include/clang/AST/Type.h (original)
+++ cfe/trunk/include/clang/AST/Type.h Sun May 1 04:29:58 2011
@@ -1240,6 +1240,8 @@
bool isDerivedType() const; // C99 6.2.5p20
bool isScalarType() const; // C99 6.2.5p21 (arithmetic + pointers)
bool isAggregateType() const;
+ bool isFundamentalType() const;
+ bool isCompoundType() const;
// Type Predicates: Check to see if this type is structurally the specified
// type, ignoring typedefs and qualifiers.
@@ -4226,6 +4228,40 @@
return *this;
}
+/// \brief Tests whether the type is categorized as a fundamental type.
+///
+/// \returns True for types specified in C++0x [basic.fundamental].
+inline bool Type::isFundamentalType() const {
+ return isVoidType() ||
+ // FIXME: It's really annoying that we don't have an
+ // 'isArithmeticType()' which agrees with the standard definition.
+ (isArithmeticType() && !isEnumeralType());
+}
+
+/// \brief Tests whether the type is categorized as a compound type.
+///
+/// \returns True for types specified in C++0x [basic.compound].
+inline bool Type::isCompoundType() const {
+ // C++0x [basic.compound]p1:
+ // Compound types can be constructed in the following ways:
+ // -- arrays of objects of a given type [...];
+ return isArrayType() ||
+ // -- functions, which have parameters of given types [...];
+ isFunctionType() ||
+ // -- pointers to void or objects or functions [...];
+ isPointerType() ||
+ // -- references to objects or functions of a given type. [...]
+ isReferenceType() ||
+ // -- classes containing a sequence of objects of various types, [...];
+ isRecordType() ||
+ // -- unions, which ar classes capable of containing objects of different types at different times;
+ isUnionType() ||
+ // -- enumerations, which comprise a set of named constant values. [...];
+ isEnumeralType() ||
+ // -- pointers to non-static class members, [...].
+ isMemberPointerType();
+}
+
inline bool Type::isFunctionType() const {
return isa<FunctionType>(CanonicalType);
}
Modified: cfe/trunk/lib/Sema/SemaExprCXX.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExprCXX.cpp?rev=130655&r1=130654&r2=130655&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaExprCXX.cpp (original)
+++ cfe/trunk/lib/Sema/SemaExprCXX.cpp Sun May 1 04:29:58 2011
@@ -2484,13 +2484,9 @@
case UTT_IsEnum:
return T->isEnumeralType();
case UTT_IsUnion:
- if (const RecordType *Record = T->getAs<RecordType>())
- return Record->getDecl()->isUnion();
- return false;
+ return T->isUnionType();
case UTT_IsClass:
- if (const RecordType *Record = T->getAs<RecordType>())
- return !Record->getDecl()->isUnion();
- return false;
+ return T->isClassType() || T->isStructureType();
case UTT_IsFunction:
return T->isFunctionType();
@@ -2499,17 +2495,15 @@
case UTT_IsReference:
return T->isReferenceType();
case UTT_IsArithmetic:
- return T->isArithmeticType() && ! T->isEnumeralType();
+ return T->isArithmeticType() && !T->isEnumeralType();
case UTT_IsFundamental:
- return T->isVoidType() || (T->isArithmeticType() && ! T->isEnumeralType());
+ return T->isFundamentalType();
case UTT_IsObject:
- // Defined in Section 3.9 p8 of the Working Draft, essentially:
- // !__is_reference(T) && !__is_function(T) && !__is_void(T).
- return ! (T->isReferenceType() || T->isFunctionType() || T->isVoidType());
+ return T->isObjectType();
case UTT_IsScalar:
return T->isScalarType();
case UTT_IsCompound:
- return ! (T->isVoidType() || T->isArithmeticType()) || T->isEnumeralType();
+ return T->isCompoundType();
case UTT_IsMemberPointer:
return T->isMemberPointerType();
More information about the cfe-commits
mailing list