1343171Sdim//===- NativeTypePointer.h - info about pointer 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_NATIVETYPEPOINTER_H
10343171Sdim#define LLVM_DEBUGINFO_PDB_NATIVE_NATIVETYPEPOINTER_H
11343171Sdim
12343171Sdim#include "llvm/ADT/Optional.h"
13343171Sdim#include "llvm/DebugInfo/CodeView/CodeView.h"
14343171Sdim#include "llvm/DebugInfo/CodeView/TypeRecord.h"
15343171Sdim#include "llvm/DebugInfo/PDB/Native/NativeRawSymbol.h"
16343171Sdim#include "llvm/DebugInfo/PDB/Native/NativeSession.h"
17343171Sdim
18343171Sdimnamespace llvm {
19343171Sdimnamespace pdb {
20343171Sdim
21343171Sdimclass NativeTypePointer : public NativeRawSymbol {
22343171Sdimpublic:
23343171Sdim  // Create a pointer record for a simple type.
24343171Sdim  NativeTypePointer(NativeSession &Session, SymIndexId Id,
25343171Sdim                    codeview::TypeIndex TI);
26343171Sdim
27343171Sdim  // Create a pointer record for a non-simple type.
28343171Sdim  NativeTypePointer(NativeSession &Session, SymIndexId Id,
29343171Sdim                    codeview::TypeIndex TI, codeview::PointerRecord PR);
30343171Sdim  ~NativeTypePointer() override;
31343171Sdim
32343171Sdim  void dump(raw_ostream &OS, int Indent, PdbSymbolIdField ShowIdFields,
33343171Sdim            PdbSymbolIdField RecurseIdFields) const override;
34343171Sdim
35343171Sdim  SymIndexId getClassParentId() const override;
36343171Sdim  bool isConstType() const override;
37343171Sdim  uint64_t getLength() const override;
38343171Sdim  bool isReference() const override;
39343171Sdim  bool isRValueReference() const override;
40343171Sdim  bool isPointerToDataMember() const override;
41343171Sdim  bool isPointerToMemberFunction() const override;
42343171Sdim  SymIndexId getTypeId() const override;
43343171Sdim  bool isRestrictedType() const override;
44343171Sdim  bool isVolatileType() const override;
45343171Sdim  bool isUnalignedType() const override;
46343171Sdim
47343171Sdim  bool isSingleInheritance() const override;
48343171Sdim  bool isMultipleInheritance() const override;
49343171Sdim  bool isVirtualInheritance() const override;
50343171Sdim
51343171Sdimprotected:
52343171Sdim  bool isMemberPointer() const;
53343171Sdim  codeview::TypeIndex TI;
54343171Sdim  Optional<codeview::PointerRecord> Record;
55343171Sdim};
56343171Sdim
57343171Sdim} // namespace pdb
58343171Sdim} // namespace llvm
59343171Sdim
60343171Sdim#endif // LLVM_DEBUGINFO_PDB_NATIVE_NATIVETYPEPOINTER_H