llvm/llvm/include/llvm/DebugInfo/CodeView/TypeRecord.h

//===- TypeRecord.h ---------------------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

#ifndef LLVM_DEBUGINFO_CODEVIEW_TYPERECORD_H
#define LLVM_DEBUGINFO_CODEVIEW_TYPERECORD_H

#include "llvm/ADT/APSInt.h"
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/DebugInfo/CodeView/CVRecord.h"
#include "llvm/DebugInfo/CodeView/CodeView.h"
#include "llvm/DebugInfo/CodeView/GUID.h"
#include "llvm/DebugInfo/CodeView/TypeIndex.h"
#include "llvm/Support/BinaryStreamArray.h"
#include "llvm/Support/Endian.h"
#include <algorithm>
#include <cstdint>
#include <optional>
#include <vector>

namespace llvm {
namespace codeview {

little32_t;
ulittle16_t;
ulittle32_t;

struct CVMemberRecord {};

/// Equvalent to CV_fldattr_t in cvinfo.h.
struct MemberAttributes {};

// Does not correspond to any tag, this is the tail of an LF_POINTER record
// if it represents a member pointer.
class MemberPointerInfo {};

class TypeRecord {};

// LF_MODIFIER
class ModifierRecord : public TypeRecord {};

// LF_PROCEDURE
class ProcedureRecord : public TypeRecord {};

// LF_MFUNCTION
class MemberFunctionRecord : public TypeRecord {};

// LF_LABEL
class LabelRecord : public TypeRecord {};

// LF_MFUNC_ID
class MemberFuncIdRecord : public TypeRecord {};

// LF_ARGLIST
class ArgListRecord : public TypeRecord {};

// LF_SUBSTR_LIST
class StringListRecord : public TypeRecord {};

// LF_POINTER
class PointerRecord : public TypeRecord {};

// LF_NESTTYPE
class NestedTypeRecord : public TypeRecord {};

// LF_FIELDLIST
class FieldListRecord : public TypeRecord {};

// LF_ARRAY
class ArrayRecord : public TypeRecord {};

class TagRecord : public TypeRecord {};

// LF_CLASS, LF_STRUCTURE, LF_INTERFACE
class ClassRecord : public TagRecord {};

// LF_UNION
struct UnionRecord : public TagRecord {};

// LF_ENUM
class EnumRecord : public TagRecord {};

// LF_BITFIELD
class BitFieldRecord : public TypeRecord {};

// LF_VTSHAPE
class VFTableShapeRecord : public TypeRecord {};

// LF_TYPESERVER2
class TypeServer2Record : public TypeRecord {};

// LF_STRING_ID
class StringIdRecord : public TypeRecord {};

// LF_FUNC_ID
class FuncIdRecord : public TypeRecord {};

// LF_UDT_SRC_LINE
class UdtSourceLineRecord : public TypeRecord {};

// LF_UDT_MOD_SRC_LINE
class UdtModSourceLineRecord : public TypeRecord {};

// LF_BUILDINFO
class BuildInfoRecord : public TypeRecord {};

// LF_VFTABLE
class VFTableRecord : public TypeRecord {};

// LF_ONEMETHOD
class OneMethodRecord : public TypeRecord {};

// LF_METHODLIST
class MethodOverloadListRecord : public TypeRecord {};

/// For method overload sets.  LF_METHOD
class OverloadedMethodRecord : public TypeRecord {};

// LF_MEMBER
class DataMemberRecord : public TypeRecord {};

// LF_STMEMBER
class StaticDataMemberRecord : public TypeRecord {};

// LF_ENUMERATE
class EnumeratorRecord : public TypeRecord {};

// LF_VFUNCTAB
class VFPtrRecord : public TypeRecord {};

// LF_BCLASS, LF_BINTERFACE
class BaseClassRecord : public TypeRecord {};

// LF_VBCLASS, LF_IVBCLASS
class VirtualBaseClassRecord : public TypeRecord {};

/// LF_INDEX - Used to chain two large LF_FIELDLIST or LF_METHODLIST records
/// together. The first will end in an LF_INDEX record that points to the next.
class ListContinuationRecord : public TypeRecord {};

// LF_PRECOMP
class PrecompRecord : public TypeRecord {};

// LF_ENDPRECOMP
class EndPrecompRecord : public TypeRecord {};

} // end namespace codeview
} // end namespace llvm

#endif // LLVM_DEBUGINFO_CODEVIEW_TYPERECORD_H