ASTBitCodes.h revision 0cef483f3b9d6a7f9fdbc5910d0a3ed64130e8e1
12cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor//===- PCHBitCodes.h - Enum values for the PCH bitcode format ---*- C++ -*-===//
22cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor//
32cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor//                     The LLVM Compiler Infrastructure
42cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor//
52cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor// This file is distributed under the University of Illinois Open Source
62cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor// License. See LICENSE.TXT for details.
72cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor//
82cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor//===----------------------------------------------------------------------===//
92cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor//
102cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor// This header defines Bitcode enum values for Clang precompiled header files.
112cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor//
122cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor// The enum values defined in this file should be considered permanent.  If
132cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor// new features are added, they should have values added at the end of the
142cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor// respective lists.
152cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor//
162cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor//===----------------------------------------------------------------------===//
172cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor#ifndef LLVM_CLANG_FRONTEND_PCHBITCODES_H
182cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor#define LLVM_CLANG_FRONTEND_PCHBITCODES_H
192cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor
202cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor#include "llvm/Bitcode/BitCodes.h"
219f8eb2032030482b1d3de86e9bee725d93564302Chandler Carruth#include "llvm/System/DataTypes.h"
222cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor
232cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregornamespace clang {
242cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor  namespace pch {
25ab41e63821dc60ad144d0684df8d79a9eef86b75Douglas Gregor    /// \brief PCH major version number supported by this version of
26ab41e63821dc60ad144d0684df8d79a9eef86b75Douglas Gregor    /// Clang.
27ab41e63821dc60ad144d0684df8d79a9eef86b75Douglas Gregor    ///
28ab41e63821dc60ad144d0684df8d79a9eef86b75Douglas Gregor    /// Whenever the PCH format changes in a way that makes it
29ab41e63821dc60ad144d0684df8d79a9eef86b75Douglas Gregor    /// incompatible with previous versions (such that a reader
30ab41e63821dc60ad144d0684df8d79a9eef86b75Douglas Gregor    /// designed for the previous version could not support reading
31ab41e63821dc60ad144d0684df8d79a9eef86b75Douglas Gregor    /// the new version), this number should be increased.
32445e23e9b909ec8e21303c7dd82c90b72fc09ac4Douglas Gregor    ///
335b4ec636637c9d876102240127cc0dca9280e83aTed Kremenek    /// Version 3 of PCH files also requires that the version control branch and
34445e23e9b909ec8e21303c7dd82c90b72fc09ac4Douglas Gregor    /// revision match exactly, since there is no backward compatibility of
35445e23e9b909ec8e21303c7dd82c90b72fc09ac4Douglas Gregor    /// PCH files at this time.
36445e23e9b909ec8e21303c7dd82c90b72fc09ac4Douglas Gregor    const unsigned VERSION_MAJOR = 3;
37ab41e63821dc60ad144d0684df8d79a9eef86b75Douglas Gregor
38ab41e63821dc60ad144d0684df8d79a9eef86b75Douglas Gregor    /// \brief PCH minor version number supported by this version of
39ab41e63821dc60ad144d0684df8d79a9eef86b75Douglas Gregor    /// Clang.
40ab41e63821dc60ad144d0684df8d79a9eef86b75Douglas Gregor    ///
41ab41e63821dc60ad144d0684df8d79a9eef86b75Douglas Gregor    /// Whenever the PCH format changes in a way that is still
42ab41e63821dc60ad144d0684df8d79a9eef86b75Douglas Gregor    /// compatible with previous versions (such that a reader designed
43ab41e63821dc60ad144d0684df8d79a9eef86b75Douglas Gregor    /// for the previous version could still support reading the new
44ab41e63821dc60ad144d0684df8d79a9eef86b75Douglas Gregor    /// version by ignoring new kinds of subblocks), this number
45ab41e63821dc60ad144d0684df8d79a9eef86b75Douglas Gregor    /// should be increased.
46ab41e63821dc60ad144d0684df8d79a9eef86b75Douglas Gregor    const unsigned VERSION_MINOR = 0;
47ab41e63821dc60ad144d0684df8d79a9eef86b75Douglas Gregor
488038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor    /// \brief An ID number that refers to a declaration in a PCH file.
498038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor    ///
508038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor    /// The ID numbers of types are consecutive (in order of
518038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor    /// discovery) and start at 2. 0 is reserved for NULL, and 1 is
528038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor    /// reserved for the translation unit declaration.
538038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor    typedef uint32_t DeclID;
548038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor
558038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor    /// \brief An ID number that refers to a type in a PCH file.
568038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor    ///
578038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor    /// The ID of a type is partitioned into two parts: the lower
588038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor    /// three bits are used to store the const/volatile/restrict
598038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor    /// qualifiers (as with QualType) and the upper bits provide a
608038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor    /// type index. The type index values are partitioned into two
618038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor    /// sets. The values below NUM_PREDEF_TYPE_IDs are predefined type
628038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor    /// IDs (based on the PREDEF_TYPE_*_ID constants), with 0 as a
638038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor    /// placeholder for "no type". Values from NUM_PREDEF_TYPE_IDs are
648038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor    /// other types that have serialized representations.
658038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor    typedef uint32_t TypeID;
662cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor
67afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor    /// \brief An ID number that refers to an identifier in a PCH
68afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor    /// file.
69afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor    typedef uint32_t IdentID;
70afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor
7190cd1bb1baac2a0221f3642de0cbea3244b116e5Steve Naroff    typedef uint32_t SelectorID;
721eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
732cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    /// \brief Describes the various kinds of blocks that occur within
742cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    /// a PCH file.
752cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    enum BlockIDs {
762cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The PCH block, which acts as a container around the
772cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// full PCH block.
782cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      PCH_BLOCK_ID = llvm::bitc::FIRST_APPLICATION_BLOCKID,
7914f79002e58556798e86168c63e48d533287eda5Douglas Gregor
8014f79002e58556798e86168c63e48d533287eda5Douglas Gregor      /// \brief The block containing information about the source
8114f79002e58556798e86168c63e48d533287eda5Douglas Gregor      /// manager.
8214f79002e58556798e86168c63e48d533287eda5Douglas Gregor      SOURCE_MANAGER_BLOCK_ID,
8314f79002e58556798e86168c63e48d533287eda5Douglas Gregor
8414f79002e58556798e86168c63e48d533287eda5Douglas Gregor      /// \brief The block containing information about the
8514f79002e58556798e86168c63e48d533287eda5Douglas Gregor      /// preprocessor.
8614f79002e58556798e86168c63e48d533287eda5Douglas Gregor      PREPROCESSOR_BLOCK_ID,
8714f79002e58556798e86168c63e48d533287eda5Douglas Gregor
882cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The block containing the definitions of all of the
8961d60ee6aa0a5ded0ddcf48679673b37506a1895Douglas Gregor      /// types and decls used within the PCH file.
9061d60ee6aa0a5ded0ddcf48679673b37506a1895Douglas Gregor      DECLTYPES_BLOCK_ID
918038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor    };
922cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor
938038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor    /// \brief Record types that occur within the PCH block itself.
948038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor    enum PCHRecordTypes {
9561d60ee6aa0a5ded0ddcf48679673b37506a1895Douglas Gregor      /// \brief Record code for the offsets of each type.
962cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      ///
978038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor      /// The TYPE_OFFSET constant describes the record that occurs
9861d60ee6aa0a5ded0ddcf48679673b37506a1895Douglas Gregor      /// within the PCH block. The record itself is an array of offsets that
9961d60ee6aa0a5ded0ddcf48679673b37506a1895Douglas Gregor      /// point into the declarations and types block (identified by
10061d60ee6aa0a5ded0ddcf48679673b37506a1895Douglas Gregor      /// DECLTYPES_BLOCK_ID). The index into the array is based on the ID
1018038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor      /// of a type. For a given type ID @c T, the lower three bits of
1028038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor      /// @c T are its qualifiers (const, volatile, restrict), as in
1038038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor      /// the QualType class. The upper bits, after being shifted and
1048038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor      /// subtracting NUM_PREDEF_TYPE_IDS, are used to index into the
1058038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor      /// TYPE_OFFSET block to determine the offset of that type's
10661d60ee6aa0a5ded0ddcf48679673b37506a1895Douglas Gregor      /// corresponding record within the DECLTYPES_BLOCK_ID block.
1078038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor      TYPE_OFFSET = 1,
1081eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
1098038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor      /// \brief Record code for the offsets of each decl.
1108038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor      ///
1118038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor      /// The DECL_OFFSET constant describes the record that occurs
11261d60ee6aa0a5ded0ddcf48679673b37506a1895Douglas Gregor      /// within the block identified by DECL_OFFSETS_BLOCK_ID within
11361d60ee6aa0a5ded0ddcf48679673b37506a1895Douglas Gregor      /// the PCH block. The record itself is an array of offsets that
11461d60ee6aa0a5ded0ddcf48679673b37506a1895Douglas Gregor      /// point into the declarations and types block (identified by
11561d60ee6aa0a5ded0ddcf48679673b37506a1895Douglas Gregor      /// DECLTYPES_BLOCK_ID). The declaration ID is an index into this
1168038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor      /// record, after subtracting one to account for the use of
1178038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor      /// declaration ID 0 for a NULL declaration pointer. Index 0 is
1188038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor      /// reserved for the translation unit declaration.
1190a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor      DECL_OFFSET = 2,
1200a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor
1210a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor      /// \brief Record code for the language options table.
1220a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor      ///
1230a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor      /// The record with this code contains the contents of the
1240a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor      /// LangOptions structure. We serialize the entire contents of
1250a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor      /// the structure, and let the reader decide which options are
1260a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor      /// actually important to check.
1272bec0410d268779f601bd509e0302a500af7ac6aDouglas Gregor      LANGUAGE_OPTIONS = 3,
1282bec0410d268779f601bd509e0302a500af7ac6aDouglas Gregor
129ab41e63821dc60ad144d0684df8d79a9eef86b75Douglas Gregor      /// \brief PCH metadata, including the PCH file version number
130ab41e63821dc60ad144d0684df8d79a9eef86b75Douglas Gregor      /// and the target triple used to build the PCH file.
131ab41e63821dc60ad144d0684df8d79a9eef86b75Douglas Gregor      METADATA = 4,
132afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor
133afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor      /// \brief Record code for the table of offsets of each
134afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor      /// identifier ID.
135afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor      ///
136afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor      /// The offset table contains offsets into the blob stored in
137afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor      /// the IDENTIFIER_TABLE record. Each offset points to the
138afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor      /// NULL-terminated string that corresponds to that identifier.
139afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor      IDENTIFIER_OFFSET = 5,
140afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor
141afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor      /// \brief Record code for the identifier table.
142afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor      ///
143afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor      /// The identifier table is a simple blob that contains
144afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor      /// NULL-terminated strings for all of the identifiers
145afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor      /// referenced by the PCH file. The IDENTIFIER_OFFSET table
146afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor      /// contains the mapping from identifier IDs to the characters
147afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor      /// in this blob. Note that the starting offsets of all of the
148afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor      /// identifiers are odd, so that, when the identifier offset
149afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor      /// table is loaded in, we can use the low bit to distinguish
150afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor      /// between offsets (for unresolved identifier IDs) and
151afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor      /// IdentifierInfo pointers (for already-resolved identifier
152afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor      /// IDs).
153fdd0172ca1b3c837f8c2b37d69cc2085234e09faDouglas Gregor      IDENTIFIER_TABLE = 6,
154fdd0172ca1b3c837f8c2b37d69cc2085234e09faDouglas Gregor
155fdd0172ca1b3c837f8c2b37d69cc2085234e09faDouglas Gregor      /// \brief Record code for the array of external definitions.
156fdd0172ca1b3c837f8c2b37d69cc2085234e09faDouglas Gregor      ///
1574c0e86b392c5fb0cb771551fc877edb6979be69cDouglas Gregor      /// The PCH file contains a list of all of the unnamed external
158fdd0172ca1b3c837f8c2b37d69cc2085234e09faDouglas Gregor      /// definitions present within the parsed headers, stored as an
159fdd0172ca1b3c837f8c2b37d69cc2085234e09faDouglas Gregor      /// array of declaration IDs. These external definitions will be
160fdd0172ca1b3c837f8c2b37d69cc2085234e09faDouglas Gregor      /// reported to the AST consumer after the PCH file has been
161fdd0172ca1b3c837f8c2b37d69cc2085234e09faDouglas Gregor      /// read, since their presence can affect the semantics of the
162fdd0172ca1b3c837f8c2b37d69cc2085234e09faDouglas Gregor      /// program (e.g., for code generation).
1633e1af84bb0092a1aafb49deaa4ab6664c9a9071bDouglas Gregor      EXTERNAL_DEFINITIONS = 7,
1643e1af84bb0092a1aafb49deaa4ab6664c9a9071bDouglas Gregor
165ad1de006ea080b540e480efc6b86c2e201dbf1ecDouglas Gregor      /// \brief Record code for the set of non-builtin, special
166ad1de006ea080b540e480efc6b86c2e201dbf1ecDouglas Gregor      /// types.
167ad1de006ea080b540e480efc6b86c2e201dbf1ecDouglas Gregor      ///
168ad1de006ea080b540e480efc6b86c2e201dbf1ecDouglas Gregor      /// This record contains the type IDs for the various type nodes
169ad1de006ea080b540e480efc6b86c2e201dbf1ecDouglas Gregor      /// that are constructed during semantic analysis (e.g.,
170ad1de006ea080b540e480efc6b86c2e201dbf1ecDouglas Gregor      /// __builtin_va_list). The SPECIAL_TYPE_* constants provide
171ad1de006ea080b540e480efc6b86c2e201dbf1ecDouglas Gregor      /// offsets into this record.
172ad1de006ea080b540e480efc6b86c2e201dbf1ecDouglas Gregor      SPECIAL_TYPES = 8,
173ad1de006ea080b540e480efc6b86c2e201dbf1ecDouglas Gregor
1744c0e86b392c5fb0cb771551fc877edb6979be69cDouglas Gregor      /// \brief Record code for the extra statistics we gather while
1754c0e86b392c5fb0cb771551fc877edb6979be69cDouglas Gregor      /// generating a PCH file.
1764c0e86b392c5fb0cb771551fc877edb6979be69cDouglas Gregor      STATISTICS = 9,
1774c0e86b392c5fb0cb771551fc877edb6979be69cDouglas Gregor
1784c0e86b392c5fb0cb771551fc877edb6979be69cDouglas Gregor      /// \brief Record code for the array of tentative definitions.
17914c22f20c077cecd68581952a0c227f8c180be03Douglas Gregor      TENTATIVE_DEFINITIONS = 10,
18014c22f20c077cecd68581952a0c227f8c180be03Douglas Gregor
18114c22f20c077cecd68581952a0c227f8c180be03Douglas Gregor      /// \brief Record code for the array of locally-scoped external
18214c22f20c077cecd68581952a0c227f8c180be03Douglas Gregor      /// declarations.
18390cd1bb1baac2a0221f3642de0cbea3244b116e5Steve Naroff      LOCALLY_SCOPED_EXTERNAL_DECLS = 11,
1841eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
18583941df2745d69c05acee3174c7a265c206f70d9Douglas Gregor      /// \brief Record code for the table of offsets into the
18683941df2745d69c05acee3174c7a265c206f70d9Douglas Gregor      /// Objective-C method pool.
18783941df2745d69c05acee3174c7a265c206f70d9Douglas Gregor      SELECTOR_OFFSETS = 12,
188f0aaf7a59729a4ae0146e3464ee987745be95829Douglas Gregor
189f0aaf7a59729a4ae0146e3464ee987745be95829Douglas Gregor      /// \brief Record code for the Objective-C method pool,
1902eafc1b56347f772729e082e6bac824b0ef1b585Douglas Gregor      METHOD_POOL = 13,
1912eafc1b56347f772729e082e6bac824b0ef1b585Douglas Gregor
1922eafc1b56347f772729e082e6bac824b0ef1b585Douglas Gregor      /// \brief The value of the next __COUNTER__ to dispense.
1932eafc1b56347f772729e082e6bac824b0ef1b585Douglas Gregor      /// [PP_COUNTER_VALUE, Val]
1947f94b0b0c6791013d2f72ced9b4bedd3b23673a6Douglas Gregor      PP_COUNTER_VALUE = 14,
1957f94b0b0c6791013d2f72ced9b4bedd3b23673a6Douglas Gregor
1967f94b0b0c6791013d2f72ced9b4bedd3b23673a6Douglas Gregor      /// \brief Record code for the table of offsets into the block
1977f94b0b0c6791013d2f72ced9b4bedd3b23673a6Douglas Gregor      /// of source-location information.
1987f94b0b0c6791013d2f72ced9b4bedd3b23673a6Douglas Gregor      SOURCE_LOCATION_OFFSETS = 15,
1997f94b0b0c6791013d2f72ced9b4bedd3b23673a6Douglas Gregor
2007f94b0b0c6791013d2f72ced9b4bedd3b23673a6Douglas Gregor      /// \brief Record code for the set of source location entries
2017f94b0b0c6791013d2f72ced9b4bedd3b23673a6Douglas Gregor      /// that need to be preloaded by the PCH reader.
2027f94b0b0c6791013d2f72ced9b4bedd3b23673a6Douglas Gregor      ///
2037f94b0b0c6791013d2f72ced9b4bedd3b23673a6Douglas Gregor      /// This set contains the source location entry for the
2047f94b0b0c6791013d2f72ced9b4bedd3b23673a6Douglas Gregor      /// predefines buffer and for any file entries that need to be
2057f94b0b0c6791013d2f72ced9b4bedd3b23673a6Douglas Gregor      /// preloaded.
2064fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor      SOURCE_LOCATION_PRELOADS = 16,
2074fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor
2084fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor      /// \brief Record code for the stat() cache.
209b81c17092039f39be60e9656a37cffbdf2e2c783Douglas Gregor      STAT_CACHE = 17,
210b81c17092039f39be60e9656a37cffbdf2e2c783Douglas Gregor
211b81c17092039f39be60e9656a37cffbdf2e2c783Douglas Gregor      /// \brief Record code for the set of ext_vector type names.
212b81c17092039f39be60e9656a37cffbdf2e2c783Douglas Gregor      EXT_VECTOR_DECLS = 18,
213b81c17092039f39be60e9656a37cffbdf2e2c783Douglas Gregor
214b64c19365deab788753d29c9bc881253c3f16f37Douglas Gregor      /// \brief Record code for the original file that was used to
215b64c19365deab788753d29c9bc881253c3f16f37Douglas Gregor      /// generate the precompiled header.
2161cb35dd4840d21cec58648361180d5688446a9caArgyrios Kyrtzidis      ORIGINAL_FILE_NAME = 19,
2171eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
2182e22253e03e175144aeb9d13350a12fd83f858beDouglas Gregor      /// \brief Record code for the sorted array of source ranges where
2192e22253e03e175144aeb9d13350a12fd83f858beDouglas Gregor      /// comments were encountered in the source code.
220445e23e9b909ec8e21303c7dd82c90b72fc09ac4Douglas Gregor      COMMENT_RANGES = 20,
221445e23e9b909ec8e21303c7dd82c90b72fc09ac4Douglas Gregor
2225b4ec636637c9d876102240127cc0dca9280e83aTed Kremenek      /// \brief Record code for the version control branch and revision
2235b4ec636637c9d876102240127cc0dca9280e83aTed Kremenek      /// information of the compiler used to build this PCH file.
224e6bbc01d1c4ec5241df36042e0a4a12a6711934bTanya Lattner      VERSION_CONTROL_BRANCH_REVISION = 21,
225e6bbc01d1c4ec5241df36042e0a4a12a6711934bTanya Lattner
226e6bbc01d1c4ec5241df36042e0a4a12a6711934bTanya Lattner      /// \brief Record code for the array of unused static functions.
227e6bbc01d1c4ec5241df36042e0a4a12a6711934bTanya Lattner      UNUSED_STATIC_FUNCS = 22
228e6bbc01d1c4ec5241df36042e0a4a12a6711934bTanya Lattner
2292cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    };
2302cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor
23114f79002e58556798e86168c63e48d533287eda5Douglas Gregor    /// \brief Record types used within a source manager block.
23214f79002e58556798e86168c63e48d533287eda5Douglas Gregor    enum SourceManagerRecordTypes {
23314f79002e58556798e86168c63e48d533287eda5Douglas Gregor      /// \brief Describes a source location entry (SLocEntry) for a
23414f79002e58556798e86168c63e48d533287eda5Douglas Gregor      /// file.
23514f79002e58556798e86168c63e48d533287eda5Douglas Gregor      SM_SLOC_FILE_ENTRY = 1,
23614f79002e58556798e86168c63e48d533287eda5Douglas Gregor      /// \brief Describes a source location entry (SLocEntry) for a
23714f79002e58556798e86168c63e48d533287eda5Douglas Gregor      /// buffer.
23814f79002e58556798e86168c63e48d533287eda5Douglas Gregor      SM_SLOC_BUFFER_ENTRY = 2,
23914f79002e58556798e86168c63e48d533287eda5Douglas Gregor      /// \brief Describes a blob that contains the data for a buffer
24014f79002e58556798e86168c63e48d533287eda5Douglas Gregor      /// entry. This kind of record always directly follows a
24114f79002e58556798e86168c63e48d533287eda5Douglas Gregor      /// SM_SLOC_BUFFER_ENTRY record.
24214f79002e58556798e86168c63e48d533287eda5Douglas Gregor      SM_SLOC_BUFFER_BLOB = 3,
24314f79002e58556798e86168c63e48d533287eda5Douglas Gregor      /// \brief Describes a source location entry (SLocEntry) for a
24414f79002e58556798e86168c63e48d533287eda5Douglas Gregor      /// macro instantiation.
245bd94500d3aa60092fb0f1e90f53fb0d03fa502a8Douglas Gregor      SM_SLOC_INSTANTIATION_ENTRY = 4,
246bd94500d3aa60092fb0f1e90f53fb0d03fa502a8Douglas Gregor      /// \brief Describes the SourceManager's line table, with
247bd94500d3aa60092fb0f1e90f53fb0d03fa502a8Douglas Gregor      /// information about #line directives.
2482eafc1b56347f772729e082e6bac824b0ef1b585Douglas Gregor      SM_LINE_TABLE = 5,
2492eafc1b56347f772729e082e6bac824b0ef1b585Douglas Gregor      /// \brief Describes one header file info [isImport, DirInfo, NumIncludes]
2502eafc1b56347f772729e082e6bac824b0ef1b585Douglas Gregor      /// ControllingMacro is optional.
2512eafc1b56347f772729e082e6bac824b0ef1b585Douglas Gregor      SM_HEADER_FILE_INFO = 6
25214f79002e58556798e86168c63e48d533287eda5Douglas Gregor    };
2531eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
2547c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner    /// \brief Record types used within a preprocessor block.
2557c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner    enum PreprocessorRecordTypes {
2567c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner      // The macros in the PP section are a PP_MACRO_* instance followed by a
2577c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner      // list of PP_TOKEN instances for each token in the definition.
2587c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner
2597c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner      /// \brief An object-like macro definition.
2607c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner      /// [PP_MACRO_OBJECT_LIKE, IdentInfoID, SLoc, IsUsed]
2617c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner      PP_MACRO_OBJECT_LIKE = 1,
2627c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner
2637c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner      /// \brief A function-like macro definition.
2647c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner      /// [PP_MACRO_FUNCTION_LIKE, <ObjectLikeStuff>, IsC99Varargs, IsGNUVarars,
2657c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner      ///  NumArgs, ArgIdentInfoID* ]
2667c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner      PP_MACRO_FUNCTION_LIKE = 2,
2671eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
2687c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner      /// \brief Describes one token.
269c1f9d828c733ec1eba06d01070735d1f36fda733Chris Lattner      /// [PP_TOKEN, SLoc, Length, IdentInfoID, Kind, Flags]
2702eafc1b56347f772729e082e6bac824b0ef1b585Douglas Gregor      PP_TOKEN = 3
2717c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner    };
27214f79002e58556798e86168c63e48d533287eda5Douglas Gregor
27314f79002e58556798e86168c63e48d533287eda5Douglas Gregor    /// \defgroup PCHAST Precompiled header AST constants
27414f79002e58556798e86168c63e48d533287eda5Douglas Gregor    ///
27514f79002e58556798e86168c63e48d533287eda5Douglas Gregor    /// The constants in this group describe various components of the
27614f79002e58556798e86168c63e48d533287eda5Douglas Gregor    /// abstract syntax tree within a precompiled header.
27714f79002e58556798e86168c63e48d533287eda5Douglas Gregor    ///
27814f79002e58556798e86168c63e48d533287eda5Douglas Gregor    /// @{
27914f79002e58556798e86168c63e48d533287eda5Douglas Gregor
2802cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    /// \brief Predefined type IDs.
2812cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    ///
2822cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    /// These type IDs correspond to predefined types in the AST
2832cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    /// context, such as built-in types (int) and special place-holder
2842cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    /// types (the <overload> and <dependent> type markers). Such
2852cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    /// types are never actually serialized, since they will be built
2862cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    /// by the AST context when it is created.
2872cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    enum PredefinedTypeIDs {
2882cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The NULL type.
2892cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      PREDEF_TYPE_NULL_ID       = 0,
2902cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The void type.
2912cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      PREDEF_TYPE_VOID_ID       = 1,
2922cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The 'bool' or '_Bool' type.
2932cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      PREDEF_TYPE_BOOL_ID       = 2,
2942cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The 'char' type, when it is unsigned.
2952cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      PREDEF_TYPE_CHAR_U_ID     = 3,
2962cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The 'unsigned char' type.
2972cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      PREDEF_TYPE_UCHAR_ID      = 4,
2982cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The 'unsigned short' type.
2992cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      PREDEF_TYPE_USHORT_ID     = 5,
3002cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The 'unsigned int' type.
3012cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      PREDEF_TYPE_UINT_ID       = 6,
3022cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The 'unsigned long' type.
3032cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      PREDEF_TYPE_ULONG_ID      = 7,
3042cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The 'unsigned long long' type.
3052cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      PREDEF_TYPE_ULONGLONG_ID  = 8,
3062cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The 'char' type, when it is signed.
3072cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      PREDEF_TYPE_CHAR_S_ID     = 9,
3082cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The 'signed char' type.
3092cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      PREDEF_TYPE_SCHAR_ID      = 10,
3102cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The C++ 'wchar_t' type.
3112cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      PREDEF_TYPE_WCHAR_ID      = 11,
3122cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The (signed) 'short' type.
3132cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      PREDEF_TYPE_SHORT_ID      = 12,
3142cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The (signed) 'int' type.
3152cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      PREDEF_TYPE_INT_ID        = 13,
3162cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The (signed) 'long' type.
3172cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      PREDEF_TYPE_LONG_ID       = 14,
3182cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The (signed) 'long long' type.
3192cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      PREDEF_TYPE_LONGLONG_ID   = 15,
3202cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The 'float' type.
3212cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      PREDEF_TYPE_FLOAT_ID      = 16,
3222cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The 'double' type.
3232cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      PREDEF_TYPE_DOUBLE_ID     = 17,
3242cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The 'long double' type.
3252cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      PREDEF_TYPE_LONGDOUBLE_ID = 18,
3262cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The placeholder type for overloaded function sets.
3272cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      PREDEF_TYPE_OVERLOAD_ID   = 19,
3282cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The placeholder type for dependent types.
3292df9ced9fd1e8c7d7b38443db07e0e811de22571Chris Lattner      PREDEF_TYPE_DEPENDENT_ID  = 20,
3302df9ced9fd1e8c7d7b38443db07e0e811de22571Chris Lattner      /// \brief The '__uint128_t' type.
3312df9ced9fd1e8c7d7b38443db07e0e811de22571Chris Lattner      PREDEF_TYPE_UINT128_ID    = 21,
3322df9ced9fd1e8c7d7b38443db07e0e811de22571Chris Lattner      /// \brief The '__int128_t' type.
3336e8ed16ffef02b82995a90bdcf10ffff7d63839aSebastian Redl      PREDEF_TYPE_INT128_ID     = 22,
3346e8ed16ffef02b82995a90bdcf10ffff7d63839aSebastian Redl      /// \brief The type of 'nullptr'.
335f5c209d23b20ada4a9b6235db50317239cbf6ae1Alisdair Meredith      PREDEF_TYPE_NULLPTR_ID    = 23,
336f5c209d23b20ada4a9b6235db50317239cbf6ae1Alisdair Meredith      /// \brief The C++ 'char16_t' type.
337f5c209d23b20ada4a9b6235db50317239cbf6ae1Alisdair Meredith      PREDEF_TYPE_CHAR16_ID     = 24,
338f5c209d23b20ada4a9b6235db50317239cbf6ae1Alisdair Meredith      /// \brief The C++ 'char32_t' type.
339de2e22d33afec98324a66a358dfe0951b3c7259aSteve Naroff      PREDEF_TYPE_CHAR32_ID     = 25,
340de2e22d33afec98324a66a358dfe0951b3c7259aSteve Naroff      /// \brief The ObjC 'id' type.
341de2e22d33afec98324a66a358dfe0951b3c7259aSteve Naroff      PREDEF_TYPE_OBJC_ID       = 26,
342de2e22d33afec98324a66a358dfe0951b3c7259aSteve Naroff      /// \brief The ObjC 'Class' type.
34313dcd00615de5c4279d97bdf63cd5f0a14fd9dccFariborz Jahanian      PREDEF_TYPE_OBJC_CLASS    = 27,
34413dcd00615de5c4279d97bdf63cd5f0a14fd9dccFariborz Jahanian      /// \brief The ObjC 'SEL' type.
34513dcd00615de5c4279d97bdf63cd5f0a14fd9dccFariborz Jahanian      PREDEF_TYPE_OBJC_SEL    = 28
3462cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    };
3472cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor
3482cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    /// \brief The number of predefined type IDs that are reserved for
3492cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    /// the PREDEF_TYPE_* constants.
3502cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    ///
3512cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    /// Type IDs for non-predefined types will start at
3522cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    /// NUM_PREDEF_TYPE_IDs.
3532cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    const unsigned NUM_PREDEF_TYPE_IDS = 100;
3542cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor
3552cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    /// \brief Record codes for each kind of type.
3562cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    ///
35761d60ee6aa0a5ded0ddcf48679673b37506a1895Douglas Gregor    /// These constants describe the type records that can occur within a
35861d60ee6aa0a5ded0ddcf48679673b37506a1895Douglas Gregor    /// block identified by DECLTYPES_BLOCK_ID in the PCH file. Each
3592cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    /// constant describes a record for a specific type class in the
3602cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    /// AST.
3612cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    enum TypeCode {
3622cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief An ExtQualType record.
36363f5c2646e75041277657aa1392a5bdd643367a7Douglas Gregor      TYPE_EXT_QUAL                 = 1,
3642cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief A ComplexType record.
36563f5c2646e75041277657aa1392a5bdd643367a7Douglas Gregor      TYPE_COMPLEX                  = 3,
3662cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief A PointerType record.
36763f5c2646e75041277657aa1392a5bdd643367a7Douglas Gregor      TYPE_POINTER                  = 4,
3682cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief A BlockPointerType record.
36963f5c2646e75041277657aa1392a5bdd643367a7Douglas Gregor      TYPE_BLOCK_POINTER            = 5,
3702cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief An LValueReferenceType record.
37163f5c2646e75041277657aa1392a5bdd643367a7Douglas Gregor      TYPE_LVALUE_REFERENCE         = 6,
3722cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief An RValueReferenceType record.
37363f5c2646e75041277657aa1392a5bdd643367a7Douglas Gregor      TYPE_RVALUE_REFERENCE         = 7,
3742cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief A MemberPointerType record.
37563f5c2646e75041277657aa1392a5bdd643367a7Douglas Gregor      TYPE_MEMBER_POINTER           = 8,
3762cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief A ConstantArrayType record.
37763f5c2646e75041277657aa1392a5bdd643367a7Douglas Gregor      TYPE_CONSTANT_ARRAY           = 9,
3782cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief An IncompleteArrayType record.
37963f5c2646e75041277657aa1392a5bdd643367a7Douglas Gregor      TYPE_INCOMPLETE_ARRAY         = 10,
3802cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief A VariableArrayType record.
38163f5c2646e75041277657aa1392a5bdd643367a7Douglas Gregor      TYPE_VARIABLE_ARRAY           = 11,
3822cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief A VectorType record.
38363f5c2646e75041277657aa1392a5bdd643367a7Douglas Gregor      TYPE_VECTOR                   = 12,
3842cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief An ExtVectorType record.
38563f5c2646e75041277657aa1392a5bdd643367a7Douglas Gregor      TYPE_EXT_VECTOR               = 13,
3862cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief A FunctionNoProtoType record.
38763f5c2646e75041277657aa1392a5bdd643367a7Douglas Gregor      TYPE_FUNCTION_NO_PROTO        = 14,
3882cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief A FunctionProtoType record.
38963f5c2646e75041277657aa1392a5bdd643367a7Douglas Gregor      TYPE_FUNCTION_PROTO           = 15,
3902cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief A TypedefType record.
39163f5c2646e75041277657aa1392a5bdd643367a7Douglas Gregor      TYPE_TYPEDEF                  = 16,
3922cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief A TypeOfExprType record.
39363f5c2646e75041277657aa1392a5bdd643367a7Douglas Gregor      TYPE_TYPEOF_EXPR              = 17,
3942cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief A TypeOfType record.
39563f5c2646e75041277657aa1392a5bdd643367a7Douglas Gregor      TYPE_TYPEOF                   = 18,
3962cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief A RecordType record.
39763f5c2646e75041277657aa1392a5bdd643367a7Douglas Gregor      TYPE_RECORD                   = 19,
3982cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief An EnumType record.
39963f5c2646e75041277657aa1392a5bdd643367a7Douglas Gregor      TYPE_ENUM                     = 20,
4002cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief An ObjCInterfaceType record.
40163f5c2646e75041277657aa1392a5bdd643367a7Douglas Gregor      TYPE_OBJC_INTERFACE           = 21,
402d1b3c2dd5bc1f3103bee6137957aa7c5f8f2f0bcSteve Naroff      /// \brief An ObjCObjectPointerType record.
403c15cb2af27514ecc879daba9aa01389c5203685dSteve Naroff      TYPE_OBJC_OBJECT_POINTER      = 22,
404395b475a4474f1c7574d927ad142ca0c7997cbcaAnders Carlsson      /// \brief a DecltypeType record.
40554e14c4db764c0636160d26c5bbf491637c83a76John McCall      TYPE_DECLTYPE                 = 23,
4067da2431c23ef1ee8acb114e39692246e1801afc2John McCall      /// \brief An ElaboratedType record.
40754e14c4db764c0636160d26c5bbf491637c83a76John McCall      TYPE_ELABORATED               = 24,
40849a832bd499d6f61c23655f1fac99f0dd229756eJohn McCall      /// \brief A SubstTemplateTypeParmType record.
409ed97649e9574b9d854fa4d6109c9333ae0993554John McCall      TYPE_SUBST_TEMPLATE_TYPE_PARM = 25,
410ed97649e9574b9d854fa4d6109c9333ae0993554John McCall      /// \brief An UnresolvedUsingType record.
411ed97649e9574b9d854fa4d6109c9333ae0993554John McCall      TYPE_UNRESOLVED_USING         = 26
4122cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    };
4132cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor
414ad1de006ea080b540e480efc6b86c2e201dbf1ecDouglas Gregor    /// \brief The type IDs for special types constructed by semantic
415ad1de006ea080b540e480efc6b86c2e201dbf1ecDouglas Gregor    /// analysis.
416ad1de006ea080b540e480efc6b86c2e201dbf1ecDouglas Gregor    ///
417ad1de006ea080b540e480efc6b86c2e201dbf1ecDouglas Gregor    /// The constants in this enumeration are indices into the
418ad1de006ea080b540e480efc6b86c2e201dbf1ecDouglas Gregor    /// SPECIAL_TYPES record.
419ad1de006ea080b540e480efc6b86c2e201dbf1ecDouglas Gregor    enum SpecialTypeIDs {
420ad1de006ea080b540e480efc6b86c2e201dbf1ecDouglas Gregor      /// \brief __builtin_va_list
421319ac896a0fef7365d5589b8021db7e41207fe42Douglas Gregor      SPECIAL_TYPE_BUILTIN_VA_LIST             = 0,
422319ac896a0fef7365d5589b8021db7e41207fe42Douglas Gregor      /// \brief Objective-C "id" type
423319ac896a0fef7365d5589b8021db7e41207fe42Douglas Gregor      SPECIAL_TYPE_OBJC_ID                     = 1,
424319ac896a0fef7365d5589b8021db7e41207fe42Douglas Gregor      /// \brief Objective-C selector type
425319ac896a0fef7365d5589b8021db7e41207fe42Douglas Gregor      SPECIAL_TYPE_OBJC_SELECTOR               = 2,
426319ac896a0fef7365d5589b8021db7e41207fe42Douglas Gregor      /// \brief Objective-C Protocol type
427319ac896a0fef7365d5589b8021db7e41207fe42Douglas Gregor      SPECIAL_TYPE_OBJC_PROTOCOL               = 3,
428319ac896a0fef7365d5589b8021db7e41207fe42Douglas Gregor      /// \brief Objective-C Class type
429319ac896a0fef7365d5589b8021db7e41207fe42Douglas Gregor      SPECIAL_TYPE_OBJC_CLASS                  = 4,
430319ac896a0fef7365d5589b8021db7e41207fe42Douglas Gregor      /// \brief CFConstantString type
431319ac896a0fef7365d5589b8021db7e41207fe42Douglas Gregor      SPECIAL_TYPE_CF_CONSTANT_STRING          = 5,
432319ac896a0fef7365d5589b8021db7e41207fe42Douglas Gregor      /// \brief Objective-C fast enumeration state type
433c29f77b769bcc5b6dc85e72c8e3cc2e348e5cf25Douglas Gregor      SPECIAL_TYPE_OBJC_FAST_ENUMERATION_STATE = 6,
434c29f77b769bcc5b6dc85e72c8e3cc2e348e5cf25Douglas Gregor      /// \brief C FILE typedef type
435782fa308a765aeac2acb39c4e697c937ec21185bMike Stump      SPECIAL_TYPE_FILE                        = 7,
436782fa308a765aeac2acb39c4e697c937ec21185bMike Stump      /// \brief C jmp_buf typedef type
437782fa308a765aeac2acb39c4e697c937ec21185bMike Stump      SPECIAL_TYPE_jmp_buf                     = 8,
438782fa308a765aeac2acb39c4e697c937ec21185bMike Stump      /// \brief C sigjmp_buf typedef type
439d1571acc700b652a52c766e36a6c688d9bf6f3a1Douglas Gregor      SPECIAL_TYPE_sigjmp_buf                  = 9,
440d1571acc700b652a52c766e36a6c688d9bf6f3a1Douglas Gregor      /// \brief Objective-C "id" redefinition type
441d1571acc700b652a52c766e36a6c688d9bf6f3a1Douglas Gregor      SPECIAL_TYPE_OBJC_ID_REDEFINITION        = 10,
442d1571acc700b652a52c766e36a6c688d9bf6f3a1Douglas Gregor      /// \brief Objective-C "Class" redefinition type
443adaaad3715c9c26cdcfdfe3401a13d7b4423ddcfMike Stump      SPECIAL_TYPE_OBJC_CLASS_REDEFINITION     = 11,
444adaaad3715c9c26cdcfdfe3401a13d7b4423ddcfMike Stump      /// \brief Block descriptor type for Blocks CodeGen
445083c25eea14bb4cc4ecc3ec763c60e2e609e22bdMike Stump      SPECIAL_TYPE_BLOCK_DESCRIPTOR            = 12,
446083c25eea14bb4cc4ecc3ec763c60e2e609e22bdMike Stump      /// \brief Block extedned descriptor type for Blocks CodeGen
44713dcd00615de5c4279d97bdf63cd5f0a14fd9dccFariborz Jahanian      SPECIAL_TYPE_BLOCK_EXTENDED_DESCRIPTOR   = 13,
44813dcd00615de5c4279d97bdf63cd5f0a14fd9dccFariborz Jahanian      /// \brief Objective-C "SEL" redefinition type
44913dcd00615de5c4279d97bdf63cd5f0a14fd9dccFariborz Jahanian      SPECIAL_TYPE_OBJC_SEL_REDEFINITION       = 14
450ad1de006ea080b540e480efc6b86c2e201dbf1ecDouglas Gregor    };
451ad1de006ea080b540e480efc6b86c2e201dbf1ecDouglas Gregor
4522cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    /// \brief Record codes for each kind of declaration.
4532cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    ///
45461d60ee6aa0a5ded0ddcf48679673b37506a1895Douglas Gregor    /// These constants describe the declaration records that can occur within
45561d60ee6aa0a5ded0ddcf48679673b37506a1895Douglas Gregor    /// a declarations block (identified by DECLS_BLOCK_ID). Each
4562cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    /// constant describes a record for a specific declaration class
4572cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    /// in the AST.
4582cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    enum DeclCode {
45968a2eb0cc76267ba0615992fb5e0977853c397b2Douglas Gregor      /// \brief Attributes attached to a declaration.
46061d60ee6aa0a5ded0ddcf48679673b37506a1895Douglas Gregor      DECL_ATTR = 50,
4612cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief A TranslationUnitDecl record.
46268a2eb0cc76267ba0615992fb5e0977853c397b2Douglas Gregor      DECL_TRANSLATION_UNIT,
4632cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief A TypedefDecl record.
4642cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      DECL_TYPEDEF,
4650a2b45e5885b6b8477b167042c0f6cd1d99a1f13Douglas Gregor      /// \brief An EnumDecl record.
4660a2b45e5885b6b8477b167042c0f6cd1d99a1f13Douglas Gregor      DECL_ENUM,
4678c70006581a9b9e9485570ca727a6c5f7be63521Douglas Gregor      /// \brief A RecordDecl record.
4688c70006581a9b9e9485570ca727a6c5f7be63521Douglas Gregor      DECL_RECORD,
4690a2b45e5885b6b8477b167042c0f6cd1d99a1f13Douglas Gregor      /// \brief An EnumConstantDecl record.
4700a2b45e5885b6b8477b167042c0f6cd1d99a1f13Douglas Gregor      DECL_ENUM_CONSTANT,
4713a2f7e42514ddbec983c61826ce85d3071e23e8eDouglas Gregor      /// \brief A FunctionDecl record.
4723a2f7e42514ddbec983c61826ce85d3071e23e8eDouglas Gregor      DECL_FUNCTION,
47353c9d8a4b8f0a76cb9dd2fdd8c433ccf110f2eecSteve Naroff      /// \brief A ObjCMethodDecl record.
47453c9d8a4b8f0a76cb9dd2fdd8c433ccf110f2eecSteve Naroff      DECL_OBJC_METHOD,
47533feeb019a5742b286eededd5446ec0fe87c5a61Steve Naroff      /// \brief A ObjCInterfaceDecl record.
47630833f8d77c08f8f16371776fde85a9fde3d9b6eSteve Naroff      DECL_OBJC_INTERFACE,
47730833f8d77c08f8f16371776fde85a9fde3d9b6eSteve Naroff      /// \brief A ObjCProtocolDecl record.
47830833f8d77c08f8f16371776fde85a9fde3d9b6eSteve Naroff      DECL_OBJC_PROTOCOL,
47933feeb019a5742b286eededd5446ec0fe87c5a61Steve Naroff      /// \brief A ObjCIvarDecl record.
48030833f8d77c08f8f16371776fde85a9fde3d9b6eSteve Naroff      DECL_OBJC_IVAR,
48130833f8d77c08f8f16371776fde85a9fde3d9b6eSteve Naroff      /// \brief A ObjCAtDefsFieldDecl record.
48230833f8d77c08f8f16371776fde85a9fde3d9b6eSteve Naroff      DECL_OBJC_AT_DEFS_FIELD,
48330833f8d77c08f8f16371776fde85a9fde3d9b6eSteve Naroff      /// \brief A ObjCClassDecl record.
48430833f8d77c08f8f16371776fde85a9fde3d9b6eSteve Naroff      DECL_OBJC_CLASS,
48530833f8d77c08f8f16371776fde85a9fde3d9b6eSteve Naroff      /// \brief A ObjCForwardProtocolDecl record.
48630833f8d77c08f8f16371776fde85a9fde3d9b6eSteve Naroff      DECL_OBJC_FORWARD_PROTOCOL,
48730833f8d77c08f8f16371776fde85a9fde3d9b6eSteve Naroff      /// \brief A ObjCCategoryDecl record.
48830833f8d77c08f8f16371776fde85a9fde3d9b6eSteve Naroff      DECL_OBJC_CATEGORY,
48930833f8d77c08f8f16371776fde85a9fde3d9b6eSteve Naroff      /// \brief A ObjCCategoryImplDecl record.
49030833f8d77c08f8f16371776fde85a9fde3d9b6eSteve Naroff      DECL_OBJC_CATEGORY_IMPL,
49130833f8d77c08f8f16371776fde85a9fde3d9b6eSteve Naroff      /// \brief A ObjCImplementationDecl record.
49230833f8d77c08f8f16371776fde85a9fde3d9b6eSteve Naroff      DECL_OBJC_IMPLEMENTATION,
49330833f8d77c08f8f16371776fde85a9fde3d9b6eSteve Naroff      /// \brief A ObjCCompatibleAliasDecl record.
49430833f8d77c08f8f16371776fde85a9fde3d9b6eSteve Naroff      DECL_OBJC_COMPATIBLE_ALIAS,
49530833f8d77c08f8f16371776fde85a9fde3d9b6eSteve Naroff      /// \brief A ObjCPropertyDecl record.
49630833f8d77c08f8f16371776fde85a9fde3d9b6eSteve Naroff      DECL_OBJC_PROPERTY,
49730833f8d77c08f8f16371776fde85a9fde3d9b6eSteve Naroff      /// \brief A ObjCPropertyImplDecl record.
49830833f8d77c08f8f16371776fde85a9fde3d9b6eSteve Naroff      DECL_OBJC_PROPERTY_IMPL,
4998c70006581a9b9e9485570ca727a6c5f7be63521Douglas Gregor      /// \brief A FieldDecl record.
5008c70006581a9b9e9485570ca727a6c5f7be63521Douglas Gregor      DECL_FIELD,
5012cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief A VarDecl record.
5022cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      DECL_VAR,
503405bad07391494d2eb025f8222c256c66b56e5f8Douglas Gregor      /// \brief An ImplicitParamDecl record.
504405bad07391494d2eb025f8222c256c66b56e5f8Douglas Gregor      DECL_IMPLICIT_PARAM,
5053a2f7e42514ddbec983c61826ce85d3071e23e8eDouglas Gregor      /// \brief A ParmVarDecl record.
5063a2f7e42514ddbec983c61826ce85d3071e23e8eDouglas Gregor      DECL_PARM_VAR,
5071028bc67d56ea088c3a57c4c44c3f6aeff60a031Douglas Gregor      /// \brief A FileScopeAsmDecl record.
5081028bc67d56ea088c3a57c4c44c3f6aeff60a031Douglas Gregor      DECL_FILE_SCOPE_ASM,
5091028bc67d56ea088c3a57c4c44c3f6aeff60a031Douglas Gregor      /// \brief A BlockDecl record.
5101028bc67d56ea088c3a57c4c44c3f6aeff60a031Douglas Gregor      DECL_BLOCK,
5112cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief A record that stores the set of declarations that are
5122cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// lexically stored within a given DeclContext.
5132cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      ///
5142cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// The record itself is an array of declaration IDs, in the
5152cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// order in which those declarations were added to the
5162cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// declaration context. This data is used when iterating over
5172cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// the contents of a DeclContext, e.g., via
5182cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// DeclContext::decls_begin()/DeclContext::decls_end().
5192cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      DECL_CONTEXT_LEXICAL,
5202cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief A record that stores the set of declarations that are
5212cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// visible from a given DeclContext.
5222cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      ///
5232cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// The record itself stores a set of mappings, each of which
5242cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// associates a declaration name with one or more declaration
5252cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// IDs. This data is used when performing qualified name lookup
5262cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// into a DeclContext via DeclContext::lookup.
5270cef483f3b9d6a7f9fdbc5910d0a3ed64130e8e1Douglas Gregor      DECL_CONTEXT_VISIBLE,
5280cef483f3b9d6a7f9fdbc5910d0a3ed64130e8e1Douglas Gregor      /// \brief A NamespaceDecl record.
5290cef483f3b9d6a7f9fdbc5910d0a3ed64130e8e1Douglas Gregor      DECL_NAMESPACE
5302cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    };
5310b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregor
5320b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregor    /// \brief Record codes for each kind of statement or expression.
5330b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregor    ///
5340b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregor    /// These constants describe the records that describe statements
53561d60ee6aa0a5ded0ddcf48679673b37506a1895Douglas Gregor    /// or expressions. These records  occur within type and declarations
53661d60ee6aa0a5ded0ddcf48679673b37506a1895Douglas Gregor    /// block, so they begin with record values of 100.  Each constant
53761d60ee6aa0a5ded0ddcf48679673b37506a1895Douglas Gregor    /// describes a record for a specific statement or expression class in the
53861d60ee6aa0a5ded0ddcf48679673b37506a1895Douglas Gregor    /// AST.
5390b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregor    enum StmtCode {
540087fd536809ebe754d91c641a98917e02dd7452dDouglas Gregor      /// \brief A marker record that indicates that we are at the end
541087fd536809ebe754d91c641a98917e02dd7452dDouglas Gregor      /// of an expression.
54261d60ee6aa0a5ded0ddcf48679673b37506a1895Douglas Gregor      STMT_STOP = 100,
5430b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregor      /// \brief A NULL expression.
544c9490c000f515c29f200a1215328d8ab9a0f3818Douglas Gregor      STMT_NULL_PTR,
545025452fa0eda63e150cfaeebe64f0a19c96b3a06Douglas Gregor      /// \brief A NullStmt record.
546025452fa0eda63e150cfaeebe64f0a19c96b3a06Douglas Gregor      STMT_NULL,
547025452fa0eda63e150cfaeebe64f0a19c96b3a06Douglas Gregor      /// \brief A CompoundStmt record.
548025452fa0eda63e150cfaeebe64f0a19c96b3a06Douglas Gregor      STMT_COMPOUND,
549025452fa0eda63e150cfaeebe64f0a19c96b3a06Douglas Gregor      /// \brief A CaseStmt record.
550025452fa0eda63e150cfaeebe64f0a19c96b3a06Douglas Gregor      STMT_CASE,
551025452fa0eda63e150cfaeebe64f0a19c96b3a06Douglas Gregor      /// \brief A DefaultStmt record.
552025452fa0eda63e150cfaeebe64f0a19c96b3a06Douglas Gregor      STMT_DEFAULT,
5531de05feeeafe5b215fe7617594a7076a5192a6e2Douglas Gregor      /// \brief A LabelStmt record.
5541de05feeeafe5b215fe7617594a7076a5192a6e2Douglas Gregor      STMT_LABEL,
555025452fa0eda63e150cfaeebe64f0a19c96b3a06Douglas Gregor      /// \brief An IfStmt record.
556025452fa0eda63e150cfaeebe64f0a19c96b3a06Douglas Gregor      STMT_IF,
557025452fa0eda63e150cfaeebe64f0a19c96b3a06Douglas Gregor      /// \brief A SwitchStmt record.
558025452fa0eda63e150cfaeebe64f0a19c96b3a06Douglas Gregor      STMT_SWITCH,
559d921cf976b4769af8d06d6763a2547dadf7940abDouglas Gregor      /// \brief A WhileStmt record.
560d921cf976b4769af8d06d6763a2547dadf7940abDouglas Gregor      STMT_WHILE,
56167d8249924ef38a5375ff9c92cd21c1854d6ababDouglas Gregor      /// \brief A DoStmt record.
56267d8249924ef38a5375ff9c92cd21c1854d6ababDouglas Gregor      STMT_DO,
56367d8249924ef38a5375ff9c92cd21c1854d6ababDouglas Gregor      /// \brief A ForStmt record.
56467d8249924ef38a5375ff9c92cd21c1854d6ababDouglas Gregor      STMT_FOR,
5651de05feeeafe5b215fe7617594a7076a5192a6e2Douglas Gregor      /// \brief A GotoStmt record.
5661de05feeeafe5b215fe7617594a7076a5192a6e2Douglas Gregor      STMT_GOTO,
5677d5c2f241c74e5f8d9ec492e8f9f268e5e9ae41fDouglas Gregor      /// \brief An IndirectGotoStmt record.
5687d5c2f241c74e5f8d9ec492e8f9f268e5e9ae41fDouglas Gregor      STMT_INDIRECT_GOTO,
569d921cf976b4769af8d06d6763a2547dadf7940abDouglas Gregor      /// \brief A ContinueStmt record.
570d921cf976b4769af8d06d6763a2547dadf7940abDouglas Gregor      STMT_CONTINUE,
571025452fa0eda63e150cfaeebe64f0a19c96b3a06Douglas Gregor      /// \brief A BreakStmt record.
572025452fa0eda63e150cfaeebe64f0a19c96b3a06Douglas Gregor      STMT_BREAK,
5730de9d8857b715c2f45c987651f4ce06d73330d93Douglas Gregor      /// \brief A ReturnStmt record.
5740de9d8857b715c2f45c987651f4ce06d73330d93Douglas Gregor      STMT_RETURN,
57584f2170062014d268951902164bed0d8bdea0e82Douglas Gregor      /// \brief A DeclStmt record.
57684f2170062014d268951902164bed0d8bdea0e82Douglas Gregor      STMT_DECL,
577cd7d5a9dc558178ed7a66032f888781b3c592e4fDouglas Gregor      /// \brief An AsmStmt record.
578cd7d5a9dc558178ed7a66032f888781b3c592e4fDouglas Gregor      STMT_ASM,
57917fc223395d51be582fc666bb6ea21bd1dff26dcDouglas Gregor      /// \brief A PredefinedExpr record.
58017fc223395d51be582fc666bb6ea21bd1dff26dcDouglas Gregor      EXPR_PREDEFINED,
5810b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregor      /// \brief A DeclRefExpr record.
5820b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregor      EXPR_DECL_REF,
5830b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregor      /// \brief An IntegerLiteral record.
5840b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregor      EXPR_INTEGER_LITERAL,
58517fc223395d51be582fc666bb6ea21bd1dff26dcDouglas Gregor      /// \brief A FloatingLiteral record.
58617fc223395d51be582fc666bb6ea21bd1dff26dcDouglas Gregor      EXPR_FLOATING_LITERAL,
587cb2ca73c1d7e76cc1358ce51457d2d5837d84f9bDouglas Gregor      /// \brief An ImaginaryLiteral record.
588cb2ca73c1d7e76cc1358ce51457d2d5837d84f9bDouglas Gregor      EXPR_IMAGINARY_LITERAL,
589673ecd6a4a9f7c12fb6f76f84f654dbdcdc89e76Douglas Gregor      /// \brief A StringLiteral record.
590673ecd6a4a9f7c12fb6f76f84f654dbdcdc89e76Douglas Gregor      EXPR_STRING_LITERAL,
5910b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregor      /// \brief A CharacterLiteral record.
592087fd536809ebe754d91c641a98917e02dd7452dDouglas Gregor      EXPR_CHARACTER_LITERAL,
593c04db4feefa2b0dbbc6876cb4eeeee108aa6791dDouglas Gregor      /// \brief A ParenExpr record.
594c04db4feefa2b0dbbc6876cb4eeeee108aa6791dDouglas Gregor      EXPR_PAREN,
5950b0b77fa29c74c99a77548ed86ca8a04f7cf6b02Douglas Gregor      /// \brief A UnaryOperator record.
5960b0b77fa29c74c99a77548ed86ca8a04f7cf6b02Douglas Gregor      EXPR_UNARY_OPERATOR,
5970b0b77fa29c74c99a77548ed86ca8a04f7cf6b02Douglas Gregor      /// \brief A SizefAlignOfExpr record.
5980b0b77fa29c74c99a77548ed86ca8a04f7cf6b02Douglas Gregor      EXPR_SIZEOF_ALIGN_OF,
599cb2ca73c1d7e76cc1358ce51457d2d5837d84f9bDouglas Gregor      /// \brief An ArraySubscriptExpr record.
600cb2ca73c1d7e76cc1358ce51457d2d5837d84f9bDouglas Gregor      EXPR_ARRAY_SUBSCRIPT,
6011f0d0133b0e8d1f01f63951ee04927796b34740dDouglas Gregor      /// \brief A CallExpr record.
6021f0d0133b0e8d1f01f63951ee04927796b34740dDouglas Gregor      EXPR_CALL,
6031f0d0133b0e8d1f01f63951ee04927796b34740dDouglas Gregor      /// \brief A MemberExpr record.
6041f0d0133b0e8d1f01f63951ee04927796b34740dDouglas Gregor      EXPR_MEMBER,
605db600c330a37b1c3ab4533310729910ee188f900Douglas Gregor      /// \brief A BinaryOperator record.
606db600c330a37b1c3ab4533310729910ee188f900Douglas Gregor      EXPR_BINARY_OPERATOR,
607ad90e96fb7eed26d5217dd06ba50ecbbbebb59e6Douglas Gregor      /// \brief A CompoundAssignOperator record.
608ad90e96fb7eed26d5217dd06ba50ecbbbebb59e6Douglas Gregor      EXPR_COMPOUND_ASSIGN_OPERATOR,
609ad90e96fb7eed26d5217dd06ba50ecbbbebb59e6Douglas Gregor      /// \brief A ConditionOperator record.
610ad90e96fb7eed26d5217dd06ba50ecbbbebb59e6Douglas Gregor      EXPR_CONDITIONAL_OPERATOR,
611087fd536809ebe754d91c641a98917e02dd7452dDouglas Gregor      /// \brief An ImplicitCastExpr record.
612db600c330a37b1c3ab4533310729910ee188f900Douglas Gregor      EXPR_IMPLICIT_CAST,
613db600c330a37b1c3ab4533310729910ee188f900Douglas Gregor      /// \brief A CStyleCastExpr record.
614d3c98a02c73417689deaaa6671ea6df7f2a8a73cDouglas Gregor      EXPR_CSTYLE_CAST,
615ba6d7e7fa5f79959d3eef39adb5620d845ba5198Douglas Gregor      /// \brief A CompoundLiteralExpr record.
616ba6d7e7fa5f79959d3eef39adb5620d845ba5198Douglas Gregor      EXPR_COMPOUND_LITERAL,
617d3c98a02c73417689deaaa6671ea6df7f2a8a73cDouglas Gregor      /// \brief An ExtVectorElementExpr record.
618d3c98a02c73417689deaaa6671ea6df7f2a8a73cDouglas Gregor      EXPR_EXT_VECTOR_ELEMENT,
619d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor      /// \brief An InitListExpr record.
620d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor      EXPR_INIT_LIST,
621d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor      /// \brief A DesignatedInitExpr record.
622d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor      EXPR_DESIGNATED_INIT,
623d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor      /// \brief An ImplicitValueInitExpr record.
624d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor      EXPR_IMPLICIT_VALUE_INIT,
625d3c98a02c73417689deaaa6671ea6df7f2a8a73cDouglas Gregor      /// \brief A VAArgExpr record.
62644cae0c8669cdf83618cbe7fd36ea7a8e51cf97fDouglas Gregor      EXPR_VA_ARG,
6276a2dd55b0b3ae376d449a4b07bbb6b2d30b26330Douglas Gregor      /// \brief An AddrLabelExpr record.
6287d5c2f241c74e5f8d9ec492e8f9f268e5e9ae41fDouglas Gregor      EXPR_ADDR_LABEL,
6296a2dd55b0b3ae376d449a4b07bbb6b2d30b26330Douglas Gregor      /// \brief A StmtExpr record.
6306a2dd55b0b3ae376d449a4b07bbb6b2d30b26330Douglas Gregor      EXPR_STMT,
63144cae0c8669cdf83618cbe7fd36ea7a8e51cf97fDouglas Gregor      /// \brief A TypesCompatibleExpr record.
63244cae0c8669cdf83618cbe7fd36ea7a8e51cf97fDouglas Gregor      EXPR_TYPES_COMPATIBLE,
63344cae0c8669cdf83618cbe7fd36ea7a8e51cf97fDouglas Gregor      /// \brief A ChooseExpr record.
63444cae0c8669cdf83618cbe7fd36ea7a8e51cf97fDouglas Gregor      EXPR_CHOOSE,
63544cae0c8669cdf83618cbe7fd36ea7a8e51cf97fDouglas Gregor      /// \brief A GNUNullExpr record.
63694cd5d1397bb1a8bcd109602aa38dd787b164c22Douglas Gregor      EXPR_GNU_NULL,
63794cd5d1397bb1a8bcd109602aa38dd787b164c22Douglas Gregor      /// \brief A ShuffleVectorExpr record.
63894cd5d1397bb1a8bcd109602aa38dd787b164c22Douglas Gregor      EXPR_SHUFFLE_VECTOR,
63984af7c27cdc615ff917a501d61256b4049383c97Douglas Gregor      /// \brief BlockExpr
64084af7c27cdc615ff917a501d61256b4049383c97Douglas Gregor      EXPR_BLOCK,
64184af7c27cdc615ff917a501d61256b4049383c97Douglas Gregor      /// \brief A BlockDeclRef record.
6424dcf151a555ff51e4d643e8e6eeb80f121d11d1bChris Lattner      EXPR_BLOCK_DECL_REF,
64339da0b8145eaec7da7004f9b3645c5c9f4f63b1dDouglas Gregor
6444dcf151a555ff51e4d643e8e6eeb80f121d11d1bChris Lattner      // Objective-C
6451eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
6460389e6bd0159bfdd08f7c50a37543b6e3adf0c33Chris Lattner      /// \brief An ObjCStringLiteral record.
6473a57a3765b6192a94ff4e5997ae0489a1471b308Chris Lattner      EXPR_OBJC_STRING_LITERAL,
6480389e6bd0159bfdd08f7c50a37543b6e3adf0c33Chris Lattner      /// \brief An ObjCEncodeExpr record.
6493a57a3765b6192a94ff4e5997ae0489a1471b308Chris Lattner      EXPR_OBJC_ENCODE,
6500389e6bd0159bfdd08f7c50a37543b6e3adf0c33Chris Lattner      /// \brief An ObjCSelectorExpr record.
6513a57a3765b6192a94ff4e5997ae0489a1471b308Chris Lattner      EXPR_OBJC_SELECTOR_EXPR,
6520389e6bd0159bfdd08f7c50a37543b6e3adf0c33Chris Lattner      /// \brief An ObjCProtocolExpr record.
653c4f0bbdb166fbc31ab2cf0f6ff573fde9fa307b3Steve Naroff      EXPR_OBJC_PROTOCOL_EXPR,
6540389e6bd0159bfdd08f7c50a37543b6e3adf0c33Chris Lattner      /// \brief An ObjCIvarRefExpr record.
6550389e6bd0159bfdd08f7c50a37543b6e3adf0c33Chris Lattner      EXPR_OBJC_IVAR_REF_EXPR,
6560389e6bd0159bfdd08f7c50a37543b6e3adf0c33Chris Lattner      /// \brief An ObjCPropertyRefExpr record.
6570389e6bd0159bfdd08f7c50a37543b6e3adf0c33Chris Lattner      EXPR_OBJC_PROPERTY_REF_EXPR,
65809105f52b1f28cbb1374c27c3c70f5517e2c465dFariborz Jahanian      /// \brief An ObjCImplicitSetterGetterRefExpr record.
6590389e6bd0159bfdd08f7c50a37543b6e3adf0c33Chris Lattner      EXPR_OBJC_KVC_REF_EXPR,
6600389e6bd0159bfdd08f7c50a37543b6e3adf0c33Chris Lattner      /// \brief An ObjCMessageExpr record.
6610389e6bd0159bfdd08f7c50a37543b6e3adf0c33Chris Lattner      EXPR_OBJC_MESSAGE_EXPR,
6620389e6bd0159bfdd08f7c50a37543b6e3adf0c33Chris Lattner      /// \brief An ObjCSuperExpr record.
6631eb5540760dc79502e32d4fe9c28217476ea14b9Steve Naroff      EXPR_OBJC_SUPER_EXPR,
664f242b1b0c4e998911cb96b2ba7e27ab4a5abaed3Steve Naroff      /// \brief An ObjCIsa Expr record.
665f242b1b0c4e998911cb96b2ba7e27ab4a5abaed3Steve Naroff      EXPR_OBJC_ISA,
6661eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
6671eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump      /// \brief An ObjCForCollectionStmt record.
6681eb5540760dc79502e32d4fe9c28217476ea14b9Steve Naroff      STMT_OBJC_FOR_COLLECTION,
6691eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump      /// \brief An ObjCAtCatchStmt record.
6701eb5540760dc79502e32d4fe9c28217476ea14b9Steve Naroff      STMT_OBJC_CATCH,
6711eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump      /// \brief An ObjCAtFinallyStmt record.
6721eb5540760dc79502e32d4fe9c28217476ea14b9Steve Naroff      STMT_OBJC_FINALLY,
6731eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump      /// \brief An ObjCAtTryStmt record.
6741eb5540760dc79502e32d4fe9c28217476ea14b9Steve Naroff      STMT_OBJC_AT_TRY,
6751eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump      /// \brief An ObjCAtSynchronizedStmt record.
6761eb5540760dc79502e32d4fe9c28217476ea14b9Steve Naroff      STMT_OBJC_AT_SYNCHRONIZED,
6771eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump      /// \brief An ObjCAtThrowStmt record.
678ba0a9006dbc4814e1e35f82812cb5a1dad65e8b8Argyrios Kyrtzidis      STMT_OBJC_AT_THROW,
679ba0a9006dbc4814e1e35f82812cb5a1dad65e8b8Argyrios Kyrtzidis
680ba0a9006dbc4814e1e35f82812cb5a1dad65e8b8Argyrios Kyrtzidis      // C++
681ba0a9006dbc4814e1e35f82812cb5a1dad65e8b8Argyrios Kyrtzidis
68239da0b8145eaec7da7004f9b3645c5c9f4f63b1dDouglas Gregor      /// \brief A CXXOperatorCallExpr record.
68339da0b8145eaec7da7004f9b3645c5c9f4f63b1dDouglas Gregor      EXPR_CXX_OPERATOR_CALL,
68439da0b8145eaec7da7004f9b3645c5c9f4f63b1dDouglas Gregor      /// \brief A CXXConstructExpr record.
685ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig      EXPR_CXX_CONSTRUCT,
686ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig      // \brief A CXXStaticCastExpr record.
687ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig      EXPR_CXX_STATIC_CAST,
688ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig      // \brief A CXXDynamicCastExpr record.
689ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig      EXPR_CXX_DYNAMIC_CAST,
690ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig      // \brief A CXXReinterpretCastExpr record.
691ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig      EXPR_CXX_REINTERPRET_CAST,
692ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig      // \brief A CXXConstCastExpr record.
693ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig      EXPR_CXX_CONST_CAST,
694ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig      // \brief A CXXFunctionalCastExpr record.
695eb7f96141f754150a92433286fa385910a22f494Sam Weinig      EXPR_CXX_FUNCTIONAL_CAST,
696eb7f96141f754150a92433286fa385910a22f494Sam Weinig      // \brief A CXXBoolLiteralExpr record.
697eb7f96141f754150a92433286fa385910a22f494Sam Weinig      EXPR_CXX_BOOL_LITERAL,
698eb7f96141f754150a92433286fa385910a22f494Sam Weinig      // \brief A CXXNullPtrLiteralExpr record.
699eb7f96141f754150a92433286fa385910a22f494Sam Weinig      EXPR_CXX_NULL_PTR_LITERAL
7000b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregor    };
701d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor
702d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor    /// \brief The kinds of designators that can occur in a
703d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor    /// DesignatedInitExpr.
704d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor    enum DesignatorTypes {
705d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor      /// \brief Field designator where only the field name is known.
706d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor      DESIG_FIELD_NAME  = 0,
707d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor      /// \brief Field designator where the field has been resolved to
708d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor      /// a declaration.
709d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor      DESIG_FIELD_DECL  = 1,
710d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor      /// \brief Array designator.
711d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor      DESIG_ARRAY       = 2,
712d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor      /// \brief GNU array range designator.
713d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor      DESIG_ARRAY_RANGE = 3
714d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor    };
715d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor
71614f79002e58556798e86168c63e48d533287eda5Douglas Gregor    /// @}
7172cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor  }
7182cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor} // end namespace clang
7192cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor
7202cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor#endif
721