clang  3.9.0
Classes | Namespaces | Macros | Typedefs | Functions
Type.cpp File Reference
#include "clang/AST/ASTContext.h"
#include "clang/AST/Attr.h"
#include "clang/AST/CharUnits.h"
#include "clang/AST/DeclCXX.h"
#include "clang/AST/DeclObjC.h"
#include "clang/AST/DeclTemplate.h"
#include "clang/AST/Expr.h"
#include "clang/AST/PrettyPrinter.h"
#include "clang/AST/Type.h"
#include "clang/AST/TypeVisitor.h"
#include "clang/Basic/Specifiers.h"
#include "clang/Basic/TargetInfo.h"
#include "llvm/ADT/APSInt.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/Support/raw_ostream.h"
#include <algorithm>
#include "clang/AST/TypeNodes.def"
#include "clang/Basic/OpenCLImageTypes.def"
#include "clang/AST/BuiltinTypes.def"
Include dependency graph for Type.cpp:

Go to the source code of this file.

Classes

class  clang::TypePropertyCache< Private >
 The type-property cache. More...
 

Namespaces

 clang
 Dataflow Directional Tag Classes.
 

Macros

#define ABSTRACT_TYPE(Class, Parent)
 
#define TYPE(Class, Parent)
 
#define ABSTRACT_TYPE(Class, Parent)
 
#define TYPE(Class, Parent)
 
#define ABSTRACT_TYPE(Class, Parent)
 
#define TYPE(Class, Parent)
 
#define ABSTRACT_TYPE(Class, Parent)
 
#define TYPE(Class, Parent)
 
#define ABSTRACT_TYPE(Class, Parent)
 
#define TYPE(Class, Parent)
 
#define TYPE(Class, Base)
 
#define DEPENDENT_TYPE(Class, Base)   QualType Visit##Class##Type(const Class##Type *T) { return QualType(T, 0); }
 
#define TRIVIAL_TYPE_CLASS(Class)   QualType Visit##Class##Type(const Class##Type *T) { return QualType(T, 0); }
 
#define ABSTRACT_TYPE(Derived, Base)
 
#define TYPE(Derived, Base)   case Derived: return #Derived;
 
#define IMAGE_TYPE(ImgType, Id, SingletonId, Access, Suffix)
 
#define TYPE(Class, Base)
 
#define NON_CANONICAL_TYPE(Class, Base)   case Type::Class:
 
#define TYPE(Class, Base)
 
#define DEPENDENT_TYPE(Class, Base)   case Type::Class:
 
#define NON_CANONICAL_UNLESS_DEPENDENT_TYPE(Class, Base)   case Type::Class:
 
#define TYPE(Class, Base)
 
#define NON_CANONICAL_TYPE(Class, Base)   case Type::Class:
 
#define TYPE(Class, Base)
 
#define DEPENDENT_TYPE(Class, Base)   case Type::Class:
 
#define NON_CANONICAL_UNLESS_DEPENDENT_TYPE(Class, Base)   case Type::Class:
 
#define NON_CANONICAL_TYPE(Class, Parent)
 
#define TYPE(Class, Parent)
 
#define SIGNED_TYPE(Id, SingletonId)   case BuiltinType::Id:
 
#define UNSIGNED_TYPE(Id, SingletonId)   case BuiltinType::Id:
 
#define FLOATING_TYPE(Id, SingletonId)   case BuiltinType::Id:
 
#define BUILTIN_TYPE(Id, SingletonId)
 
#define IMAGE_TYPE(ImgType, Id, SingletonId, Access, Suffix)   case BuiltinType::Id:
 

Typedefs

typedef TypePropertyCache
< Private > 
Cache
 

Functions

template<typename T >
static const T * getAsSugar (const Type *Cur)
 This will check for a T (which should be a Type which can act as sugar, such as a TypedefType) by removing any existing sugar until it reaches a T or a non-sugared type. More...
 
static TagDeclgetInterestingTagDecl (TagDecl *decl)
 
static CachedProperties computeCachedProperties (const Type *T)
 
static LinkageInfo computeLinkageInfo (QualType T)
 
static LinkageInfo computeLinkageInfo (const Type *T)
 

Macro Definition Documentation

#define ABSTRACT_TYPE (   Class,
  Parent 
)
#define ABSTRACT_TYPE (   Class,
  Parent 
)
#define ABSTRACT_TYPE (   Class,
  Parent 
)
#define ABSTRACT_TYPE (   Class,
  Parent 
)
#define ABSTRACT_TYPE (   Class,
  Parent 
)
#define ABSTRACT_TYPE (   Derived,
  Base 
)
#define BUILTIN_TYPE (   Id,
  SingletonId 
)
#define DEPENDENT_TYPE (   Class,
  Base 
)    QualType Visit##Class##Type(const Class##Type *T) { return QualType(T, 0); }

Definition at line 675 of file Type.cpp.

#define DEPENDENT_TYPE (   Class,
  Base 
)    case Type::Class:

Definition at line 675 of file Type.cpp.

#define DEPENDENT_TYPE (   Class,
  Base 
)    case Type::Class:

Definition at line 675 of file Type.cpp.

