1343171Sdim//===- NativeTypeEnum.h - info about enum type ------------------*- C++ -*-===// 2343171Sdim// 3353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4353358Sdim// See https://llvm.org/LICENSE.txt for license information. 5353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6343171Sdim// 7343171Sdim//===----------------------------------------------------------------------===// 8343171Sdim 9343171Sdim#ifndef LLVM_DEBUGINFO_PDB_NATIVE_NATIVETYPEENUM_H 10343171Sdim#define LLVM_DEBUGINFO_PDB_NATIVE_NATIVETYPEENUM_H 11343171Sdim 12343171Sdim#include "llvm/ADT/Optional.h" 13343171Sdim#include "llvm/DebugInfo/CodeView/CodeView.h" 14343171Sdim#include "llvm/DebugInfo/CodeView/TypeVisitorCallbacks.h" 15343171Sdim#include "llvm/DebugInfo/PDB/Native/NativeRawSymbol.h" 16343171Sdim#include "llvm/DebugInfo/PDB/Native/NativeSession.h" 17343171Sdim 18343171Sdimnamespace llvm { 19343171Sdimnamespace pdb { 20343171Sdim 21343171Sdimclass NativeTypeBuiltin; 22343171Sdim 23343171Sdimclass NativeTypeEnum : public NativeRawSymbol { 24343171Sdimpublic: 25343171Sdim NativeTypeEnum(NativeSession &Session, SymIndexId Id, codeview::TypeIndex TI, 26343171Sdim codeview::EnumRecord Record); 27343171Sdim 28343171Sdim NativeTypeEnum(NativeSession &Session, SymIndexId Id, 29343171Sdim NativeTypeEnum &UnmodifiedType, 30343171Sdim codeview::ModifierRecord Modifier); 31343171Sdim ~NativeTypeEnum() override; 32343171Sdim 33343171Sdim void dump(raw_ostream &OS, int Indent, PdbSymbolIdField ShowIdFields, 34343171Sdim PdbSymbolIdField RecurseIdFields) const override; 35343171Sdim 36343171Sdim std::unique_ptr<IPDBEnumSymbols> 37343171Sdim findChildren(PDB_SymType Type) const override; 38343171Sdim 39343171Sdim PDB_BuiltinType getBuiltinType() const override; 40343171Sdim PDB_SymType getSymTag() const override; 41343171Sdim SymIndexId getUnmodifiedTypeId() const override; 42343171Sdim bool hasConstructor() const override; 43343171Sdim bool hasAssignmentOperator() const override; 44343171Sdim bool hasCastOperator() const override; 45343171Sdim uint64_t getLength() const override; 46343171Sdim std::string getName() const override; 47343171Sdim bool isConstType() const override; 48343171Sdim bool isVolatileType() const override; 49343171Sdim bool isUnalignedType() const override; 50343171Sdim bool isNested() const override; 51343171Sdim bool hasOverloadedOperator() const override; 52343171Sdim bool hasNestedTypes() const override; 53343171Sdim bool isIntrinsic() const override; 54343171Sdim bool isPacked() const override; 55343171Sdim bool isScoped() const override; 56343171Sdim SymIndexId getTypeId() const override; 57343171Sdim bool isRefUdt() const override; 58343171Sdim bool isValueUdt() const override; 59343171Sdim bool isInterfaceUdt() const override; 60343171Sdim 61343171Sdim const NativeTypeBuiltin &getUnderlyingBuiltinType() const; 62343171Sdim const codeview::EnumRecord &getEnumRecord() const { return *Record; } 63343171Sdim 64343171Sdimprotected: 65343171Sdim codeview::TypeIndex Index; 66343171Sdim Optional<codeview::EnumRecord> Record; 67343171Sdim NativeTypeEnum *UnmodifiedType = nullptr; 68343171Sdim Optional<codeview::ModifierRecord> Modifiers; 69343171Sdim}; 70343171Sdim 71343171Sdim} // namespace pdb 72343171Sdim} // namespace llvm 73343171Sdim 74343171Sdim#endif // LLVM_DEBUGINFO_PDB_NATIVE_NATIVETYPEENUM_H 75