1//===-- TypeNodes.def - Metadata about Type AST nodes -----------*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9// 10// This file defines the AST type info database. Each type node is 11// enumerated by providing its name (e.g., "Builtin" or "Enum") and 12// base class (e.g., "Type" or "TagType"). Depending on where in the 13// abstract syntax tree the type will show up, the enumeration uses 14// one of five different macros: 15// 16// TYPE(Class, Base) - A type that can show up anywhere in the AST, 17// and might be dependent, canonical, or non-canonical. All clients 18// will need to understand these types. 19// 20// ABSTRACT_TYPE(Class, Base) - An abstract class that shows up in 21// the type hierarchy but has no concrete instances. 22// 23// NON_CANONICAL_TYPE(Class, Base) - A type that can show up 24// anywhere in the AST but will never be a part of a canonical 25// type. Clients that only need to deal with canonical types 26// (ignoring, e.g., typedefs and other type alises used for 27// pretty-printing) can ignore these types. 28// 29// DEPENDENT_TYPE(Class, Base) - A type that will only show up 30// within a C++ template that has not been instantiated, e.g., a 31// type that is always dependent. Clients that do not need to deal 32// with uninstantiated C++ templates can ignore these types. 33// 34// NON_CANONICAL_UNLESS_DEPENDENT_TYPE(Class, Base) - A type that 35// is non-canonical unless it is dependent. Defaults to TYPE because 36// it is neither reliably dependent nor reliably non-canonical. 37// 38// There is a sixth macro, independent of the others. Most clients 39// will not need to use it. 40// 41// LEAF_TYPE(Class) - A type that never has inner types. Clients 42// which can operate on such types more efficiently may wish to do so. 43// 44//===----------------------------------------------------------------------===// 45 46#ifndef ABSTRACT_TYPE 47# define ABSTRACT_TYPE(Class, Base) TYPE(Class, Base) 48#endif 49 50#ifndef NON_CANONICAL_TYPE 51# define NON_CANONICAL_TYPE(Class, Base) TYPE(Class, Base) 52#endif 53 54#ifndef DEPENDENT_TYPE 55# define DEPENDENT_TYPE(Class, Base) TYPE(Class, Base) 56#endif 57 58#ifndef NON_CANONICAL_UNLESS_DEPENDENT_TYPE 59# define NON_CANONICAL_UNLESS_DEPENDENT_TYPE(Class, Base) TYPE(Class, Base) 60#endif 61 62TYPE(Builtin, Type) 63TYPE(Complex, Type) 64TYPE(Pointer, Type) 65TYPE(BlockPointer, Type) 66ABSTRACT_TYPE(Reference, Type) 67TYPE(LValueReference, ReferenceType) 68TYPE(RValueReference, ReferenceType) 69TYPE(MemberPointer, Type) 70ABSTRACT_TYPE(Array, Type) 71TYPE(ConstantArray, ArrayType) 72TYPE(IncompleteArray, ArrayType) 73TYPE(VariableArray, ArrayType) 74DEPENDENT_TYPE(DependentSizedArray, ArrayType) 75DEPENDENT_TYPE(DependentSizedExtVector, Type) 76TYPE(Vector, Type) 77TYPE(ExtVector, VectorType) 78ABSTRACT_TYPE(Function, Type) 79TYPE(FunctionProto, FunctionType) 80TYPE(FunctionNoProto, FunctionType) 81DEPENDENT_TYPE(UnresolvedUsing, Type) 82NON_CANONICAL_TYPE(Paren, Type) 83NON_CANONICAL_TYPE(Typedef, Type) 84NON_CANONICAL_TYPE(Adjusted, Type) 85NON_CANONICAL_TYPE(Decayed, AdjustedType) 86NON_CANONICAL_UNLESS_DEPENDENT_TYPE(TypeOfExpr, Type) 87NON_CANONICAL_UNLESS_DEPENDENT_TYPE(TypeOf, Type) 88NON_CANONICAL_UNLESS_DEPENDENT_TYPE(Decltype, Type) 89NON_CANONICAL_UNLESS_DEPENDENT_TYPE(UnaryTransform, Type) 90ABSTRACT_TYPE(Tag, Type) 91TYPE(Record, TagType) 92TYPE(Enum, TagType) 93NON_CANONICAL_TYPE(Elaborated, Type) 94NON_CANONICAL_TYPE(Attributed, Type) 95DEPENDENT_TYPE(TemplateTypeParm, Type) 96NON_CANONICAL_TYPE(SubstTemplateTypeParm, Type) 97DEPENDENT_TYPE(SubstTemplateTypeParmPack, Type) 98NON_CANONICAL_UNLESS_DEPENDENT_TYPE(TemplateSpecialization, Type) 99TYPE(Auto, Type) 100DEPENDENT_TYPE(InjectedClassName, Type) 101DEPENDENT_TYPE(DependentName, Type) 102DEPENDENT_TYPE(DependentTemplateSpecialization, Type) 103NON_CANONICAL_UNLESS_DEPENDENT_TYPE(PackExpansion, Type) 104TYPE(ObjCObject, Type) 105TYPE(ObjCInterface, ObjCObjectType) 106TYPE(ObjCObjectPointer, Type) 107TYPE(Pipe, Type) 108TYPE(Atomic, Type) 109 110#ifdef LAST_TYPE 111LAST_TYPE(Atomic) 112#undef LAST_TYPE 113#endif 114 115// These types are always leaves in the type hierarchy. 116#ifdef LEAF_TYPE 117LEAF_TYPE(Enum) 118LEAF_TYPE(Builtin) 119LEAF_TYPE(Record) 120LEAF_TYPE(InjectedClassName) 121LEAF_TYPE(ObjCInterface) 122LEAF_TYPE(TemplateTypeParm) 123#undef LEAF_TYPE 124#endif 125 126#undef NON_CANONICAL_UNLESS_DEPENDENT_TYPE 127#undef DEPENDENT_TYPE 128#undef NON_CANONICAL_TYPE 129#undef ABSTRACT_TYPE 130#undef TYPE 131