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