1343171Sdim//===- NativeTypeFunctionSig.h - info about function signature ---*- 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_NATIVETYPEFUNCTIONSIG_H
10343171Sdim#define LLVM_DEBUGINFO_PDB_NATIVE_NATIVETYPEFUNCTIONSIG_H
11343171Sdim
12343171Sdim#include "llvm/ADT/Optional.h"
13343171Sdim#include "llvm/ADT/SmallVector.h"
14343171Sdim#include "llvm/DebugInfo/CodeView/CodeView.h"
15343171Sdim#include "llvm/DebugInfo/CodeView/TypeRecord.h"
16343171Sdim#include "llvm/DebugInfo/PDB/Native/NativeRawSymbol.h"
17343171Sdim#include "llvm/DebugInfo/PDB/Native/NativeSession.h"
18343171Sdim
19343171Sdimnamespace llvm {
20343171Sdimnamespace pdb {
21343171Sdim
22343171Sdimclass NativeTypeUDT;
23343171Sdim
24343171Sdimclass NativeTypeFunctionSig : public NativeRawSymbol {
25343171Sdimprotected:
26343171Sdim  void initialize() override;
27343171Sdim
28343171Sdimpublic:
29343171Sdim  NativeTypeFunctionSig(NativeSession &Session, SymIndexId Id,
30343171Sdim                        codeview::TypeIndex TI, codeview::ProcedureRecord Proc);
31343171Sdim
32343171Sdim  NativeTypeFunctionSig(NativeSession &Session, SymIndexId Id,
33343171Sdim                        codeview::TypeIndex TI,
34343171Sdim                        codeview::MemberFunctionRecord MemberFunc);
35343171Sdim
36343171Sdim  ~NativeTypeFunctionSig() override;
37343171Sdim
38343171Sdim  void dump(raw_ostream &OS, int Indent, PdbSymbolIdField ShowIdFields,
39343171Sdim            PdbSymbolIdField RecurseIdFields) const override;
40343171Sdim
41343171Sdim  std::unique_ptr<IPDBEnumSymbols>
42343171Sdim  findChildren(PDB_SymType Type) const override;
43343171Sdim
44343171Sdim  SymIndexId getClassParentId() const override;
45343171Sdim  PDB_CallingConv getCallingConvention() const override;
46343171Sdim  uint32_t getCount() const override;
47343171Sdim  SymIndexId getTypeId() const override;
48343171Sdim  int32_t getThisAdjust() const override;
49343171Sdim  bool hasConstructor() const override;
50343171Sdim  bool isConstType() const override;
51343171Sdim  bool isConstructorVirtualBase() const override;
52343171Sdim  bool isCxxReturnUdt() const override;
53343171Sdim  bool isUnalignedType() const override;
54343171Sdim  bool isVolatileType() const override;
55343171Sdim
56343171Sdimprivate:
57343171Sdim  void initializeArgList(codeview::TypeIndex ArgListTI);
58343171Sdim
59343171Sdim  union {
60343171Sdim    codeview::MemberFunctionRecord MemberFunc;
61343171Sdim    codeview::ProcedureRecord Proc;
62343171Sdim  };
63343171Sdim
64343171Sdim  SymIndexId ClassParentId = 0;
65343171Sdim  codeview::TypeIndex Index;
66343171Sdim  codeview::ArgListRecord ArgList;
67343171Sdim  bool IsMemberFunction = false;
68343171Sdim};
69343171Sdim
70343171Sdim} // namespace pdb
71343171Sdim} // namespace llvm
72343171Sdim
73343171Sdim#endif // LLVM_DEBUGINFO_PDB_NATIVE_NATIVETYPEPOINTER_H