#define FLOATING_TYPE (   Id,
  SingletonId 
)    case BuiltinType::Id:
#define IMAGE_TYPE (   ImgType,
  Id,
  SingletonId,
  Access,
  Suffix 
)
Value:
case Id: \
return "__" #Access " " #ImgType "_t";
return(__x >> __y)|(__x<< (32-__y))
#define IMAGE_TYPE (   ImgType,
  Id,
  SingletonId,
  Access,
  Suffix 
)    case BuiltinType::Id:
#define NON_CANONICAL_TYPE (   Class,
  Base 
)    case Type::Class:
#define NON_CANONICAL_TYPE (   Class,
  Base 
)    case Type::Class:
#define NON_CANONICAL_TYPE (   Class,
  Parent 
)
Value:
case Type::Class: \
llvm_unreachable("non-canonical type");
#define NON_CANONICAL_UNLESS_DEPENDENT_TYPE (   Class,
  Base 
)    case Type::Class:
#define NON_CANONICAL_UNLESS_DEPENDENT_TYPE (   Class,
  Base 
)    case Type::Class:
#define SIGNED_TYPE (   Id,
  SingletonId 
)    case BuiltinType::Id:
#define TRIVIAL_TYPE_CLASS (   Class)    QualType Visit##Class##Type(const Class##Type *T) { return QualType(T, 0); }

Definition at line 679 of file Type.cpp.

#define TYPE (   Class,
  Parent 
)
Value:
case Type::Class: { \
const Class##Type *ty = cast<Class##Type>(this); \
if (!ty->isSugared()) return QualType(ty, 0); \
return ty->desugar(); \
}
A (possibly-)qualified type.
Definition: Type.h:598
The base class of the type hierarchy.
Definition: Type.h:1281
return(__x >> __y)|(__x<< (32-__y))
if(T->getSizeExpr()) TRY_TO(TraverseStmt(T-> getSizeExpr()))

Definition at line 674 of file Type.cpp.

#define TYPE (   Class,
  Parent 
)
Value:
case Type::Class: { \
const Class##Type *Ty = cast<Class##Type>(CurTy); \
if (!Ty->isSugared()) \
return SplitQualType(Ty, Qs); \
Cur = Ty->desugar(); \
break; \
}
The base class of the type hierarchy.
Definition: Type.h:1281
A std::pair-like structure for storing a qualified type split into its local qualifiers and its local...
Definition: Type.h:541
if(T->getSizeExpr()) TRY_TO(TraverseStmt(T-> getSizeExpr()))

Definition at line 674 of file Type.cpp.

#define TYPE (   Class,
  Parent 
)
Value:
case Type::Class: { \
const Class##Type *ty = cast<Class##Type>(split.Ty); \
if (!ty->isSugared()) goto done; \
next = ty->desugar(); \
break; \
}
The base class of the type hierarchy.
Definition: Type.h:1281
if(T->getSizeExpr()) TRY_TO(TraverseStmt(T-> getSizeExpr()))

Definition at line 674 of file Type.cpp.

#define TYPE (   Class,
  Parent 
)
Value:
case Type::Class: { \
const Class##Type *Ty = cast<Class##Type>(Cur); \
if (!Ty->isSugared()) return 0; \
Cur = Ty->desugar().getTypePtr(); \
break; \
}
The base class of the type hierarchy.
Definition: Type.h:1281
if(T->getSizeExpr()) TRY_TO(TraverseStmt(T-> getSizeExpr()))

Definition at line 674 of file Type.cpp.

#define TYPE (   Class,
  Parent 
)
Value:
case Class: { \
const Class##Type *Ty = cast<Class##Type>(Cur); \
if (!Ty->isSugared()) return Cur; \
Cur = Ty->desugar().getTypePtr(); \
break; \
}
The base class of the type hierarchy.
Definition: Type.h:1281
if(T->getSizeExpr()) TRY_TO(TraverseStmt(T-> getSizeExpr()))

Definition at line 674 of file Type.cpp.

#define TYPE (   Class,
  Base 
)

Definition at line 674 of file Type.cpp.

#define TYPE (   Derived,
  Base 
)    case Derived: return #Derived;

Definition at line 674 of file Type.cpp.

#define TYPE (   Class,
  Base 
)

Definition at line 674 of file Type.cpp.

#define TYPE (   Class,
  Base 
)

Definition at line 674 of file Type.cpp.

#define TYPE (   Class,
  Base 
)

Definition at line 674 of file Type.cpp.

#define TYPE (   Class,
  Base 
)

Definition at line 674 of file Type.cpp.

#define TYPE (   Class,
  Parent 
)

Definition at line 674 of file Type.cpp.

#define UNSIGNED_TYPE (   Id,
  SingletonId 
)    case BuiltinType::Id:

Typedef Documentation

typedef TypePropertyCache<Private> Cache

Definition at line 3282 of file Type.cpp.

Function Documentation

static CachedProperties computeCachedProperties ( const Type T)
static
static LinkageInfo computeLinkageInfo ( QualType  T)
static
static LinkageInfo computeLinkageInfo ( const Type T)
static
template<typename T >
static const T* getAsSugar ( const Type Cur)
static

This will check for a T (which should be a Type which can act as sugar, such as a TypedefType) by removing any existing sugar until it reaches a T or a non-sugared type.

Definition at line 308 of file Type.cpp.

References clang::Type::getTypeClass().

static TagDecl* getInterestingTagDecl ( TagDecl decl)
static