NativeTypePointer.h revision 343210
1//===- NativeTypePointer.h - info about pointer type -------------*- C++-*-===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#ifndef LLVM_DEBUGINFO_PDB_NATIVE_NATIVETYPEPOINTER_H
11#define LLVM_DEBUGINFO_PDB_NATIVE_NATIVETYPEPOINTER_H
12
13#include "llvm/ADT/Optional.h"
14#include "llvm/DebugInfo/CodeView/CodeView.h"
15#include "llvm/DebugInfo/CodeView/TypeRecord.h"
16#include "llvm/DebugInfo/PDB/Native/NativeRawSymbol.h"
17#include "llvm/DebugInfo/PDB/Native/NativeSession.h"
18
19namespace llvm {
20namespace pdb {
21
22class NativeTypePointer : public NativeRawSymbol {
23public:
24  // Create a pointer record for a simple type.
25  NativeTypePointer(NativeSession &Session, SymIndexId Id,
26                    codeview::TypeIndex TI);
27
28  // Create a pointer record for a non-simple type.
29  NativeTypePointer(NativeSession &Session, SymIndexId Id,
30                    codeview::TypeIndex TI, codeview::PointerRecord PR);
31  ~NativeTypePointer() override;
32
33  void dump(raw_ostream &OS, int Indent, PdbSymbolIdField ShowIdFields,
34            PdbSymbolIdField RecurseIdFields) const override;
35
36  SymIndexId getClassParentId() const override;
37  bool isConstType() const override;
38  uint64_t getLength() const override;
39  bool isReference() const override;
40  bool isRValueReference() const override;
41  bool isPointerToDataMember() const override;
42  bool isPointerToMemberFunction() const override;
43  SymIndexId getTypeId() const override;
44  bool isRestrictedType() const override;
45  bool isVolatileType() const override;
46  bool isUnalignedType() const override;
47
48  bool isSingleInheritance() const override;
49  bool isMultipleInheritance() const override;
50  bool isVirtualInheritance() const override;
51
52protected:
53  bool isMemberPointer() const;
54  codeview::TypeIndex TI;
55  Optional<codeview::PointerRecord> Record;
56};
57
58} // namespace pdb
59} // namespace llvm
60
61#endif // LLVM_DEBUGINFO_PDB_NATIVE_NATIVETYPEPOINTER_H