Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-05-10 08:43:45

0001 //===- NativeTypeUDT.h - info about class/struct type ------------*- C++-*-===//
0002 //
0003 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
0004 // See https://llvm.org/LICENSE.txt for license information.
0005 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
0006 //
0007 //===----------------------------------------------------------------------===//
0008 
0009 #ifndef LLVM_DEBUGINFO_PDB_NATIVE_NATIVETYPEUDT_H
0010 #define LLVM_DEBUGINFO_PDB_NATIVE_NATIVETYPEUDT_H
0011 
0012 #include "llvm/DebugInfo/CodeView/TypeIndex.h"
0013 #include "llvm/DebugInfo/CodeView/TypeRecord.h"
0014 #include "llvm/DebugInfo/PDB/IPDBRawSymbol.h"
0015 #include "llvm/DebugInfo/PDB/Native/NativeRawSymbol.h"
0016 #include "llvm/DebugInfo/PDB/PDBTypes.h"
0017 
0018 namespace llvm {
0019 
0020 class raw_ostream;
0021 namespace pdb {
0022 class NativeSession;
0023 
0024 class NativeTypeUDT : public NativeRawSymbol {
0025 public:
0026   NativeTypeUDT(NativeSession &Session, SymIndexId Id, codeview::TypeIndex TI,
0027                 codeview::ClassRecord Class);
0028 
0029   NativeTypeUDT(NativeSession &Session, SymIndexId Id, codeview::TypeIndex TI,
0030                 codeview::UnionRecord Union);
0031 
0032   NativeTypeUDT(NativeSession &Session, SymIndexId Id,
0033                 NativeTypeUDT &UnmodifiedType,
0034                 codeview::ModifierRecord Modifier);
0035 
0036   ~NativeTypeUDT() override;
0037 
0038   void dump(raw_ostream &OS, int Indent, PdbSymbolIdField ShowIdFields,
0039             PdbSymbolIdField RecurseIdFields) const override;
0040 
0041   std::string getName() const override;
0042   SymIndexId getLexicalParentId() const override;
0043   SymIndexId getUnmodifiedTypeId() const override;
0044   SymIndexId getVirtualTableShapeId() const override;
0045   uint64_t getLength() const override;
0046   PDB_UdtType getUdtKind() const override;
0047   bool hasConstructor() const override;
0048   bool isConstType() const override;
0049   bool hasAssignmentOperator() const override;
0050   bool hasCastOperator() const override;
0051   bool hasNestedTypes() const override;
0052   bool hasOverloadedOperator() const override;
0053   bool isInterfaceUdt() const override;
0054   bool isIntrinsic() const override;
0055   bool isNested() const override;
0056   bool isPacked() const override;
0057   bool isRefUdt() const override;
0058   bool isScoped() const override;
0059   bool isValueUdt() const override;
0060   bool isUnalignedType() const override;
0061   bool isVolatileType() const override;
0062 
0063 protected:
0064   codeview::TypeIndex Index;
0065 
0066   std::optional<codeview::ClassRecord> Class;
0067   std::optional<codeview::UnionRecord> Union;
0068   NativeTypeUDT *UnmodifiedType = nullptr;
0069   codeview::TagRecord *Tag = nullptr;
0070   std::optional<codeview::ModifierRecord> Modifiers;
0071 };
0072 
0073 } // namespace pdb
0074 } // namespace llvm
0075 
0076 #endif // LLVM_DEBUGINFO_PDB_NATIVE_NATIVETYPEUDT_H