ASTBitCodes.h revision 34b41d939a1328f484511c6002ba2456db879a29
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
50f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl    /// \brief An ID number that refers to a declaration in an AST file.
518038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor    ///
52a93e3b5bde9f0a7b59215f19f176f7d69881b81cSebastian Redl    /// The ID numbers of declarations are consecutive (in order of
538038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor    /// discovery) and start at 2. 0 is reserved for NULL, and 1 is
548038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor    /// reserved for the translation unit declaration.
558038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor    typedef uint32_t DeclID;
568038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor
57eb5e9986e577b1e2bff3cca5973a2494fb593fbbArgyrios Kyrtzidis    /// \brief a Decl::Kind/DeclID pair.
58eb5e9986e577b1e2bff3cca5973a2494fb593fbbArgyrios Kyrtzidis    typedef std::pair<uint32_t, DeclID> KindDeclIDPair;
59eb5e9986e577b1e2bff3cca5973a2494fb593fbbArgyrios Kyrtzidis
60f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl    /// \brief An ID number that refers to a type in an AST file.
618038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor    ///
628038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor    /// The ID of a type is partitioned into two parts: the lower
638038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor    /// three bits are used to store the const/volatile/restrict
648038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor    /// qualifiers (as with QualType) and the upper bits provide a
658038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor    /// type index. The type index values are partitioned into two
668038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor    /// sets. The values below NUM_PREDEF_TYPE_IDs are predefined type
678038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor    /// IDs (based on the PREDEF_TYPE_*_ID constants), with 0 as a
688038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor    /// placeholder for "no type". Values from NUM_PREDEF_TYPE_IDs are
698038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor    /// other types that have serialized representations.
708038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor    typedef uint32_t TypeID;
712cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor
72c8e5d51f51e46c6f7717761537c6609ef9daf57cArgyrios Kyrtzidis    /// \brief A type index; the type ID with the qualifier bits removed.
73c8e5d51f51e46c6f7717761537c6609ef9daf57cArgyrios Kyrtzidis    class TypeIdx {
74c8e5d51f51e46c6f7717761537c6609ef9daf57cArgyrios Kyrtzidis      uint32_t Idx;
75c8e5d51f51e46c6f7717761537c6609ef9daf57cArgyrios Kyrtzidis    public:
76c8e5d51f51e46c6f7717761537c6609ef9daf57cArgyrios Kyrtzidis      TypeIdx() : Idx(0) { }
77c8e5d51f51e46c6f7717761537c6609ef9daf57cArgyrios Kyrtzidis      explicit TypeIdx(uint32_t index) : Idx(index) { }
78c8e5d51f51e46c6f7717761537c6609ef9daf57cArgyrios Kyrtzidis
79c8e5d51f51e46c6f7717761537c6609ef9daf57cArgyrios Kyrtzidis      uint32_t getIndex() const { return Idx; }
80c8e5d51f51e46c6f7717761537c6609ef9daf57cArgyrios Kyrtzidis      TypeID asTypeID(unsigned FastQuals) const {
81c8e5d51f51e46c6f7717761537c6609ef9daf57cArgyrios Kyrtzidis        return (Idx << Qualifiers::FastWidth) | FastQuals;
82c8e5d51f51e46c6f7717761537c6609ef9daf57cArgyrios Kyrtzidis      }
83c8e5d51f51e46c6f7717761537c6609ef9daf57cArgyrios Kyrtzidis      static TypeIdx fromTypeID(TypeID ID) {
84c8e5d51f51e46c6f7717761537c6609ef9daf57cArgyrios Kyrtzidis        return TypeIdx(ID >> Qualifiers::FastWidth);
85c8e5d51f51e46c6f7717761537c6609ef9daf57cArgyrios Kyrtzidis      }
86c8e5d51f51e46c6f7717761537c6609ef9daf57cArgyrios Kyrtzidis    };
87c8e5d51f51e46c6f7717761537c6609ef9daf57cArgyrios Kyrtzidis
885d26768e2661faa7ce0b55ffff4be8b3969fbbf5Argyrios Kyrtzidis    /// A structure for putting "fast"-unqualified QualTypes into a
895d26768e2661faa7ce0b55ffff4be8b3969fbbf5Argyrios Kyrtzidis    /// DenseMap.  This uses the standard pointer hash function.
905d26768e2661faa7ce0b55ffff4be8b3969fbbf5Argyrios Kyrtzidis    struct UnsafeQualTypeDenseMapInfo {
915d26768e2661faa7ce0b55ffff4be8b3969fbbf5Argyrios Kyrtzidis      static inline bool isEqual(QualType A, QualType B) { return A == B; }
925d26768e2661faa7ce0b55ffff4be8b3969fbbf5Argyrios Kyrtzidis      static inline QualType getEmptyKey() {
935d26768e2661faa7ce0b55ffff4be8b3969fbbf5Argyrios Kyrtzidis        return QualType::getFromOpaquePtr((void*) 1);
945d26768e2661faa7ce0b55ffff4be8b3969fbbf5Argyrios Kyrtzidis      }
955d26768e2661faa7ce0b55ffff4be8b3969fbbf5Argyrios Kyrtzidis      static inline QualType getTombstoneKey() {
965d26768e2661faa7ce0b55ffff4be8b3969fbbf5Argyrios Kyrtzidis        return QualType::getFromOpaquePtr((void*) 2);
975d26768e2661faa7ce0b55ffff4be8b3969fbbf5Argyrios Kyrtzidis      }
985d26768e2661faa7ce0b55ffff4be8b3969fbbf5Argyrios Kyrtzidis      static inline unsigned getHashValue(QualType T) {
995d26768e2661faa7ce0b55ffff4be8b3969fbbf5Argyrios Kyrtzidis        assert(!T.getLocalFastQualifiers() &&
1005d26768e2661faa7ce0b55ffff4be8b3969fbbf5Argyrios Kyrtzidis               "hash invalid for types with fast quals");
1015d26768e2661faa7ce0b55ffff4be8b3969fbbf5Argyrios Kyrtzidis        uintptr_t v = reinterpret_cast<uintptr_t>(T.getAsOpaquePtr());
1025d26768e2661faa7ce0b55ffff4be8b3969fbbf5Argyrios Kyrtzidis        return (unsigned(v) >> 4) ^ (unsigned(v) >> 9);
1035d26768e2661faa7ce0b55ffff4be8b3969fbbf5Argyrios Kyrtzidis      }
1045d26768e2661faa7ce0b55ffff4be8b3969fbbf5Argyrios Kyrtzidis    };
1055d26768e2661faa7ce0b55ffff4be8b3969fbbf5Argyrios Kyrtzidis
1065d26768e2661faa7ce0b55ffff4be8b3969fbbf5Argyrios Kyrtzidis    /// \brief Map that provides the ID numbers of each type within the
1075d26768e2661faa7ce0b55ffff4be8b3969fbbf5Argyrios Kyrtzidis    /// output stream, plus those deserialized from a chained PCH.
1085d26768e2661faa7ce0b55ffff4be8b3969fbbf5Argyrios Kyrtzidis    ///
1095d26768e2661faa7ce0b55ffff4be8b3969fbbf5Argyrios Kyrtzidis    /// The ID numbers of types are consecutive (in order of discovery)
1105d26768e2661faa7ce0b55ffff4be8b3969fbbf5Argyrios Kyrtzidis    /// and start at 1. 0 is reserved for NULL. When types are actually
1115d26768e2661faa7ce0b55ffff4be8b3969fbbf5Argyrios Kyrtzidis    /// stored in the stream, the ID number is shifted by 2 bits to
1125d26768e2661faa7ce0b55ffff4be8b3969fbbf5Argyrios Kyrtzidis    /// allow for the const/volatile qualifiers.
1135d26768e2661faa7ce0b55ffff4be8b3969fbbf5Argyrios Kyrtzidis    ///
1145d26768e2661faa7ce0b55ffff4be8b3969fbbf5Argyrios Kyrtzidis    /// Keys in the map never have const/volatile qualifiers.
1155d26768e2661faa7ce0b55ffff4be8b3969fbbf5Argyrios Kyrtzidis    typedef llvm::DenseMap<QualType, TypeIdx, UnsafeQualTypeDenseMapInfo>
1165d26768e2661faa7ce0b55ffff4be8b3969fbbf5Argyrios Kyrtzidis        TypeIdxMap;
1175d26768e2661faa7ce0b55ffff4be8b3969fbbf5Argyrios Kyrtzidis
118f73c93fea0d4b447585bc7459499ba6b822e045cSebastian Redl    /// \brief An ID number that refers to an identifier in an AST file.
119afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor    typedef uint32_t IdentID;
120afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor
121f73c93fea0d4b447585bc7459499ba6b822e045cSebastian Redl    /// \brief An ID number that refers to a macro in an AST file.
122f73c93fea0d4b447585bc7459499ba6b822e045cSebastian Redl    typedef uint32_t MacroID;
123f73c93fea0d4b447585bc7459499ba6b822e045cSebastian Redl
124f73c93fea0d4b447585bc7459499ba6b822e045cSebastian Redl    /// \brief An ID number that refers to an ObjC selctor in an AST file.
12590cd1bb1baac2a0221f3642de0cbea3244b116e5Steve Naroff    typedef uint32_t SelectorID;
1261eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
1277c789c1a3f77f24032aa0bed2afacdb9e094e952Douglas Gregor    /// \brief An ID number that refers to a set of CXXBaseSpecifiers in an
1287c789c1a3f77f24032aa0bed2afacdb9e094e952Douglas Gregor    /// AST file.
1297c789c1a3f77f24032aa0bed2afacdb9e094e952Douglas Gregor    typedef uint32_t CXXBaseSpecifiersID;
1307c789c1a3f77f24032aa0bed2afacdb9e094e952Douglas Gregor
1312cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    /// \brief Describes the various kinds of blocks that occur within
132f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl    /// an AST file.
1332cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    enum BlockIDs {
134f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl      /// \brief The AST block, which acts as a container around the
135f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl      /// full AST block.
136f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl      AST_BLOCK_ID = llvm::bitc::FIRST_APPLICATION_BLOCKID,
13714f79002e58556798e86168c63e48d533287eda5Douglas Gregor
13814f79002e58556798e86168c63e48d533287eda5Douglas Gregor      /// \brief The block containing information about the source
13914f79002e58556798e86168c63e48d533287eda5Douglas Gregor      /// manager.
14014f79002e58556798e86168c63e48d533287eda5Douglas Gregor      SOURCE_MANAGER_BLOCK_ID,
14114f79002e58556798e86168c63e48d533287eda5Douglas Gregor
14214f79002e58556798e86168c63e48d533287eda5Douglas Gregor      /// \brief The block containing information about the
14314f79002e58556798e86168c63e48d533287eda5Douglas Gregor      /// preprocessor.
14414f79002e58556798e86168c63e48d533287eda5Douglas Gregor      PREPROCESSOR_BLOCK_ID,
14514f79002e58556798e86168c63e48d533287eda5Douglas Gregor
1462cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The block containing the definitions of all of the
147f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl      /// types and decls used within the AST file.
1487b90340c9c7d07aef4e301e72b5e8a30d5f4f0c8Argyrios Kyrtzidis      DECLTYPES_BLOCK_ID,
1497b90340c9c7d07aef4e301e72b5e8a30d5f4f0c8Argyrios Kyrtzidis
1507b90340c9c7d07aef4e301e72b5e8a30d5f4f0c8Argyrios Kyrtzidis      /// \brief The block containing DECL_UPDATES records.
1514800a5c79023271408af49797e09be32aca93232Douglas Gregor      DECL_UPDATES_BLOCK_ID,
1524800a5c79023271408af49797e09be32aca93232Douglas Gregor
1534800a5c79023271408af49797e09be32aca93232Douglas Gregor      /// \brief The block containing the detailed preprocessing record.
1544800a5c79023271408af49797e09be32aca93232Douglas Gregor      PREPROCESSOR_DETAIL_BLOCK_ID
1558038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor    };
1562cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor
157f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl    /// \brief Record types that occur within the AST block itself.
158f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl    enum ASTRecordTypes {
15961d60ee6aa0a5ded0ddcf48679673b37506a1895Douglas Gregor      /// \brief Record code for the offsets of each type.
1602cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      ///
1618038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor      /// The TYPE_OFFSET constant describes the record that occurs
162f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl      /// within the AST block. The record itself is an array of offsets that
16361d60ee6aa0a5ded0ddcf48679673b37506a1895Douglas Gregor      /// point into the declarations and types block (identified by
16461d60ee6aa0a5ded0ddcf48679673b37506a1895Douglas Gregor      /// DECLTYPES_BLOCK_ID). The index into the array is based on the ID
1658038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor      /// of a type. For a given type ID @c T, the lower three bits of
1668038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor      /// @c T are its qualifiers (const, volatile, restrict), as in
1678038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor      /// the QualType class. The upper bits, after being shifted and
1688038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor      /// subtracting NUM_PREDEF_TYPE_IDS, are used to index into the
1698038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor      /// TYPE_OFFSET block to determine the offset of that type's
17061d60ee6aa0a5ded0ddcf48679673b37506a1895Douglas Gregor      /// corresponding record within the DECLTYPES_BLOCK_ID block.
1718038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor      TYPE_OFFSET = 1,
1721eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
1738038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor      /// \brief Record code for the offsets of each decl.
1748038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor      ///
1758038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor      /// The DECL_OFFSET constant describes the record that occurs
17661d60ee6aa0a5ded0ddcf48679673b37506a1895Douglas Gregor      /// within the block identified by DECL_OFFSETS_BLOCK_ID within
177f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl      /// the AST block. The record itself is an array of offsets that
17861d60ee6aa0a5ded0ddcf48679673b37506a1895Douglas Gregor      /// point into the declarations and types block (identified by
17961d60ee6aa0a5ded0ddcf48679673b37506a1895Douglas Gregor      /// DECLTYPES_BLOCK_ID). The declaration ID is an index into this
1808038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor      /// record, after subtracting one to account for the use of
1818038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor      /// declaration ID 0 for a NULL declaration pointer. Index 0 is
1828038d5182b72dcdef292f6fb8539ad77f338855aDouglas Gregor      /// reserved for the translation unit declaration.
1830a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor      DECL_OFFSET = 2,
1840a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor
1850a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor      /// \brief Record code for the language options table.
1860a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor      ///
1870a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor      /// The record with this code contains the contents of the
1880a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor      /// LangOptions structure. We serialize the entire contents of
1890a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor      /// the structure, and let the reader decide which options are
1900a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor      /// actually important to check.
1912bec0410d268779f601bd509e0302a500af7ac6aDouglas Gregor      LANGUAGE_OPTIONS = 3,
1922bec0410d268779f601bd509e0302a500af7ac6aDouglas Gregor
193f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl      /// \brief AST file metadata, including the AST file version number
194f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl      /// and the target triple used to build the AST file.
195ab41e63821dc60ad144d0684df8d79a9eef86b75Douglas Gregor      METADATA = 4,
196afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor
197afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor      /// \brief Record code for the table of offsets of each
198afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor      /// identifier ID.
199afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor      ///
200afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor      /// The offset table contains offsets into the blob stored in
201afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor      /// the IDENTIFIER_TABLE record. Each offset points to the
202afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor      /// NULL-terminated string that corresponds to that identifier.
203afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor      IDENTIFIER_OFFSET = 5,
204afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor
205afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor      /// \brief Record code for the identifier table.
206afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor      ///
207afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor      /// The identifier table is a simple blob that contains
208afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor      /// NULL-terminated strings for all of the identifiers
209f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl      /// referenced by the AST file. The IDENTIFIER_OFFSET table
210afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor      /// contains the mapping from identifier IDs to the characters
211afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor      /// in this blob. Note that the starting offsets of all of the
212afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor      /// identifiers are odd, so that, when the identifier offset
213afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor      /// table is loaded in, we can use the low bit to distinguish
214afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor      /// between offsets (for unresolved identifier IDs) and
215afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor      /// IdentifierInfo pointers (for already-resolved identifier
216afaf308b779cd8e8fc8c42601b9f383423c15c2dDouglas Gregor      /// IDs).
217fdd0172ca1b3c837f8c2b37d69cc2085234e09faDouglas Gregor      IDENTIFIER_TABLE = 6,
218fdd0172ca1b3c837f8c2b37d69cc2085234e09faDouglas Gregor
219fdd0172ca1b3c837f8c2b37d69cc2085234e09faDouglas Gregor      /// \brief Record code for the array of external definitions.
220fdd0172ca1b3c837f8c2b37d69cc2085234e09faDouglas Gregor      ///
221f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl      /// The AST file contains a list of all of the unnamed external
222fdd0172ca1b3c837f8c2b37d69cc2085234e09faDouglas Gregor      /// definitions present within the parsed headers, stored as an
223fdd0172ca1b3c837f8c2b37d69cc2085234e09faDouglas Gregor      /// array of declaration IDs. These external definitions will be
224f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl      /// reported to the AST consumer after the AST file has been
225fdd0172ca1b3c837f8c2b37d69cc2085234e09faDouglas Gregor      /// read, since their presence can affect the semantics of the
226fdd0172ca1b3c837f8c2b37d69cc2085234e09faDouglas Gregor      /// program (e.g., for code generation).
2273e1af84bb0092a1aafb49deaa4ab6664c9a9071bDouglas Gregor      EXTERNAL_DEFINITIONS = 7,
2283e1af84bb0092a1aafb49deaa4ab6664c9a9071bDouglas Gregor
229ad1de006ea080b540e480efc6b86c2e201dbf1ecDouglas Gregor      /// \brief Record code for the set of non-builtin, special
230ad1de006ea080b540e480efc6b86c2e201dbf1ecDouglas Gregor      /// types.
231ad1de006ea080b540e480efc6b86c2e201dbf1ecDouglas Gregor      ///
232ad1de006ea080b540e480efc6b86c2e201dbf1ecDouglas Gregor      /// This record contains the type IDs for the various type nodes
233ad1de006ea080b540e480efc6b86c2e201dbf1ecDouglas Gregor      /// that are constructed during semantic analysis (e.g.,
234ad1de006ea080b540e480efc6b86c2e201dbf1ecDouglas Gregor      /// __builtin_va_list). The SPECIAL_TYPE_* constants provide
235ad1de006ea080b540e480efc6b86c2e201dbf1ecDouglas Gregor      /// offsets into this record.
236ad1de006ea080b540e480efc6b86c2e201dbf1ecDouglas Gregor      SPECIAL_TYPES = 8,
237ad1de006ea080b540e480efc6b86c2e201dbf1ecDouglas Gregor
2384c0e86b392c5fb0cb771551fc877edb6979be69cDouglas Gregor      /// \brief Record code for the extra statistics we gather while
239f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl      /// generating an AST file.
2404c0e86b392c5fb0cb771551fc877edb6979be69cDouglas Gregor      STATISTICS = 9,
2414c0e86b392c5fb0cb771551fc877edb6979be69cDouglas Gregor
2424c0e86b392c5fb0cb771551fc877edb6979be69cDouglas Gregor      /// \brief Record code for the array of tentative definitions.
24314c22f20c077cecd68581952a0c227f8c180be03Douglas Gregor      TENTATIVE_DEFINITIONS = 10,
24414c22f20c077cecd68581952a0c227f8c180be03Douglas Gregor
24514c22f20c077cecd68581952a0c227f8c180be03Douglas Gregor      /// \brief Record code for the array of locally-scoped external
24614c22f20c077cecd68581952a0c227f8c180be03Douglas Gregor      /// declarations.
24790cd1bb1baac2a0221f3642de0cbea3244b116e5Steve Naroff      LOCALLY_SCOPED_EXTERNAL_DECLS = 11,
2481eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
24983941df2745d69c05acee3174c7a265c206f70d9Douglas Gregor      /// \brief Record code for the table of offsets into the
25083941df2745d69c05acee3174c7a265c206f70d9Douglas Gregor      /// Objective-C method pool.
25183941df2745d69c05acee3174c7a265c206f70d9Douglas Gregor      SELECTOR_OFFSETS = 12,
252f0aaf7a59729a4ae0146e3464ee987745be95829Douglas Gregor
253f0aaf7a59729a4ae0146e3464ee987745be95829Douglas Gregor      /// \brief Record code for the Objective-C method pool,
2542eafc1b56347f772729e082e6bac824b0ef1b585Douglas Gregor      METHOD_POOL = 13,
2552eafc1b56347f772729e082e6bac824b0ef1b585Douglas Gregor
2562eafc1b56347f772729e082e6bac824b0ef1b585Douglas Gregor      /// \brief The value of the next __COUNTER__ to dispense.
2572eafc1b56347f772729e082e6bac824b0ef1b585Douglas Gregor      /// [PP_COUNTER_VALUE, Val]
2587f94b0b0c6791013d2f72ced9b4bedd3b23673a6Douglas Gregor      PP_COUNTER_VALUE = 14,
2597f94b0b0c6791013d2f72ced9b4bedd3b23673a6Douglas Gregor
2607f94b0b0c6791013d2f72ced9b4bedd3b23673a6Douglas Gregor      /// \brief Record code for the table of offsets into the block
2617f94b0b0c6791013d2f72ced9b4bedd3b23673a6Douglas Gregor      /// of source-location information.
2627f94b0b0c6791013d2f72ced9b4bedd3b23673a6Douglas Gregor      SOURCE_LOCATION_OFFSETS = 15,
2637f94b0b0c6791013d2f72ced9b4bedd3b23673a6Douglas Gregor
2647f94b0b0c6791013d2f72ced9b4bedd3b23673a6Douglas Gregor      /// \brief Record code for the set of source location entries
265f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl      /// that need to be preloaded by the AST reader.
2667f94b0b0c6791013d2f72ced9b4bedd3b23673a6Douglas Gregor      ///
2677f94b0b0c6791013d2f72ced9b4bedd3b23673a6Douglas Gregor      /// This set contains the source location entry for the
2687f94b0b0c6791013d2f72ced9b4bedd3b23673a6Douglas Gregor      /// predefines buffer and for any file entries that need to be
2697f94b0b0c6791013d2f72ced9b4bedd3b23673a6Douglas Gregor      /// preloaded.
2704fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor      SOURCE_LOCATION_PRELOADS = 16,
2714fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor
2724fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor      /// \brief Record code for the stat() cache.
273b81c17092039f39be60e9656a37cffbdf2e2c783Douglas Gregor      STAT_CACHE = 17,
274b81c17092039f39be60e9656a37cffbdf2e2c783Douglas Gregor
275b81c17092039f39be60e9656a37cffbdf2e2c783Douglas Gregor      /// \brief Record code for the set of ext_vector type names.
276b81c17092039f39be60e9656a37cffbdf2e2c783Douglas Gregor      EXT_VECTOR_DECLS = 18,
277b81c17092039f39be60e9656a37cffbdf2e2c783Douglas Gregor
278b64c19365deab788753d29c9bc881253c3f16f37Douglas Gregor      /// \brief Record code for the original file that was used to
279f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl      /// generate the AST file.
2801cb35dd4840d21cec58648361180d5688446a9caArgyrios Kyrtzidis      ORIGINAL_FILE_NAME = 19,
2811eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
282c6fbbedb3e90ff2f04828c36fd839e01468679f5Douglas Gregor      /// Record #20 intentionally left blank.
283445e23e9b909ec8e21303c7dd82c90b72fc09ac4Douglas Gregor
2845b4ec636637c9d876102240127cc0dca9280e83aTed Kremenek      /// \brief Record code for the version control branch and revision
285f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl      /// information of the compiler used to build this AST file.
286e6bbc01d1c4ec5241df36042e0a4a12a6711934bTanya Lattner      VERSION_CONTROL_BRANCH_REVISION = 21,
287e6bbc01d1c4ec5241df36042e0a4a12a6711934bTanya Lattner
28849b96d1a382ae9f31456166f1a734d3f7f30b992Argyrios Kyrtzidis      /// \brief Record code for the array of unused file scoped decls.
28949b96d1a382ae9f31456166f1a734d3f7f30b992Argyrios Kyrtzidis      UNUSED_FILESCOPED_DECLS = 22,
290e6bbc01d1c4ec5241df36042e0a4a12a6711934bTanya Lattner
2916a5a23f8e7fb65e028c8092bc1d1a1d9dfe2e9bcDouglas Gregor      /// \brief Record code for the table of offsets to macro definition
2926a5a23f8e7fb65e028c8092bc1d1a1d9dfe2e9bcDouglas Gregor      /// entries in the preprocessing record.
293d455add086f1dfa16ae87dc310e49493bbc2b0a6Argyrios Kyrtzidis      MACRO_DEFINITION_OFFSETS = 23,
294d455add086f1dfa16ae87dc310e49493bbc2b0a6Argyrios Kyrtzidis
295d455add086f1dfa16ae87dc310e49493bbc2b0a6Argyrios Kyrtzidis      /// \brief Record code for the array of VTable uses.
296d455add086f1dfa16ae87dc310e49493bbc2b0a6Argyrios Kyrtzidis      VTABLE_USES = 24,
297d455add086f1dfa16ae87dc310e49493bbc2b0a6Argyrios Kyrtzidis
298d455add086f1dfa16ae87dc310e49493bbc2b0a6Argyrios Kyrtzidis      /// \brief Record code for the array of dynamic classes.
299a93e3b5bde9f0a7b59215f19f176f7d69881b81cSebastian Redl      DYNAMIC_CLASSES = 25,
300a93e3b5bde9f0a7b59215f19f176f7d69881b81cSebastian Redl
301f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl      /// \brief Record code for the chained AST metadata, including the
302f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl      /// AST file version and the name of the PCH this depends on.
303320198303df7c16950d83ae79c3f702b84badcf7Fariborz Jahanian      CHAINED_METADATA = 26,
304d692af71226d2fb537d86c670af96114ddd485c3Sebastian Redl
305681d7237e1014bf64dd5ead6bf74ae55cdd19e61Sebastian Redl      /// \brief Record code for referenced selector pool.
306d692af71226d2fb537d86c670af96114ddd485c3Sebastian Redl      REFERENCED_SELECTOR_POOL = 27,
307d692af71226d2fb537d86c670af96114ddd485c3Sebastian Redl
308d692af71226d2fb537d86c670af96114ddd485c3Sebastian Redl      /// \brief Record code for an update to the TU's lexically contained
309d692af71226d2fb537d86c670af96114ddd485c3Sebastian Redl      /// declarations.
31076c38d385447b7acdff2d7e6b13fa8580e7174a7Argyrios Kyrtzidis      TU_UPDATE_LEXICAL = 28,
31176c38d385447b7acdff2d7e6b13fa8580e7174a7Argyrios Kyrtzidis
312a865005c74019184e04f7fcdd4d61c31c095a4ffArgyrios Kyrtzidis      /// \brief Record code for an update to first decls pointing to the
313a865005c74019184e04f7fcdd4d61c31c095a4ffArgyrios Kyrtzidis      /// latest redeclarations.
314a865005c74019184e04f7fcdd4d61c31c095a4ffArgyrios Kyrtzidis      REDECLS_UPDATE_LATEST = 29,
315a865005c74019184e04f7fcdd4d61c31c095a4ffArgyrios Kyrtzidis
31676c38d385447b7acdff2d7e6b13fa8580e7174a7Argyrios Kyrtzidis      /// \brief Record code for declarations that Sema keeps references of.
31772b90571b1783b17c3f2204cec5ca440edc38beeArgyrios Kyrtzidis      SEMA_DECL_REFS = 30,
31872b90571b1783b17c3f2204cec5ca440edc38beeArgyrios Kyrtzidis
31972b90571b1783b17c3f2204cec5ca440edc38beeArgyrios Kyrtzidis      /// \brief Record code for weak undeclared identifiers.
3200e0363866792b309d70e9c8e92b4c239773af89cArgyrios Kyrtzidis      WEAK_UNDECLARED_IDENTIFIERS = 31,
3210e0363866792b309d70e9c8e92b4c239773af89cArgyrios Kyrtzidis
3220e0363866792b309d70e9c8e92b4c239773af89cArgyrios Kyrtzidis      /// \brief Record code for pending implicit instantiations.
3230b17c61e8f143901ce11b4a6e5129ac63aaeee04Sebastian Redl      PENDING_IMPLICIT_INSTANTIATIONS = 32,
3240b17c61e8f143901ce11b4a6e5129ac63aaeee04Sebastian Redl
3250b17c61e8f143901ce11b4a6e5129ac63aaeee04Sebastian Redl      /// \brief Record code for a decl replacement block.
3260b17c61e8f143901ce11b4a6e5129ac63aaeee04Sebastian Redl      ///
3270b17c61e8f143901ce11b4a6e5129ac63aaeee04Sebastian Redl      /// If a declaration is modified after having been deserialized, and then
328f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl      /// written to a dependent AST file, its ID and offset must be added to
3290b17c61e8f143901ce11b4a6e5129ac63aaeee04Sebastian Redl      /// the replacement block.
3308b12273c86ede439edf52d35b170fd32b2ed49d4Sebastian Redl      DECL_REPLACEMENTS = 33,
3318b12273c86ede439edf52d35b170fd32b2ed49d4Sebastian Redl
3328b12273c86ede439edf52d35b170fd32b2ed49d4Sebastian Redl      /// \brief Record code for an update to a decl context's lookup table.
3338b12273c86ede439edf52d35b170fd32b2ed49d4Sebastian Redl      ///
3348b12273c86ede439edf52d35b170fd32b2ed49d4Sebastian Redl      /// In practice, this should only be used for the TU and namespaces.
3356e50e00c2fe6a04b2c35592588a4b10a2c269416Sebastian Redl      UPDATE_VISIBLE = 34,
3366e50e00c2fe6a04b2c35592588a4b10a2c269416Sebastian Redl
3377b90340c9c7d07aef4e301e72b5e8a30d5f4f0c8Argyrios Kyrtzidis      /// \brief Record for offsets of DECL_UPDATES records for declarations
3387b90340c9c7d07aef4e301e72b5e8a30d5f4f0c8Argyrios Kyrtzidis      /// that were modified after being deserialized and need updates.
339bef1a7b9c175d37e4a727e6ce68bd05232fa6970Argyrios Kyrtzidis      DECL_UPDATE_OFFSETS = 35,
3407b90340c9c7d07aef4e301e72b5e8a30d5f4f0c8Argyrios Kyrtzidis
3417b90340c9c7d07aef4e301e72b5e8a30d5f4f0c8Argyrios Kyrtzidis      /// \brief Record of updates for a declaration that was modified after
3427b90340c9c7d07aef4e301e72b5e8a30d5f4f0c8Argyrios Kyrtzidis      /// being deserialized.
3437c789c1a3f77f24032aa0bed2afacdb9e094e952Douglas Gregor      DECL_UPDATES = 36,
3447c789c1a3f77f24032aa0bed2afacdb9e094e952Douglas Gregor
3457c789c1a3f77f24032aa0bed2afacdb9e094e952Douglas Gregor      /// \brief Record code for the table of offsets to CXXBaseSpecifier
3467c789c1a3f77f24032aa0bed2afacdb9e094e952Douglas Gregor      /// sets.
347f41d3be39980d40849850d3fb90403623cc8459eArgyrios Kyrtzidis      CXX_BASE_SPECIFIER_OFFSETS = 37,
348f41d3be39980d40849850d3fb90403623cc8459eArgyrios Kyrtzidis
3493efd52cf8f4e57c5571bd8cc3168264c3bc46a1eArgyrios Kyrtzidis      /// \brief Record code for #pragma diagnostic mappings.
35014b6ba77710d6431794d65c7d58c6f29c3dc956ePeter Collingbourne      DIAG_PRAGMA_MAPPINGS = 38,
35114b6ba77710d6431794d65c7d58c6f29c3dc956ePeter Collingbourne
35214b6ba77710d6431794d65c7d58c6f29c3dc956ePeter Collingbourne      /// \brief Record code for special CUDA declarations.
353cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor      CUDA_SPECIAL_DECL_REFS = 39,
354cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor
355cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor      /// \brief Record code for header search information.
3568e3df4d0864f0a966c20088ca1a29c3398b7639dArgyrios Kyrtzidis      HEADER_SEARCH_TABLE = 40,
3578e3df4d0864f0a966c20088ca1a29c3398b7639dArgyrios Kyrtzidis
3588e3df4d0864f0a966c20088ca1a29c3398b7639dArgyrios Kyrtzidis      /// \brief The directory that the PCH was originally created in.
35984bccea1ad9fd8bc1f4ec3d1fc5dd8d15dabffbcPeter Collingbourne      ORIGINAL_PCH_DIR = 41,
36084bccea1ad9fd8bc1f4ec3d1fc5dd8d15dabffbcPeter Collingbourne
36184bccea1ad9fd8bc1f4ec3d1fc5dd8d15dabffbcPeter Collingbourne      /// \brief Record code for floating point #pragma options.
36284bccea1ad9fd8bc1f4ec3d1fc5dd8d15dabffbcPeter Collingbourne      FP_PRAGMA_OPTIONS = 42,
36384bccea1ad9fd8bc1f4ec3d1fc5dd8d15dabffbcPeter Collingbourne
36484bccea1ad9fd8bc1f4ec3d1fc5dd8d15dabffbcPeter Collingbourne      /// \brief Record code for enabled OpenCL extensions.
36584bccea1ad9fd8bc1f4ec3d1fc5dd8d15dabffbcPeter Collingbourne      OPENCL_EXTENSIONS = 43
3662cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    };
3672cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor
36814f79002e58556798e86168c63e48d533287eda5Douglas Gregor    /// \brief Record types used within a source manager block.
36914f79002e58556798e86168c63e48d533287eda5Douglas Gregor    enum SourceManagerRecordTypes {
37014f79002e58556798e86168c63e48d533287eda5Douglas Gregor      /// \brief Describes a source location entry (SLocEntry) for a
37114f79002e58556798e86168c63e48d533287eda5Douglas Gregor      /// file.
37214f79002e58556798e86168c63e48d533287eda5Douglas Gregor      SM_SLOC_FILE_ENTRY = 1,
37314f79002e58556798e86168c63e48d533287eda5Douglas Gregor      /// \brief Describes a source location entry (SLocEntry) for a
37414f79002e58556798e86168c63e48d533287eda5Douglas Gregor      /// buffer.
37514f79002e58556798e86168c63e48d533287eda5Douglas Gregor      SM_SLOC_BUFFER_ENTRY = 2,
37614f79002e58556798e86168c63e48d533287eda5Douglas Gregor      /// \brief Describes a blob that contains the data for a buffer
37714f79002e58556798e86168c63e48d533287eda5Douglas Gregor      /// entry. This kind of record always directly follows a
37814f79002e58556798e86168c63e48d533287eda5Douglas Gregor      /// SM_SLOC_BUFFER_ENTRY record.
37914f79002e58556798e86168c63e48d533287eda5Douglas Gregor      SM_SLOC_BUFFER_BLOB = 3,
38014f79002e58556798e86168c63e48d533287eda5Douglas Gregor      /// \brief Describes a source location entry (SLocEntry) for a
38114f79002e58556798e86168c63e48d533287eda5Douglas Gregor      /// macro instantiation.
382bd94500d3aa60092fb0f1e90f53fb0d03fa502a8Douglas Gregor      SM_SLOC_INSTANTIATION_ENTRY = 4,
383bd94500d3aa60092fb0f1e90f53fb0d03fa502a8Douglas Gregor      /// \brief Describes the SourceManager's line table, with
384bd94500d3aa60092fb0f1e90f53fb0d03fa502a8Douglas Gregor      /// information about #line directives.
38512fab31aa5868b1a6b52246b5a87daa48a338fe2Douglas Gregor      SM_LINE_TABLE = 5
38614f79002e58556798e86168c63e48d533287eda5Douglas Gregor    };
3871eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
3887c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner    /// \brief Record types used within a preprocessor block.
3897c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner    enum PreprocessorRecordTypes {
3907c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner      // The macros in the PP section are a PP_MACRO_* instance followed by a
3917c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner      // list of PP_TOKEN instances for each token in the definition.
3927c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner
3937c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner      /// \brief An object-like macro definition.
3947c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner      /// [PP_MACRO_OBJECT_LIKE, IdentInfoID, SLoc, IsUsed]
3957c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner      PP_MACRO_OBJECT_LIKE = 1,
3967c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner
3977c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner      /// \brief A function-like macro definition.
3987c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner      /// [PP_MACRO_FUNCTION_LIKE, <ObjectLikeStuff>, IsC99Varargs, IsGNUVarars,
3997c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner      ///  NumArgs, ArgIdentInfoID* ]
4007c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner      PP_MACRO_FUNCTION_LIKE = 2,
4011eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
4027c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner      /// \brief Describes one token.
403c1f9d828c733ec1eba06d01070735d1f36fda733Chris Lattner      /// [PP_TOKEN, SLoc, Length, IdentInfoID, Kind, Flags]
4044800a5c79023271408af49797e09be32aca93232Douglas Gregor      PP_TOKEN = 3
4054800a5c79023271408af49797e09be32aca93232Douglas Gregor    };
4066a5a23f8e7fb65e028c8092bc1d1a1d9dfe2e9bcDouglas Gregor
4074800a5c79023271408af49797e09be32aca93232Douglas Gregor    /// \brief Record types used within a preprocessor detail block.
4084800a5c79023271408af49797e09be32aca93232Douglas Gregor    enum PreprocessorDetailRecordTypes {
4096a5a23f8e7fb65e028c8092bc1d1a1d9dfe2e9bcDouglas Gregor      /// \brief Describes a macro instantiation within the preprocessing
4106a5a23f8e7fb65e028c8092bc1d1a1d9dfe2e9bcDouglas Gregor      /// record.
4114800a5c79023271408af49797e09be32aca93232Douglas Gregor      PPD_MACRO_INSTANTIATION = 0,
4126a5a23f8e7fb65e028c8092bc1d1a1d9dfe2e9bcDouglas Gregor
4136a5a23f8e7fb65e028c8092bc1d1a1d9dfe2e9bcDouglas Gregor      /// \brief Describes a macro definition within the preprocessing record.
4144800a5c79023271408af49797e09be32aca93232Douglas Gregor      PPD_MACRO_DEFINITION = 1,
415ecdcb883cbc6bb4a2445dc6f02d58d9bdb54a0edDouglas Gregor
4164800a5c79023271408af49797e09be32aca93232Douglas Gregor      /// \brief Describes an inclusion directive within the preprocessing
417ecdcb883cbc6bb4a2445dc6f02d58d9bdb54a0edDouglas Gregor      /// record.
4184800a5c79023271408af49797e09be32aca93232Douglas Gregor      PPD_INCLUSION_DIRECTIVE = 2
4197c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner    };
4204800a5c79023271408af49797e09be32aca93232Douglas Gregor
421f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl    /// \defgroup ASTAST AST file AST constants
42214f79002e58556798e86168c63e48d533287eda5Douglas Gregor    ///
42314f79002e58556798e86168c63e48d533287eda5Douglas Gregor    /// The constants in this group describe various components of the
424f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl    /// abstract syntax tree within an AST file.
42514f79002e58556798e86168c63e48d533287eda5Douglas Gregor    ///
42614f79002e58556798e86168c63e48d533287eda5Douglas Gregor    /// @{
42714f79002e58556798e86168c63e48d533287eda5Douglas Gregor
4282cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    /// \brief Predefined type IDs.
4292cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    ///
4302cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    /// These type IDs correspond to predefined types in the AST
4312cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    /// context, such as built-in types (int) and special place-holder
4322cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    /// types (the <overload> and <dependent> type markers). Such
4332cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    /// types are never actually serialized, since they will be built
4342cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    /// by the AST context when it is created.
4352cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    enum PredefinedTypeIDs {
4362cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The NULL type.
4372cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      PREDEF_TYPE_NULL_ID       = 0,
4382cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The void type.
4392cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      PREDEF_TYPE_VOID_ID       = 1,
4402cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The 'bool' or '_Bool' type.
4412cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      PREDEF_TYPE_BOOL_ID       = 2,
4422cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The 'char' type, when it is unsigned.
4432cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      PREDEF_TYPE_CHAR_U_ID     = 3,
4442cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The 'unsigned char' type.
4452cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      PREDEF_TYPE_UCHAR_ID      = 4,
4462cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The 'unsigned short' type.
4472cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      PREDEF_TYPE_USHORT_ID     = 5,
4482cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The 'unsigned int' type.
4492cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      PREDEF_TYPE_UINT_ID       = 6,
4502cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The 'unsigned long' type.
4512cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      PREDEF_TYPE_ULONG_ID      = 7,
4522cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The 'unsigned long long' type.
4532cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      PREDEF_TYPE_ULONGLONG_ID  = 8,
4542cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The 'char' type, when it is signed.
4552cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      PREDEF_TYPE_CHAR_S_ID     = 9,
4562cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The 'signed char' type.
4572cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      PREDEF_TYPE_SCHAR_ID      = 10,
4582cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The C++ 'wchar_t' type.
4592cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      PREDEF_TYPE_WCHAR_ID      = 11,
4602cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The (signed) 'short' type.
4612cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      PREDEF_TYPE_SHORT_ID      = 12,
4622cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The (signed) 'int' type.
4632cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      PREDEF_TYPE_INT_ID        = 13,
4642cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The (signed) 'long' type.
4652cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      PREDEF_TYPE_LONG_ID       = 14,
4662cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The (signed) 'long long' type.
4672cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      PREDEF_TYPE_LONGLONG_ID   = 15,
4682cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The 'float' type.
4692cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      PREDEF_TYPE_FLOAT_ID      = 16,
4702cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The 'double' type.
4712cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      PREDEF_TYPE_DOUBLE_ID     = 17,
4722cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The 'long double' type.
4732cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      PREDEF_TYPE_LONGDOUBLE_ID = 18,
4742cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The placeholder type for overloaded function sets.
4752cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      PREDEF_TYPE_OVERLOAD_ID   = 19,
4762cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief The placeholder type for dependent types.
4772df9ced9fd1e8c7d7b38443db07e0e811de22571Chris Lattner      PREDEF_TYPE_DEPENDENT_ID  = 20,
4782df9ced9fd1e8c7d7b38443db07e0e811de22571Chris Lattner      /// \brief The '__uint128_t' type.
4792df9ced9fd1e8c7d7b38443db07e0e811de22571Chris Lattner      PREDEF_TYPE_UINT128_ID    = 21,
4802df9ced9fd1e8c7d7b38443db07e0e811de22571Chris Lattner      /// \brief The '__int128_t' type.
4816e8ed16ffef02b82995a90bdcf10ffff7d63839aSebastian Redl      PREDEF_TYPE_INT128_ID     = 22,
4826e8ed16ffef02b82995a90bdcf10ffff7d63839aSebastian Redl      /// \brief The type of 'nullptr'.
483f5c209d23b20ada4a9b6235db50317239cbf6ae1Alisdair Meredith      PREDEF_TYPE_NULLPTR_ID    = 23,
484f5c209d23b20ada4a9b6235db50317239cbf6ae1Alisdair Meredith      /// \brief The C++ 'char16_t' type.
485f5c209d23b20ada4a9b6235db50317239cbf6ae1Alisdair Meredith      PREDEF_TYPE_CHAR16_ID     = 24,
486f5c209d23b20ada4a9b6235db50317239cbf6ae1Alisdair Meredith      /// \brief The C++ 'char32_t' type.
487de2e22d33afec98324a66a358dfe0951b3c7259aSteve Naroff      PREDEF_TYPE_CHAR32_ID     = 25,
488de2e22d33afec98324a66a358dfe0951b3c7259aSteve Naroff      /// \brief The ObjC 'id' type.
489de2e22d33afec98324a66a358dfe0951b3c7259aSteve Naroff      PREDEF_TYPE_OBJC_ID       = 26,
490de2e22d33afec98324a66a358dfe0951b3c7259aSteve Naroff      /// \brief The ObjC 'Class' type.
49113dcd00615de5c4279d97bdf63cd5f0a14fd9dccFariborz Jahanian      PREDEF_TYPE_OBJC_CLASS    = 27,
49213dcd00615de5c4279d97bdf63cd5f0a14fd9dccFariborz Jahanian      /// \brief The ObjC 'SEL' type.
49313dcd00615de5c4279d97bdf63cd5f0a14fd9dccFariborz Jahanian      PREDEF_TYPE_OBJC_SEL    = 28
4942cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    };
4952cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor
4962cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    /// \brief The number of predefined type IDs that are reserved for
4972cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    /// the PREDEF_TYPE_* constants.
4982cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    ///
4992cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    /// Type IDs for non-predefined types will start at
5002cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    /// NUM_PREDEF_TYPE_IDs.
5012cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    const unsigned NUM_PREDEF_TYPE_IDS = 100;
5022cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor
5032cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    /// \brief Record codes for each kind of type.
5042cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    ///
50561d60ee6aa0a5ded0ddcf48679673b37506a1895Douglas Gregor    /// These constants describe the type records that can occur within a
506f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl    /// block identified by DECLTYPES_BLOCK_ID in the AST file. Each
5072cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    /// constant describes a record for a specific type class in the
5082cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    /// AST.
5092cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    enum TypeCode {
5102cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief An ExtQualType record.
51163f5c2646e75041277657aa1392a5bdd643367a7Douglas Gregor      TYPE_EXT_QUAL                 = 1,
5122cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief A ComplexType record.
51363f5c2646e75041277657aa1392a5bdd643367a7Douglas Gregor      TYPE_COMPLEX                  = 3,
5142cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief A PointerType record.
51563f5c2646e75041277657aa1392a5bdd643367a7Douglas Gregor      TYPE_POINTER                  = 4,
5162cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief A BlockPointerType record.
51763f5c2646e75041277657aa1392a5bdd643367a7Douglas Gregor      TYPE_BLOCK_POINTER            = 5,
5182cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief An LValueReferenceType record.
51963f5c2646e75041277657aa1392a5bdd643367a7Douglas Gregor      TYPE_LVALUE_REFERENCE         = 6,
5202cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief An RValueReferenceType record.
52163f5c2646e75041277657aa1392a5bdd643367a7Douglas Gregor      TYPE_RVALUE_REFERENCE         = 7,
5222cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief A MemberPointerType record.
52363f5c2646e75041277657aa1392a5bdd643367a7Douglas Gregor      TYPE_MEMBER_POINTER           = 8,
5242cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief A ConstantArrayType record.
52563f5c2646e75041277657aa1392a5bdd643367a7Douglas Gregor      TYPE_CONSTANT_ARRAY           = 9,
5262cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief An IncompleteArrayType record.
52763f5c2646e75041277657aa1392a5bdd643367a7Douglas Gregor      TYPE_INCOMPLETE_ARRAY         = 10,
5282cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief A VariableArrayType record.
52963f5c2646e75041277657aa1392a5bdd643367a7Douglas Gregor      TYPE_VARIABLE_ARRAY           = 11,
5302cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief A VectorType record.
53163f5c2646e75041277657aa1392a5bdd643367a7Douglas Gregor      TYPE_VECTOR                   = 12,
5322cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief An ExtVectorType record.
53363f5c2646e75041277657aa1392a5bdd643367a7Douglas Gregor      TYPE_EXT_VECTOR               = 13,
5342cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief A FunctionNoProtoType record.
53563f5c2646e75041277657aa1392a5bdd643367a7Douglas Gregor      TYPE_FUNCTION_NO_PROTO        = 14,
5362cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief A FunctionProtoType record.
53763f5c2646e75041277657aa1392a5bdd643367a7Douglas Gregor      TYPE_FUNCTION_PROTO           = 15,
5382cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief A TypedefType record.
53963f5c2646e75041277657aa1392a5bdd643367a7Douglas Gregor      TYPE_TYPEDEF                  = 16,
5402cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief A TypeOfExprType record.
54163f5c2646e75041277657aa1392a5bdd643367a7Douglas Gregor      TYPE_TYPEOF_EXPR              = 17,
5422cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief A TypeOfType record.
54363f5c2646e75041277657aa1392a5bdd643367a7Douglas Gregor      TYPE_TYPEOF                   = 18,
5442cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief A RecordType record.
54563f5c2646e75041277657aa1392a5bdd643367a7Douglas Gregor      TYPE_RECORD                   = 19,
5462cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief An EnumType record.
54763f5c2646e75041277657aa1392a5bdd643367a7Douglas Gregor      TYPE_ENUM                     = 20,
5482cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief An ObjCInterfaceType record.
54963f5c2646e75041277657aa1392a5bdd643367a7Douglas Gregor      TYPE_OBJC_INTERFACE           = 21,
550d1b3c2dd5bc1f3103bee6137957aa7c5f8f2f0bcSteve Naroff      /// \brief An ObjCObjectPointerType record.
551c15cb2af27514ecc879daba9aa01389c5203685dSteve Naroff      TYPE_OBJC_OBJECT_POINTER      = 22,
552395b475a4474f1c7574d927ad142ca0c7997cbcaAnders Carlsson      /// \brief a DecltypeType record.
55354e14c4db764c0636160d26c5bbf491637c83a76John McCall      TYPE_DECLTYPE                 = 23,
5547da2431c23ef1ee8acb114e39692246e1801afc2John McCall      /// \brief An ElaboratedType record.
55554e14c4db764c0636160d26c5bbf491637c83a76John McCall      TYPE_ELABORATED               = 24,
55649a832bd499d6f61c23655f1fac99f0dd229756eJohn McCall      /// \brief A SubstTemplateTypeParmType record.
557ed97649e9574b9d854fa4d6109c9333ae0993554John McCall      TYPE_SUBST_TEMPLATE_TYPE_PARM = 25,
558ed97649e9574b9d854fa4d6109c9333ae0993554John McCall      /// \brief An UnresolvedUsingType record.
5593cb0ebd5f76abcb776f7cb4062bd79e3268c0dc4John McCall      TYPE_UNRESOLVED_USING         = 26,
5603cb0ebd5f76abcb776f7cb4062bd79e3268c0dc4John McCall      /// \brief An InjectedClassNameType record.
561c12c5bba6ceb6acd4e51e7a0fc03257da9cfd44eJohn McCall      TYPE_INJECTED_CLASS_NAME      = 27,
562c12c5bba6ceb6acd4e51e7a0fc03257da9cfd44eJohn McCall      /// \brief An ObjCObjectType record.
56390b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis      TYPE_OBJC_OBJECT              = 28,
56490b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis      /// \brief An TemplateTypeParmType record.
56590b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis      TYPE_TEMPLATE_TYPE_PARM       = 29,
56690b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis      /// \brief An TemplateSpecializationType record.
5678dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis      TYPE_TEMPLATE_SPECIALIZATION  = 30,
5683acad62a239448bef0f5848b2a0d5f7dfefd3d14Argyrios Kyrtzidis      /// \brief A DependentNameType record.
5693acad62a239448bef0f5848b2a0d5f7dfefd3d14Argyrios Kyrtzidis      TYPE_DEPENDENT_NAME           = 31,
5703acad62a239448bef0f5848b2a0d5f7dfefd3d14Argyrios Kyrtzidis      /// \brief A DependentTemplateSpecializationType record.
571ae8b17f1d5d303af53db5a4f4a375ea6b9356566Argyrios Kyrtzidis      TYPE_DEPENDENT_TEMPLATE_SPECIALIZATION = 32,
572ae8b17f1d5d303af53db5a4f4a375ea6b9356566Argyrios Kyrtzidis      /// \brief A DependentSizedArrayType record.
573075f8f1b6bed4d1b224c74f87508534cc6392ce6Abramo Bagnara      TYPE_DEPENDENT_SIZED_ARRAY    = 33,
574075f8f1b6bed4d1b224c74f87508534cc6392ce6Abramo Bagnara      /// \brief A ParenType record.
5757536dd5e6c99584481b7dab68b7e7d8df9c54054Douglas Gregor      TYPE_PAREN                    = 34,
5767536dd5e6c99584481b7dab68b7e7d8df9c54054Douglas Gregor      /// \brief A PackExpansionType record.
5779d156a7b1b2771e191f2f5a45a7b7a694129463bJohn McCall      TYPE_PACK_EXPANSION           = 35,
5789d156a7b1b2771e191f2f5a45a7b7a694129463bJohn McCall      /// \brief An AttributedType record.
579c3069d618f4661d923cb1b5c4525b082fce73b04Douglas Gregor      TYPE_ATTRIBUTED               = 36,
580c3069d618f4661d923cb1b5c4525b082fce73b04Douglas Gregor      /// \brief A SubstTemplateTypeParmPackType record.
58134b41d939a1328f484511c6002ba2456db879a29Richard Smith      TYPE_SUBST_TEMPLATE_TYPE_PARM_PACK = 37,
58234b41d939a1328f484511c6002ba2456db879a29Richard Smith      /// \brief A AutoType record.
58334b41d939a1328f484511c6002ba2456db879a29Richard Smith      TYPE_AUTO                  = 38
5842cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    };
5852cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor
586ad1de006ea080b540e480efc6b86c2e201dbf1ecDouglas Gregor    /// \brief The type IDs for special types constructed by semantic
587ad1de006ea080b540e480efc6b86c2e201dbf1ecDouglas Gregor    /// analysis.
588ad1de006ea080b540e480efc6b86c2e201dbf1ecDouglas Gregor    ///
589ad1de006ea080b540e480efc6b86c2e201dbf1ecDouglas Gregor    /// The constants in this enumeration are indices into the
590ad1de006ea080b540e480efc6b86c2e201dbf1ecDouglas Gregor    /// SPECIAL_TYPES record.
591ad1de006ea080b540e480efc6b86c2e201dbf1ecDouglas Gregor    enum SpecialTypeIDs {
592ad1de006ea080b540e480efc6b86c2e201dbf1ecDouglas Gregor      /// \brief __builtin_va_list
593319ac896a0fef7365d5589b8021db7e41207fe42Douglas Gregor      SPECIAL_TYPE_BUILTIN_VA_LIST             = 0,
594319ac896a0fef7365d5589b8021db7e41207fe42Douglas Gregor      /// \brief Objective-C "id" type
595319ac896a0fef7365d5589b8021db7e41207fe42Douglas Gregor      SPECIAL_TYPE_OBJC_ID                     = 1,
596319ac896a0fef7365d5589b8021db7e41207fe42Douglas Gregor      /// \brief Objective-C selector type
597319ac896a0fef7365d5589b8021db7e41207fe42Douglas Gregor      SPECIAL_TYPE_OBJC_SELECTOR               = 2,
598319ac896a0fef7365d5589b8021db7e41207fe42Douglas Gregor      /// \brief Objective-C Protocol type
599319ac896a0fef7365d5589b8021db7e41207fe42Douglas Gregor      SPECIAL_TYPE_OBJC_PROTOCOL               = 3,
600319ac896a0fef7365d5589b8021db7e41207fe42Douglas Gregor      /// \brief Objective-C Class type
601319ac896a0fef7365d5589b8021db7e41207fe42Douglas Gregor      SPECIAL_TYPE_OBJC_CLASS                  = 4,
602319ac896a0fef7365d5589b8021db7e41207fe42Douglas Gregor      /// \brief CFConstantString type
603319ac896a0fef7365d5589b8021db7e41207fe42Douglas Gregor      SPECIAL_TYPE_CF_CONSTANT_STRING          = 5,
604319ac896a0fef7365d5589b8021db7e41207fe42Douglas Gregor      /// \brief Objective-C fast enumeration state type
605c29f77b769bcc5b6dc85e72c8e3cc2e348e5cf25Douglas Gregor      SPECIAL_TYPE_OBJC_FAST_ENUMERATION_STATE = 6,
606c29f77b769bcc5b6dc85e72c8e3cc2e348e5cf25Douglas Gregor      /// \brief C FILE typedef type
607782fa308a765aeac2acb39c4e697c937ec21185bMike Stump      SPECIAL_TYPE_FILE                        = 7,
608782fa308a765aeac2acb39c4e697c937ec21185bMike Stump      /// \brief C jmp_buf typedef type
609782fa308a765aeac2acb39c4e697c937ec21185bMike Stump      SPECIAL_TYPE_jmp_buf                     = 8,
610782fa308a765aeac2acb39c4e697c937ec21185bMike Stump      /// \brief C sigjmp_buf typedef type
611d1571acc700b652a52c766e36a6c688d9bf6f3a1Douglas Gregor      SPECIAL_TYPE_sigjmp_buf                  = 9,
612d1571acc700b652a52c766e36a6c688d9bf6f3a1Douglas Gregor      /// \brief Objective-C "id" redefinition type
613d1571acc700b652a52c766e36a6c688d9bf6f3a1Douglas Gregor      SPECIAL_TYPE_OBJC_ID_REDEFINITION        = 10,
614d1571acc700b652a52c766e36a6c688d9bf6f3a1Douglas Gregor      /// \brief Objective-C "Class" redefinition type
615adaaad3715c9c26cdcfdfe3401a13d7b4423ddcfMike Stump      SPECIAL_TYPE_OBJC_CLASS_REDEFINITION     = 11,
616adaaad3715c9c26cdcfdfe3401a13d7b4423ddcfMike Stump      /// \brief Block descriptor type for Blocks CodeGen
617083c25eea14bb4cc4ecc3ec763c60e2e609e22bdMike Stump      SPECIAL_TYPE_BLOCK_DESCRIPTOR            = 12,
618083c25eea14bb4cc4ecc3ec763c60e2e609e22bdMike Stump      /// \brief Block extedned descriptor type for Blocks CodeGen
61913dcd00615de5c4279d97bdf63cd5f0a14fd9dccFariborz Jahanian      SPECIAL_TYPE_BLOCK_EXTENDED_DESCRIPTOR   = 13,
62013dcd00615de5c4279d97bdf63cd5f0a14fd9dccFariborz Jahanian      /// \brief Objective-C "SEL" redefinition type
6212bb5ddaff86ee73d2cea7ec1835978afc88a83f0Fariborz Jahanian      SPECIAL_TYPE_OBJC_SEL_REDEFINITION       = 14,
6222bb5ddaff86ee73d2cea7ec1835978afc88a83f0Fariborz Jahanian      /// \brief NSConstantString type
623006113841bdae1edb77aef75ba1ffdf2e55a3094Argyrios Kyrtzidis      SPECIAL_TYPE_NS_CONSTANT_STRING          = 15,
624006113841bdae1edb77aef75ba1ffdf2e55a3094Argyrios Kyrtzidis      /// \brief Whether __[u]int128_t identifier is installed.
625006113841bdae1edb77aef75ba1ffdf2e55a3094Argyrios Kyrtzidis      SPECIAL_TYPE_INT128_INSTALLED            = 16
626ad1de006ea080b540e480efc6b86c2e201dbf1ecDouglas Gregor    };
627ad1de006ea080b540e480efc6b86c2e201dbf1ecDouglas Gregor
6282cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    /// \brief Record codes for each kind of declaration.
6292cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    ///
63061d60ee6aa0a5ded0ddcf48679673b37506a1895Douglas Gregor    /// These constants describe the declaration records that can occur within
63161d60ee6aa0a5ded0ddcf48679673b37506a1895Douglas Gregor    /// a declarations block (identified by DECLS_BLOCK_ID). Each
6322cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    /// constant describes a record for a specific declaration class
6332cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    /// in the AST.
6342cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    enum DeclCode {
6352cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief A TranslationUnitDecl record.
6364eb9fc0449ddbd5239ddc3ae6b6e52880f47dcf7Argyrios Kyrtzidis      DECL_TRANSLATION_UNIT = 50,
6372cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief A TypedefDecl record.
6382cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      DECL_TYPEDEF,
6390a2b45e5885b6b8477b167042c0f6cd1d99a1f13Douglas Gregor      /// \brief An EnumDecl record.
6400a2b45e5885b6b8477b167042c0f6cd1d99a1f13Douglas Gregor      DECL_ENUM,
6418c70006581a9b9e9485570ca727a6c5f7be63521Douglas Gregor      /// \brief A RecordDecl record.
6428c70006581a9b9e9485570ca727a6c5f7be63521Douglas Gregor      DECL_RECORD,
6430a2b45e5885b6b8477b167042c0f6cd1d99a1f13Douglas Gregor      /// \brief An EnumConstantDecl record.
6440a2b45e5885b6b8477b167042c0f6cd1d99a1f13Douglas Gregor      DECL_ENUM_CONSTANT,
6453a2f7e42514ddbec983c61826ce85d3071e23e8eDouglas Gregor      /// \brief A FunctionDecl record.
6463a2f7e42514ddbec983c61826ce85d3071e23e8eDouglas Gregor      DECL_FUNCTION,
64753c9d8a4b8f0a76cb9dd2fdd8c433ccf110f2eecSteve Naroff      /// \brief A ObjCMethodDecl record.
64853c9d8a4b8f0a76cb9dd2fdd8c433ccf110f2eecSteve Naroff      DECL_OBJC_METHOD,
64933feeb019a5742b286eededd5446ec0fe87c5a61Steve Naroff      /// \brief A ObjCInterfaceDecl record.
65030833f8d77c08f8f16371776fde85a9fde3d9b6eSteve Naroff      DECL_OBJC_INTERFACE,
65130833f8d77c08f8f16371776fde85a9fde3d9b6eSteve Naroff      /// \brief A ObjCProtocolDecl record.
65230833f8d77c08f8f16371776fde85a9fde3d9b6eSteve Naroff      DECL_OBJC_PROTOCOL,
65333feeb019a5742b286eededd5446ec0fe87c5a61Steve Naroff      /// \brief A ObjCIvarDecl record.
65430833f8d77c08f8f16371776fde85a9fde3d9b6eSteve Naroff      DECL_OBJC_IVAR,
65530833f8d77c08f8f16371776fde85a9fde3d9b6eSteve Naroff      /// \brief A ObjCAtDefsFieldDecl record.
65630833f8d77c08f8f16371776fde85a9fde3d9b6eSteve Naroff      DECL_OBJC_AT_DEFS_FIELD,
65730833f8d77c08f8f16371776fde85a9fde3d9b6eSteve Naroff      /// \brief A ObjCClassDecl record.
65830833f8d77c08f8f16371776fde85a9fde3d9b6eSteve Naroff      DECL_OBJC_CLASS,
65930833f8d77c08f8f16371776fde85a9fde3d9b6eSteve Naroff      /// \brief A ObjCForwardProtocolDecl record.
66030833f8d77c08f8f16371776fde85a9fde3d9b6eSteve Naroff      DECL_OBJC_FORWARD_PROTOCOL,
66130833f8d77c08f8f16371776fde85a9fde3d9b6eSteve Naroff      /// \brief A ObjCCategoryDecl record.
66230833f8d77c08f8f16371776fde85a9fde3d9b6eSteve Naroff      DECL_OBJC_CATEGORY,
66330833f8d77c08f8f16371776fde85a9fde3d9b6eSteve Naroff      /// \brief A ObjCCategoryImplDecl record.
66430833f8d77c08f8f16371776fde85a9fde3d9b6eSteve Naroff      DECL_OBJC_CATEGORY_IMPL,
66530833f8d77c08f8f16371776fde85a9fde3d9b6eSteve Naroff      /// \brief A ObjCImplementationDecl record.
66630833f8d77c08f8f16371776fde85a9fde3d9b6eSteve Naroff      DECL_OBJC_IMPLEMENTATION,
66730833f8d77c08f8f16371776fde85a9fde3d9b6eSteve Naroff      /// \brief A ObjCCompatibleAliasDecl record.
66830833f8d77c08f8f16371776fde85a9fde3d9b6eSteve Naroff      DECL_OBJC_COMPATIBLE_ALIAS,
66930833f8d77c08f8f16371776fde85a9fde3d9b6eSteve Naroff      /// \brief A ObjCPropertyDecl record.
67030833f8d77c08f8f16371776fde85a9fde3d9b6eSteve Naroff      DECL_OBJC_PROPERTY,
67130833f8d77c08f8f16371776fde85a9fde3d9b6eSteve Naroff      /// \brief A ObjCPropertyImplDecl record.
67230833f8d77c08f8f16371776fde85a9fde3d9b6eSteve Naroff      DECL_OBJC_PROPERTY_IMPL,
6738c70006581a9b9e9485570ca727a6c5f7be63521Douglas Gregor      /// \brief A FieldDecl record.
6748c70006581a9b9e9485570ca727a6c5f7be63521Douglas Gregor      DECL_FIELD,
6752cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief A VarDecl record.
6762cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      DECL_VAR,
677405bad07391494d2eb025f8222c256c66b56e5f8Douglas Gregor      /// \brief An ImplicitParamDecl record.
678405bad07391494d2eb025f8222c256c66b56e5f8Douglas Gregor      DECL_IMPLICIT_PARAM,
6793a2f7e42514ddbec983c61826ce85d3071e23e8eDouglas Gregor      /// \brief A ParmVarDecl record.
6803a2f7e42514ddbec983c61826ce85d3071e23e8eDouglas Gregor      DECL_PARM_VAR,
6811028bc67d56ea088c3a57c4c44c3f6aeff60a031Douglas Gregor      /// \brief A FileScopeAsmDecl record.
6821028bc67d56ea088c3a57c4c44c3f6aeff60a031Douglas Gregor      DECL_FILE_SCOPE_ASM,
6831028bc67d56ea088c3a57c4c44c3f6aeff60a031Douglas Gregor      /// \brief A BlockDecl record.
6841028bc67d56ea088c3a57c4c44c3f6aeff60a031Douglas Gregor      DECL_BLOCK,
6852cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief A record that stores the set of declarations that are
6862cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// lexically stored within a given DeclContext.
6872cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      ///
688681d7237e1014bf64dd5ead6bf74ae55cdd19e61Sebastian Redl      /// The record itself is a blob that is an array of declaration IDs,
689681d7237e1014bf64dd5ead6bf74ae55cdd19e61Sebastian Redl      /// in the order in which those declarations were added to the
6902cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// declaration context. This data is used when iterating over
6912cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// the contents of a DeclContext, e.g., via
6922cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// DeclContext::decls_begin()/DeclContext::decls_end().
6932cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      DECL_CONTEXT_LEXICAL,
6942cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// \brief A record that stores the set of declarations that are
6952cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// visible from a given DeclContext.
6962cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      ///
6972cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// The record itself stores a set of mappings, each of which
6982cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// associates a declaration name with one or more declaration
6992cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// IDs. This data is used when performing qualified name lookup
7002cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor      /// into a DeclContext via DeclContext::lookup.
7010cef483f3b9d6a7f9fdbc5910d0a3ed64130e8e1Douglas Gregor      DECL_CONTEXT_VISIBLE,
702ad8dcf4a9df0e24051dc31bf9e6f3cd138a34298Chris Lattner      /// \brief A LabelDecl record.
703ad8dcf4a9df0e24051dc31bf9e6f3cd138a34298Chris Lattner      DECL_LABEL,
704ad8dcf4a9df0e24051dc31bf9e6f3cd138a34298Chris Lattner      /// \brief A NamespaceDecl record.
7056ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      DECL_NAMESPACE,
7066ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      /// \brief A NamespaceAliasDecl record.
7076ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      DECL_NAMESPACE_ALIAS,
7086ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      /// \brief A UsingDecl record.
7096ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      DECL_USING,
7106ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      /// \brief A UsingShadowDecl record.
7116ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      DECL_USING_SHADOW,
7126ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      /// \brief A UsingDirecitveDecl record.
7136ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      DECL_USING_DIRECTIVE,
7146ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      /// \brief An UnresolvedUsingValueDecl record.
7156ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      DECL_UNRESOLVED_USING_VALUE,
7166ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      /// \brief An UnresolvedUsingTypenameDecl record.
7176ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      DECL_UNRESOLVED_USING_TYPENAME,
7186ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      /// \brief A LinkageSpecDecl record.
7196ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      DECL_LINKAGE_SPEC,
7206ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      /// \brief A CXXRecordDecl record.
7216ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      DECL_CXX_RECORD,
7226ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      /// \brief A CXXMethodDecl record.
7236ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      DECL_CXX_METHOD,
7246ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      /// \brief A CXXConstructorDecl record.
7256ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      DECL_CXX_CONSTRUCTOR,
7266ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      /// \brief A CXXDestructorDecl record.
7276ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      DECL_CXX_DESTRUCTOR,
7286ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      /// \brief A CXXConversionDecl record.
7296ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      DECL_CXX_CONVERSION,
7306206d53f67613958ae1b023aba337ebb46f11a8bAbramo Bagnara      /// \brief An AccessSpecDecl record.
7316206d53f67613958ae1b023aba337ebb46f11a8bAbramo Bagnara      DECL_ACCESS_SPEC,
7326ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner
7335f3dbf5bbc5cb6e3d9273e5b6e82baa14cbd999cArgyrios Kyrtzidis      /// \brief A FriendDecl record.
7346ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      DECL_FRIEND,
7355f3dbf5bbc5cb6e3d9273e5b6e82baa14cbd999cArgyrios Kyrtzidis      /// \brief A FriendTemplateDecl record.
7366ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      DECL_FRIEND_TEMPLATE,
7375f3dbf5bbc5cb6e3d9273e5b6e82baa14cbd999cArgyrios Kyrtzidis      /// \brief A ClassTemplateDecl record.
7386ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      DECL_CLASS_TEMPLATE,
7395f3dbf5bbc5cb6e3d9273e5b6e82baa14cbd999cArgyrios Kyrtzidis      /// \brief A ClassTemplateSpecializationDecl record.
7406ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      DECL_CLASS_TEMPLATE_SPECIALIZATION,
7415f3dbf5bbc5cb6e3d9273e5b6e82baa14cbd999cArgyrios Kyrtzidis      /// \brief A ClassTemplatePartialSpecializationDecl record.
7426ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      DECL_CLASS_TEMPLATE_PARTIAL_SPECIALIZATION,
7435f3dbf5bbc5cb6e3d9273e5b6e82baa14cbd999cArgyrios Kyrtzidis      /// \brief A FunctionTemplateDecl record.
7446ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      DECL_FUNCTION_TEMPLATE,
7455f3dbf5bbc5cb6e3d9273e5b6e82baa14cbd999cArgyrios Kyrtzidis      /// \brief A TemplateTypeParmDecl record.
7466ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      DECL_TEMPLATE_TYPE_PARM,
7475f3dbf5bbc5cb6e3d9273e5b6e82baa14cbd999cArgyrios Kyrtzidis      /// \brief A NonTypeTemplateParmDecl record.
7486ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      DECL_NON_TYPE_TEMPLATE_PARM,
7495f3dbf5bbc5cb6e3d9273e5b6e82baa14cbd999cArgyrios Kyrtzidis      /// \brief A TemplateTemplateParmDecl record.
7506ad9ac097918fbdeb443ea7b99d4db9e49b28534Chris Lattner      DECL_TEMPLATE_TEMPLATE_PARM,
7515f3dbf5bbc5cb6e3d9273e5b6e82baa14cbd999cArgyrios Kyrtzidis      /// \brief A StaticAssertDecl record.
7527c789c1a3f77f24032aa0bed2afacdb9e094e952Douglas Gregor      DECL_STATIC_ASSERT,
7537c789c1a3f77f24032aa0bed2afacdb9e094e952Douglas Gregor      /// \brief A record containing CXXBaseSpecifiers.
75487c2e121cf0522fc266efe2922b58091cd2e0182Francois Pichet      DECL_CXX_BASE_SPECIFIERS,
75587c2e121cf0522fc266efe2922b58091cd2e0182Francois Pichet      /// \brief A IndirectFieldDecl record.
7566952f1e4256c5b43aee5e98cea4e9b663bd1d413Douglas Gregor      DECL_INDIRECTFIELD,
7576952f1e4256c5b43aee5e98cea4e9b663bd1d413Douglas Gregor      /// \brief A NonTypeTemplateParmDecl record that stores an expanded
7586952f1e4256c5b43aee5e98cea4e9b663bd1d413Douglas Gregor      /// non-type template parameter pack.
7596952f1e4256c5b43aee5e98cea4e9b663bd1d413Douglas Gregor      DECL_EXPANDED_NON_TYPE_TEMPLATE_PARM_PACK
7602cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    };
7610b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregor
7620b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregor    /// \brief Record codes for each kind of statement or expression.
7630b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregor    ///
7640b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregor    /// These constants describe the records that describe statements
76561d60ee6aa0a5ded0ddcf48679673b37506a1895Douglas Gregor    /// or expressions. These records  occur within type and declarations
76661d60ee6aa0a5ded0ddcf48679673b37506a1895Douglas Gregor    /// block, so they begin with record values of 100.  Each constant
76761d60ee6aa0a5ded0ddcf48679673b37506a1895Douglas Gregor    /// describes a record for a specific statement or expression class in the
76861d60ee6aa0a5ded0ddcf48679673b37506a1895Douglas Gregor    /// AST.
7690b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregor    enum StmtCode {
770087fd536809ebe754d91c641a98917e02dd7452dDouglas Gregor      /// \brief A marker record that indicates that we are at the end
771087fd536809ebe754d91c641a98917e02dd7452dDouglas Gregor      /// of an expression.
77261d60ee6aa0a5ded0ddcf48679673b37506a1895Douglas Gregor      STMT_STOP = 100,
7730b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregor      /// \brief A NULL expression.
774c9490c000f515c29f200a1215328d8ab9a0f3818Douglas Gregor      STMT_NULL_PTR,
775025452fa0eda63e150cfaeebe64f0a19c96b3a06Douglas Gregor      /// \brief A NullStmt record.
776025452fa0eda63e150cfaeebe64f0a19c96b3a06Douglas Gregor      STMT_NULL,
777025452fa0eda63e150cfaeebe64f0a19c96b3a06Douglas Gregor      /// \brief A CompoundStmt record.
778025452fa0eda63e150cfaeebe64f0a19c96b3a06Douglas Gregor      STMT_COMPOUND,
779025452fa0eda63e150cfaeebe64f0a19c96b3a06Douglas Gregor      /// \brief A CaseStmt record.
780025452fa0eda63e150cfaeebe64f0a19c96b3a06Douglas Gregor      STMT_CASE,
781025452fa0eda63e150cfaeebe64f0a19c96b3a06Douglas Gregor      /// \brief A DefaultStmt record.
782025452fa0eda63e150cfaeebe64f0a19c96b3a06Douglas Gregor      STMT_DEFAULT,
7831de05feeeafe5b215fe7617594a7076a5192a6e2Douglas Gregor      /// \brief A LabelStmt record.
7841de05feeeafe5b215fe7617594a7076a5192a6e2Douglas Gregor      STMT_LABEL,
785025452fa0eda63e150cfaeebe64f0a19c96b3a06Douglas Gregor      /// \brief An IfStmt record.
786025452fa0eda63e150cfaeebe64f0a19c96b3a06Douglas Gregor      STMT_IF,
787025452fa0eda63e150cfaeebe64f0a19c96b3a06Douglas Gregor      /// \brief A SwitchStmt record.
788025452fa0eda63e150cfaeebe64f0a19c96b3a06Douglas Gregor      STMT_SWITCH,
789d921cf976b4769af8d06d6763a2547dadf7940abDouglas Gregor      /// \brief A WhileStmt record.
790d921cf976b4769af8d06d6763a2547dadf7940abDouglas Gregor      STMT_WHILE,
79167d8249924ef38a5375ff9c92cd21c1854d6ababDouglas Gregor      /// \brief A DoStmt record.
79267d8249924ef38a5375ff9c92cd21c1854d6ababDouglas Gregor      STMT_DO,
79367d8249924ef38a5375ff9c92cd21c1854d6ababDouglas Gregor      /// \brief A ForStmt record.
79467d8249924ef38a5375ff9c92cd21c1854d6ababDouglas Gregor      STMT_FOR,
7951de05feeeafe5b215fe7617594a7076a5192a6e2Douglas Gregor      /// \brief A GotoStmt record.
7961de05feeeafe5b215fe7617594a7076a5192a6e2Douglas Gregor      STMT_GOTO,
7977d5c2f241c74e5f8d9ec492e8f9f268e5e9ae41fDouglas Gregor      /// \brief An IndirectGotoStmt record.
7987d5c2f241c74e5f8d9ec492e8f9f268e5e9ae41fDouglas Gregor      STMT_INDIRECT_GOTO,
799d921cf976b4769af8d06d6763a2547dadf7940abDouglas Gregor      /// \brief A ContinueStmt record.
800d921cf976b4769af8d06d6763a2547dadf7940abDouglas Gregor      STMT_CONTINUE,
801025452fa0eda63e150cfaeebe64f0a19c96b3a06Douglas Gregor      /// \brief A BreakStmt record.
802025452fa0eda63e150cfaeebe64f0a19c96b3a06Douglas Gregor      STMT_BREAK,
8030de9d8857b715c2f45c987651f4ce06d73330d93Douglas Gregor      /// \brief A ReturnStmt record.
8040de9d8857b715c2f45c987651f4ce06d73330d93Douglas Gregor      STMT_RETURN,
80584f2170062014d268951902164bed0d8bdea0e82Douglas Gregor      /// \brief A DeclStmt record.
80684f2170062014d268951902164bed0d8bdea0e82Douglas Gregor      STMT_DECL,
807cd7d5a9dc558178ed7a66032f888781b3c592e4fDouglas Gregor      /// \brief An AsmStmt record.
808cd7d5a9dc558178ed7a66032f888781b3c592e4fDouglas Gregor      STMT_ASM,
80917fc223395d51be582fc666bb6ea21bd1dff26dcDouglas Gregor      /// \brief A PredefinedExpr record.
81017fc223395d51be582fc666bb6ea21bd1dff26dcDouglas Gregor      EXPR_PREDEFINED,
8110b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregor      /// \brief A DeclRefExpr record.
8120b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregor      EXPR_DECL_REF,
8130b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregor      /// \brief An IntegerLiteral record.
8140b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregor      EXPR_INTEGER_LITERAL,
81517fc223395d51be582fc666bb6ea21bd1dff26dcDouglas Gregor      /// \brief A FloatingLiteral record.
81617fc223395d51be582fc666bb6ea21bd1dff26dcDouglas Gregor      EXPR_FLOATING_LITERAL,
817cb2ca73c1d7e76cc1358ce51457d2d5837d84f9bDouglas Gregor      /// \brief An ImaginaryLiteral record.
818cb2ca73c1d7e76cc1358ce51457d2d5837d84f9bDouglas Gregor      EXPR_IMAGINARY_LITERAL,
819673ecd6a4a9f7c12fb6f76f84f654dbdcdc89e76Douglas Gregor      /// \brief A StringLiteral record.
820673ecd6a4a9f7c12fb6f76f84f654dbdcdc89e76Douglas Gregor      EXPR_STRING_LITERAL,
8210b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregor      /// \brief A CharacterLiteral record.
822087fd536809ebe754d91c641a98917e02dd7452dDouglas Gregor      EXPR_CHARACTER_LITERAL,
823c04db4feefa2b0dbbc6876cb4eeeee108aa6791dDouglas Gregor      /// \brief A ParenExpr record.
824c04db4feefa2b0dbbc6876cb4eeeee108aa6791dDouglas Gregor      EXPR_PAREN,
82537bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis      /// \brief A ParenListExpr record.
82637bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis      EXPR_PAREN_LIST,
8270b0b77fa29c74c99a77548ed86ca8a04f7cf6b02Douglas Gregor      /// \brief A UnaryOperator record.
8280b0b77fa29c74c99a77548ed86ca8a04f7cf6b02Douglas Gregor      EXPR_UNARY_OPERATOR,
8298ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor      /// \brief An OffsetOfExpr record.
8308ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor      EXPR_OFFSETOF,
8310b0b77fa29c74c99a77548ed86ca8a04f7cf6b02Douglas Gregor      /// \brief A SizefAlignOfExpr record.
8320b0b77fa29c74c99a77548ed86ca8a04f7cf6b02Douglas Gregor      EXPR_SIZEOF_ALIGN_OF,
833cb2ca73c1d7e76cc1358ce51457d2d5837d84f9bDouglas Gregor      /// \brief An ArraySubscriptExpr record.
834cb2ca73c1d7e76cc1358ce51457d2d5837d84f9bDouglas Gregor      EXPR_ARRAY_SUBSCRIPT,
8351f0d0133b0e8d1f01f63951ee04927796b34740dDouglas Gregor      /// \brief A CallExpr record.
8361f0d0133b0e8d1f01f63951ee04927796b34740dDouglas Gregor      EXPR_CALL,
8371f0d0133b0e8d1f01f63951ee04927796b34740dDouglas Gregor      /// \brief A MemberExpr record.
8381f0d0133b0e8d1f01f63951ee04927796b34740dDouglas Gregor      EXPR_MEMBER,
839db600c330a37b1c3ab4533310729910ee188f900Douglas Gregor      /// \brief A BinaryOperator record.
840db600c330a37b1c3ab4533310729910ee188f900Douglas Gregor      EXPR_BINARY_OPERATOR,
841ad90e96fb7eed26d5217dd06ba50ecbbbebb59e6Douglas Gregor      /// \brief A CompoundAssignOperator record.
842ad90e96fb7eed26d5217dd06ba50ecbbbebb59e6Douglas Gregor      EXPR_COMPOUND_ASSIGN_OPERATOR,
843ad90e96fb7eed26d5217dd06ba50ecbbbebb59e6Douglas Gregor      /// \brief A ConditionOperator record.
844ad90e96fb7eed26d5217dd06ba50ecbbbebb59e6Douglas Gregor      EXPR_CONDITIONAL_OPERATOR,
845087fd536809ebe754d91c641a98917e02dd7452dDouglas Gregor      /// \brief An ImplicitCastExpr record.
846db600c330a37b1c3ab4533310729910ee188f900Douglas Gregor      EXPR_IMPLICIT_CAST,
847db600c330a37b1c3ab4533310729910ee188f900Douglas Gregor      /// \brief A CStyleCastExpr record.
848d3c98a02c73417689deaaa6671ea6df7f2a8a73cDouglas Gregor      EXPR_CSTYLE_CAST,
849ba6d7e7fa5f79959d3eef39adb5620d845ba5198Douglas Gregor      /// \brief A CompoundLiteralExpr record.
850ba6d7e7fa5f79959d3eef39adb5620d845ba5198Douglas Gregor      EXPR_COMPOUND_LITERAL,
851d3c98a02c73417689deaaa6671ea6df7f2a8a73cDouglas Gregor      /// \brief An ExtVectorElementExpr record.
852d3c98a02c73417689deaaa6671ea6df7f2a8a73cDouglas Gregor      EXPR_EXT_VECTOR_ELEMENT,
853d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor      /// \brief An InitListExpr record.
854d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor      EXPR_INIT_LIST,
855d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor      /// \brief A DesignatedInitExpr record.
856d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor      EXPR_DESIGNATED_INIT,
857d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor      /// \brief An ImplicitValueInitExpr record.
858d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor      EXPR_IMPLICIT_VALUE_INIT,
859d3c98a02c73417689deaaa6671ea6df7f2a8a73cDouglas Gregor      /// \brief A VAArgExpr record.
86044cae0c8669cdf83618cbe7fd36ea7a8e51cf97fDouglas Gregor      EXPR_VA_ARG,
8616a2dd55b0b3ae376d449a4b07bbb6b2d30b26330Douglas Gregor      /// \brief An AddrLabelExpr record.
8627d5c2f241c74e5f8d9ec492e8f9f268e5e9ae41fDouglas Gregor      EXPR_ADDR_LABEL,
8636a2dd55b0b3ae376d449a4b07bbb6b2d30b26330Douglas Gregor      /// \brief A StmtExpr record.
8646a2dd55b0b3ae376d449a4b07bbb6b2d30b26330Douglas Gregor      EXPR_STMT,
86544cae0c8669cdf83618cbe7fd36ea7a8e51cf97fDouglas Gregor      /// \brief A ChooseExpr record.
86644cae0c8669cdf83618cbe7fd36ea7a8e51cf97fDouglas Gregor      EXPR_CHOOSE,
86744cae0c8669cdf83618cbe7fd36ea7a8e51cf97fDouglas Gregor      /// \brief A GNUNullExpr record.
86894cd5d1397bb1a8bcd109602aa38dd787b164c22Douglas Gregor      EXPR_GNU_NULL,
86994cd5d1397bb1a8bcd109602aa38dd787b164c22Douglas Gregor      /// \brief A ShuffleVectorExpr record.
87094cd5d1397bb1a8bcd109602aa38dd787b164c22Douglas Gregor      EXPR_SHUFFLE_VECTOR,
87184af7c27cdc615ff917a501d61256b4049383c97Douglas Gregor      /// \brief BlockExpr
87284af7c27cdc615ff917a501d61256b4049383c97Douglas Gregor      EXPR_BLOCK,
87384af7c27cdc615ff917a501d61256b4049383c97Douglas Gregor      /// \brief A BlockDeclRef record.
8744dcf151a555ff51e4d643e8e6eeb80f121d11d1bChris Lattner      EXPR_BLOCK_DECL_REF,
87539da0b8145eaec7da7004f9b3645c5c9f4f63b1dDouglas Gregor
8764dcf151a555ff51e4d643e8e6eeb80f121d11d1bChris Lattner      // Objective-C
8771eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
8780389e6bd0159bfdd08f7c50a37543b6e3adf0c33Chris Lattner      /// \brief An ObjCStringLiteral record.
8793a57a3765b6192a94ff4e5997ae0489a1471b308Chris Lattner      EXPR_OBJC_STRING_LITERAL,
8800389e6bd0159bfdd08f7c50a37543b6e3adf0c33Chris Lattner      /// \brief An ObjCEncodeExpr record.
8813a57a3765b6192a94ff4e5997ae0489a1471b308Chris Lattner      EXPR_OBJC_ENCODE,
8820389e6bd0159bfdd08f7c50a37543b6e3adf0c33Chris Lattner      /// \brief An ObjCSelectorExpr record.
8833a57a3765b6192a94ff4e5997ae0489a1471b308Chris Lattner      EXPR_OBJC_SELECTOR_EXPR,
8840389e6bd0159bfdd08f7c50a37543b6e3adf0c33Chris Lattner      /// \brief An ObjCProtocolExpr record.
885c4f0bbdb166fbc31ab2cf0f6ff573fde9fa307b3Steve Naroff      EXPR_OBJC_PROTOCOL_EXPR,
8860389e6bd0159bfdd08f7c50a37543b6e3adf0c33Chris Lattner      /// \brief An ObjCIvarRefExpr record.
8870389e6bd0159bfdd08f7c50a37543b6e3adf0c33Chris Lattner      EXPR_OBJC_IVAR_REF_EXPR,
8880389e6bd0159bfdd08f7c50a37543b6e3adf0c33Chris Lattner      /// \brief An ObjCPropertyRefExpr record.
8890389e6bd0159bfdd08f7c50a37543b6e3adf0c33Chris Lattner      EXPR_OBJC_PROPERTY_REF_EXPR,
89012f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall      /// \brief UNUSED
8910389e6bd0159bfdd08f7c50a37543b6e3adf0c33Chris Lattner      EXPR_OBJC_KVC_REF_EXPR,
8920389e6bd0159bfdd08f7c50a37543b6e3adf0c33Chris Lattner      /// \brief An ObjCMessageExpr record.
8930389e6bd0159bfdd08f7c50a37543b6e3adf0c33Chris Lattner      EXPR_OBJC_MESSAGE_EXPR,
894f242b1b0c4e998911cb96b2ba7e27ab4a5abaed3Steve Naroff      /// \brief An ObjCIsa Expr record.
895f242b1b0c4e998911cb96b2ba7e27ab4a5abaed3Steve Naroff      EXPR_OBJC_ISA,
8961eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
8971eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump      /// \brief An ObjCForCollectionStmt record.
8981eb5540760dc79502e32d4fe9c28217476ea14b9Steve Naroff      STMT_OBJC_FOR_COLLECTION,
8991eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump      /// \brief An ObjCAtCatchStmt record.
9001eb5540760dc79502e32d4fe9c28217476ea14b9Steve Naroff      STMT_OBJC_CATCH,
9011eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump      /// \brief An ObjCAtFinallyStmt record.
9021eb5540760dc79502e32d4fe9c28217476ea14b9Steve Naroff      STMT_OBJC_FINALLY,
9031eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump      /// \brief An ObjCAtTryStmt record.
9041eb5540760dc79502e32d4fe9c28217476ea14b9Steve Naroff      STMT_OBJC_AT_TRY,
9051eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump      /// \brief An ObjCAtSynchronizedStmt record.
9061eb5540760dc79502e32d4fe9c28217476ea14b9Steve Naroff      STMT_OBJC_AT_SYNCHRONIZED,
9071eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump      /// \brief An ObjCAtThrowStmt record.
908ba0a9006dbc4814e1e35f82812cb5a1dad65e8b8Argyrios Kyrtzidis      STMT_OBJC_AT_THROW,
909ba0a9006dbc4814e1e35f82812cb5a1dad65e8b8Argyrios Kyrtzidis
910ba0a9006dbc4814e1e35f82812cb5a1dad65e8b8Argyrios Kyrtzidis      // C++
9117cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis
9127cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis      /// \brief A CXXCatchStmt record.
9137cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis      STMT_CXX_CATCH,
9147cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis      /// \brief A CXXTryStmt record.
9157cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis      STMT_CXX_TRY,
916ba0a9006dbc4814e1e35f82812cb5a1dad65e8b8Argyrios Kyrtzidis
91739da0b8145eaec7da7004f9b3645c5c9f4f63b1dDouglas Gregor      /// \brief A CXXOperatorCallExpr record.
91839da0b8145eaec7da7004f9b3645c5c9f4f63b1dDouglas Gregor      EXPR_CXX_OPERATOR_CALL,
9191817bd483b538fd3f4530649f5cb900bad9e8a76Chris Lattner      /// \brief A CXXMemberCallExpr record.
9201817bd483b538fd3f4530649f5cb900bad9e8a76Chris Lattner      EXPR_CXX_MEMBER_CALL,
92139da0b8145eaec7da7004f9b3645c5c9f4f63b1dDouglas Gregor      /// \brief A CXXConstructExpr record.
922ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig      EXPR_CXX_CONSTRUCT,
9236d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis      /// \brief A CXXTemporaryObjectExpr record.
9246d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis      EXPR_CXX_TEMPORARY_OBJECT,
925f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl      /// \brief A CXXStaticCastExpr record.
926ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig      EXPR_CXX_STATIC_CAST,
927f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl      /// \brief A CXXDynamicCastExpr record.
928ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig      EXPR_CXX_DYNAMIC_CAST,
929f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl      /// \brief A CXXReinterpretCastExpr record.
930ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig      EXPR_CXX_REINTERPRET_CAST,
931f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl      /// \brief A CXXConstCastExpr record.
932ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig      EXPR_CXX_CONST_CAST,
933f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl      /// \brief A CXXFunctionalCastExpr record.
934eb7f96141f754150a92433286fa385910a22f494Sam Weinig      EXPR_CXX_FUNCTIONAL_CAST,
935f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl      /// \brief A CXXBoolLiteralExpr record.
936eb7f96141f754150a92433286fa385910a22f494Sam Weinig      EXPR_CXX_BOOL_LITERAL,
93714ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner      EXPR_CXX_NULL_PTR_LITERAL,  // CXXNullPtrLiteralExpr
93814ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner      EXPR_CXX_TYPEID_EXPR,       // CXXTypeidExpr (of expr).
9392fbdfcdf3bbf7b941853d38b123930755e837437Chris Lattner      EXPR_CXX_TYPEID_TYPE,       // CXXTypeidExpr (of type).
94001b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichet      EXPR_CXX_UUIDOF_EXPR,       // CXXUuidofExpr (of expr).
94101b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichet      EXPR_CXX_UUIDOF_TYPE,       // CXXUuidofExpr (of type).
9422fbdfcdf3bbf7b941853d38b123930755e837437Chris Lattner      EXPR_CXX_THIS,              // CXXThisExpr
943030854b95f7bfd86aaa8afd9ae1aff9768a37e9aChris Lattner      EXPR_CXX_THROW,             // CXXThrowExpr
944d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner      EXPR_CXX_DEFAULT_ARG,       // CXXDefaultArgExpr
945d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner      EXPR_CXX_BIND_TEMPORARY,    // CXXBindTemporaryExpr
9466d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis
947ed8abf18329df67b0abcbb3a10458bd8c1d2a595Douglas Gregor      EXPR_CXX_SCALAR_VALUE_INIT, // CXXScalarValueInitExpr
9485921863d8f24084797863b5df37842113bac4352Chris Lattner      EXPR_CXX_NEW,               // CXXNewExpr
94995fc98ce95d4faa4f1bb2783384150530404ea6fArgyrios Kyrtzidis      EXPR_CXX_DELETE,            // CXXDeleteExpr
950de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis      EXPR_CXX_PSEUDO_DESTRUCTOR, // CXXPseudoDestructorExpr
951d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner
9524765fa05b5652fcc4356371c2f481d0ea9a1b007John McCall      EXPR_EXPR_WITH_CLEANUPS,    // ExprWithCleanups
9538dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis
9546b219d082434394c1ac401390ec1d1967727815aSebastian Redl      EXPR_CXX_DEPENDENT_SCOPE_MEMBER,   // CXXDependentScopeMemberExpr
9556b219d082434394c1ac401390ec1d1967727815aSebastian Redl      EXPR_CXX_DEPENDENT_SCOPE_DECL_REF, // DependentScopeDeclRefExpr
9566b219d082434394c1ac401390ec1d1967727815aSebastian Redl      EXPR_CXX_UNRESOLVED_CONSTRUCT,     // CXXUnresolvedConstructExpr
9576b219d082434394c1ac401390ec1d1967727815aSebastian Redl      EXPR_CXX_UNRESOLVED_MEMBER,        // UnresolvedMemberExpr
9586b219d082434394c1ac401390ec1d1967727815aSebastian Redl      EXPR_CXX_UNRESOLVED_LOOKUP,        // UnresolvedLookupExpr
9596b219d082434394c1ac401390ec1d1967727815aSebastian Redl
9606b219d082434394c1ac401390ec1d1967727815aSebastian Redl      EXPR_CXX_UNARY_TYPE_TRAIT,  // UnaryTypeTraitExpr
9617cd7d1ad33fdf49eef83942e8855fe20d95aa1b9John McCall      EXPR_CXX_NOEXCEPT,          // CXXNoexceptExpr
9627cd7d1ad33fdf49eef83942e8855fe20d95aa1b9John McCall
9636ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichet      EXPR_OPAQUE_VALUE,          // OpaqueValueExpr
96456ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall      EXPR_BINARY_CONDITIONAL_OPERATOR,  // BinaryConditionalOperator
965be230c36e32142cbdcdbe9c97511d097beeecbabDouglas Gregor      EXPR_BINARY_TYPE_TRAIT,     // BinaryTypeTraitExpr
966be230c36e32142cbdcdbe9c97511d097beeecbabDouglas Gregor
967ee8aff06f6a96214731de17b2cb6df407c6c1820Douglas Gregor      EXPR_PACK_EXPANSION,        // PackExpansionExpr
968c7793c73ba8a343de3f2552d984851985a46f159Douglas Gregor      EXPR_SIZEOF_PACK,           // SizeOfPackExpr
969e08ce650a2b02410eddd1f60a4aa6b3d4be71e73Peter Collingbourne      EXPR_SUBST_NON_TYPE_TEMPLATE_PARM_PACK,// SubstNonTypeTemplateParmPackExpr
970e08ce650a2b02410eddd1f60a4aa6b3d4be71e73Peter Collingbourne
971e08ce650a2b02410eddd1f60a4aa6b3d4be71e73Peter Collingbourne      // CUDA
972e08ce650a2b02410eddd1f60a4aa6b3d4be71e73Peter Collingbourne
973e08ce650a2b02410eddd1f60a4aa6b3d4be71e73Peter Collingbourne      EXPR_CUDA_KERNEL_CALL       // CUDAKernelCallExpr
9740b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregor    };
975d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor
976d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor    /// \brief The kinds of designators that can occur in a
977d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor    /// DesignatedInitExpr.
978d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor    enum DesignatorTypes {
979d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor      /// \brief Field designator where only the field name is known.
980d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor      DESIG_FIELD_NAME  = 0,
981d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor      /// \brief Field designator where the field has been resolved to
982d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor      /// a declaration.
983d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor      DESIG_FIELD_DECL  = 1,
984d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor      /// \brief Array designator.
985d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor      DESIG_ARRAY       = 2,
986d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor      /// \brief GNU array range designator.
987d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor      DESIG_ARRAY_RANGE = 3
988d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor    };
989d077d759d0c7fceee98f4e77b6423a3f11cfc849Douglas Gregor
99014f79002e58556798e86168c63e48d533287eda5Douglas Gregor    /// @}
9912cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor  }
9922cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor} // end namespace clang
9932cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor
9942cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor#endif
995