1 //===-- TypeNodes.def - Metadata about Type AST nodes -----------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
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 four different macros:
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.
20 // ABSTRACT_TYPE(Class, Base) - An abstract class that shows up in
21 // the type hierarchy but has no concrete instances.
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.
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.
34 //===----------------------------------------------------------------------===//
37 # define ABSTRACT_TYPE(Class, Base) TYPE(Class, Base)
40 #ifndef NON_CANONICAL_TYPE
41 # define NON_CANONICAL_TYPE(Class, Base) TYPE(Class, Base)
44 #ifndef DEPENDENT_TYPE
45 # define DEPENDENT_TYPE(Class, Base) TYPE(Class, Base)
50 TYPE(FixedWidthInt, Type)
53 TYPE(BlockPointer, Type)
54 ABSTRACT_TYPE(Reference, Type)
55 TYPE(LValueReference, ReferenceType)
56 TYPE(RValueReference, ReferenceType)
57 TYPE(MemberPointer, Type)
58 ABSTRACT_TYPE(Array, Type)
59 TYPE(ConstantArray, ArrayType)
60 TYPE(IncompleteArray, ArrayType)
61 TYPE(VariableArray, ArrayType)
62 DEPENDENT_TYPE(DependentSizedArray, ArrayType)
63 DEPENDENT_TYPE(DependentSizedExtVector, Type)
65 TYPE(ExtVector, VectorType)
66 ABSTRACT_TYPE(Function, Type)
67 TYPE(FunctionProto, FunctionType)
68 TYPE(FunctionNoProto, FunctionType)
69 NON_CANONICAL_TYPE(Typedef, Type)
70 NON_CANONICAL_TYPE(TypeOfExpr, Type)
71 NON_CANONICAL_TYPE(TypeOf, Type)
72 NON_CANONICAL_TYPE(Decltype, Type)
73 ABSTRACT_TYPE(Tag, Type)
76 DEPENDENT_TYPE(TemplateTypeParm, Type)
77 TYPE(TemplateSpecialization, Type)
78 NON_CANONICAL_TYPE(QualifiedName, Type)
79 DEPENDENT_TYPE(Typename, Type)
80 TYPE(ObjCInterface, Type)
81 TYPE(ObjCObjectPointer, Type)
82 TYPE(ObjCQualifiedInterface, ObjCInterfaceType)
85 #undef NON_CANONICAL_TYPE