ASTBitCodes.h revision 6e8ed16ffef02b82995a90bdcf10ffff7d63839a
1//===- PCHBitCodes.h - Enum values for the PCH bitcode format ---*- 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 header defines Bitcode enum values for Clang precompiled header files.
11//
12// The enum values defined in this file should be considered permanent.  If
13// new features are added, they should have values added at the end of the
14// respective lists.
15//
16//===----------------------------------------------------------------------===//
17#ifndef LLVM_CLANG_FRONTEND_PCHBITCODES_H
18#define LLVM_CLANG_FRONTEND_PCHBITCODES_H
19
20#include "llvm/Bitcode/BitCodes.h"
21#include "llvm/Support/DataTypes.h"
22
23namespace clang {
24  namespace pch {
25    /// \brief PCH major version number supported by this version of
26    /// Clang.
27    ///
28    /// Whenever the PCH format changes in a way that makes it
29    /// incompatible with previous versions (such that a reader
30    /// designed for the previous version could not support reading
31    /// the new version), this number should be increased.
32    const unsigned VERSION_MAJOR = 1;
33
34    /// \brief PCH minor version number supported by this version of
35    /// Clang.
36    ///
37    /// Whenever the PCH format changes in a way that is still
38    /// compatible with previous versions (such that a reader designed
39    /// for the previous version could still support reading the new
40    /// version by ignoring new kinds of subblocks), this number
41    /// should be increased.
42    const unsigned VERSION_MINOR = 0;
43
44    /// \brief An ID number that refers to a declaration in a PCH file.
45    ///
46    /// The ID numbers of types are consecutive (in order of
47    /// discovery) and start at 2. 0 is reserved for NULL, and 1 is
48    /// reserved for the translation unit declaration.
49    typedef uint32_t DeclID;
50
51    /// \brief An ID number that refers to a type in a PCH file.
52    ///
53    /// The ID of a type is partitioned into two parts: the lower
54    /// three bits are used to store the const/volatile/restrict
55    /// qualifiers (as with QualType) and the upper bits provide a
56    /// type index. The type index values are partitioned into two
57    /// sets. The values below NUM_PREDEF_TYPE_IDs are predefined type
58    /// IDs (based on the PREDEF_TYPE_*_ID constants), with 0 as a
59    /// placeholder for "no type". Values from NUM_PREDEF_TYPE_IDs are
60    /// other types that have serialized representations.
61    typedef uint32_t TypeID;
62
63    /// \brief An ID number that refers to an identifier in a PCH
64    /// file.
65    typedef uint32_t IdentID;
66
67    typedef uint32_t SelectorID;
68
69    /// \brief Describes the various kinds of blocks that occur within
70    /// a PCH file.
71    enum BlockIDs {
72      /// \brief The PCH block, which acts as a container around the
73      /// full PCH block.
74      PCH_BLOCK_ID = llvm::bitc::FIRST_APPLICATION_BLOCKID,
75
76      /// \brief The block containing information about the source
77      /// manager.
78      SOURCE_MANAGER_BLOCK_ID,
79
80      /// \brief The block containing information about the
81      /// preprocessor.
82      PREPROCESSOR_BLOCK_ID,
83
84      /// \brief The block containing the definitions of all of the
85      /// types used within the PCH file.
86      TYPES_BLOCK_ID,
87
88      /// \brief The block containing the definitions of all of the
89      /// declarations stored in the PCH file.
90      DECLS_BLOCK_ID
91    };
92
93    /// \brief Record types that occur within the PCH block itself.
94    enum PCHRecordTypes {
95      /// \brief Offset of each type within the types block.
96      ///
97      /// The TYPE_OFFSET constant describes the record that occurs
98      /// within the block identified by TYPE_OFFSETS_BLOCK_ID within
99      /// the PCH file. The record itself is an array of offsets that
100      /// point into the types block (identified by TYPES_BLOCK_ID in
101      /// the PCH file). The index into the array is based on the ID
102      /// of a type. For a given type ID @c T, the lower three bits of
103      /// @c T are its qualifiers (const, volatile, restrict), as in
104      /// the QualType class. The upper bits, after being shifted and
105      /// subtracting NUM_PREDEF_TYPE_IDS, are used to index into the
106      /// TYPE_OFFSET block to determine the offset of that type's
107      /// corresponding record within the TYPES_BLOCK_ID block.
108      TYPE_OFFSET = 1,
109
110      /// \brief Record code for the offsets of each decl.
111      ///
112      /// The DECL_OFFSET constant describes the record that occurs
113      /// within the block identifier by DECL_OFFSETS_BLOCK_ID within
114      /// the PCH file. The record itself is an array of offsets that
115      /// point into the declarations block (identified by
116      /// DECLS_BLOCK_ID). The declaration ID is an index into this
117      /// record, after subtracting one to account for the use of
118      /// declaration ID 0 for a NULL declaration pointer. Index 0 is
119      /// reserved for the translation unit declaration.
120      DECL_OFFSET = 2,
121
122      /// \brief Record code for the language options table.
123      ///
124      /// The record with this code contains the contents of the
125      /// LangOptions structure. We serialize the entire contents of
126      /// the structure, and let the reader decide which options are
127      /// actually important to check.
128      LANGUAGE_OPTIONS = 3,
129
130      /// \brief PCH metadata, including the PCH file version number
131      /// and the target triple used to build the PCH file.
132      METADATA = 4,
133
134      /// \brief Record code for the table of offsets of each
135      /// identifier ID.
136      ///
137      /// The offset table contains offsets into the blob stored in
138      /// the IDENTIFIER_TABLE record. Each offset points to the
139      /// NULL-terminated string that corresponds to that identifier.
140      IDENTIFIER_OFFSET = 5,
141
142      /// \brief Record code for the identifier table.
143      ///
144      /// The identifier table is a simple blob that contains
145      /// NULL-terminated strings for all of the identifiers
146      /// referenced by the PCH file. The IDENTIFIER_OFFSET table
147      /// contains the mapping from identifier IDs to the characters
148      /// in this blob. Note that the starting offsets of all of the
149      /// identifiers are odd, so that, when the identifier offset
150      /// table is loaded in, we can use the low bit to distinguish
151      /// between offsets (for unresolved identifier IDs) and
152      /// IdentifierInfo pointers (for already-resolved identifier
153      /// IDs).
154      IDENTIFIER_TABLE = 6,
155
156      /// \brief Record code for the array of external definitions.
157      ///
158      /// The PCH file contains a list of all of the unnamed external
159      /// definitions present within the parsed headers, stored as an
160      /// array of declaration IDs. These external definitions will be
161      /// reported to the AST consumer after the PCH file has been
162      /// read, since their presence can affect the semantics of the
163      /// program (e.g., for code generation).
164      EXTERNAL_DEFINITIONS = 7,
165
166      /// \brief Record code for the set of non-builtin, special
167      /// types.
168      ///
169      /// This record contains the type IDs for the various type nodes
170      /// that are constructed during semantic analysis (e.g.,
171      /// __builtin_va_list). The SPECIAL_TYPE_* constants provide
172      /// offsets into this record.
173      SPECIAL_TYPES = 8,
174
175      /// \brief Record code for the extra statistics we gather while
176      /// generating a PCH file.
177      STATISTICS = 9,
178
179      /// \brief Record code for the array of tentative definitions.
180      TENTATIVE_DEFINITIONS = 10,
181
182      /// \brief Record code for the array of locally-scoped external
183      /// declarations.
184      LOCALLY_SCOPED_EXTERNAL_DECLS = 11,
185
186      /// \brief Record code for the table of offsets into the
187      /// Objective-C method pool.
188      SELECTOR_OFFSETS = 12,
189
190      /// \brief Record code for the Objective-C method pool,
191      METHOD_POOL = 13,
192
193      /// \brief The value of the next __COUNTER__ to dispense.
194      /// [PP_COUNTER_VALUE, Val]
195      PP_COUNTER_VALUE = 14,
196
197      /// \brief Record code for the table of offsets into the block
198      /// of source-location information.
199      SOURCE_LOCATION_OFFSETS = 15,
200
201      /// \brief Record code for the set of source location entries
202      /// that need to be preloaded by the PCH reader.
203      ///
204      /// This set contains the source location entry for the
205      /// predefines buffer and for any file entries that need to be
206      /// preloaded.
207      SOURCE_LOCATION_PRELOADS = 16,
208
209      /// \brief Record code for the stat() cache.
210      STAT_CACHE = 17,
211
212      /// \brief Record code for the set of ext_vector type names.
213      EXT_VECTOR_DECLS = 18,
214
215      /// \brief Record code for the set of Objective-C category
216      /// implementations.
217      OBJC_CATEGORY_IMPLEMENTATIONS = 19
218    };
219
220    /// \brief Record types used within a source manager block.
221    enum SourceManagerRecordTypes {
222      /// \brief Describes a source location entry (SLocEntry) for a
223      /// file.
224      SM_SLOC_FILE_ENTRY = 1,
225      /// \brief Describes a source location entry (SLocEntry) for a
226      /// buffer.
227      SM_SLOC_BUFFER_ENTRY = 2,
228      /// \brief Describes a blob that contains the data for a buffer
229      /// entry. This kind of record always directly follows a
230      /// SM_SLOC_BUFFER_ENTRY record.
231      SM_SLOC_BUFFER_BLOB = 3,
232      /// \brief Describes a source location entry (SLocEntry) for a
233      /// macro instantiation.
234      SM_SLOC_INSTANTIATION_ENTRY = 4,
235      /// \brief Describes the SourceManager's line table, with
236      /// information about #line directives.
237      SM_LINE_TABLE = 5,
238      /// \brief Describes one header file info [isImport, DirInfo, NumIncludes]
239      /// ControllingMacro is optional.
240      SM_HEADER_FILE_INFO = 6
241    };
242
243    /// \brief Record types used within a preprocessor block.
244    enum PreprocessorRecordTypes {
245      // The macros in the PP section are a PP_MACRO_* instance followed by a
246      // list of PP_TOKEN instances for each token in the definition.
247
248      /// \brief An object-like macro definition.
249      /// [PP_MACRO_OBJECT_LIKE, IdentInfoID, SLoc, IsUsed]
250      PP_MACRO_OBJECT_LIKE = 1,
251
252      /// \brief A function-like macro definition.
253      /// [PP_MACRO_FUNCTION_LIKE, <ObjectLikeStuff>, IsC99Varargs, IsGNUVarars,
254      ///  NumArgs, ArgIdentInfoID* ]
255      PP_MACRO_FUNCTION_LIKE = 2,
256
257      /// \brief Describes one token.
258      /// [PP_TOKEN, SLoc, Length, IdentInfoID, Kind, Flags]
259      PP_TOKEN = 3
260    };
261
262    /// \defgroup PCHAST Precompiled header AST constants
263    ///
264    /// The constants in this group describe various components of the
265    /// abstract syntax tree within a precompiled header.
266    ///
267    /// @{
268
269    /// \brief Predefined type IDs.
270    ///
271    /// These type IDs correspond to predefined types in the AST
272    /// context, such as built-in types (int) and special place-holder
273    /// types (the <overload> and <dependent> type markers). Such
274    /// types are never actually serialized, since they will be built
275    /// by the AST context when it is created.
276    enum PredefinedTypeIDs {
277      /// \brief The NULL type.
278      PREDEF_TYPE_NULL_ID       = 0,
279      /// \brief The void type.
280      PREDEF_TYPE_VOID_ID       = 1,
281      /// \brief The 'bool' or '_Bool' type.
282      PREDEF_TYPE_BOOL_ID       = 2,
283      /// \brief The 'char' type, when it is unsigned.
284      PREDEF_TYPE_CHAR_U_ID     = 3,
285      /// \brief The 'unsigned char' type.
286      PREDEF_TYPE_UCHAR_ID      = 4,
287      /// \brief The 'unsigned short' type.
288      PREDEF_TYPE_USHORT_ID     = 5,
289      /// \brief The 'unsigned int' type.
290      PREDEF_TYPE_UINT_ID       = 6,
291      /// \brief The 'unsigned long' type.
292      PREDEF_TYPE_ULONG_ID      = 7,
293      /// \brief The 'unsigned long long' type.
294      PREDEF_TYPE_ULONGLONG_ID  = 8,
295      /// \brief The 'char' type, when it is signed.
296      PREDEF_TYPE_CHAR_S_ID     = 9,
297      /// \brief The 'signed char' type.
298      PREDEF_TYPE_SCHAR_ID      = 10,
299      /// \brief The C++ 'wchar_t' type.
300      PREDEF_TYPE_WCHAR_ID      = 11,
301      /// \brief The (signed) 'short' type.
302      PREDEF_TYPE_SHORT_ID      = 12,
303      /// \brief The (signed) 'int' type.
304      PREDEF_TYPE_INT_ID        = 13,
305      /// \brief The (signed) 'long' type.
306      PREDEF_TYPE_LONG_ID       = 14,
307      /// \brief The (signed) 'long long' type.
308      PREDEF_TYPE_LONGLONG_ID   = 15,
309      /// \brief The 'float' type.
310      PREDEF_TYPE_FLOAT_ID      = 16,
311      /// \brief The 'double' type.
312      PREDEF_TYPE_DOUBLE_ID     = 17,
313      /// \brief The 'long double' type.
314      PREDEF_TYPE_LONGDOUBLE_ID = 18,
315      /// \brief The placeholder type for overloaded function sets.
316      PREDEF_TYPE_OVERLOAD_ID   = 19,
317      /// \brief The placeholder type for dependent types.
318      PREDEF_TYPE_DEPENDENT_ID  = 20,
319      /// \brief The '__uint128_t' type.
320      PREDEF_TYPE_UINT128_ID    = 21,
321      /// \brief The '__int128_t' type.
322      PREDEF_TYPE_INT128_ID     = 22,
323      /// \brief The type of 'nullptr'.
324      PREDEF_TYPE_NULLPTR_ID    = 23
325    };
326
327    /// \brief The number of predefined type IDs that are reserved for
328    /// the PREDEF_TYPE_* constants.
329    ///
330    /// Type IDs for non-predefined types will start at
331    /// NUM_PREDEF_TYPE_IDs.
332    const unsigned NUM_PREDEF_TYPE_IDS = 100;
333
334    /// \brief Record codes for each kind of type.
335    ///
336    /// These constants describe the records that can occur within a
337    /// block identified by TYPES_BLOCK_ID in the PCH file. Each
338    /// constant describes a record for a specific type class in the
339    /// AST.
340    enum TypeCode {
341      /// \brief An ExtQualType record.
342      TYPE_EXT_QUAL                 = 1,
343      /// \brief A FixedWidthIntType record.
344      TYPE_FIXED_WIDTH_INT          = 2,
345      /// \brief A ComplexType record.
346      TYPE_COMPLEX                  = 3,
347      /// \brief A PointerType record.
348      TYPE_POINTER                  = 4,
349      /// \brief A BlockPointerType record.
350      TYPE_BLOCK_POINTER            = 5,
351      /// \brief An LValueReferenceType record.
352      TYPE_LVALUE_REFERENCE         = 6,
353      /// \brief An RValueReferenceType record.
354      TYPE_RVALUE_REFERENCE         = 7,
355      /// \brief A MemberPointerType record.
356      TYPE_MEMBER_POINTER           = 8,
357      /// \brief A ConstantArrayType record.
358      TYPE_CONSTANT_ARRAY           = 9,
359      /// \brief An IncompleteArrayType record.
360      TYPE_INCOMPLETE_ARRAY         = 10,
361      /// \brief A VariableArrayType record.
362      TYPE_VARIABLE_ARRAY           = 11,
363      /// \brief A VectorType record.
364      TYPE_VECTOR                   = 12,
365      /// \brief An ExtVectorType record.
366      TYPE_EXT_VECTOR               = 13,
367      /// \brief A FunctionNoProtoType record.
368      TYPE_FUNCTION_NO_PROTO        = 14,
369      /// \brief A FunctionProtoType record.
370      TYPE_FUNCTION_PROTO           = 15,
371      /// \brief A TypedefType record.
372      TYPE_TYPEDEF                  = 16,
373      /// \brief A TypeOfExprType record.
374      TYPE_TYPEOF_EXPR              = 17,
375      /// \brief A TypeOfType record.
376      TYPE_TYPEOF                   = 18,
377      /// \brief A RecordType record.
378      TYPE_RECORD                   = 19,
379      /// \brief An EnumType record.
380      TYPE_ENUM                     = 20,
381      /// \brief An ObjCInterfaceType record.
382      TYPE_OBJC_INTERFACE           = 21,
383      /// \brief An ObjCQualifiedInterfaceType record.
384      TYPE_OBJC_QUALIFIED_INTERFACE = 22,
385      /// \brief An ObjCQualifiedIdType record.
386      TYPE_OBJC_QUALIFIED_ID        = 23
387    };
388
389    /// \brief The type IDs for special types constructed by semantic
390    /// analysis.
391    ///
392    /// The constants in this enumeration are indices into the
393    /// SPECIAL_TYPES record.
394    enum SpecialTypeIDs {
395      /// \brief __builtin_va_list
396      SPECIAL_TYPE_BUILTIN_VA_LIST             = 0,
397      /// \brief Objective-C "id" type
398      SPECIAL_TYPE_OBJC_ID                     = 1,
399      /// \brief Objective-C selector type
400      SPECIAL_TYPE_OBJC_SELECTOR               = 2,
401      /// \brief Objective-C Protocol type
402      SPECIAL_TYPE_OBJC_PROTOCOL               = 3,
403      /// \brief Objective-C Class type
404      SPECIAL_TYPE_OBJC_CLASS                  = 4,
405      /// \brief CFConstantString type
406      SPECIAL_TYPE_CF_CONSTANT_STRING          = 5,
407      /// \brief Objective-C fast enumeration state type
408      SPECIAL_TYPE_OBJC_FAST_ENUMERATION_STATE = 6
409    };
410
411    /// \brief Record codes for each kind of declaration.
412    ///
413    /// These constants describe the records that can occur within a
414    /// declarations block (identified by DECLS_BLOCK_ID). Each
415    /// constant describes a record for a specific declaration class
416    /// in the AST.
417    enum DeclCode {
418      /// \brief Attributes attached to a declaration.
419      DECL_ATTR = 1,
420      /// \brief A TranslationUnitDecl record.
421      DECL_TRANSLATION_UNIT,
422      /// \brief A TypedefDecl record.
423      DECL_TYPEDEF,
424      /// \brief An EnumDecl record.
425      DECL_ENUM,
426      /// \brief A RecordDecl record.
427      DECL_RECORD,
428      /// \brief An EnumConstantDecl record.
429      DECL_ENUM_CONSTANT,
430      /// \brief A FunctionDecl record.
431      DECL_FUNCTION,
432      /// \brief A ObjCMethodDecl record.
433      DECL_OBJC_METHOD,
434      /// \brief A ObjCInterfaceDecl record.
435      DECL_OBJC_INTERFACE,
436      /// \brief A ObjCProtocolDecl record.
437      DECL_OBJC_PROTOCOL,
438      /// \brief A ObjCIvarDecl record.
439      DECL_OBJC_IVAR,
440      /// \brief A ObjCAtDefsFieldDecl record.
441      DECL_OBJC_AT_DEFS_FIELD,
442      /// \brief A ObjCClassDecl record.
443      DECL_OBJC_CLASS,
444      /// \brief A ObjCForwardProtocolDecl record.
445      DECL_OBJC_FORWARD_PROTOCOL,
446      /// \brief A ObjCCategoryDecl record.
447      DECL_OBJC_CATEGORY,
448      /// \brief A ObjCCategoryImplDecl record.
449      DECL_OBJC_CATEGORY_IMPL,
450      /// \brief A ObjCImplementationDecl record.
451      DECL_OBJC_IMPLEMENTATION,
452      /// \brief A ObjCCompatibleAliasDecl record.
453      DECL_OBJC_COMPATIBLE_ALIAS,
454      /// \brief A ObjCPropertyDecl record.
455      DECL_OBJC_PROPERTY,
456      /// \brief A ObjCPropertyImplDecl record.
457      DECL_OBJC_PROPERTY_IMPL,
458      /// \brief A FieldDecl record.
459      DECL_FIELD,
460      /// \brief A VarDecl record.
461      DECL_VAR,
462      /// \brief An ImplicitParamDecl record.
463      DECL_IMPLICIT_PARAM,
464      /// \brief A ParmVarDecl record.
465      DECL_PARM_VAR,
466      /// \brief An OriginalParmVarDecl record.
467      DECL_ORIGINAL_PARM_VAR,
468      /// \brief A FileScopeAsmDecl record.
469      DECL_FILE_SCOPE_ASM,
470      /// \brief A BlockDecl record.
471      DECL_BLOCK,
472      /// \brief A record that stores the set of declarations that are
473      /// lexically stored within a given DeclContext.
474      ///
475      /// The record itself is an array of declaration IDs, in the
476      /// order in which those declarations were added to the
477      /// declaration context. This data is used when iterating over
478      /// the contents of a DeclContext, e.g., via
479      /// DeclContext::decls_begin()/DeclContext::decls_end().
480      DECL_CONTEXT_LEXICAL,
481      /// \brief A record that stores the set of declarations that are
482      /// visible from a given DeclContext.
483      ///
484      /// The record itself stores a set of mappings, each of which
485      /// associates a declaration name with one or more declaration
486      /// IDs. This data is used when performing qualified name lookup
487      /// into a DeclContext via DeclContext::lookup.
488      DECL_CONTEXT_VISIBLE
489    };
490
491    /// \brief Record codes for each kind of statement or expression.
492    ///
493    /// These constants describe the records that describe statements
494    /// or expressions. These records can occur within either the type
495    /// or declaration blocks, so they begin with record values of
496    /// 50.  Each constant describes a record for a specific
497    /// statement or expression class in the AST.
498    enum StmtCode {
499      /// \brief A marker record that indicates that we are at the end
500      /// of an expression.
501      STMT_STOP = 50,
502      /// \brief A NULL expression.
503      STMT_NULL_PTR,
504      /// \brief A NullStmt record.
505      STMT_NULL,
506      /// \brief A CompoundStmt record.
507      STMT_COMPOUND,
508      /// \brief A CaseStmt record.
509      STMT_CASE,
510      /// \brief A DefaultStmt record.
511      STMT_DEFAULT,
512      /// \brief A LabelStmt record.
513      STMT_LABEL,
514      /// \brief An IfStmt record.
515      STMT_IF,
516      /// \brief A SwitchStmt record.
517      STMT_SWITCH,
518      /// \brief A WhileStmt record.
519      STMT_WHILE,
520      /// \brief A DoStmt record.
521      STMT_DO,
522      /// \brief A ForStmt record.
523      STMT_FOR,
524      /// \brief A GotoStmt record.
525      STMT_GOTO,
526      /// \brief An IndirectGotoStmt record.
527      STMT_INDIRECT_GOTO,
528      /// \brief A ContinueStmt record.
529      STMT_CONTINUE,
530      /// \brief A BreakStmt record.
531      STMT_BREAK,
532      /// \brief A ReturnStmt record.
533      STMT_RETURN,
534      /// \brief A DeclStmt record.
535      STMT_DECL,
536      /// \brief An AsmStmt record.
537      STMT_ASM,
538      /// \brief A PredefinedExpr record.
539      EXPR_PREDEFINED,
540      /// \brief A DeclRefExpr record.
541      EXPR_DECL_REF,
542      /// \brief An IntegerLiteral record.
543      EXPR_INTEGER_LITERAL,
544      /// \brief A FloatingLiteral record.
545      EXPR_FLOATING_LITERAL,
546      /// \brief An ImaginaryLiteral record.
547      EXPR_IMAGINARY_LITERAL,
548      /// \brief A StringLiteral record.
549      EXPR_STRING_LITERAL,
550      /// \brief A CharacterLiteral record.
551      EXPR_CHARACTER_LITERAL,
552      /// \brief A ParenExpr record.
553      EXPR_PAREN,
554      /// \brief A UnaryOperator record.
555      EXPR_UNARY_OPERATOR,
556      /// \brief A SizefAlignOfExpr record.
557      EXPR_SIZEOF_ALIGN_OF,
558      /// \brief An ArraySubscriptExpr record.
559      EXPR_ARRAY_SUBSCRIPT,
560      /// \brief A CallExpr record.
561      EXPR_CALL,
562      /// \brief A MemberExpr record.
563      EXPR_MEMBER,
564      /// \brief A BinaryOperator record.
565      EXPR_BINARY_OPERATOR,
566      /// \brief A CompoundAssignOperator record.
567      EXPR_COMPOUND_ASSIGN_OPERATOR,
568      /// \brief A ConditionOperator record.
569      EXPR_CONDITIONAL_OPERATOR,
570      /// \brief An ImplicitCastExpr record.
571      EXPR_IMPLICIT_CAST,
572      /// \brief A CStyleCastExpr record.
573      EXPR_CSTYLE_CAST,
574      /// \brief A CompoundLiteralExpr record.
575      EXPR_COMPOUND_LITERAL,
576      /// \brief An ExtVectorElementExpr record.
577      EXPR_EXT_VECTOR_ELEMENT,
578      /// \brief An InitListExpr record.
579      EXPR_INIT_LIST,
580      /// \brief A DesignatedInitExpr record.
581      EXPR_DESIGNATED_INIT,
582      /// \brief An ImplicitValueInitExpr record.
583      EXPR_IMPLICIT_VALUE_INIT,
584      /// \brief A VAArgExpr record.
585      EXPR_VA_ARG,
586      /// \brief An AddrLabelExpr record.
587      EXPR_ADDR_LABEL,
588      /// \brief A StmtExpr record.
589      EXPR_STMT,
590      /// \brief A TypesCompatibleExpr record.
591      EXPR_TYPES_COMPATIBLE,
592      /// \brief A ChooseExpr record.
593      EXPR_CHOOSE,
594      /// \brief A GNUNullExpr record.
595      EXPR_GNU_NULL,
596      /// \brief A ShuffleVectorExpr record.
597      EXPR_SHUFFLE_VECTOR,
598      /// \brief BlockExpr
599      EXPR_BLOCK,
600      /// \brief A BlockDeclRef record.
601      EXPR_BLOCK_DECL_REF,
602
603      // Objective-C
604
605      /// \brief An ObjCStringLiteral record.
606      EXPR_OBJC_STRING_LITERAL,
607      /// \brief An ObjCEncodeExpr record.
608      EXPR_OBJC_ENCODE,
609      /// \brief An ObjCSelectorExpr record.
610      EXPR_OBJC_SELECTOR_EXPR,
611      /// \brief An ObjCProtocolExpr record.
612      EXPR_OBJC_PROTOCOL_EXPR,
613      /// \brief An ObjCIvarRefExpr record.
614      EXPR_OBJC_IVAR_REF_EXPR,
615      /// \brief An ObjCPropertyRefExpr record.
616      EXPR_OBJC_PROPERTY_REF_EXPR,
617      /// \brief An ObjCKVCRefExpr record.
618      EXPR_OBJC_KVC_REF_EXPR,
619      /// \brief An ObjCMessageExpr record.
620      EXPR_OBJC_MESSAGE_EXPR,
621      /// \brief An ObjCSuperExpr record.
622      EXPR_OBJC_SUPER_EXPR,
623
624      /// \brief An ObjCForCollectionStmt record.
625      STMT_OBJC_FOR_COLLECTION,
626      /// \brief An ObjCAtCatchStmt record.
627      STMT_OBJC_CATCH,
628      /// \brief An ObjCAtFinallyStmt record.
629      STMT_OBJC_FINALLY,
630      /// \brief An ObjCAtTryStmt record.
631      STMT_OBJC_AT_TRY,
632      /// \brief An ObjCAtSynchronizedStmt record.
633      STMT_OBJC_AT_SYNCHRONIZED,
634      /// \brief An ObjCAtThrowStmt record.
635      STMT_OBJC_AT_THROW
636    };
637
638    /// \brief The kinds of designators that can occur in a
639    /// DesignatedInitExpr.
640    enum DesignatorTypes {
641      /// \brief Field designator where only the field name is known.
642      DESIG_FIELD_NAME  = 0,
643      /// \brief Field designator where the field has been resolved to
644      /// a declaration.
645      DESIG_FIELD_DECL  = 1,
646      /// \brief Array designator.
647      DESIG_ARRAY       = 2,
648      /// \brief GNU array range designator.
649      DESIG_ARRAY_RANGE = 3
650    };
651
652    /// @}
653  }
654} // end namespace clang
655
656#endif
657