Warning: That file was not part of the compilation database. It may have many parsing errors.

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 aliases 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)
76DEPENDENT_TYPE(DependentAddressSpace, Type)
77TYPE(Vector, Type)
78DEPENDENT_TYPE(DependentVector, Type)
79TYPE(ExtVector, VectorType)
80ABSTRACT_TYPE(Function, Type)
81TYPE(FunctionProto, FunctionType)
82TYPE(FunctionNoProto, FunctionType)
83DEPENDENT_TYPE(UnresolvedUsing, Type)
84NON_CANONICAL_TYPE(Paren, Type)
85NON_CANONICAL_TYPE(Typedef, Type)
86NON_CANONICAL_TYPE(Adjusted, Type)
87NON_CANONICAL_TYPE(Decayed, AdjustedType)
88NON_CANONICAL_UNLESS_DEPENDENT_TYPE(TypeOfExpr, Type)
89NON_CANONICAL_UNLESS_DEPENDENT_TYPE(TypeOf, Type)
90NON_CANONICAL_UNLESS_DEPENDENT_TYPE(Decltype, Type)
91NON_CANONICAL_UNLESS_DEPENDENT_TYPE(UnaryTransform, Type)
92ABSTRACT_TYPE(Tag, Type)
93TYPE(Record, TagType)
94TYPE(Enum, TagType)
95NON_CANONICAL_TYPE(Elaborated, Type)
96NON_CANONICAL_TYPE(Attributed, Type)
97DEPENDENT_TYPE(TemplateTypeParm, Type)
98NON_CANONICAL_TYPE(SubstTemplateTypeParm, Type)
99DEPENDENT_TYPE(SubstTemplateTypeParmPack, Type)
100NON_CANONICAL_UNLESS_DEPENDENT_TYPE(TemplateSpecialization, Type)
101ABSTRACT_TYPE(Deduced, Type)
102TYPE(Auto, DeducedType)
103TYPE(DeducedTemplateSpecialization, DeducedType)
104DEPENDENT_TYPE(InjectedClassName, Type)
105DEPENDENT_TYPE(DependentName, Type)
106DEPENDENT_TYPE(DependentTemplateSpecialization, Type)
107NON_CANONICAL_UNLESS_DEPENDENT_TYPE(PackExpansion, Type)
108NON_CANONICAL_TYPE(ObjCTypeParam, Type)
109TYPE(ObjCObject, Type)
110TYPE(ObjCInterface, ObjCObjectType)
111TYPE(ObjCObjectPointer, Type)
112TYPE(Pipe, Type)
113TYPE(Atomic, Type)
114
115#ifdef LAST_TYPE
116LAST_TYPE(Atomic)
117#undef LAST_TYPE
118#endif
119
120// These types are always leaves in the type hierarchy.
121#ifdef LEAF_TYPE
122LEAF_TYPE(Enum)
123LEAF_TYPE(Builtin)
124LEAF_TYPE(Record)
125LEAF_TYPE(InjectedClassName)
126LEAF_TYPE(ObjCInterface)
127LEAF_TYPE(TemplateTypeParm)
128#undef LEAF_TYPE
129#endif
130
131#undef NON_CANONICAL_UNLESS_DEPENDENT_TYPE
132#undef DEPENDENT_TYPE
133#undef NON_CANONICAL_TYPE
134#undef ABSTRACT_TYPE
135#undef TYPE
136

Warning: That file was not part of the compilation database. It may have many parsing errors.