]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - include/clang/AST/TypeNodes.def
Update clang to r104832.
[FreeBSD/FreeBSD.git] / include / clang / AST / TypeNodes.def
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 four 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
62 TYPE(Builtin, Type)
63 TYPE(Complex, Type)
64 TYPE(Pointer, Type)
65 TYPE(BlockPointer, Type)
66 ABSTRACT_TYPE(Reference, Type)
67 TYPE(LValueReference, ReferenceType)
68 TYPE(RValueReference, ReferenceType)
69 TYPE(MemberPointer, Type)
70 ABSTRACT_TYPE(Array, Type)
71 TYPE(ConstantArray, ArrayType)
72 TYPE(IncompleteArray, ArrayType)
73 TYPE(VariableArray, ArrayType)
74 DEPENDENT_TYPE(DependentSizedArray, ArrayType)
75 DEPENDENT_TYPE(DependentSizedExtVector, Type)
76 TYPE(Vector, Type)
77 TYPE(ExtVector, VectorType)
78 ABSTRACT_TYPE(Function, Type)
79 TYPE(FunctionProto, FunctionType)
80 TYPE(FunctionNoProto, FunctionType)
81 DEPENDENT_TYPE(UnresolvedUsing, Type)
82 NON_CANONICAL_TYPE(Typedef, Type)
83 NON_CANONICAL_UNLESS_DEPENDENT_TYPE(TypeOfExpr, Type)
84 NON_CANONICAL_UNLESS_DEPENDENT_TYPE(TypeOf, Type)
85 NON_CANONICAL_UNLESS_DEPENDENT_TYPE(Decltype, Type)
86 ABSTRACT_TYPE(Tag, Type)
87 TYPE(Record, TagType)
88 TYPE(Enum, TagType)
89 NON_CANONICAL_TYPE(Elaborated, Type)
90 DEPENDENT_TYPE(TemplateTypeParm, Type)
91 NON_CANONICAL_TYPE(SubstTemplateTypeParm, Type)
92 NON_CANONICAL_UNLESS_DEPENDENT_TYPE(TemplateSpecialization, Type)
93 DEPENDENT_TYPE(InjectedClassName, Type)
94 DEPENDENT_TYPE(DependentName, Type)
95 TYPE(ObjCObject, Type)
96 TYPE(ObjCInterface, ObjCObjectType)
97 TYPE(ObjCObjectPointer, Type)
98
99 #ifdef LAST_TYPE
100 LAST_TYPE(ObjCObjectPointer)
101 #undef LAST_TYPE
102 #endif
103
104 // These types are always leaves in the type hierarchy.
105 #ifdef LEAF_TYPE
106 LEAF_TYPE(Enum)
107 LEAF_TYPE(Builtin)
108 LEAF_TYPE(Record)
109 LEAF_TYPE(InjectedClassName)
110 LEAF_TYPE(ObjCInterface)
111 LEAF_TYPE(TemplateTypeParm)
112 #undef LEAF_TYPE
113 #endif
114
115 #undef NON_CANONICAL_UNLESS_DEPENDENT_TYPE
116 #undef DEPENDENT_TYPE
117 #undef NON_CANONICAL_TYPE
118 #undef ABSTRACT_TYPE
119 #undef TYPE