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