105a07605322dfef2b017781042043a261c5a89cdSebastian Redl//===- ASTBitCodes.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//
10f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl// This header defines Bitcode enum values for Clang serialized AST 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
20c8e5d51f51e46c6f7717761537c6609ef9daf57cArgyrios Kyrtzidis#include "clang/AST/Type.h"
212cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor#include "llvm/Bitcode/BitCodes.h"
2203013fa9a0bf1ef4b907f5fec006c8f4000fdd21Michael J. Spencer#include "llvm/Support/DataTypes.h"
235d26768e2661faa7ce0b55ffff4be8b3969fbbf5Argyrios Kyrtzidis#include "llvm/ADT/DenseMap.h"
242cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor
252cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregornamespace clang {
268538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl  namespace serialization {
27f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl    /// \brief AST file major version number supported by this version of
28ab41e63821dc60ad144d0684df8d79a9eef86b75Douglas Gregor    /// Clang.
29ab41e63821dc60ad144d0684df8d79a9eef86b75Douglas Gregor    ///
30f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl    /// Whenever the AST file format changes in a way that makes it
31ab41e63821dc60ad144d0684df8d79a9eef86b75Douglas Gregor    /// incompatible with previous versions (such that a reader
32ab41e63821dc60ad144d0684df8d79a9eef86b75Douglas Gregor    /// designed for the previous version could not support reading
33ab41e63821dc60ad144d0684df8d79a9eef86b75Douglas Gregor    /// the new version), this number should be increased.
34445e23e9b909ec8e21303c7dd82c90b72fc09ac4Douglas Gregor    ///
35f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl    /// Version 4 of AST files also requires that the version control branch and
36445e23e9b909ec8e21303c7dd82c90b72fc09ac4Douglas Gregor    /// revision match exactly, since there is no backward compatibility of
37f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl    /// AST files at this time.
38a93e3b5bde9f0a7b59215f19f176f7d69881b81cSebastian Redl    const unsigned VERSION_MAJOR = 4;
39ab41e63821dc60ad144d0684df8d79a9eef86b75Douglas Gregor
40f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl    /// \brief AST file minor version number supported by this version of
41ab41e63821dc60ad144d0684df8d79a9eef86b75Douglas Gregor    /// Clang.
42ab41e63821dc60ad144d0684df8d79a9eef86b75Douglas Gregor    ///
43f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl    /// Whenever the AST format changes in a way that is still
44ab41e63821dc60ad144d0684df8d79a9eef86b75Douglas Gregor    /// compatible with previous versions (such that a reader designed
45ab41e63821dc60ad144d0684df8d79a9eef86b75Douglas Gregor    /// for the previous version could still support reading the new
46ab41e63821dc60ad144d0684df8d79a9eef86b75Douglas Gregor    /// version by ignoring new kinds of subblocks), this number
47ab41e63821dc60ad144d0684df8d79a9eef86b75Douglas Gregor    /// should be increased.
48ab41e63821dc60ad144d0684df8d79a9eef86b75Douglas Gregor    const unsigned VERSION_MINOR = 0;
49ab41e63821dc60ad144d0684df8d79a9eef86b75Douglas Gregor
5095eab176f51beed44a9bc14c0dcdd37844b23740Douglas Gregor    /// \brief An ID number that refers to an identifier in an AST file.
5195eab176f51beed44a9bc14c0dcdd37844b23740Douglas Gregor    ///
5295eab176f51beed44a9bc14c0dcdd37844b23740Douglas Gregor    /// The ID numbers of identifiers are consecutive (in order of discovery)
5395eab176f51beed44a9bc14c0dcdd37844b23740Douglas Gregor    /// and start at 1. 0 is reserved for NULL.
5495eab176f51beed44a9bc14c0dcdd37844b23740Douglas Gregor    typedef uint32_t IdentifierID;
5595eab176f51beed44a9bc14c0dcdd37844b23740Douglas Gregor
56f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl    /// \brief An ID number that refers to a declaration in an AST file.
578038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor    ///
58a93e3b5bde9f0a7b59215f19f176f7d69881b81cSebastian Redl    /// The ID numbers of declarations are consecutive (in order of
590a14e4bf604a91b035a479235adf4c2f6c9128a2Douglas Gregor    /// discovery), with values below NUM_PREDEF_DECL_IDS being reserved.
600a14e4bf604a91b035a479235adf4c2f6c9128a2Douglas Gregor    /// At the start of a chain of precompiled headers, declaration ID 1 is
610a14e4bf604a91b035a479235adf4c2f6c9128a2Douglas Gregor    /// used for the translation unit declaration.
628038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor    typedef uint32_t DeclID;
638038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor
64eb5e9986e577b1e2bff3cca5973a2494fb593fbbArgyrios Kyrtzidis    /// \brief a Decl::Kind/DeclID pair.
65eb5e9986e577b1e2bff3cca5973a2494fb593fbbArgyrios Kyrtzidis    typedef std::pair<uint32_t, DeclID> KindDeclIDPair;
66eb5e9986e577b1e2bff3cca5973a2494fb593fbbArgyrios Kyrtzidis
67e6b8d68a927368b06ac06cc9ac9e7f60aa966d5fArgyrios Kyrtzidis    // FIXME: Turn these into classes so we can have some type safety when
68e6b8d68a927368b06ac06cc9ac9e7f60aa966d5fArgyrios Kyrtzidis    // we go from local ID to global and vice-versa.
69e6b8d68a927368b06ac06cc9ac9e7f60aa966d5fArgyrios Kyrtzidis    typedef DeclID LocalDeclID;
70e6b8d68a927368b06ac06cc9ac9e7f60aa966d5fArgyrios Kyrtzidis    typedef DeclID GlobalDeclID;
71e6b8d68a927368b06ac06cc9ac9e7f60aa966d5fArgyrios Kyrtzidis
72f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl    /// \brief An ID number that refers to a type in an AST file.
738038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor    ///
748038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor    /// The ID of a type is partitioned into two parts: the lower
758038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor    /// three bits are used to store the const/volatile/restrict
768038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor    /// qualifiers (as with QualType) and the upper bits provide a
778038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor    /// type index. The type index values are partitioned into two
788038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor    /// sets. The values below NUM_PREDEF_TYPE_IDs are predefined type
798038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor    /// IDs (based on the PREDEF_TYPE_*_ID constants), with 0 as a
808038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor    /// placeholder for "no type". Values from NUM_PREDEF_TYPE_IDs are
818038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor    /// other types that have serialized representations.
828038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor    typedef uint32_t TypeID;
832cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor
84c8e5d51f51e46c6f7717761537c6609ef9daf57cArgyrios Kyrtzidis    /// \brief A type index; the type ID with the qualifier bits removed.
85c8e5d51f51e46c6f7717761537c6609ef9daf57cArgyrios Kyrtzidis    class TypeIdx {
86c8e5d51f51e46c6f7717761537c6609ef9daf57cArgyrios Kyrtzidis      uint32_t Idx;
87c8e5d51f51e46c6f7717761537c6609ef9daf57cArgyrios Kyrtzidis    public:
88c8e5d51f51e46c6f7717761537c6609ef9daf57cArgyrios Kyrtzidis      TypeIdx() : Idx(0) { }
89c8e5d51f51e46c6f7717761537c6609ef9daf57cArgyrios Kyrtzidis      explicit TypeIdx(uint32_t index) : Idx(index) { }
90c8e5d51f51e46c6f7717761537c6609ef9daf57cArgyrios Kyrtzidis
91c8e5d51f51e46c6f7717761537c6609ef9daf57cArgyrios Kyrtzidis      uint32_t getIndex() const { return Idx; }
92c8e5d51f51e46c6f7717761537c6609ef9daf57cArgyrios Kyrtzidis      TypeID asTypeID(unsigned FastQuals) const {
93a119da0761cb6b85f53857eaee50f6ad8c5ea0a0Douglas Gregor        if (Idx == uint32_t(-1))
94a119da0761cb6b85f53857eaee50f6ad8c5ea0a0Douglas Gregor          return TypeID(-1);
95a119da0761cb6b85f53857eaee50f6ad8c5ea0a0Douglas Gregor
96c8e5d51f51e46c6f7717761537c6609ef9daf57cArgyrios Kyrtzidis        return (Idx << Qualifiers::FastWidth) | FastQuals;
97c8e5d51f51e46c6f7717761537c6609ef9daf57cArgyrios Kyrtzidis      }
98c8e5d51f51e46c6f7717761537c6609ef9daf57cArgyrios Kyrtzidis      static TypeIdx fromTypeID(TypeID ID) {
99a119da0761cb6b85f53857eaee50f6ad8c5ea0a0Douglas Gregor        if (ID == TypeID(-1))
100a119da0761cb6b85f53857eaee50f6ad8c5ea0a0Douglas Gregor          return TypeIdx(-1);
101a119da0761cb6b85f53857eaee50f6ad8c5ea0a0Douglas Gregor
102c8e5d51f51e46c6f7717761537c6609ef9daf57cArgyrios Kyrtzidis        return TypeIdx(ID >> Qualifiers::FastWidth);
103c8e5d51f51e46c6f7717761537c6609ef9daf57cArgyrios Kyrtzidis      }
104c8e5d51f51e46c6f7717761537c6609ef9daf57cArgyrios Kyrtzidis    };
105c8e5d51f51e46c6f7717761537c6609ef9daf57cArgyrios Kyrtzidis
1065d26768e2661faa7ce0b55ffff4be8b3969fbbf5Argyrios Kyrtzidis    /// A structure for putting "fast"-unqualified QualTypes into a
1075d26768e2661faa7ce0b55ffff4be8b3969fbbf5Argyrios Kyrtzidis    /// DenseMap.  This uses the standard pointer hash function.
1085d26768e2661faa7ce0b55ffff4be8b3969fbbf5Argyrios Kyrtzidis    struct UnsafeQualTypeDenseMapInfo {
1095d26768e2661faa7ce0b55ffff4be8b3969fbbf5Argyrios Kyrtzidis      static inline bool isEqual(QualType A, QualType B) { return A == B; }
1105d26768e2661faa7ce0b55ffff4be8b3969fbbf5Argyrios Kyrtzidis      static inline QualType getEmptyKey() {
1115d26768e2661faa7ce0b55ffff4be8b3969fbbf5Argyrios Kyrtzidis        return QualType::getFromOpaquePtr((void*) 1);
1125d26768e2661faa7ce0b55ffff4be8b3969fbbf5Argyrios Kyrtzidis      }
1135d26768e2661faa7ce0b55ffff4be8b3969fbbf5Argyrios Kyrtzidis      static inline QualType getTombstoneKey() {
1145d26768e2661faa7ce0b55ffff4be8b3969fbbf5Argyrios Kyrtzidis        return QualType::getFromOpaquePtr((void*) 2);
1155d26768e2661faa7ce0b55ffff4be8b3969fbbf5Argyrios Kyrtzidis      }
1165d26768e2661faa7ce0b55ffff4be8b3969fbbf5Argyrios Kyrtzidis      static inline unsigned getHashValue(QualType T) {
1175d26768e2661faa7ce0b55ffff4be8b3969fbbf5Argyrios Kyrtzidis        assert(!T.getLocalFastQualifiers() &&
1185d26768e2661faa7ce0b55ffff4be8b3969fbbf5Argyrios Kyrtzidis               "hash invalid for types with fast quals");
1195d26768e2661faa7ce0b55ffff4be8b3969fbbf5Argyrios Kyrtzidis        uintptr_t v = reinterpret_cast<uintptr_t>(T.getAsOpaquePtr());
1205d26768e2661faa7ce0b55ffff4be8b3969fbbf5Argyrios Kyrtzidis        return (unsigned(v) >> 4) ^ (unsigned(v) >> 9);
1215d26768e2661faa7ce0b55ffff4be8b3969fbbf5Argyrios Kyrtzidis      }
1225d26768e2661faa7ce0b55ffff4be8b3969fbbf5Argyrios Kyrtzidis    };
1235d26768e2661faa7ce0b55ffff4be8b3969fbbf5Argyrios Kyrtzidis
124f73c93fea0d4b447585bc7459499ba6b822e045cSebastian Redl    /// \brief An ID number that refers to an identifier in an AST file.
125afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor    typedef uint32_t IdentID;
126afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor
1276ec60e00eeaaed78d98c85ce962d6f328094ca14Douglas Gregor    /// \brief The number of predefined identifier IDs.
1286ec60e00eeaaed78d98c85ce962d6f328094ca14Douglas Gregor    const unsigned int NUM_PREDEF_IDENT_IDS = 1;
1296ec60e00eeaaed78d98c85ce962d6f328094ca14Douglas Gregor
13026ced127b7d443fcf3472463c9f39c2376bd9d70Douglas Gregor    /// \brief An ID number that refers to an ObjC selector in an AST file.
13190cd1bb1baac2a0221f3642de0cbea3244b116e5Steve Naroff    typedef uint32_t SelectorID;
1321eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
133b18b1fd33f958264630fbae2602c81275bae8c9aDouglas Gregor    /// \brief The number of predefined selector IDs.
134b18b1fd33f958264630fbae2602c81275bae8c9aDouglas Gregor    const unsigned int NUM_PREDEF_SELECTOR_IDS = 1;
135b18b1fd33f958264630fbae2602c81275bae8c9aDouglas Gregor
1367c789c1a3f77f24032aa0bed2afacdb9e094e952Douglas Gregor    /// \brief An ID number that refers to a set of CXXBaseSpecifiers in an
1377c789c1a3f77f24032aa0bed2afacdb9e094e952Douglas Gregor    /// AST file.
1387c789c1a3f77f24032aa0bed2afacdb9e094e952Douglas Gregor    typedef uint32_t CXXBaseSpecifiersID;
1397c789c1a3f77f24032aa0bed2afacdb9e094e952Douglas Gregor
14086c67d8802a9e0887c31c850188991465ac3c1bdDouglas Gregor    /// \brief An ID number that refers to an entity in the detailed
14186c67d8802a9e0887c31c850188991465ac3c1bdDouglas Gregor    /// preprocessing record.
14286c67d8802a9e0887c31c850188991465ac3c1bdDouglas Gregor    typedef uint32_t PreprocessedEntityID;
143272b6bc6a6c8fc04f951ad850df68c44d137f513Douglas Gregor
14426ced127b7d443fcf3472463c9f39c2376bd9d70Douglas Gregor    /// \brief An ID number that refers to a submodule in a module file.
14526ced127b7d443fcf3472463c9f39c2376bd9d70Douglas Gregor    typedef uint32_t SubmoduleID;
14626ced127b7d443fcf3472463c9f39c2376bd9d70Douglas Gregor
14726ced127b7d443fcf3472463c9f39c2376bd9d70Douglas Gregor    /// \brief The number of predefined submodule IDs.
14826ced127b7d443fcf3472463c9f39c2376bd9d70Douglas Gregor    const unsigned int NUM_PREDEF_SUBMODULE_IDS = 1;
14926ced127b7d443fcf3472463c9f39c2376bd9d70Douglas Gregor
1502dbaca748bc3eb6539f417bd8354c930bdf88fa4Argyrios Kyrtzidis    /// \brief Source range/offset of a preprocessed entity.
1512dbaca748bc3eb6539f417bd8354c930bdf88fa4Argyrios Kyrtzidis    struct PPEntityOffset {
1522dbaca748bc3eb6539f417bd8354c930bdf88fa4Argyrios Kyrtzidis      /// \brief Raw source location of beginning of range.
1532dbaca748bc3eb6539f417bd8354c930bdf88fa4Argyrios Kyrtzidis      unsigned Begin;
1542dbaca748bc3eb6539f417bd8354c930bdf88fa4Argyrios Kyrtzidis      /// \brief Raw source location of end of range.
1552dbaca748bc3eb6539f417bd8354c930bdf88fa4Argyrios Kyrtzidis      unsigned End;
1562dbaca748bc3eb6539f417bd8354c930bdf88fa4Argyrios Kyrtzidis      /// \brief Offset in the AST file.
1572dbaca748bc3eb6539f417bd8354c930bdf88fa4Argyrios Kyrtzidis      uint32_t BitOffset;
1582dbaca748bc3eb6539f417bd8354c930bdf88fa4Argyrios Kyrtzidis
1592dbaca748bc3eb6539f417bd8354c930bdf88fa4Argyrios Kyrtzidis      PPEntityOffset(SourceRange R, uint32_t BitOffset)
1602dbaca748bc3eb6539f417bd8354c930bdf88fa4Argyrios Kyrtzidis        : Begin(R.getBegin().getRawEncoding()),
1612dbaca748bc3eb6539f417bd8354c930bdf88fa4Argyrios Kyrtzidis          End(R.getEnd().getRawEncoding()),
1622dbaca748bc3eb6539f417bd8354c930bdf88fa4Argyrios Kyrtzidis          BitOffset(BitOffset) { }
1632dbaca748bc3eb6539f417bd8354c930bdf88fa4Argyrios Kyrtzidis    };
1642dbaca748bc3eb6539f417bd8354c930bdf88fa4Argyrios Kyrtzidis
1659d31fa75bc05fe4cb903a7701550f22cfb73ea8bArgyrios Kyrtzidis    /// \brief Source range/offset of a preprocessed entity.
1669d31fa75bc05fe4cb903a7701550f22cfb73ea8bArgyrios Kyrtzidis    struct DeclOffset {
1679d31fa75bc05fe4cb903a7701550f22cfb73ea8bArgyrios Kyrtzidis      /// \brief Raw source location.
1689d31fa75bc05fe4cb903a7701550f22cfb73ea8bArgyrios Kyrtzidis      unsigned Loc;
1699d31fa75bc05fe4cb903a7701550f22cfb73ea8bArgyrios Kyrtzidis      /// \brief Offset in the AST file.
1709d31fa75bc05fe4cb903a7701550f22cfb73ea8bArgyrios Kyrtzidis      uint32_t BitOffset;
1719d31fa75bc05fe4cb903a7701550f22cfb73ea8bArgyrios Kyrtzidis
1729d31fa75bc05fe4cb903a7701550f22cfb73ea8bArgyrios Kyrtzidis      DeclOffset() : Loc(0), BitOffset(0) { }
1739d31fa75bc05fe4cb903a7701550f22cfb73ea8bArgyrios Kyrtzidis      DeclOffset(SourceLocation Loc, uint32_t BitOffset)
1749d31fa75bc05fe4cb903a7701550f22cfb73ea8bArgyrios Kyrtzidis        : Loc(Loc.getRawEncoding()),
1759d31fa75bc05fe4cb903a7701550f22cfb73ea8bArgyrios Kyrtzidis          BitOffset(BitOffset) { }
1769d31fa75bc05fe4cb903a7701550f22cfb73ea8bArgyrios Kyrtzidis      void setLocation(SourceLocation L) {
1779d31fa75bc05fe4cb903a7701550f22cfb73ea8bArgyrios Kyrtzidis        Loc = L.getRawEncoding();
1789d31fa75bc05fe4cb903a7701550f22cfb73ea8bArgyrios Kyrtzidis      }
1799d31fa75bc05fe4cb903a7701550f22cfb73ea8bArgyrios Kyrtzidis    };
1809d31fa75bc05fe4cb903a7701550f22cfb73ea8bArgyrios Kyrtzidis
181272b6bc6a6c8fc04f951ad850df68c44d137f513Douglas Gregor    /// \brief The number of predefined preprocessed entity IDs.
182272b6bc6a6c8fc04f951ad850df68c44d137f513Douglas Gregor    const unsigned int NUM_PREDEF_PP_ENTITY_IDS = 1;
183272b6bc6a6c8fc04f951ad850df68c44d137f513Douglas Gregor
1842cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    /// \brief Describes the various kinds of blocks that occur within
185f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl    /// an AST file.
1862cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    enum BlockIDs {
187f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl      /// \brief The AST block, which acts as a container around the
188f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl      /// full AST block.
189f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl      AST_BLOCK_ID = llvm::bitc::FIRST_APPLICATION_BLOCKID,
19014f79002e58556798e86168c63e48d533287eda5Douglas Gregor
19114f79002e58556798e86168c63e48d533287eda5Douglas Gregor      /// \brief The block containing information about the source
19214f79002e58556798e86168c63e48d533287eda5Douglas Gregor      /// manager.
19314f79002e58556798e86168c63e48d533287eda5Douglas Gregor      SOURCE_MANAGER_BLOCK_ID,
19414f79002e58556798e86168c63e48d533287eda5Douglas Gregor
19514f79002e58556798e86168c63e48d533287eda5Douglas Gregor      /// \brief The block containing information about the
19614f79002e58556798e86168c63e48d533287eda5Douglas Gregor      /// preprocessor.
19714f79002e58556798e86168c63e48d533287eda5Douglas Gregor      PREPROCESSOR_BLOCK_ID,
19814f79002e58556798e86168c63e48d533287eda5Douglas Gregor
1992cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The block containing the definitions of all of the
200f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl      /// types and decls used within the AST file.
2017b90340c9c7d07aef4e301e72b5e8a30d5f4f0c8Argyrios Kyrtzidis      DECLTYPES_BLOCK_ID,
2027b90340c9c7d07aef4e301e72b5e8a30d5f4f0c8Argyrios Kyrtzidis
2037b90340c9c7d07aef4e301e72b5e8a30d5f4f0c8Argyrios Kyrtzidis      /// \brief The block containing DECL_UPDATES records.
2044800a5c79023271408af49797e09be32aca93232Douglas Gregor      DECL_UPDATES_BLOCK_ID,
2054800a5c79023271408af49797e09be32aca93232Douglas Gregor
2064800a5c79023271408af49797e09be32aca93232Douglas Gregor      /// \brief The block containing the detailed preprocessing record.
207392ed2b717d86ebdd202cb9bb58d18d8b3b4cd87Douglas Gregor      PREPROCESSOR_DETAIL_BLOCK_ID,
208392ed2b717d86ebdd202cb9bb58d18d8b3b4cd87Douglas Gregor
209392ed2b717d86ebdd202cb9bb58d18d8b3b4cd87Douglas Gregor      /// \brief The block containing the submodule structure.
210392ed2b717d86ebdd202cb9bb58d18d8b3b4cd87Douglas Gregor      SUBMODULE_BLOCK_ID
2118038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor    };
2122cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor
213f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl    /// \brief Record types that occur within the AST block itself.
214f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl    enum ASTRecordTypes {
21561d60ee6aa0a5ded0ddcf48679673b37506a1895Douglas Gregor      /// \brief Record code for the offsets of each type.
2162cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      ///
2178038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor      /// The TYPE_OFFSET constant describes the record that occurs
218f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl      /// within the AST block. The record itself is an array of offsets that
21961d60ee6aa0a5ded0ddcf48679673b37506a1895Douglas Gregor      /// point into the declarations and types block (identified by
22061d60ee6aa0a5ded0ddcf48679673b37506a1895Douglas Gregor      /// DECLTYPES_BLOCK_ID). The index into the array is based on the ID
2218038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor      /// of a type. For a given type ID @c T, the lower three bits of
2228038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor      /// @c T are its qualifiers (const, volatile, restrict), as in
2238038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor      /// the QualType class. The upper bits, after being shifted and
2248038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor      /// subtracting NUM_PREDEF_TYPE_IDS, are used to index into the
2258038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor      /// TYPE_OFFSET block to determine the offset of that type's
22661d60ee6aa0a5ded0ddcf48679673b37506a1895Douglas Gregor      /// corresponding record within the DECLTYPES_BLOCK_ID block.
2278038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor      TYPE_OFFSET = 1,
2281eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
2298038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor      /// \brief Record code for the offsets of each decl.
2308038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor      ///
2318038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor      /// The DECL_OFFSET constant describes the record that occurs
23261d60ee6aa0a5ded0ddcf48679673b37506a1895Douglas Gregor      /// within the block identified by DECL_OFFSETS_BLOCK_ID within
233f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl      /// the AST block. The record itself is an array of offsets that
23461d60ee6aa0a5ded0ddcf48679673b37506a1895Douglas Gregor      /// point into the declarations and types block (identified by
23561d60ee6aa0a5ded0ddcf48679673b37506a1895Douglas Gregor      /// DECLTYPES_BLOCK_ID). The declaration ID is an index into this
2368038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor      /// record, after subtracting one to account for the use of
2378038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor      /// declaration ID 0 for a NULL declaration pointer. Index 0 is
2388038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor      /// reserved for the translation unit declaration.
2390a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor      DECL_OFFSET = 2,
2400a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor
2410a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor      /// \brief Record code for the language options table.
2420a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor      ///
2430a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor      /// The record with this code contains the contents of the
2440a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor      /// LangOptions structure. We serialize the entire contents of
2450a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor      /// the structure, and let the reader decide which options are
2460a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor      /// actually important to check.
2472bec0410d268779f601bd509e0302a500af7ac6aDouglas Gregor      LANGUAGE_OPTIONS = 3,
2482bec0410d268779f601bd509e0302a500af7ac6aDouglas Gregor
249f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl      /// \brief AST file metadata, including the AST file version number
250f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl      /// and the target triple used to build the AST file.
251ab41e63821dc60ad144d0684df8d79a9eef86b75Douglas Gregor      METADATA = 4,
252afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor
253afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor      /// \brief Record code for the table of offsets of each
254afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor      /// identifier ID.
255afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor      ///
256afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor      /// The offset table contains offsets into the blob stored in
257afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor      /// the IDENTIFIER_TABLE record. Each offset points to the
258afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor      /// NULL-terminated string that corresponds to that identifier.
259afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor      IDENTIFIER_OFFSET = 5,
260afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor
261afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor      /// \brief Record code for the identifier table.
262afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor      ///
263afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor      /// The identifier table is a simple blob that contains
264afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor      /// NULL-terminated strings for all of the identifiers
265f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl      /// referenced by the AST file. The IDENTIFIER_OFFSET table
266afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor      /// contains the mapping from identifier IDs to the characters
267afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor      /// in this blob. Note that the starting offsets of all of the
268afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor      /// identifiers are odd, so that, when the identifier offset
269afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor      /// table is loaded in, we can use the low bit to distinguish
270afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor      /// between offsets (for unresolved identifier IDs) and
271afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor      /// IdentifierInfo pointers (for already-resolved identifier
272afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor      /// IDs).
273fdd0172ca1b3c837f8c2b37d69cc2085234e09faDouglas Gregor      IDENTIFIER_TABLE = 6,
274fdd0172ca1b3c837f8c2b37d69cc2085234e09faDouglas Gregor
275fdd0172ca1b3c837f8c2b37d69cc2085234e09faDouglas Gregor      /// \brief Record code for the array of external definitions.
276fdd0172ca1b3c837f8c2b37d69cc2085234e09faDouglas Gregor      ///
277f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl      /// The AST file contains a list of all of the unnamed external
278fdd0172ca1b3c837f8c2b37d69cc2085234e09faDouglas Gregor      /// definitions present within the parsed headers, stored as an
279fdd0172ca1b3c837f8c2b37d69cc2085234e09faDouglas Gregor      /// array of declaration IDs. These external definitions will be
280f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl      /// reported to the AST consumer after the AST file has been
281fdd0172ca1b3c837f8c2b37d69cc2085234e09faDouglas Gregor      /// read, since their presence can affect the semantics of the
282fdd0172ca1b3c837f8c2b37d69cc2085234e09faDouglas Gregor      /// program (e.g., for code generation).
2833e1af84bb0092a1aafb49deaa4ab6664c9a9071bDouglas Gregor      EXTERNAL_DEFINITIONS = 7,
2843e1af84bb0092a1aafb49deaa4ab6664c9a9071bDouglas Gregor
285ad1de006ea080b540e480efc6b86c2e201dbf1ecDouglas Gregor      /// \brief Record code for the set of non-builtin, special
286ad1de006ea080b540e480efc6b86c2e201dbf1ecDouglas Gregor      /// types.
287ad1de006ea080b540e480efc6b86c2e201dbf1ecDouglas Gregor      ///
288ad1de006ea080b540e480efc6b86c2e201dbf1ecDouglas Gregor      /// This record contains the type IDs for the various type nodes
289ad1de006ea080b540e480efc6b86c2e201dbf1ecDouglas Gregor      /// that are constructed during semantic analysis (e.g.,
290ad1de006ea080b540e480efc6b86c2e201dbf1ecDouglas Gregor      /// __builtin_va_list). The SPECIAL_TYPE_* constants provide
291ad1de006ea080b540e480efc6b86c2e201dbf1ecDouglas Gregor      /// offsets into this record.
292ad1de006ea080b540e480efc6b86c2e201dbf1ecDouglas Gregor      SPECIAL_TYPES = 8,
293ad1de006ea080b540e480efc6b86c2e201dbf1ecDouglas Gregor
2944c0e86b392c5fb0cb771551fc877edb6979be69cDouglas Gregor      /// \brief Record code for the extra statistics we gather while
295f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl      /// generating an AST file.
2964c0e86b392c5fb0cb771551fc877edb6979be69cDouglas Gregor      STATISTICS = 9,
2974c0e86b392c5fb0cb771551fc877edb6979be69cDouglas Gregor
2984c0e86b392c5fb0cb771551fc877edb6979be69cDouglas Gregor      /// \brief Record code for the array of tentative definitions.
29914c22f20c077cecd68581952a0c227f8c180be03Douglas Gregor      TENTATIVE_DEFINITIONS = 10,
30014c22f20c077cecd68581952a0c227f8c180be03Douglas Gregor
30114c22f20c077cecd68581952a0c227f8c180be03Douglas Gregor      /// \brief Record code for the array of locally-scoped external
30214c22f20c077cecd68581952a0c227f8c180be03Douglas Gregor      /// declarations.
30390cd1bb1baac2a0221f3642de0cbea3244b116e5Steve Naroff      LOCALLY_SCOPED_EXTERNAL_DECLS = 11,
3041eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
30583941df2745d69c05acee3174c7a265c206f70d9Douglas Gregor      /// \brief Record code for the table of offsets into the
30683941df2745d69c05acee3174c7a265c206f70d9Douglas Gregor      /// Objective-C method pool.
30783941df2745d69c05acee3174c7a265c206f70d9Douglas Gregor      SELECTOR_OFFSETS = 12,
308f0aaf7a59729a4ae0146e3464ee987745be95829Douglas Gregor
309f0aaf7a59729a4ae0146e3464ee987745be95829Douglas Gregor      /// \brief Record code for the Objective-C method pool,
3102eafc1b56347f772729e082e6bac824b0ef1b585Douglas Gregor      METHOD_POOL = 13,
3112eafc1b56347f772729e082e6bac824b0ef1b585Douglas Gregor
3122eafc1b56347f772729e082e6bac824b0ef1b585Douglas Gregor      /// \brief The value of the next __COUNTER__ to dispense.
3132eafc1b56347f772729e082e6bac824b0ef1b585Douglas Gregor      /// [PP_COUNTER_VALUE, Val]
3147f94b0b0c6791013d2f72ced9b4bedd3b23673a6Douglas Gregor      PP_COUNTER_VALUE = 14,
3157f94b0b0c6791013d2f72ced9b4bedd3b23673a6Douglas Gregor
3167f94b0b0c6791013d2f72ced9b4bedd3b23673a6Douglas Gregor      /// \brief Record code for the table of offsets into the block
3177f94b0b0c6791013d2f72ced9b4bedd3b23673a6Douglas Gregor      /// of source-location information.
3187f94b0b0c6791013d2f72ced9b4bedd3b23673a6Douglas Gregor      SOURCE_LOCATION_OFFSETS = 15,
3197f94b0b0c6791013d2f72ced9b4bedd3b23673a6Douglas Gregor
3207f94b0b0c6791013d2f72ced9b4bedd3b23673a6Douglas Gregor      /// \brief Record code for the set of source location entries
321f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl      /// that need to be preloaded by the AST reader.
3227f94b0b0c6791013d2f72ced9b4bedd3b23673a6Douglas Gregor      ///
3237f94b0b0c6791013d2f72ced9b4bedd3b23673a6Douglas Gregor      /// This set contains the source location entry for the
3247f94b0b0c6791013d2f72ced9b4bedd3b23673a6Douglas Gregor      /// predefines buffer and for any file entries that need to be
3257f94b0b0c6791013d2f72ced9b4bedd3b23673a6Douglas Gregor      /// preloaded.
3264fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor      SOURCE_LOCATION_PRELOADS = 16,
3274fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor
3284fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor      /// \brief Record code for the stat() cache.
329b81c17092039f39be60e9656a37cffbdf2e2c783Douglas Gregor      STAT_CACHE = 17,
330b81c17092039f39be60e9656a37cffbdf2e2c783Douglas Gregor
331b81c17092039f39be60e9656a37cffbdf2e2c783Douglas Gregor      /// \brief Record code for the set of ext_vector type names.
332b81c17092039f39be60e9656a37cffbdf2e2c783Douglas Gregor      EXT_VECTOR_DECLS = 18,
333b81c17092039f39be60e9656a37cffbdf2e2c783Douglas Gregor
334b64c19365deab788753d29c9bc881253c3f16f37Douglas Gregor      /// \brief Record code for the original file that was used to
335f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl      /// generate the AST file.
3361cb35dd4840d21cec58648361180d5688446a9caArgyrios Kyrtzidis      ORIGINAL_FILE_NAME = 19,
3371eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
33831d375f056447d4e2418275d4913661d3bfedb3eDouglas Gregor      /// \brief Record code for the file ID of the original file used to
33931d375f056447d4e2418275d4913661d3bfedb3eDouglas Gregor      /// generate the AST file.
34031d375f056447d4e2418275d4913661d3bfedb3eDouglas Gregor      ORIGINAL_FILE_ID = 20,
341445e23e9b909ec8e21303c7dd82c90b72fc09ac4Douglas Gregor
3425b4ec636637c9d876102240127cc0dca9280e83aTed Kremenek      /// \brief Record code for the version control branch and revision
343f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl      /// information of the compiler used to build this AST file.
344e6bbc01d1c4ec5241df36042e0a4a12a6711934bTanya Lattner      VERSION_CONTROL_BRANCH_REVISION = 21,
345e6bbc01d1c4ec5241df36042e0a4a12a6711934bTanya Lattner
34649b96d1a382ae9f31456166f1a734d3f7f30b992Argyrios Kyrtzidis      /// \brief Record code for the array of unused file scoped decls.
34749b96d1a382ae9f31456166f1a734d3f7f30b992Argyrios Kyrtzidis      UNUSED_FILESCOPED_DECLS = 22,
348e6bbc01d1c4ec5241df36042e0a4a12a6711934bTanya Lattner
349e24692b30adbe8144597678a0e3354912e99c747Argyrios Kyrtzidis      /// \brief Record code for the table of offsets to entries in the
350e24692b30adbe8144597678a0e3354912e99c747Argyrios Kyrtzidis      /// preprocessing record.
351e24692b30adbe8144597678a0e3354912e99c747Argyrios Kyrtzidis      PPD_ENTITIES_OFFSETS = 23,
352d455add086f1dfa16ae87dc310e49493bbc2b0a6Argyrios Kyrtzidis
353d455add086f1dfa16ae87dc310e49493bbc2b0a6Argyrios Kyrtzidis      /// \brief Record code for the array of VTable uses.
354d455add086f1dfa16ae87dc310e49493bbc2b0a6Argyrios Kyrtzidis      VTABLE_USES = 24,
355d455add086f1dfa16ae87dc310e49493bbc2b0a6Argyrios Kyrtzidis
356d455add086f1dfa16ae87dc310e49493bbc2b0a6Argyrios Kyrtzidis      /// \brief Record code for the array of dynamic classes.
357a93e3b5bde9f0a7b59215f19f176f7d69881b81cSebastian Redl      DYNAMIC_CLASSES = 25,
358a93e3b5bde9f0a7b59215f19f176f7d69881b81cSebastian Redl
359e95b9198b8b70ce0219cfb89483b41102e02dbf5Douglas Gregor      /// \brief Record code for the list of other AST files imported by
360e95b9198b8b70ce0219cfb89483b41102e02dbf5Douglas Gregor      /// this AST file.
361e95b9198b8b70ce0219cfb89483b41102e02dbf5Douglas Gregor      IMPORTS = 26,
362d692af71226d2fb537d86c670af96114ddd485c3Sebastian Redl
363681d7237e1014bf64dd5ead6bf74ae55cdd19e61Sebastian Redl      /// \brief Record code for referenced selector pool.
364d692af71226d2fb537d86c670af96114ddd485c3Sebastian Redl      REFERENCED_SELECTOR_POOL = 27,
365d692af71226d2fb537d86c670af96114ddd485c3Sebastian Redl
366d692af71226d2fb537d86c670af96114ddd485c3Sebastian Redl      /// \brief Record code for an update to the TU's lexically contained
367d692af71226d2fb537d86c670af96114ddd485c3Sebastian Redl      /// declarations.
36876c38d385447b7acdff2d7e6b13fa8580e7174a7Argyrios Kyrtzidis      TU_UPDATE_LEXICAL = 28,
369a126651270acf17c434f60f86a3ab3687f87813aDouglas Gregor
3702171bf1caba4d4b9eeb6a91efac4300b41f38b07Douglas Gregor      /// \brief Record code for the array describing the locations (in the
3712171bf1caba4d4b9eeb6a91efac4300b41f38b07Douglas Gregor      /// LOCAL_REDECLARATIONS record) of the redeclaration chains, indexed by
3722171bf1caba4d4b9eeb6a91efac4300b41f38b07Douglas Gregor      /// the first known ID.
3732171bf1caba4d4b9eeb6a91efac4300b41f38b07Douglas Gregor      LOCAL_REDECLARATIONS_MAP = 29,
374a865005c74019184e04f7fcdd4d61c31c095a4ffArgyrios Kyrtzidis
37576c38d385447b7acdff2d7e6b13fa8580e7174a7Argyrios Kyrtzidis      /// \brief Record code for declarations that Sema keeps references of.
37672b90571b1783b17c3f2204cec5ca440edc38beeArgyrios Kyrtzidis      SEMA_DECL_REFS = 30,
37772b90571b1783b17c3f2204cec5ca440edc38beeArgyrios Kyrtzidis
37872b90571b1783b17c3f2204cec5ca440edc38beeArgyrios Kyrtzidis      /// \brief Record code for weak undeclared identifiers.
3790e0363866792b309d70e9c8e92b4c239773af89cArgyrios Kyrtzidis      WEAK_UNDECLARED_IDENTIFIERS = 31,
3800e0363866792b309d70e9c8e92b4c239773af89cArgyrios Kyrtzidis
3810e0363866792b309d70e9c8e92b4c239773af89cArgyrios Kyrtzidis      /// \brief Record code for pending implicit instantiations.
3820b17c61e8f143901ce11b4a6e5129ac63aaeee04Sebastian Redl      PENDING_IMPLICIT_INSTANTIATIONS = 32,
3830b17c61e8f143901ce11b4a6e5129ac63aaeee04Sebastian Redl
3840b17c61e8f143901ce11b4a6e5129ac63aaeee04Sebastian Redl      /// \brief Record code for a decl replacement block.
3850b17c61e8f143901ce11b4a6e5129ac63aaeee04Sebastian Redl      ///
3860b17c61e8f143901ce11b4a6e5129ac63aaeee04Sebastian Redl      /// If a declaration is modified after having been deserialized, and then
387f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl      /// written to a dependent AST file, its ID and offset must be added to
3880b17c61e8f143901ce11b4a6e5129ac63aaeee04Sebastian Redl      /// the replacement block.
3898b12273c86ede439edf52d35b170fd32b2ed49d4Sebastian Redl      DECL_REPLACEMENTS = 33,
3908b12273c86ede439edf52d35b170fd32b2ed49d4Sebastian Redl
3918b12273c86ede439edf52d35b170fd32b2ed49d4Sebastian Redl      /// \brief Record code for an update to a decl context's lookup table.
3928b12273c86ede439edf52d35b170fd32b2ed49d4Sebastian Redl      ///
3938b12273c86ede439edf52d35b170fd32b2ed49d4Sebastian Redl      /// In practice, this should only be used for the TU and namespaces.
3946e50e00c2fe6a04b2c35592588a4b10a2c269416Sebastian Redl      UPDATE_VISIBLE = 34,
3956e50e00c2fe6a04b2c35592588a4b10a2c269416Sebastian Redl
3967b90340c9c7d07aef4e301e72b5e8a30d5f4f0c8Argyrios Kyrtzidis      /// \brief Record for offsets of DECL_UPDATES records for declarations
3977b90340c9c7d07aef4e301e72b5e8a30d5f4f0c8Argyrios Kyrtzidis      /// that were modified after being deserialized and need updates.
398bef1a7b9c175d37e4a727e6ce68bd05232fa6970Argyrios Kyrtzidis      DECL_UPDATE_OFFSETS = 35,
3997b90340c9c7d07aef4e301e72b5e8a30d5f4f0c8Argyrios Kyrtzidis
4007b90340c9c7d07aef4e301e72b5e8a30d5f4f0c8Argyrios Kyrtzidis      /// \brief Record of updates for a declaration that was modified after
4017b90340c9c7d07aef4e301e72b5e8a30d5f4f0c8Argyrios Kyrtzidis      /// being deserialized.
4027c789c1a3f77f24032aa0bed2afacdb9e094e952Douglas Gregor      DECL_UPDATES = 36,
4037c789c1a3f77f24032aa0bed2afacdb9e094e952Douglas Gregor
4047c789c1a3f77f24032aa0bed2afacdb9e094e952Douglas Gregor      /// \brief Record code for the table of offsets to CXXBaseSpecifier
4057c789c1a3f77f24032aa0bed2afacdb9e094e952Douglas Gregor      /// sets.
406f41d3be39980d40849850d3fb90403623cc8459eArgyrios Kyrtzidis      CXX_BASE_SPECIFIER_OFFSETS = 37,
407f41d3be39980d40849850d3fb90403623cc8459eArgyrios Kyrtzidis
4083efd52cf8f4e57c5571bd8cc3168264c3bc46a1eArgyrios Kyrtzidis      /// \brief Record code for #pragma diagnostic mappings.
40914b6ba77710d6431794d65c7d58c6f29c3dc956ePeter Collingbourne      DIAG_PRAGMA_MAPPINGS = 38,
41014b6ba77710d6431794d65c7d58c6f29c3dc956ePeter Collingbourne
41114b6ba77710d6431794d65c7d58c6f29c3dc956ePeter Collingbourne      /// \brief Record code for special CUDA declarations.
412cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor      CUDA_SPECIAL_DECL_REFS = 39,
413cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor
414cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor      /// \brief Record code for header search information.
4158e3df4d0864f0a966c20088ca1a29c3398b7639dArgyrios Kyrtzidis      HEADER_SEARCH_TABLE = 40,
4168e3df4d0864f0a966c20088ca1a29c3398b7639dArgyrios Kyrtzidis
4178e3df4d0864f0a966c20088ca1a29c3398b7639dArgyrios Kyrtzidis      /// \brief The directory that the PCH was originally created in.
41884bccea1ad9fd8bc1f4ec3d1fc5dd8d15dabffbcPeter Collingbourne      ORIGINAL_PCH_DIR = 41,
41984bccea1ad9fd8bc1f4ec3d1fc5dd8d15dabffbcPeter Collingbourne
42084bccea1ad9fd8bc1f4ec3d1fc5dd8d15dabffbcPeter Collingbourne      /// \brief Record code for floating point #pragma options.
42184bccea1ad9fd8bc1f4ec3d1fc5dd8d15dabffbcPeter Collingbourne      FP_PRAGMA_OPTIONS = 42,
42284bccea1ad9fd8bc1f4ec3d1fc5dd8d15dabffbcPeter Collingbourne
42384bccea1ad9fd8bc1f4ec3d1fc5dd8d15dabffbcPeter Collingbourne      /// \brief Record code for enabled OpenCL extensions.
424ebcbe1d3dc7d4f0c1f540a632fa0684dd0a857d5Sean Hunt      OPENCL_EXTENSIONS = 43,
425ebcbe1d3dc7d4f0c1f540a632fa0684dd0a857d5Sean Hunt
426ebcbe1d3dc7d4f0c1f540a632fa0684dd0a857d5Sean Hunt      /// \brief The list of delegating constructor declarations.
4274cdb0e2a2e9d93805e5ceaf8bc7018bdd166aec1Argyrios Kyrtzidis      DELEGATING_CTORS = 44,
4284cdb0e2a2e9d93805e5ceaf8bc7018bdd166aec1Argyrios Kyrtzidis
4294cdb0e2a2e9d93805e5ceaf8bc7018bdd166aec1Argyrios Kyrtzidis      /// \brief Record code for the table of offsets into the block
4304cdb0e2a2e9d93805e5ceaf8bc7018bdd166aec1Argyrios Kyrtzidis      /// of file source-location information.
431d8bba9c15230d2b1b3893e272106aa79efc50251Douglas Gregor      FILE_SOURCE_LOCATION_OFFSETS = 45,
432d8bba9c15230d2b1b3893e272106aa79efc50251Douglas Gregor
433d8bba9c15230d2b1b3893e272106aa79efc50251Douglas Gregor      /// \brief Record code for the set of known namespaces, which are used
434d8bba9c15230d2b1b3893e272106aa79efc50251Douglas Gregor      /// for typo correction.
435f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor      KNOWN_NAMESPACES = 46,
4364cdb0e2a2e9d93805e5ceaf8bc7018bdd166aec1Argyrios Kyrtzidis
4375d51a1d22d862dfae44eaa098af4e09bbfebae72Douglas Gregor      /// \brief Record code for the remapping information used to relate
4385d51a1d22d862dfae44eaa098af4e09bbfebae72Douglas Gregor      /// loaded modules to the various offsets and IDs(e.g., source location
4395d51a1d22d862dfae44eaa098af4e09bbfebae72Douglas Gregor      /// offests, declaration and type IDs) that are used in that module to
4405d51a1d22d862dfae44eaa098af4e09bbfebae72Douglas Gregor      /// refer to other modules.
4415d51a1d22d862dfae44eaa098af4e09bbfebae72Douglas Gregor      MODULE_OFFSET_MAP = 47,
442f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor
443f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor      /// \brief Record code for the source manager line table information,
444f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor      /// which stores information about #line directives.
445e6b8d68a927368b06ac06cc9ac9e7f60aa966d5fArgyrios Kyrtzidis      SOURCE_MANAGER_LINE_TABLE = 48,
446e6b8d68a927368b06ac06cc9ac9e7f60aa966d5fArgyrios Kyrtzidis
447cff9f26ce0ed76d555cd33b3dca84dd5cdf376afDouglas Gregor      /// \brief Record code for map of Objective-C class definition IDs to the
448cff9f26ce0ed76d555cd33b3dca84dd5cdf376afDouglas Gregor      /// ObjC categories in a module that are attached to that class.
449cff9f26ce0ed76d555cd33b3dca84dd5cdf376afDouglas Gregor      OBJC_CATEGORIES_MAP = 49,
45010f3df54486385e6497c9e5f229ff816e5a6c511Argyrios Kyrtzidis
45110f3df54486385e6497c9e5f229ff816e5a6c511Argyrios Kyrtzidis      /// \brief Record code for a file sorted array of DeclIDs in a module.
452a126651270acf17c434f60f86a3ab3687f87813aDouglas Gregor      FILE_SORTED_DECLS = 50,
453f6137e4d15cb6bbd10547267babfc699c1945873Douglas Gregor
454f6137e4d15cb6bbd10547267babfc699c1945873Douglas Gregor      /// \brief Record code for an array of all of the (sub)modules that were
455f6137e4d15cb6bbd10547267babfc699c1945873Douglas Gregor      /// imported by the AST file.
456c3cfd2ab3338d47861ece597212f21b972ebe727Douglas Gregor      IMPORTED_MODULES = 51,
457c3cfd2ab3338d47861ece597212f21b972ebe727Douglas Gregor
458c3cfd2ab3338d47861ece597212f21b972ebe727Douglas Gregor      /// \brief Record code for the set of merged declarations in an AST file.
4592171bf1caba4d4b9eeb6a91efac4300b41f38b07Douglas Gregor      MERGED_DECLARATIONS = 52,
4602171bf1caba4d4b9eeb6a91efac4300b41f38b07Douglas Gregor
4612171bf1caba4d4b9eeb6a91efac4300b41f38b07Douglas Gregor      /// \brief Record code for the array of redeclaration chains.
4622171bf1caba4d4b9eeb6a91efac4300b41f38b07Douglas Gregor      ///
4632171bf1caba4d4b9eeb6a91efac4300b41f38b07Douglas Gregor      /// This array can only be interpreted properly using the local
4642171bf1caba4d4b9eeb6a91efac4300b41f38b07Douglas Gregor      /// redeclarations map.
465cff9f26ce0ed76d555cd33b3dca84dd5cdf376afDouglas Gregor      LOCAL_REDECLARATIONS = 53,
466cff9f26ce0ed76d555cd33b3dca84dd5cdf376afDouglas Gregor
467cff9f26ce0ed76d555cd33b3dca84dd5cdf376afDouglas Gregor      /// \brief Record code for the array of Objective-C categories (including
468cff9f26ce0ed76d555cd33b3dca84dd5cdf376afDouglas Gregor      /// extensions).
469cff9f26ce0ed76d555cd33b3dca84dd5cdf376afDouglas Gregor      ///
470cff9f26ce0ed76d555cd33b3dca84dd5cdf376afDouglas Gregor      /// This array can only be interpreted properly using the Objective-C
471cff9f26ce0ed76d555cd33b3dca84dd5cdf376afDouglas Gregor      /// categories map.
472cff9f26ce0ed76d555cd33b3dca84dd5cdf376afDouglas Gregor      OBJC_CATEGORIES
4732cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    };
4742cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor
47514f79002e58556798e86168c63e48d533287eda5Douglas Gregor    /// \brief Record types used within a source manager block.
47614f79002e58556798e86168c63e48d533287eda5Douglas Gregor    enum SourceManagerRecordTypes {
47714f79002e58556798e86168c63e48d533287eda5Douglas Gregor      /// \brief Describes a source location entry (SLocEntry) for a
47814f79002e58556798e86168c63e48d533287eda5Douglas Gregor      /// file.
47914f79002e58556798e86168c63e48d533287eda5Douglas Gregor      SM_SLOC_FILE_ENTRY = 1,
48014f79002e58556798e86168c63e48d533287eda5Douglas Gregor      /// \brief Describes a source location entry (SLocEntry) for a
48114f79002e58556798e86168c63e48d533287eda5Douglas Gregor      /// buffer.
48214f79002e58556798e86168c63e48d533287eda5Douglas Gregor      SM_SLOC_BUFFER_ENTRY = 2,
48314f79002e58556798e86168c63e48d533287eda5Douglas Gregor      /// \brief Describes a blob that contains the data for a buffer
48414f79002e58556798e86168c63e48d533287eda5Douglas Gregor      /// entry. This kind of record always directly follows a
485a081da5e44600d02983d6562bed1b4fd61e410fdDouglas Gregor      /// SM_SLOC_BUFFER_ENTRY record or a SM_SLOC_FILE_ENTRY with an
486a081da5e44600d02983d6562bed1b4fd61e410fdDouglas Gregor      /// overridden buffer.
48714f79002e58556798e86168c63e48d533287eda5Douglas Gregor      SM_SLOC_BUFFER_BLOB = 3,
48814f79002e58556798e86168c63e48d533287eda5Douglas Gregor      /// \brief Describes a source location entry (SLocEntry) for a
489f70d12dbd49fcc25f1dfc0127217112ae76bcb8fChandler Carruth      /// macro expansion.
490f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor      SM_SLOC_EXPANSION_ENTRY = 4
49114f79002e58556798e86168c63e48d533287eda5Douglas Gregor    };
4921eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
4937c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner    /// \brief Record types used within a preprocessor block.
4947c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner    enum PreprocessorRecordTypes {
4957c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner      // The macros in the PP section are a PP_MACRO_* instance followed by a
4967c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner      // list of PP_TOKEN instances for each token in the definition.
4977c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner
4987c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner      /// \brief An object-like macro definition.
4997c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner      /// [PP_MACRO_OBJECT_LIKE, IdentInfoID, SLoc, IsUsed]
5007c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner      PP_MACRO_OBJECT_LIKE = 1,
5017c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner
5027c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner      /// \brief A function-like macro definition.
5037c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner      /// [PP_MACRO_FUNCTION_LIKE, <ObjectLikeStuff>, IsC99Varargs, IsGNUVarars,
5047c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner      ///  NumArgs, ArgIdentInfoID* ]
5057c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner      PP_MACRO_FUNCTION_LIKE = 2,
5061eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
5077c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner      /// \brief Describes one token.
508c1f9d828c733ec1eba06d01070735d1f36fda733Chris Lattner      /// [PP_TOKEN, SLoc, Length, IdentInfoID, Kind, Flags]
5094800a5c79023271408af49797e09be32aca93232Douglas Gregor      PP_TOKEN = 3
5104800a5c79023271408af49797e09be32aca93232Douglas Gregor    };
5116a5a23f8e7fb65e028c8092bc1d1a1d9dfe2e9bcDouglas Gregor
5124800a5c79023271408af49797e09be32aca93232Douglas Gregor    /// \brief Record types used within a preprocessor detail block.
5134800a5c79023271408af49797e09be32aca93232Douglas Gregor    enum PreprocessorDetailRecordTypes {
514f70d12dbd49fcc25f1dfc0127217112ae76bcb8fChandler Carruth      /// \brief Describes a macro expansion within the preprocessing record.
515f70d12dbd49fcc25f1dfc0127217112ae76bcb8fChandler Carruth      PPD_MACRO_EXPANSION = 0,
5166a5a23f8e7fb65e028c8092bc1d1a1d9dfe2e9bcDouglas Gregor
5176a5a23f8e7fb65e028c8092bc1d1a1d9dfe2e9bcDouglas Gregor      /// \brief Describes a macro definition within the preprocessing record.
5184800a5c79023271408af49797e09be32aca93232Douglas Gregor      PPD_MACRO_DEFINITION = 1,
519ecdcb883cbc6bb4a2445dc6f02d58d9bdb54a0edDouglas Gregor
5204800a5c79023271408af49797e09be32aca93232Douglas Gregor      /// \brief Describes an inclusion directive within the preprocessing
521ecdcb883cbc6bb4a2445dc6f02d58d9bdb54a0edDouglas Gregor      /// record.
5224800a5c79023271408af49797e09be32aca93232Douglas Gregor      PPD_INCLUSION_DIRECTIVE = 2
5237c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner    };
5244800a5c79023271408af49797e09be32aca93232Douglas Gregor
525392ed2b717d86ebdd202cb9bb58d18d8b3b4cd87Douglas Gregor    /// \brief Record types used within a submodule description block.
526392ed2b717d86ebdd202cb9bb58d18d8b3b4cd87Douglas Gregor    enum SubmoduleRecordTypes {
52777d029f6a24dbf70d97e61757945df53fb250ea0Douglas Gregor      /// \brief Metadata for submodules as a whole.
52877d029f6a24dbf70d97e61757945df53fb250ea0Douglas Gregor      SUBMODULE_METADATA = 0,
529392ed2b717d86ebdd202cb9bb58d18d8b3b4cd87Douglas Gregor      /// \brief Defines the major attributes of a submodule, including its
530392ed2b717d86ebdd202cb9bb58d18d8b3b4cd87Douglas Gregor      /// name and parent.
53177d029f6a24dbf70d97e61757945df53fb250ea0Douglas Gregor      SUBMODULE_DEFINITION = 1,
532392ed2b717d86ebdd202cb9bb58d18d8b3b4cd87Douglas Gregor      /// \brief Specifies the umbrella header used to create this module,
533392ed2b717d86ebdd202cb9bb58d18d8b3b4cd87Douglas Gregor      /// if any.
53477d029f6a24dbf70d97e61757945df53fb250ea0Douglas Gregor      SUBMODULE_UMBRELLA_HEADER = 2,
535392ed2b717d86ebdd202cb9bb58d18d8b3b4cd87Douglas Gregor      /// \brief Specifies a header that falls into this (sub)module.
53677d029f6a24dbf70d97e61757945df53fb250ea0Douglas Gregor      SUBMODULE_HEADER = 3,
53777d029f6a24dbf70d97e61757945df53fb250ea0Douglas Gregor      /// \brief Specifies an umbrella directory.
53877d029f6a24dbf70d97e61757945df53fb250ea0Douglas Gregor      SUBMODULE_UMBRELLA_DIR = 4,
53955988680ece66b8e505ee136b35e74fcb1173aeeDouglas Gregor      /// \brief Specifies the submodules that are imported by this
54055988680ece66b8e505ee136b35e74fcb1173aeeDouglas Gregor      /// submodule.
54177d029f6a24dbf70d97e61757945df53fb250ea0Douglas Gregor      SUBMODULE_IMPORTS = 5,
542af13bfc3b40aa4a46f4e71d200ecfb10f45297fcDouglas Gregor      /// \brief Specifies the submodules that are re-exported from this
543af13bfc3b40aa4a46f4e71d200ecfb10f45297fcDouglas Gregor      /// submodule.
54451f564f80d9f71e175635b452ffeeeff899e9bf1Douglas Gregor      SUBMODULE_EXPORTS = 6,
54551f564f80d9f71e175635b452ffeeeff899e9bf1Douglas Gregor      /// \brief Specifies a required feature.
54651f564f80d9f71e175635b452ffeeeff899e9bf1Douglas Gregor      SUBMODULE_REQUIRES = 7
547392ed2b717d86ebdd202cb9bb58d18d8b3b4cd87Douglas Gregor    };
548392ed2b717d86ebdd202cb9bb58d18d8b3b4cd87Douglas Gregor
549f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl    /// \defgroup ASTAST AST file AST constants
55014f79002e58556798e86168c63e48d533287eda5Douglas Gregor    ///
55114f79002e58556798e86168c63e48d533287eda5Douglas Gregor    /// The constants in this group describe various components of the
552f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl    /// abstract syntax tree within an AST file.
55314f79002e58556798e86168c63e48d533287eda5Douglas Gregor    ///
55414f79002e58556798e86168c63e48d533287eda5Douglas Gregor    /// @{
55514f79002e58556798e86168c63e48d533287eda5Douglas Gregor
5562cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    /// \brief Predefined type IDs.
5572cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    ///
5582cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    /// These type IDs correspond to predefined types in the AST
5592cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    /// context, such as built-in types (int) and special place-holder
5602cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    /// types (the <overload> and <dependent> type markers). Such
5612cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    /// types are never actually serialized, since they will be built
5622cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    /// by the AST context when it is created.
5632cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    enum PredefinedTypeIDs {
5642cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The NULL type.
5652cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      PREDEF_TYPE_NULL_ID       = 0,
5662cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The void type.
5672cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      PREDEF_TYPE_VOID_ID       = 1,
5682cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The 'bool' or '_Bool' type.
5692cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      PREDEF_TYPE_BOOL_ID       = 2,
5702cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The 'char' type, when it is unsigned.
5712cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      PREDEF_TYPE_CHAR_U_ID     = 3,
5722cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The 'unsigned char' type.
5732cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      PREDEF_TYPE_UCHAR_ID      = 4,
5742cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The 'unsigned short' type.
5752cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      PREDEF_TYPE_USHORT_ID     = 5,
5762cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The 'unsigned int' type.
5772cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      PREDEF_TYPE_UINT_ID       = 6,
5782cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The 'unsigned long' type.
5792cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      PREDEF_TYPE_ULONG_ID      = 7,
5802cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The 'unsigned long long' type.
5812cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      PREDEF_TYPE_ULONGLONG_ID  = 8,
5822cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The 'char' type, when it is signed.
5832cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      PREDEF_TYPE_CHAR_S_ID     = 9,
5842cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The 'signed char' type.
5852cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      PREDEF_TYPE_SCHAR_ID      = 10,
5862cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The C++ 'wchar_t' type.
5872cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      PREDEF_TYPE_WCHAR_ID      = 11,
5882cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The (signed) 'short' type.
5892cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      PREDEF_TYPE_SHORT_ID      = 12,
5902cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The (signed) 'int' type.
5912cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      PREDEF_TYPE_INT_ID        = 13,
5922cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The (signed) 'long' type.
5932cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      PREDEF_TYPE_LONG_ID       = 14,
5942cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The (signed) 'long long' type.
5952cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      PREDEF_TYPE_LONGLONG_ID   = 15,
5962cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The 'float' type.
5972cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      PREDEF_TYPE_FLOAT_ID      = 16,
5982cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The 'double' type.
5992cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      PREDEF_TYPE_DOUBLE_ID     = 17,
6002cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The 'long double' type.
6012cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      PREDEF_TYPE_LONGDOUBLE_ID = 18,
6022cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The placeholder type for overloaded function sets.
6032cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      PREDEF_TYPE_OVERLOAD_ID   = 19,
6042cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The placeholder type for dependent types.
6052df9ced9fd1e8c7d7b38443db07e0e811de22571Chris Lattner      PREDEF_TYPE_DEPENDENT_ID  = 20,
6062df9ced9fd1e8c7d7b38443db07e0e811de22571Chris Lattner      /// \brief The '__uint128_t' type.
6072df9ced9fd1e8c7d7b38443db07e0e811de22571Chris Lattner      PREDEF_TYPE_UINT128_ID    = 21,
6082df9ced9fd1e8c7d7b38443db07e0e811de22571Chris Lattner      /// \brief The '__int128_t' type.
6096e8ed16ffef02b82995a90bdcf10ffff7d63839aSebastian Redl      PREDEF_TYPE_INT128_ID     = 22,
6106e8ed16ffef02b82995a90bdcf10ffff7d63839aSebastian Redl      /// \brief The type of 'nullptr'.
611f5c209d23b20ada4a9b6235db50317239cbf6ae1Alisdair Meredith      PREDEF_TYPE_NULLPTR_ID    = 23,
612f5c209d23b20ada4a9b6235db50317239cbf6ae1Alisdair Meredith      /// \brief The C++ 'char16_t' type.
613f5c209d23b20ada4a9b6235db50317239cbf6ae1Alisdair Meredith      PREDEF_TYPE_CHAR16_ID     = 24,
614f5c209d23b20ada4a9b6235db50317239cbf6ae1Alisdair Meredith      /// \brief The C++ 'char32_t' type.
615de2e22d33afec98324a66a358dfe0951b3c7259aSteve Naroff      PREDEF_TYPE_CHAR32_ID     = 25,
616de2e22d33afec98324a66a358dfe0951b3c7259aSteve Naroff      /// \brief The ObjC 'id' type.
617de2e22d33afec98324a66a358dfe0951b3c7259aSteve Naroff      PREDEF_TYPE_OBJC_ID       = 26,
618de2e22d33afec98324a66a358dfe0951b3c7259aSteve Naroff      /// \brief The ObjC 'Class' type.
61913dcd00615de5c4279d97bdf63cd5f0a14fd9dccFariborz Jahanian      PREDEF_TYPE_OBJC_CLASS    = 27,
62013dcd00615de5c4279d97bdf63cd5f0a14fd9dccFariborz Jahanian      /// \brief The ObjC 'SEL' type.
6211de4d4e8cb2e9c88809fea8092bc6e835a5473d2John McCall      PREDEF_TYPE_OBJC_SEL      = 28,
622864c041e118155c2b1ce0ba36942a3da5a4a055eJohn McCall      /// \brief The 'unknown any' placeholder type.
623864c041e118155c2b1ce0ba36942a3da5a4a055eJohn McCall      PREDEF_TYPE_UNKNOWN_ANY   = 29,
624864c041e118155c2b1ce0ba36942a3da5a4a055eJohn McCall      /// \brief The placeholder type for bound member functions.
6253b8043b49aff6e5d70f29ef5684214ce2473763cDouglas Gregor      PREDEF_TYPE_BOUND_MEMBER  = 30,
6263b8043b49aff6e5d70f29ef5684214ce2473763cDouglas Gregor      /// \brief The "auto" deduction type.
6273b8043b49aff6e5d70f29ef5684214ce2473763cDouglas Gregor      PREDEF_TYPE_AUTO_DEDUCT   = 31,
6283b8043b49aff6e5d70f29ef5684214ce2473763cDouglas Gregor      /// \brief The "auto &&" deduction type.
629aa4a99b4a62615db243f7a5c433169f2fc704420Anton Korobeynikov      PREDEF_TYPE_AUTO_RREF_DEDUCT = 32,
630aa4a99b4a62615db243f7a5c433169f2fc704420Anton Korobeynikov      /// \brief The OpenCL 'half' / ARM NEON __fp16 type.
6310ddaeb9b031070ec64afe92d9892875ac44df427John McCall      PREDEF_TYPE_HALF_ID       = 33,
6320ddaeb9b031070ec64afe92d9892875ac44df427John McCall      /// \brief ARC's unbridged-cast placeholder type.
6333c3b7f90a863af43fa63043d396553ecf205351cJohn McCall      PREDEF_TYPE_ARC_UNBRIDGED_CAST = 34,
6343c3b7f90a863af43fa63043d396553ecf205351cJohn McCall      /// \brief The pseudo-object placeholder type.
6353c3b7f90a863af43fa63043d396553ecf205351cJohn McCall      PREDEF_TYPE_PSEUDO_OBJECT = 35
6362cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    };
6372cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor
6382cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    /// \brief The number of predefined type IDs that are reserved for
6392cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    /// the PREDEF_TYPE_* constants.
6402cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    ///
6412cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    /// Type IDs for non-predefined types will start at
6422cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    /// NUM_PREDEF_TYPE_IDs.
6432cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    const unsigned NUM_PREDEF_TYPE_IDS = 100;
6442cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor
645a72d8c4556fbdfca2c9e101722812861fcbdde12Douglas Gregor    /// \brief The number of allowed abbreviations in bits
646a72d8c4556fbdfca2c9e101722812861fcbdde12Douglas Gregor    const unsigned NUM_ALLOWED_ABBREVS_SIZE = 4;
647a72d8c4556fbdfca2c9e101722812861fcbdde12Douglas Gregor
6482cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    /// \brief Record codes for each kind of type.
6492cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    ///
65061d60ee6aa0a5ded0ddcf48679673b37506a1895Douglas Gregor    /// These constants describe the type records that can occur within a
651f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl    /// block identified by DECLTYPES_BLOCK_ID in the AST file. Each
6522cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    /// constant describes a record for a specific type class in the
6532cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    /// AST.
6542cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    enum TypeCode {
6552cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief An ExtQualType record.
65663f5c2646e75041277657aa1392a5bdd643367a7Douglas Gregor      TYPE_EXT_QUAL                 = 1,
6572cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief A ComplexType record.
65863f5c2646e75041277657aa1392a5bdd643367a7Douglas Gregor      TYPE_COMPLEX                  = 3,
6592cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief A PointerType record.
66063f5c2646e75041277657aa1392a5bdd643367a7Douglas Gregor      TYPE_POINTER                  = 4,
6612cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief A BlockPointerType record.
66263f5c2646e75041277657aa1392a5bdd643367a7Douglas Gregor      TYPE_BLOCK_POINTER            = 5,
6632cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief An LValueReferenceType record.
66463f5c2646e75041277657aa1392a5bdd643367a7Douglas Gregor      TYPE_LVALUE_REFERENCE         = 6,
6652cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief An RValueReferenceType record.
66663f5c2646e75041277657aa1392a5bdd643367a7Douglas Gregor      TYPE_RVALUE_REFERENCE         = 7,
6672cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief A MemberPointerType record.
66863f5c2646e75041277657aa1392a5bdd643367a7Douglas Gregor      TYPE_MEMBER_POINTER           = 8,
6692cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief A ConstantArrayType record.
67063f5c2646e75041277657aa1392a5bdd643367a7Douglas Gregor      TYPE_CONSTANT_ARRAY           = 9,
6712cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief An IncompleteArrayType record.
67263f5c2646e75041277657aa1392a5bdd643367a7Douglas Gregor      TYPE_INCOMPLETE_ARRAY         = 10,
6732cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief A VariableArrayType record.
67463f5c2646e75041277657aa1392a5bdd643367a7Douglas Gregor      TYPE_VARIABLE_ARRAY           = 11,
6752cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief A VectorType record.
67663f5c2646e75041277657aa1392a5bdd643367a7Douglas Gregor      TYPE_VECTOR                   = 12,
6772cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief An ExtVectorType record.
67863f5c2646e75041277657aa1392a5bdd643367a7Douglas Gregor      TYPE_EXT_VECTOR               = 13,
6792cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief A FunctionNoProtoType record.
68063f5c2646e75041277657aa1392a5bdd643367a7Douglas Gregor      TYPE_FUNCTION_NO_PROTO        = 14,
6812cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief A FunctionProtoType record.
68263f5c2646e75041277657aa1392a5bdd643367a7Douglas Gregor      TYPE_FUNCTION_PROTO           = 15,
6832cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief A TypedefType record.
68463f5c2646e75041277657aa1392a5bdd643367a7Douglas Gregor      TYPE_TYPEDEF                  = 16,
6852cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief A TypeOfExprType record.
68663f5c2646e75041277657aa1392a5bdd643367a7Douglas Gregor      TYPE_TYPEOF_EXPR              = 17,
6872cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief A TypeOfType record.
68863f5c2646e75041277657aa1392a5bdd643367a7Douglas Gregor      TYPE_TYPEOF                   = 18,
6892cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief A RecordType record.
69063f5c2646e75041277657aa1392a5bdd643367a7Douglas Gregor      TYPE_RECORD                   = 19,
6912cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief An EnumType record.
69263f5c2646e75041277657aa1392a5bdd643367a7Douglas Gregor      TYPE_ENUM                     = 20,
6932cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief An ObjCInterfaceType record.
69463f5c2646e75041277657aa1392a5bdd643367a7Douglas Gregor      TYPE_OBJC_INTERFACE           = 21,
695d1b3c2dd5bc1f3103bee6137957aa7c5f8f2f0bcSteve Naroff      /// \brief An ObjCObjectPointerType record.
696c15cb2af27514ecc879daba9aa01389c5203685dSteve Naroff      TYPE_OBJC_OBJECT_POINTER      = 22,
697395b475a4474f1c7574d927ad142ca0c7997cbcaAnders Carlsson      /// \brief a DecltypeType record.
69854e14c4db764c0636160d26c5bbf491637c83a76John McCall      TYPE_DECLTYPE                 = 23,
6997da2431c23ef1ee8acb114e39692246e1801afc2John McCall      /// \brief An ElaboratedType record.
70054e14c4db764c0636160d26c5bbf491637c83a76John McCall      TYPE_ELABORATED               = 24,
70149a832bd499d6f61c23655f1fac99f0dd229756eJohn McCall      /// \brief A SubstTemplateTypeParmType record.
702ed97649e9574b9d854fa4d6109c9333ae0993554John McCall      TYPE_SUBST_TEMPLATE_TYPE_PARM = 25,
703ed97649e9574b9d854fa4d6109c9333ae0993554John McCall      /// \brief An UnresolvedUsingType record.
7043cb0ebd5f76abcb776f7cb4062bd79e3268c0dc4John McCall      TYPE_UNRESOLVED_USING         = 26,
7053cb0ebd5f76abcb776f7cb4062bd79e3268c0dc4John McCall      /// \brief An InjectedClassNameType record.
706c12c5bba6ceb6acd4e51e7a0fc03257da9cfd44eJohn McCall      TYPE_INJECTED_CLASS_NAME      = 27,
707c12c5bba6ceb6acd4e51e7a0fc03257da9cfd44eJohn McCall      /// \brief An ObjCObjectType record.
70890b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis      TYPE_OBJC_OBJECT              = 28,
70990b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis      /// \brief An TemplateTypeParmType record.
71090b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis      TYPE_TEMPLATE_TYPE_PARM       = 29,
71190b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis      /// \brief An TemplateSpecializationType record.
7128dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis      TYPE_TEMPLATE_SPECIALIZATION  = 30,
7133acad62a239448bef0f5848b2a0d5f7dfefd3d14Argyrios Kyrtzidis      /// \brief A DependentNameType record.
7143acad62a239448bef0f5848b2a0d5f7dfefd3d14Argyrios Kyrtzidis      TYPE_DEPENDENT_NAME           = 31,
7153acad62a239448bef0f5848b2a0d5f7dfefd3d14Argyrios Kyrtzidis      /// \brief A DependentTemplateSpecializationType record.
716ae8b17f1d5d303af53db5a4f4a375ea6b9356566Argyrios Kyrtzidis      TYPE_DEPENDENT_TEMPLATE_SPECIALIZATION = 32,
717ae8b17f1d5d303af53db5a4f4a375ea6b9356566Argyrios Kyrtzidis      /// \brief A DependentSizedArrayType record.
718075f8f1b6bed4d1b224c74f87508534cc6392ce6Abramo Bagnara      TYPE_DEPENDENT_SIZED_ARRAY    = 33,
719075f8f1b6bed4d1b224c74f87508534cc6392ce6Abramo Bagnara      /// \brief A ParenType record.
7207536dd5e6c99584481b7dab68b7e7d8df9c54054Douglas Gregor      TYPE_PAREN                    = 34,
7217536dd5e6c99584481b7dab68b7e7d8df9c54054Douglas Gregor      /// \brief A PackExpansionType record.
7229d156a7b1b2771e191f2f5a45a7b7a694129463bJohn McCall      TYPE_PACK_EXPANSION           = 35,
7239d156a7b1b2771e191f2f5a45a7b7a694129463bJohn McCall      /// \brief An AttributedType record.
724c3069d618f4661d923cb1b5c4525b082fce73b04Douglas Gregor      TYPE_ATTRIBUTED               = 36,
725c3069d618f4661d923cb1b5c4525b082fce73b04Douglas Gregor      /// \brief A SubstTemplateTypeParmPackType record.
72634b41d939a1328f484511c6002ba2456db879a29Richard Smith      TYPE_SUBST_TEMPLATE_TYPE_PARM_PACK = 37,
72734b41d939a1328f484511c6002ba2456db879a29Richard Smith      /// \brief A AutoType record.
728ca63c200346c0ca9e00194ec6e34a5a7b0ed9321Sean Hunt      TYPE_AUTO                  = 38,
729ca63c200346c0ca9e00194ec6e34a5a7b0ed9321Sean Hunt      /// \brief A UnaryTransformType record.
730b001de7458d17c17e6d8b8034c7cfcefd3b70c00Eli Friedman      TYPE_UNARY_TRANSFORM       = 39,
731b001de7458d17c17e6d8b8034c7cfcefd3b70c00Eli Friedman      /// \brief An AtomicType record.
732b001de7458d17c17e6d8b8034c7cfcefd3b70c00Eli Friedman      TYPE_ATOMIC                = 40
7332cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    };
7342cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor
735ad1de006ea080b540e480efc6b86c2e201dbf1ecDouglas Gregor    /// \brief The type IDs for special types constructed by semantic
736ad1de006ea080b540e480efc6b86c2e201dbf1ecDouglas Gregor    /// analysis.
737ad1de006ea080b540e480efc6b86c2e201dbf1ecDouglas Gregor    ///
738ad1de006ea080b540e480efc6b86c2e201dbf1ecDouglas Gregor    /// The constants in this enumeration are indices into the
739ad1de006ea080b540e480efc6b86c2e201dbf1ecDouglas Gregor    /// SPECIAL_TYPES record.
740ad1de006ea080b540e480efc6b86c2e201dbf1ecDouglas Gregor    enum SpecialTypeIDs {
741ad1de006ea080b540e480efc6b86c2e201dbf1ecDouglas Gregor      /// \brief __builtin_va_list
742319ac896a0fef7365d5589b8021db7e41207fe42Douglas Gregor      SPECIAL_TYPE_BUILTIN_VA_LIST             = 0,
743319ac896a0fef7365d5589b8021db7e41207fe42Douglas Gregor      /// \brief CFConstantString type
744a6ea10e22b600d92e084f6b11b9b9a92d0eb2412Douglas Gregor      SPECIAL_TYPE_CF_CONSTANT_STRING          = 1,
745c29f77b769bcc5b6dc85e72c8e3cc2e348e5cf25Douglas Gregor      /// \brief C FILE typedef type
746a6ea10e22b600d92e084f6b11b9b9a92d0eb2412Douglas Gregor      SPECIAL_TYPE_FILE                        = 2,
747782fa308a765aeac2acb39c4e697c937ec21185bMike Stump      /// \brief C jmp_buf typedef type
748a6ea10e22b600d92e084f6b11b9b9a92d0eb2412Douglas Gregor      SPECIAL_TYPE_JMP_BUF                     = 3,
749782fa308a765aeac2acb39c4e697c937ec21185bMike Stump      /// \brief C sigjmp_buf typedef type
750a6ea10e22b600d92e084f6b11b9b9a92d0eb2412Douglas Gregor      SPECIAL_TYPE_SIGJMP_BUF                  = 4,
751d1571acc700b652a52c766e36a6c688d9bf6f3a1Douglas Gregor      /// \brief Objective-C "id" redefinition type
752a6ea10e22b600d92e084f6b11b9b9a92d0eb2412Douglas Gregor      SPECIAL_TYPE_OBJC_ID_REDEFINITION        = 5,
753d1571acc700b652a52c766e36a6c688d9bf6f3a1Douglas Gregor      /// \brief Objective-C "Class" redefinition type
754a6ea10e22b600d92e084f6b11b9b9a92d0eb2412Douglas Gregor      SPECIAL_TYPE_OBJC_CLASS_REDEFINITION     = 6,
75513dcd00615de5c4279d97bdf63cd5f0a14fd9dccFariborz Jahanian      /// \brief Objective-C "SEL" redefinition type
756a6ea10e22b600d92e084f6b11b9b9a92d0eb2412Douglas Gregor      SPECIAL_TYPE_OBJC_SEL_REDEFINITION       = 7,
757e2d4f4ed44a32f179c6d48cd1dba8346ab2129d9Rafael Espindola      /// \brief C ucontext_t typedef type
758a6ea10e22b600d92e084f6b11b9b9a92d0eb2412Douglas Gregor      SPECIAL_TYPE_UCONTEXT_T                  = 8
759ad1de006ea080b540e480efc6b86c2e201dbf1ecDouglas Gregor    };
76002a5e875cca1ce2f471dad06fb5557346d99c164Douglas Gregor
76102a5e875cca1ce2f471dad06fb5557346d99c164Douglas Gregor    /// \brief The number of special type IDs.
762a6ea10e22b600d92e084f6b11b9b9a92d0eb2412Douglas Gregor    const unsigned NumSpecialTypeIDs = 9;
763ad1de006ea080b540e480efc6b86c2e201dbf1ecDouglas Gregor
7640a14e4bf604a91b035a479235adf4c2f6c9128a2Douglas Gregor    /// \brief Predefined declaration IDs.
7650a14e4bf604a91b035a479235adf4c2f6c9128a2Douglas Gregor    ///
7660a14e4bf604a91b035a479235adf4c2f6c9128a2Douglas Gregor    /// These declaration IDs correspond to predefined declarations in the AST
7670a14e4bf604a91b035a479235adf4c2f6c9128a2Douglas Gregor    /// context, such as the NULL declaration ID. Such declarations are never
7680a14e4bf604a91b035a479235adf4c2f6c9128a2Douglas Gregor    /// actually serialized, since they will be built by the AST context when
7690a14e4bf604a91b035a479235adf4c2f6c9128a2Douglas Gregor    /// it is created.
7700a14e4bf604a91b035a479235adf4c2f6c9128a2Douglas Gregor    enum PredefinedDeclIDs {
7710a14e4bf604a91b035a479235adf4c2f6c9128a2Douglas Gregor      /// \brief The NULL declaration.
7726bf2b9fbd3e3adc38d4712de79aeaa81d651aa08Douglas Gregor      PREDEF_DECL_NULL_ID       = 0,
7736bf2b9fbd3e3adc38d4712de79aeaa81d651aa08Douglas Gregor
7746bf2b9fbd3e3adc38d4712de79aeaa81d651aa08Douglas Gregor      /// \brief The translation unit.
7754dfd02a17c6d604c72e6936527c5e1c56d3ecb7aDouglas Gregor      PREDEF_DECL_TRANSLATION_UNIT_ID = 1,
7764dfd02a17c6d604c72e6936527c5e1c56d3ecb7aDouglas Gregor
7774dfd02a17c6d604c72e6936527c5e1c56d3ecb7aDouglas Gregor      /// \brief The Objective-C 'id' type.
77879d6726921897811232554ed94c5d77b5b7b3fc0Douglas Gregor      PREDEF_DECL_OBJC_ID_ID = 2,
77979d6726921897811232554ed94c5d77b5b7b3fc0Douglas Gregor
7807a27ea52b7bd635c89bec5a9c521a3bf7d204238Douglas Gregor      /// \brief The Objective-C 'SEL' type.
7817a27ea52b7bd635c89bec5a9c521a3bf7d204238Douglas Gregor      PREDEF_DECL_OBJC_SEL_ID = 3,
7827a27ea52b7bd635c89bec5a9c521a3bf7d204238Douglas Gregor
78379d6726921897811232554ed94c5d77b5b7b3fc0Douglas Gregor      /// \brief The Objective-C 'Class' type.
784772eeaefef2c883aabe35caf4543e7e32d290183Douglas Gregor      PREDEF_DECL_OBJC_CLASS_ID = 4,
785a6ea10e22b600d92e084f6b11b9b9a92d0eb2412Douglas Gregor
786a6ea10e22b600d92e084f6b11b9b9a92d0eb2412Douglas Gregor      /// \brief The Objective-C 'Protocol' type.
787a6ea10e22b600d92e084f6b11b9b9a92d0eb2412Douglas Gregor      PREDEF_DECL_OBJC_PROTOCOL_ID = 5,
788772eeaefef2c883aabe35caf4543e7e32d290183Douglas Gregor
789772eeaefef2c883aabe35caf4543e7e32d290183Douglas Gregor      /// \brief The signed 128-bit integer type.
790a6ea10e22b600d92e084f6b11b9b9a92d0eb2412Douglas Gregor      PREDEF_DECL_INT_128_ID = 6,
791772eeaefef2c883aabe35caf4543e7e32d290183Douglas Gregor
792772eeaefef2c883aabe35caf4543e7e32d290183Douglas Gregor      /// \brief The unsigned 128-bit integer type.
793a6ea10e22b600d92e084f6b11b9b9a92d0eb2412Douglas Gregor      PREDEF_DECL_UNSIGNED_INT_128_ID = 7,
794e97179c675b341927807c718be215c8d1aab8acbDouglas Gregor
795e97179c675b341927807c718be215c8d1aab8acbDouglas Gregor      /// \brief The internal 'instancetype' typedef.
796a6ea10e22b600d92e084f6b11b9b9a92d0eb2412Douglas Gregor      PREDEF_DECL_OBJC_INSTANCETYPE_ID = 8
7970a14e4bf604a91b035a479235adf4c2f6c9128a2Douglas Gregor    };
7980a14e4bf604a91b035a479235adf4c2f6c9128a2Douglas Gregor
7990a14e4bf604a91b035a479235adf4c2f6c9128a2Douglas Gregor    /// \brief The number of declaration IDs that are predefined.
8000a14e4bf604a91b035a479235adf4c2f6c9128a2Douglas Gregor    ///
8010a14e4bf604a91b035a479235adf4c2f6c9128a2Douglas Gregor    /// For more information about predefined declarations, see the
8020a14e4bf604a91b035a479235adf4c2f6c9128a2Douglas Gregor    /// \c PredefinedDeclIDs type and the PREDEF_DECL_*_ID constants.
803a6ea10e22b600d92e084f6b11b9b9a92d0eb2412Douglas Gregor    const unsigned int NUM_PREDEF_DECL_IDS = 9;
8040a14e4bf604a91b035a479235adf4c2f6c9128a2Douglas Gregor
8052cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    /// \brief Record codes for each kind of declaration.
8062cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    ///
80761d60ee6aa0a5ded0ddcf48679673b37506a1895Douglas Gregor    /// These constants describe the declaration records that can occur within
80861d60ee6aa0a5ded0ddcf48679673b37506a1895Douglas Gregor    /// a declarations block (identified by DECLS_BLOCK_ID). Each
8092cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    /// constant describes a record for a specific declaration class
8102cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    /// in the AST.
8112cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    enum DeclCode {
8122cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief A TypedefDecl record.
8136bf2b9fbd3e3adc38d4712de79aeaa81d651aa08Douglas Gregor      DECL_TYPEDEF = 51,
814162e1c1b487352434552147967c3dd296ebee2f7Richard Smith      /// \brief A TypeAliasDecl record.
815162e1c1b487352434552147967c3dd296ebee2f7Richard Smith      DECL_TYPEALIAS,
8160a2b45e5885b6b8477b167042c0f6cd1d99a1f13Douglas Gregor      /// \brief An EnumDecl record.
8170a2b45e5885b6b8477b167042c0f6cd1d99a1f13Douglas Gregor      DECL_ENUM,
8188c70006581a9b9e9485570ca727a6c5f7be63521Douglas Gregor      /// \brief A RecordDecl record.
8198c70006581a9b9e9485570ca727a6c5f7be63521Douglas Gregor      DECL_RECORD,
8200a2b45e5885b6b8477b167042c0f6cd1d99a1f13Douglas Gregor      /// \brief An EnumConstantDecl record.
8210a2b45e5885b6b8477b167042c0f6cd1d99a1f13Douglas Gregor      DECL_ENUM_CONSTANT,
8223a2f7e42514ddbec983c61826ce85d3071e23e8eDouglas Gregor      /// \brief A FunctionDecl record.
8233a2f7e42514ddbec983c61826ce85d3071e23e8eDouglas Gregor      DECL_FUNCTION,
82453c9d8a4b8f0a76cb9dd2fdd8c433ccf110f2eecSteve Naroff      /// \brief A ObjCMethodDecl record.
82553c9d8a4b8f0a76cb9dd2fdd8c433ccf110f2eecSteve Naroff      DECL_OBJC_METHOD,
82633feeb019a5742b286eededd5446ec0fe87c5a61Steve Naroff      /// \brief A ObjCInterfaceDecl record.
82730833f8d77c08f8f16371776fde85a9fde3d9b6eSteve Naroff      DECL_OBJC_INTERFACE,
82830833f8d77c08f8f16371776fde85a9fde3d9b6eSteve Naroff      /// \brief A ObjCProtocolDecl record.
82930833f8d77c08f8f16371776fde85a9fde3d9b6eSteve Naroff      DECL_OBJC_PROTOCOL,
83033feeb019a5742b286eededd5446ec0fe87c5a61Steve Naroff      /// \brief A ObjCIvarDecl record.
83130833f8d77c08f8f16371776fde85a9fde3d9b6eSteve Naroff      DECL_OBJC_IVAR,
83230833f8d77c08f8f16371776fde85a9fde3d9b6eSteve Naroff      /// \brief A ObjCAtDefsFieldDecl record.
83330833f8d77c08f8f16371776fde85a9fde3d9b6eSteve Naroff      DECL_OBJC_AT_DEFS_FIELD,
83430833f8d77c08f8f16371776fde85a9fde3d9b6eSteve Naroff      /// \brief A ObjCCategoryDecl record.
83530833f8d77c08f8f16371776fde85a9fde3d9b6eSteve Naroff      DECL_OBJC_CATEGORY,
83630833f8d77c08f8f16371776fde85a9fde3d9b6eSteve Naroff      /// \brief A ObjCCategoryImplDecl record.
83730833f8d77c08f8f16371776fde85a9fde3d9b6eSteve Naroff      DECL_OBJC_CATEGORY_IMPL,
83830833f8d77c08f8f16371776fde85a9fde3d9b6eSteve Naroff      /// \brief A ObjCImplementationDecl record.
83930833f8d77c08f8f16371776fde85a9fde3d9b6eSteve Naroff      DECL_OBJC_IMPLEMENTATION,
84030833f8d77c08f8f16371776fde85a9fde3d9b6eSteve Naroff      /// \brief A ObjCCompatibleAliasDecl record.
84130833f8d77c08f8f16371776fde85a9fde3d9b6eSteve Naroff      DECL_OBJC_COMPATIBLE_ALIAS,
84230833f8d77c08f8f16371776fde85a9fde3d9b6eSteve Naroff      /// \brief A ObjCPropertyDecl record.
84330833f8d77c08f8f16371776fde85a9fde3d9b6eSteve Naroff      DECL_OBJC_PROPERTY,
84430833f8d77c08f8f16371776fde85a9fde3d9b6eSteve Naroff      /// \brief A ObjCPropertyImplDecl record.
84530833f8d77c08f8f16371776fde85a9fde3d9b6eSteve Naroff      DECL_OBJC_PROPERTY_IMPL,
8468c70006581a9b9e9485570ca727a6c5f7be63521Douglas Gregor      /// \brief A FieldDecl record.
8478c70006581a9b9e9485570ca727a6c5f7be63521Douglas Gregor      DECL_FIELD,
8482cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief A VarDecl record.
8492cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      DECL_VAR,
850405bad07391494d2eb025f8222c256c66b56e5f8Douglas Gregor      /// \brief An ImplicitParamDecl record.
851405bad07391494d2eb025f8222c256c66b56e5f8Douglas Gregor      DECL_IMPLICIT_PARAM,
8523a2f7e42514ddbec983c61826ce85d3071e23e8eDouglas Gregor      /// \brief A ParmVarDecl record.
8533a2f7e42514ddbec983c61826ce85d3071e23e8eDouglas Gregor      DECL_PARM_VAR,
8541028bc67d56ea088c3a57c4c44c3f6aeff60a031Douglas Gregor      /// \brief A FileScopeAsmDecl record.
8551028bc67d56ea088c3a57c4c44c3f6aeff60a031Douglas Gregor      DECL_FILE_SCOPE_ASM,
8561028bc67d56ea088c3a57c4c44c3f6aeff60a031Douglas Gregor      /// \brief A BlockDecl record.
8571028bc67d56ea088c3a57c4c44c3f6aeff60a031Douglas Gregor      DECL_BLOCK,
8582cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief A record that stores the set of declarations that are
8592cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// lexically stored within a given DeclContext.
8602cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      ///
861681d7237e1014bf64dd5ead6bf74ae55cdd19e61Sebastian Redl      /// The record itself is a blob that is an array of declaration IDs,
862681d7237e1014bf64dd5ead6bf74ae55cdd19e61Sebastian Redl      /// in the order in which those declarations were added to the
8632cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// declaration context. This data is used when iterating over
8642cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// the contents of a DeclContext, e.g., via
8652cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// DeclContext::decls_begin()/DeclContext::decls_end().
8662cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      DECL_CONTEXT_LEXICAL,
8672cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief A record that stores the set of declarations that are
8682cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// visible from a given DeclContext.
8692cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      ///
8702cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// The record itself stores a set of mappings, each of which
8712cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// associates a declaration name with one or more declaration
8722cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// IDs. This data is used when performing qualified name lookup
8732cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// into a DeclContext via DeclContext::lookup.
8740cef483f3b9d6a7f9fdbc5910d0a3ed64130e8e1Douglas Gregor      DECL_CONTEXT_VISIBLE,
875ad8dcf4a9df0e24051dc31bf9e6f3cd138a34298Chris Lattner      /// \brief A LabelDecl record.
876ad8dcf4a9df0e24051dc31bf9e6f3cd138a34298Chris Lattner      DECL_LABEL,
877ad8dcf4a9df0e24051dc31bf9e6f3cd138a34298Chris Lattner      /// \brief A NamespaceDecl record.
8786ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      DECL_NAMESPACE,
8796ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      /// \brief A NamespaceAliasDecl record.
8806ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      DECL_NAMESPACE_ALIAS,
8816ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      /// \brief A UsingDecl record.
8826ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      DECL_USING,
8836ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      /// \brief A UsingShadowDecl record.
8846ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      DECL_USING_SHADOW,
8856ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      /// \brief A UsingDirecitveDecl record.
8866ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      DECL_USING_DIRECTIVE,
8876ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      /// \brief An UnresolvedUsingValueDecl record.
8886ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      DECL_UNRESOLVED_USING_VALUE,
8896ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      /// \brief An UnresolvedUsingTypenameDecl record.
8906ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      DECL_UNRESOLVED_USING_TYPENAME,
8916ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      /// \brief A LinkageSpecDecl record.
8926ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      DECL_LINKAGE_SPEC,
8936ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      /// \brief A CXXRecordDecl record.
8946ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      DECL_CXX_RECORD,
8956ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      /// \brief A CXXMethodDecl record.
8966ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      DECL_CXX_METHOD,
8976ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      /// \brief A CXXConstructorDecl record.
8986ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      DECL_CXX_CONSTRUCTOR,
8996ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      /// \brief A CXXDestructorDecl record.
9006ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      DECL_CXX_DESTRUCTOR,
9016ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      /// \brief A CXXConversionDecl record.
9026ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      DECL_CXX_CONVERSION,
9036206d53f67613958ae1b023aba337ebb46f11a8bAbramo Bagnara      /// \brief An AccessSpecDecl record.
9046206d53f67613958ae1b023aba337ebb46f11a8bAbramo Bagnara      DECL_ACCESS_SPEC,
9056ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner
9065f3dbf5bbc5cb6e3d9273e5b6e82baa14cbd999cArgyrios Kyrtzidis      /// \brief A FriendDecl record.
9076ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      DECL_FRIEND,
9085f3dbf5bbc5cb6e3d9273e5b6e82baa14cbd999cArgyrios Kyrtzidis      /// \brief A FriendTemplateDecl record.
9096ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      DECL_FRIEND_TEMPLATE,
9105f3dbf5bbc5cb6e3d9273e5b6e82baa14cbd999cArgyrios Kyrtzidis      /// \brief A ClassTemplateDecl record.
9116ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      DECL_CLASS_TEMPLATE,
9125f3dbf5bbc5cb6e3d9273e5b6e82baa14cbd999cArgyrios Kyrtzidis      /// \brief A ClassTemplateSpecializationDecl record.
9136ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      DECL_CLASS_TEMPLATE_SPECIALIZATION,
9145f3dbf5bbc5cb6e3d9273e5b6e82baa14cbd999cArgyrios Kyrtzidis      /// \brief A ClassTemplatePartialSpecializationDecl record.
9156ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      DECL_CLASS_TEMPLATE_PARTIAL_SPECIALIZATION,
9165f3dbf5bbc5cb6e3d9273e5b6e82baa14cbd999cArgyrios Kyrtzidis      /// \brief A FunctionTemplateDecl record.
9176ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      DECL_FUNCTION_TEMPLATE,
9185f3dbf5bbc5cb6e3d9273e5b6e82baa14cbd999cArgyrios Kyrtzidis      /// \brief A TemplateTypeParmDecl record.
9196ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      DECL_TEMPLATE_TYPE_PARM,
9205f3dbf5bbc5cb6e3d9273e5b6e82baa14cbd999cArgyrios Kyrtzidis      /// \brief A NonTypeTemplateParmDecl record.
9216ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      DECL_NON_TYPE_TEMPLATE_PARM,
9225f3dbf5bbc5cb6e3d9273e5b6e82baa14cbd999cArgyrios Kyrtzidis      /// \brief A TemplateTemplateParmDecl record.
9236ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      DECL_TEMPLATE_TEMPLATE_PARM,
9243e4c6c4c79a03f5cb0c4671d7c282d623c6dc35eRichard Smith      /// \brief A TypeAliasTemplateDecl record.
9253e4c6c4c79a03f5cb0c4671d7c282d623c6dc35eRichard Smith      DECL_TYPE_ALIAS_TEMPLATE,
9265f3dbf5bbc5cb6e3d9273e5b6e82baa14cbd999cArgyrios Kyrtzidis      /// \brief A StaticAssertDecl record.
9277c789c1a3f77f24032aa0bed2afacdb9e094e952Douglas Gregor      DECL_STATIC_ASSERT,
9287c789c1a3f77f24032aa0bed2afacdb9e094e952Douglas Gregor      /// \brief A record containing CXXBaseSpecifiers.
92987c2e121cf0522fc266efe2922b58091cd2e0182Francois Pichet      DECL_CXX_BASE_SPECIFIERS,
93087c2e121cf0522fc266efe2922b58091cd2e0182Francois Pichet      /// \brief A IndirectFieldDecl record.
9316952f1e4256c5b43aee5e98cea4e9b663bd1d413Douglas Gregor      DECL_INDIRECTFIELD,
9326952f1e4256c5b43aee5e98cea4e9b663bd1d413Douglas Gregor      /// \brief A NonTypeTemplateParmDecl record that stores an expanded
9336952f1e4256c5b43aee5e98cea4e9b663bd1d413Douglas Gregor      /// non-type template parameter pack.
934af0f4d0b2e38c810effc8b024ad2fb6604eec5d3Francois Pichet      DECL_EXPANDED_NON_TYPE_TEMPLATE_PARM_PACK,
935af0f4d0b2e38c810effc8b024ad2fb6604eec5d3Francois Pichet      /// \brief A ClassScopeFunctionSpecializationDecl record a class scope
936af0f4d0b2e38c810effc8b024ad2fb6604eec5d3Francois Pichet      /// function specialization. (Microsoft extension).
93715de72cf580840c61e5704c2f8a2b56f9d0638e1Douglas Gregor      DECL_CLASS_SCOPE_FUNCTION_SPECIALIZATION,
93815de72cf580840c61e5704c2f8a2b56f9d0638e1Douglas Gregor      /// \brief An ImportDecl recording a module import.
93915de72cf580840c61e5704c2f8a2b56f9d0638e1Douglas Gregor      DECL_IMPORT
9402cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    };
9410b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregor
9420b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregor    /// \brief Record codes for each kind of statement or expression.
9430b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregor    ///
9440b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregor    /// These constants describe the records that describe statements
94561d60ee6aa0a5ded0ddcf48679673b37506a1895Douglas Gregor    /// or expressions. These records  occur within type and declarations
94661d60ee6aa0a5ded0ddcf48679673b37506a1895Douglas Gregor    /// block, so they begin with record values of 100.  Each constant
94761d60ee6aa0a5ded0ddcf48679673b37506a1895Douglas Gregor    /// describes a record for a specific statement or expression class in the
94861d60ee6aa0a5ded0ddcf48679673b37506a1895Douglas Gregor    /// AST.
9490b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregor    enum StmtCode {
950087fd536809ebe754d91c641a98917e02dd7452dDouglas Gregor      /// \brief A marker record that indicates that we are at the end
951087fd536809ebe754d91c641a98917e02dd7452dDouglas Gregor      /// of an expression.
95261d60ee6aa0a5ded0ddcf48679673b37506a1895Douglas Gregor      STMT_STOP = 100,
9530b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregor      /// \brief A NULL expression.
954c9490c000f515c29f200a1215328d8ab9a0f3818Douglas Gregor      STMT_NULL_PTR,
955e6f0868a55aba2613e2d5dba3348aaf1064e6ddbArgyrios Kyrtzidis      /// \brief A reference to a previously [de]serialized Stmt record.
956e6f0868a55aba2613e2d5dba3348aaf1064e6ddbArgyrios Kyrtzidis      STMT_REF_PTR,
957025452fa0eda63e150cfaeebe64f0a19c96b3a06Douglas Gregor      /// \brief A NullStmt record.
958025452fa0eda63e150cfaeebe64f0a19c96b3a06Douglas Gregor      STMT_NULL,
959025452fa0eda63e150cfaeebe64f0a19c96b3a06Douglas Gregor      /// \brief A CompoundStmt record.
960025452fa0eda63e150cfaeebe64f0a19c96b3a06Douglas Gregor      STMT_COMPOUND,
961025452fa0eda63e150cfaeebe64f0a19c96b3a06Douglas Gregor      /// \brief A CaseStmt record.
962025452fa0eda63e150cfaeebe64f0a19c96b3a06Douglas Gregor      STMT_CASE,
963025452fa0eda63e150cfaeebe64f0a19c96b3a06Douglas Gregor      /// \brief A DefaultStmt record.
964025452fa0eda63e150cfaeebe64f0a19c96b3a06Douglas Gregor      STMT_DEFAULT,
9651de05feeeafe5b215fe7617594a7076a5192a6e2Douglas Gregor      /// \brief A LabelStmt record.
9661de05feeeafe5b215fe7617594a7076a5192a6e2Douglas Gregor      STMT_LABEL,
967534986f2b21e6050bf00163cd6423fd92155a6edRichard Smith      /// \brief An AttributedStmt record.
968534986f2b21e6050bf00163cd6423fd92155a6edRichard Smith      STMT_ATTRIBUTED,
969025452fa0eda63e150cfaeebe64f0a19c96b3a06Douglas Gregor      /// \brief An IfStmt record.
970025452fa0eda63e150cfaeebe64f0a19c96b3a06Douglas Gregor      STMT_IF,
971025452fa0eda63e150cfaeebe64f0a19c96b3a06Douglas Gregor      /// \brief A SwitchStmt record.
972025452fa0eda63e150cfaeebe64f0a19c96b3a06Douglas Gregor      STMT_SWITCH,
973d921cf976b4769af8d06d6763a2547dadf7940abDouglas Gregor      /// \brief A WhileStmt record.
974d921cf976b4769af8d06d6763a2547dadf7940abDouglas Gregor      STMT_WHILE,
97567d8249924ef38a5375ff9c92cd21c1854d6ababDouglas Gregor      /// \brief A DoStmt record.
97667d8249924ef38a5375ff9c92cd21c1854d6ababDouglas Gregor      STMT_DO,
97767d8249924ef38a5375ff9c92cd21c1854d6ababDouglas Gregor      /// \brief A ForStmt record.
97867d8249924ef38a5375ff9c92cd21c1854d6ababDouglas Gregor      STMT_FOR,
9791de05feeeafe5b215fe7617594a7076a5192a6e2Douglas Gregor      /// \brief A GotoStmt record.
9801de05feeeafe5b215fe7617594a7076a5192a6e2Douglas Gregor      STMT_GOTO,
9817d5c2f241c74e5f8d9ec492e8f9f268e5e9ae41fDouglas Gregor      /// \brief An IndirectGotoStmt record.
9827d5c2f241c74e5f8d9ec492e8f9f268e5e9ae41fDouglas Gregor      STMT_INDIRECT_GOTO,
983d921cf976b4769af8d06d6763a2547dadf7940abDouglas Gregor      /// \brief A ContinueStmt record.
984d921cf976b4769af8d06d6763a2547dadf7940abDouglas Gregor      STMT_CONTINUE,
985025452fa0eda63e150cfaeebe64f0a19c96b3a06Douglas Gregor      /// \brief A BreakStmt record.
986025452fa0eda63e150cfaeebe64f0a19c96b3a06Douglas Gregor      STMT_BREAK,
9870de9d8857b715c2f45c987651f4ce06d73330d93Douglas Gregor      /// \brief A ReturnStmt record.
9880de9d8857b715c2f45c987651f4ce06d73330d93Douglas Gregor      STMT_RETURN,
98984f2170062014d268951902164bed0d8bdea0e82Douglas Gregor      /// \brief A DeclStmt record.
99084f2170062014d268951902164bed0d8bdea0e82Douglas Gregor      STMT_DECL,
991cd7d5a9dc558178ed7a66032f888781b3c592e4fDouglas Gregor      /// \brief An AsmStmt record.
992cd7d5a9dc558178ed7a66032f888781b3c592e4fDouglas Gregor      STMT_ASM,
99317fc223395d51be582fc666bb6ea21bd1dff26dcDouglas Gregor      /// \brief A PredefinedExpr record.
99417fc223395d51be582fc666bb6ea21bd1dff26dcDouglas Gregor      EXPR_PREDEFINED,
9950b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregor      /// \brief A DeclRefExpr record.
9960b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregor      EXPR_DECL_REF,
9970b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregor      /// \brief An IntegerLiteral record.
9980b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregor      EXPR_INTEGER_LITERAL,
99917fc223395d51be582fc666bb6ea21bd1dff26dcDouglas Gregor      /// \brief A FloatingLiteral record.
100017fc223395d51be582fc666bb6ea21bd1dff26dcDouglas Gregor      EXPR_FLOATING_LITERAL,
1001cb2ca73c1d7e76cc1358ce51457d2d5837d84f9bDouglas Gregor      /// \brief An ImaginaryLiteral record.
1002cb2ca73c1d7e76cc1358ce51457d2d5837d84f9bDouglas Gregor      EXPR_IMAGINARY_LITERAL,
1003673ecd6a4a9f7c12fb6f76f84f654dbdcdc89e76Douglas Gregor      /// \brief A StringLiteral record.
1004673ecd6a4a9f7c12fb6f76f84f654dbdcdc89e76Douglas Gregor      EXPR_STRING_LITERAL,
10050b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregor      /// \brief A CharacterLiteral record.
1006087fd536809ebe754d91c641a98917e02dd7452dDouglas Gregor      EXPR_CHARACTER_LITERAL,
1007c04db4feefa2b0dbbc6876cb4eeeee108aa6791dDouglas Gregor      /// \brief A ParenExpr record.
1008c04db4feefa2b0dbbc6876cb4eeeee108aa6791dDouglas Gregor      EXPR_PAREN,
100937bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis      /// \brief A ParenListExpr record.
101037bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis      EXPR_PAREN_LIST,
10110b0b77fa29c74c99a77548ed86ca8a04f7cf6b02Douglas Gregor      /// \brief A UnaryOperator record.
10120b0b77fa29c74c99a77548ed86ca8a04f7cf6b02Douglas Gregor      EXPR_UNARY_OPERATOR,
10138ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor      /// \brief An OffsetOfExpr record.
10148ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor      EXPR_OFFSETOF,
10150b0b77fa29c74c99a77548ed86ca8a04f7cf6b02Douglas Gregor      /// \brief A SizefAlignOfExpr record.
10160b0b77fa29c74c99a77548ed86ca8a04f7cf6b02Douglas Gregor      EXPR_SIZEOF_ALIGN_OF,
1017cb2ca73c1d7e76cc1358ce51457d2d5837d84f9bDouglas Gregor      /// \brief An ArraySubscriptExpr record.
1018cb2ca73c1d7e76cc1358ce51457d2d5837d84f9bDouglas Gregor      EXPR_ARRAY_SUBSCRIPT,
10191f0d0133b0e8d1f01f63951ee04927796b34740dDouglas Gregor      /// \brief A CallExpr record.
10201f0d0133b0e8d1f01f63951ee04927796b34740dDouglas Gregor      EXPR_CALL,
10211f0d0133b0e8d1f01f63951ee04927796b34740dDouglas Gregor      /// \brief A MemberExpr record.
10221f0d0133b0e8d1f01f63951ee04927796b34740dDouglas Gregor      EXPR_MEMBER,
1023db600c330a37b1c3ab4533310729910ee188f900Douglas Gregor      /// \brief A BinaryOperator record.
1024db600c330a37b1c3ab4533310729910ee188f900Douglas Gregor      EXPR_BINARY_OPERATOR,
1025ad90e96fb7eed26d5217dd06ba50ecbbbebb59e6Douglas Gregor      /// \brief A CompoundAssignOperator record.
1026ad90e96fb7eed26d5217dd06ba50ecbbbebb59e6Douglas Gregor      EXPR_COMPOUND_ASSIGN_OPERATOR,
1027ad90e96fb7eed26d5217dd06ba50ecbbbebb59e6Douglas Gregor      /// \brief A ConditionOperator record.
1028ad90e96fb7eed26d5217dd06ba50ecbbbebb59e6Douglas Gregor      EXPR_CONDITIONAL_OPERATOR,
1029087fd536809ebe754d91c641a98917e02dd7452dDouglas Gregor      /// \brief An ImplicitCastExpr record.
1030db600c330a37b1c3ab4533310729910ee188f900Douglas Gregor      EXPR_IMPLICIT_CAST,
1031db600c330a37b1c3ab4533310729910ee188f900Douglas Gregor      /// \brief A CStyleCastExpr record.
1032d3c98a02c73417689deaaa6671ea6df7f2a8a73cDouglas Gregor      EXPR_CSTYLE_CAST,
1033ba6d7e7fa5f79959d3eef39adb5620d845ba5198Douglas Gregor      /// \brief A CompoundLiteralExpr record.
1034ba6d7e7fa5f79959d3eef39adb5620d845ba5198Douglas Gregor      EXPR_COMPOUND_LITERAL,
1035d3c98a02c73417689deaaa6671ea6df7f2a8a73cDouglas Gregor      /// \brief An ExtVectorElementExpr record.
1036d3c98a02c73417689deaaa6671ea6df7f2a8a73cDouglas Gregor      EXPR_EXT_VECTOR_ELEMENT,
1037d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor      /// \brief An InitListExpr record.
1038d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor      EXPR_INIT_LIST,
1039d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor      /// \brief A DesignatedInitExpr record.
1040d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor      EXPR_DESIGNATED_INIT,
1041d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor      /// \brief An ImplicitValueInitExpr record.
1042d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor      EXPR_IMPLICIT_VALUE_INIT,
1043d3c98a02c73417689deaaa6671ea6df7f2a8a73cDouglas Gregor      /// \brief A VAArgExpr record.
104444cae0c8669cdf83618cbe7fd36ea7a8e51cf97fDouglas Gregor      EXPR_VA_ARG,
10456a2dd55b0b3ae376d449a4b07bbb6b2d30b26330Douglas Gregor      /// \brief An AddrLabelExpr record.
10467d5c2f241c74e5f8d9ec492e8f9f268e5e9ae41fDouglas Gregor      EXPR_ADDR_LABEL,
10476a2dd55b0b3ae376d449a4b07bbb6b2d30b26330Douglas Gregor      /// \brief A StmtExpr record.
10486a2dd55b0b3ae376d449a4b07bbb6b2d30b26330Douglas Gregor      EXPR_STMT,
104944cae0c8669cdf83618cbe7fd36ea7a8e51cf97fDouglas Gregor      /// \brief A ChooseExpr record.
105044cae0c8669cdf83618cbe7fd36ea7a8e51cf97fDouglas Gregor      EXPR_CHOOSE,
105144cae0c8669cdf83618cbe7fd36ea7a8e51cf97fDouglas Gregor      /// \brief A GNUNullExpr record.
105294cd5d1397bb1a8bcd109602aa38dd787b164c22Douglas Gregor      EXPR_GNU_NULL,
105394cd5d1397bb1a8bcd109602aa38dd787b164c22Douglas Gregor      /// \brief A ShuffleVectorExpr record.
105494cd5d1397bb1a8bcd109602aa38dd787b164c22Douglas Gregor      EXPR_SHUFFLE_VECTOR,
105584af7c27cdc615ff917a501d61256b4049383c97Douglas Gregor      /// \brief BlockExpr
105684af7c27cdc615ff917a501d61256b4049383c97Douglas Gregor      EXPR_BLOCK,
1057f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbourne      /// \brief A GenericSelectionExpr record.
1058f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbourne      EXPR_GENERIC_SELECTION,
10594b9c2d235fb9449e249d74f48ecfec601650de93John McCall      /// \brief A PseudoObjectExpr record.
10604b9c2d235fb9449e249d74f48ecfec601650de93John McCall      EXPR_PSEUDO_OBJECT,
1061276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman      /// \brief An AtomicExpr record.
1062276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman      EXPR_ATOMIC,
1063276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman
10644dcf151a555ff51e4d643e8e6eeb80f121d11d1bChris Lattner      // Objective-C
10651eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
10660389e6bd0159bfdd08f7c50a37543b6e3adf0c33Chris Lattner      /// \brief An ObjCStringLiteral record.
10673a57a3765b6192a94ff4e5997ae0489a1471b308Chris Lattner      EXPR_OBJC_STRING_LITERAL,
1068ebcb57a8d298862c65043e88b2429591ab3c58d3Ted Kremenek
1069eb382ec1507cf2c8c12d7443d0b67c076223aec6Patrick Beard      EXPR_OBJC_BOXED_EXPRESSION,
1070ebcb57a8d298862c65043e88b2429591ab3c58d3Ted Kremenek      EXPR_OBJC_ARRAY_LITERAL,
1071ebcb57a8d298862c65043e88b2429591ab3c58d3Ted Kremenek      EXPR_OBJC_DICTIONARY_LITERAL,
1072ebcb57a8d298862c65043e88b2429591ab3c58d3Ted Kremenek
1073ebcb57a8d298862c65043e88b2429591ab3c58d3Ted Kremenek
10740389e6bd0159bfdd08f7c50a37543b6e3adf0c33Chris Lattner      /// \brief An ObjCEncodeExpr record.
10753a57a3765b6192a94ff4e5997ae0489a1471b308Chris Lattner      EXPR_OBJC_ENCODE,
10760389e6bd0159bfdd08f7c50a37543b6e3adf0c33Chris Lattner      /// \brief An ObjCSelectorExpr record.
10773a57a3765b6192a94ff4e5997ae0489a1471b308Chris Lattner      EXPR_OBJC_SELECTOR_EXPR,
10780389e6bd0159bfdd08f7c50a37543b6e3adf0c33Chris Lattner      /// \brief An ObjCProtocolExpr record.
1079c4f0bbdb166fbc31ab2cf0f6ff573fde9fa307b3Steve Naroff      EXPR_OBJC_PROTOCOL_EXPR,
10800389e6bd0159bfdd08f7c50a37543b6e3adf0c33Chris Lattner      /// \brief An ObjCIvarRefExpr record.
10810389e6bd0159bfdd08f7c50a37543b6e3adf0c33Chris Lattner      EXPR_OBJC_IVAR_REF_EXPR,
10820389e6bd0159bfdd08f7c50a37543b6e3adf0c33Chris Lattner      /// \brief An ObjCPropertyRefExpr record.
10830389e6bd0159bfdd08f7c50a37543b6e3adf0c33Chris Lattner      EXPR_OBJC_PROPERTY_REF_EXPR,
1084ebcb57a8d298862c65043e88b2429591ab3c58d3Ted Kremenek      /// \brief An ObjCSubscriptRefExpr record.
1085ebcb57a8d298862c65043e88b2429591ab3c58d3Ted Kremenek      EXPR_OBJC_SUBSCRIPT_REF_EXPR,
108612f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall      /// \brief UNUSED
10870389e6bd0159bfdd08f7c50a37543b6e3adf0c33Chris Lattner      EXPR_OBJC_KVC_REF_EXPR,
10880389e6bd0159bfdd08f7c50a37543b6e3adf0c33Chris Lattner      /// \brief An ObjCMessageExpr record.
10890389e6bd0159bfdd08f7c50a37543b6e3adf0c33Chris Lattner      EXPR_OBJC_MESSAGE_EXPR,
1090f242b1b0c4e998911cb96b2ba7e27ab4a5abaed3Steve Naroff      /// \brief An ObjCIsa Expr record.
1091f242b1b0c4e998911cb96b2ba7e27ab4a5abaed3Steve Naroff      EXPR_OBJC_ISA,
1092f85e193739c953358c865005855253af4f68a497John McCall      /// \breif An ObjCIndirectCopyRestoreExpr record.
1093f85e193739c953358c865005855253af4f68a497John McCall      EXPR_OBJC_INDIRECT_COPY_RESTORE,
10941eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
10951eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump      /// \brief An ObjCForCollectionStmt record.
10961eb5540760dc79502e32d4fe9c28217476ea14b9Steve Naroff      STMT_OBJC_FOR_COLLECTION,
10971eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump      /// \brief An ObjCAtCatchStmt record.
10981eb5540760dc79502e32d4fe9c28217476ea14b9Steve Naroff      STMT_OBJC_CATCH,
10991eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump      /// \brief An ObjCAtFinallyStmt record.
11001eb5540760dc79502e32d4fe9c28217476ea14b9Steve Naroff      STMT_OBJC_FINALLY,
11011eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump      /// \brief An ObjCAtTryStmt record.
11021eb5540760dc79502e32d4fe9c28217476ea14b9Steve Naroff      STMT_OBJC_AT_TRY,
11031eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump      /// \brief An ObjCAtSynchronizedStmt record.
11041eb5540760dc79502e32d4fe9c28217476ea14b9Steve Naroff      STMT_OBJC_AT_SYNCHRONIZED,
11051eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump      /// \brief An ObjCAtThrowStmt record.
1106ba0a9006dbc4814e1e35f82812cb5a1dad65e8b8Argyrios Kyrtzidis      STMT_OBJC_AT_THROW,
1107f85e193739c953358c865005855253af4f68a497John McCall      /// \brief An ObjCAutoreleasePoolStmt record.
1108f85e193739c953358c865005855253af4f68a497John McCall      STMT_OBJC_AUTORELEASE_POOL,
1109ebcb57a8d298862c65043e88b2429591ab3c58d3Ted Kremenek      /// \brief A ObjCBoolLiteralExpr record.
1110ebcb57a8d298862c65043e88b2429591ab3c58d3Ted Kremenek      EXPR_OBJC_BOOL_LITERAL,
1111ba0a9006dbc4814e1e35f82812cb5a1dad65e8b8Argyrios Kyrtzidis
1112ba0a9006dbc4814e1e35f82812cb5a1dad65e8b8Argyrios Kyrtzidis      // C++
11137cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis
11147cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis      /// \brief A CXXCatchStmt record.
11157cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis      STMT_CXX_CATCH,
11167cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis      /// \brief A CXXTryStmt record.
11177cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis      STMT_CXX_TRY,
1118ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith      /// \brief A CXXForRangeStmt record.
1119ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith      STMT_CXX_FOR_RANGE,
1120ba0a9006dbc4814e1e35f82812cb5a1dad65e8b8Argyrios Kyrtzidis
112139da0b8145eaec7da7004f9b3645c5c9f4f63b1dDouglas Gregor      /// \brief A CXXOperatorCallExpr record.
112239da0b8145eaec7da7004f9b3645c5c9f4f63b1dDouglas Gregor      EXPR_CXX_OPERATOR_CALL,
11231817bd483b538fd3f4530649f5cb900bad9e8a76Chris Lattner      /// \brief A CXXMemberCallExpr record.
11241817bd483b538fd3f4530649f5cb900bad9e8a76Chris Lattner      EXPR_CXX_MEMBER_CALL,
112539da0b8145eaec7da7004f9b3645c5c9f4f63b1dDouglas Gregor      /// \brief A CXXConstructExpr record.
1126ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig      EXPR_CXX_CONSTRUCT,
11276d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis      /// \brief A CXXTemporaryObjectExpr record.
11286d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis      EXPR_CXX_TEMPORARY_OBJECT,
1129f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl      /// \brief A CXXStaticCastExpr record.
1130ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig      EXPR_CXX_STATIC_CAST,
1131f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl      /// \brief A CXXDynamicCastExpr record.
1132ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig      EXPR_CXX_DYNAMIC_CAST,
1133f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl      /// \brief A CXXReinterpretCastExpr record.
1134ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig      EXPR_CXX_REINTERPRET_CAST,
1135f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl      /// \brief A CXXConstCastExpr record.
1136ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig      EXPR_CXX_CONST_CAST,
1137f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl      /// \brief A CXXFunctionalCastExpr record.
1138eb7f96141f754150a92433286fa385910a22f494Sam Weinig      EXPR_CXX_FUNCTIONAL_CAST,
11399fcce65e7e1307b5b8da9be13e4092d6bb94dc1dRichard Smith      /// \brief A UserDefinedLiteral record.
11409fcce65e7e1307b5b8da9be13e4092d6bb94dc1dRichard Smith      EXPR_USER_DEFINED_LITERAL,
1141f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl      /// \brief A CXXBoolLiteralExpr record.
1142eb7f96141f754150a92433286fa385910a22f494Sam Weinig      EXPR_CXX_BOOL_LITERAL,
114314ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner      EXPR_CXX_NULL_PTR_LITERAL,  // CXXNullPtrLiteralExpr
114414ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner      EXPR_CXX_TYPEID_EXPR,       // CXXTypeidExpr (of expr).
11452fbdfcdf3bbf7b941853d38b123930755e837437Chris Lattner      EXPR_CXX_TYPEID_TYPE,       // CXXTypeidExpr (of type).
11462fbdfcdf3bbf7b941853d38b123930755e837437Chris Lattner      EXPR_CXX_THIS,              // CXXThisExpr
1147030854b95f7bfd86aaa8afd9ae1aff9768a37e9aChris Lattner      EXPR_CXX_THROW,             // CXXThrowExpr
1148d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner      EXPR_CXX_DEFAULT_ARG,       // CXXDefaultArgExpr
1149d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner      EXPR_CXX_BIND_TEMPORARY,    // CXXBindTemporaryExpr
11506d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis
1151ed8abf18329df67b0abcbb3a10458bd8c1d2a595Douglas Gregor      EXPR_CXX_SCALAR_VALUE_INIT, // CXXScalarValueInitExpr
11525921863d8f24084797863b5df37842113bac4352Chris Lattner      EXPR_CXX_NEW,               // CXXNewExpr
115395fc98ce95d4faa4f1bb2783384150530404ea6fArgyrios Kyrtzidis      EXPR_CXX_DELETE,            // CXXDeleteExpr
1154de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis      EXPR_CXX_PSEUDO_DESTRUCTOR, // CXXPseudoDestructorExpr
1155d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner
11564765fa05b5652fcc4356371c2f481d0ea9a1b007John McCall      EXPR_EXPR_WITH_CLEANUPS,    // ExprWithCleanups
11578dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis
11586b219d082434394c1ac401390ec1d1967727815aSebastian Redl      EXPR_CXX_DEPENDENT_SCOPE_MEMBER,   // CXXDependentScopeMemberExpr
11596b219d082434394c1ac401390ec1d1967727815aSebastian Redl      EXPR_CXX_DEPENDENT_SCOPE_DECL_REF, // DependentScopeDeclRefExpr
11606b219d082434394c1ac401390ec1d1967727815aSebastian Redl      EXPR_CXX_UNRESOLVED_CONSTRUCT,     // CXXUnresolvedConstructExpr
11616b219d082434394c1ac401390ec1d1967727815aSebastian Redl      EXPR_CXX_UNRESOLVED_MEMBER,        // UnresolvedMemberExpr
11626b219d082434394c1ac401390ec1d1967727815aSebastian Redl      EXPR_CXX_UNRESOLVED_LOOKUP,        // UnresolvedLookupExpr
11636b219d082434394c1ac401390ec1d1967727815aSebastian Redl
11646b219d082434394c1ac401390ec1d1967727815aSebastian Redl      EXPR_CXX_UNARY_TYPE_TRAIT,  // UnaryTypeTraitExpr
1165552622067dc45013d240f73952fece703f5e63bdJohn Wiegley      EXPR_CXX_EXPRESSION_TRAIT,  // ExpressionTraitExpr
11667cd7d1ad33fdf49eef83942e8855fe20d95aa1b9John McCall      EXPR_CXX_NOEXCEPT,          // CXXNoexceptExpr
11677cd7d1ad33fdf49eef83942e8855fe20d95aa1b9John McCall
11686ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichet      EXPR_OPAQUE_VALUE,          // OpaqueValueExpr
116956ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall      EXPR_BINARY_CONDITIONAL_OPERATOR,  // BinaryConditionalOperator
1170be230c36e32142cbdcdbe9c97511d097beeecbabDouglas Gregor      EXPR_BINARY_TYPE_TRAIT,     // BinaryTypeTraitExpr
11714ca8ac2e61c37ddadf37024af86f3e1019af8532Douglas Gregor      EXPR_TYPE_TRAIT,            // TypeTraitExpr
117221ff2e516b0e0bc8c1dbf965cb3d44bac3c64330John Wiegley      EXPR_ARRAY_TYPE_TRAIT,      // ArrayTypeTraitIntExpr
1173be230c36e32142cbdcdbe9c97511d097beeecbabDouglas Gregor
1174ee8aff06f6a96214731de17b2cb6df407c6c1820Douglas Gregor      EXPR_PACK_EXPANSION,        // PackExpansionExpr
1175c7793c73ba8a343de3f2552d984851985a46f159Douglas Gregor      EXPR_SIZEOF_PACK,           // SizeOfPackExpr
11767110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall      EXPR_SUBST_NON_TYPE_TEMPLATE_PARM, // SubstNonTypeTemplateParmExpr
1177e08ce650a2b02410eddd1f60a4aa6b3d4be71e73Peter Collingbourne      EXPR_SUBST_NON_TYPE_TEMPLATE_PARM_PACK,// SubstNonTypeTemplateParmPackExpr
117803e80030515c800d1ab44125b9052dfffd1bd04cDouglas Gregor      EXPR_MATERIALIZE_TEMPORARY, // MaterializeTemporaryExpr
117903e80030515c800d1ab44125b9052dfffd1bd04cDouglas Gregor
1180e08ce650a2b02410eddd1f60a4aa6b3d4be71e73Peter Collingbourne      // CUDA
1181f85e193739c953358c865005855253af4f68a497John McCall      EXPR_CUDA_KERNEL_CALL,       // CUDAKernelCallExpr
1182e08ce650a2b02410eddd1f60a4aa6b3d4be71e73Peter Collingbourne
118361eee0ca33b29e102f11bab77c8b74cc00e2392bTanya Lattner      // OpenCL
1184f85e193739c953358c865005855253af4f68a497John McCall      EXPR_ASTYPE,                 // AsTypeExpr
11857110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall
11867110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall      // Microsoft
11877110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall      EXPR_CXX_UUIDOF_EXPR,       // CXXUuidofExpr (of expr).
11887110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall      EXPR_CXX_UUIDOF_TYPE,       // CXXUuidofExpr (of type).
11897110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall      STMT_SEH_EXCEPT,            // SEHExceptStmt
11907110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall      STMT_SEH_FINALLY,           // SEHFinallyStmt
11917110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall      STMT_SEH_TRY,               // SEHTryStmt
1192f85e193739c953358c865005855253af4f68a497John McCall
1193f85e193739c953358c865005855253af4f68a497John McCall      // ARC
1194ba0513de93d2fab6db5ab30b6927209fcc883078Douglas Gregor      EXPR_OBJC_BRIDGED_CAST,     // ObjCBridgedCastExpr
1195ba0513de93d2fab6db5ab30b6927209fcc883078Douglas Gregor
11969d36f5dc4121f0f931211ea2d0a74d299eb82b23Douglas Gregor      STMT_MS_DEPENDENT_EXISTS,   // MSDependentExistsStmt
11979d36f5dc4121f0f931211ea2d0a74d299eb82b23Douglas Gregor      EXPR_LAMBDA                 // LambdaExpr
11980b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregor    };
1199d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor
1200d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor    /// \brief The kinds of designators that can occur in a
1201d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor    /// DesignatedInitExpr.
1202d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor    enum DesignatorTypes {
1203d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor      /// \brief Field designator where only the field name is known.
1204d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor      DESIG_FIELD_NAME  = 0,
1205d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor      /// \brief Field designator where the field has been resolved to
1206d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor      /// a declaration.
1207d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor      DESIG_FIELD_DECL  = 1,
1208d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor      /// \brief Array designator.
1209d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor      DESIG_ARRAY       = 2,
1210d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor      /// \brief GNU array range designator.
1211d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor      DESIG_ARRAY_RANGE = 3
1212d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor    };
1213d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor
1214156b640c67300f2b70eb11102aa393a610798cc6Sean Hunt    /// \brief The different kinds of data that can occur in a
1215156b640c67300f2b70eb11102aa393a610798cc6Sean Hunt    /// CtorInitializer.
1216156b640c67300f2b70eb11102aa393a610798cc6Sean Hunt    enum CtorInitializerType {
1217156b640c67300f2b70eb11102aa393a610798cc6Sean Hunt      CTOR_INITIALIZER_BASE,
1218156b640c67300f2b70eb11102aa393a610798cc6Sean Hunt      CTOR_INITIALIZER_DELEGATING,
1219156b640c67300f2b70eb11102aa393a610798cc6Sean Hunt      CTOR_INITIALIZER_MEMBER,
1220156b640c67300f2b70eb11102aa393a610798cc6Sean Hunt      CTOR_INITIALIZER_INDIRECT_MEMBER
1221156b640c67300f2b70eb11102aa393a610798cc6Sean Hunt    };
1222156b640c67300f2b70eb11102aa393a610798cc6Sean Hunt
1223a1be278c4f3a234ff61f04018d26c6beecde1654Douglas Gregor    /// \brief Describes the redeclarations of a declaration.
1224a1be278c4f3a234ff61f04018d26c6beecde1654Douglas Gregor    struct LocalRedeclarationsInfo {
1225a1be278c4f3a234ff61f04018d26c6beecde1654Douglas Gregor      DeclID FirstID;      // The ID of the first declaration
12262171bf1caba4d4b9eeb6a91efac4300b41f38b07Douglas Gregor      unsigned Offset;     // Offset into the array of redeclaration chains.
1227a1be278c4f3a234ff61f04018d26c6beecde1654Douglas Gregor
1228a1be278c4f3a234ff61f04018d26c6beecde1654Douglas Gregor      friend bool operator<(const LocalRedeclarationsInfo &X,
1229a1be278c4f3a234ff61f04018d26c6beecde1654Douglas Gregor                            const LocalRedeclarationsInfo &Y) {
1230a1be278c4f3a234ff61f04018d26c6beecde1654Douglas Gregor        return X.FirstID < Y.FirstID;
1231a1be278c4f3a234ff61f04018d26c6beecde1654Douglas Gregor      }
1232a1be278c4f3a234ff61f04018d26c6beecde1654Douglas Gregor
1233a1be278c4f3a234ff61f04018d26c6beecde1654Douglas Gregor      friend bool operator>(const LocalRedeclarationsInfo &X,
1234a1be278c4f3a234ff61f04018d26c6beecde1654Douglas Gregor                            const LocalRedeclarationsInfo &Y) {
1235a1be278c4f3a234ff61f04018d26c6beecde1654Douglas Gregor        return X.FirstID > Y.FirstID;
1236a1be278c4f3a234ff61f04018d26c6beecde1654Douglas Gregor      }
1237a1be278c4f3a234ff61f04018d26c6beecde1654Douglas Gregor
1238a1be278c4f3a234ff61f04018d26c6beecde1654Douglas Gregor      friend bool operator<=(const LocalRedeclarationsInfo &X,
1239a1be278c4f3a234ff61f04018d26c6beecde1654Douglas Gregor                             const LocalRedeclarationsInfo &Y) {
1240a1be278c4f3a234ff61f04018d26c6beecde1654Douglas Gregor        return X.FirstID <= Y.FirstID;
1241a1be278c4f3a234ff61f04018d26c6beecde1654Douglas Gregor      }
1242a1be278c4f3a234ff61f04018d26c6beecde1654Douglas Gregor
1243a1be278c4f3a234ff61f04018d26c6beecde1654Douglas Gregor      friend bool operator>=(const LocalRedeclarationsInfo &X,
1244a1be278c4f3a234ff61f04018d26c6beecde1654Douglas Gregor                             const LocalRedeclarationsInfo &Y) {
1245a1be278c4f3a234ff61f04018d26c6beecde1654Douglas Gregor        return X.FirstID >= Y.FirstID;
1246a1be278c4f3a234ff61f04018d26c6beecde1654Douglas Gregor      }
1247a1be278c4f3a234ff61f04018d26c6beecde1654Douglas Gregor    };
1248a1be278c4f3a234ff61f04018d26c6beecde1654Douglas Gregor
1249cff9f26ce0ed76d555cd33b3dca84dd5cdf376afDouglas Gregor    /// \brief Describes the categories of an Objective-C class.
1250cff9f26ce0ed76d555cd33b3dca84dd5cdf376afDouglas Gregor    struct ObjCCategoriesInfo {
1251cff9f26ce0ed76d555cd33b3dca84dd5cdf376afDouglas Gregor      DeclID DefinitionID; // The ID of the definition
1252cff9f26ce0ed76d555cd33b3dca84dd5cdf376afDouglas Gregor      unsigned Offset;     // Offset into the array of category lists.
1253cff9f26ce0ed76d555cd33b3dca84dd5cdf376afDouglas Gregor
1254cff9f26ce0ed76d555cd33b3dca84dd5cdf376afDouglas Gregor      friend bool operator<(const ObjCCategoriesInfo &X,
1255cff9f26ce0ed76d555cd33b3dca84dd5cdf376afDouglas Gregor                            const ObjCCategoriesInfo &Y) {
1256cff9f26ce0ed76d555cd33b3dca84dd5cdf376afDouglas Gregor        return X.DefinitionID < Y.DefinitionID;
1257cff9f26ce0ed76d555cd33b3dca84dd5cdf376afDouglas Gregor      }
1258cff9f26ce0ed76d555cd33b3dca84dd5cdf376afDouglas Gregor
1259cff9f26ce0ed76d555cd33b3dca84dd5cdf376afDouglas Gregor      friend bool operator>(const ObjCCategoriesInfo &X,
1260cff9f26ce0ed76d555cd33b3dca84dd5cdf376afDouglas Gregor                            const ObjCCategoriesInfo &Y) {
1261cff9f26ce0ed76d555cd33b3dca84dd5cdf376afDouglas Gregor        return X.DefinitionID > Y.DefinitionID;
1262cff9f26ce0ed76d555cd33b3dca84dd5cdf376afDouglas Gregor      }
1263cff9f26ce0ed76d555cd33b3dca84dd5cdf376afDouglas Gregor
1264cff9f26ce0ed76d555cd33b3dca84dd5cdf376afDouglas Gregor      friend bool operator<=(const ObjCCategoriesInfo &X,
1265cff9f26ce0ed76d555cd33b3dca84dd5cdf376afDouglas Gregor                             const ObjCCategoriesInfo &Y) {
1266cff9f26ce0ed76d555cd33b3dca84dd5cdf376afDouglas Gregor        return X.DefinitionID <= Y.DefinitionID;
1267cff9f26ce0ed76d555cd33b3dca84dd5cdf376afDouglas Gregor      }
1268cff9f26ce0ed76d555cd33b3dca84dd5cdf376afDouglas Gregor
1269cff9f26ce0ed76d555cd33b3dca84dd5cdf376afDouglas Gregor      friend bool operator>=(const ObjCCategoriesInfo &X,
1270cff9f26ce0ed76d555cd33b3dca84dd5cdf376afDouglas Gregor                             const ObjCCategoriesInfo &Y) {
1271cff9f26ce0ed76d555cd33b3dca84dd5cdf376afDouglas Gregor        return X.DefinitionID >= Y.DefinitionID;
1272cff9f26ce0ed76d555cd33b3dca84dd5cdf376afDouglas Gregor      }
1273cff9f26ce0ed76d555cd33b3dca84dd5cdf376afDouglas Gregor    };
1274cff9f26ce0ed76d555cd33b3dca84dd5cdf376afDouglas Gregor
127514f79002e58556798e86168c63e48d533287eda5Douglas Gregor    /// @}
12762cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor  }
12772cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor} // end namespace clang
12782cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor
12792cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor#endif
1280