]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/tools/lldb/include/lldb/Symbol/CompilerDecl.h
MFV r338092: ntp 4.2.8p12.
[FreeBSD/FreeBSD.git] / contrib / llvm / tools / lldb / include / lldb / Symbol / CompilerDecl.h
1 //===-- CompilerDecl.h ------------------------------------------*- 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 liblldb_CompilerDecl_h_
11 #define liblldb_CompilerDecl_h_
12
13 #include "lldb/Symbol/CompilerType.h"
14 #include "lldb/Utility/ConstString.h"
15 #include "lldb/lldb-private.h"
16
17 namespace lldb_private {
18
19 class CompilerDecl {
20 public:
21   //----------------------------------------------------------------------
22   // Constructors and Destructors
23   //----------------------------------------------------------------------
24   CompilerDecl() : m_type_system(nullptr), m_opaque_decl(nullptr) {}
25
26   CompilerDecl(TypeSystem *type_system, void *decl)
27       : m_type_system(type_system), m_opaque_decl(decl) {}
28
29   ~CompilerDecl() {}
30
31   //----------------------------------------------------------------------
32   // Tests
33   //----------------------------------------------------------------------
34
35   explicit operator bool() const { return IsValid(); }
36
37   bool operator<(const CompilerDecl &rhs) const {
38     if (m_type_system == rhs.m_type_system)
39       return m_opaque_decl < rhs.m_opaque_decl;
40     return m_type_system < rhs.m_type_system;
41   }
42
43   bool IsValid() const {
44     return m_type_system != nullptr && m_opaque_decl != nullptr;
45   }
46
47   bool IsClang() const;
48
49   //----------------------------------------------------------------------
50   // Accessors
51   //----------------------------------------------------------------------
52
53   TypeSystem *GetTypeSystem() const { return m_type_system; }
54
55   void *GetOpaqueDecl() const { return m_opaque_decl; }
56
57   void SetDecl(TypeSystem *type_system, void *decl) {
58     m_type_system = type_system;
59     m_opaque_decl = decl;
60   }
61
62   void Clear() {
63     m_type_system = nullptr;
64     m_opaque_decl = nullptr;
65   }
66
67   ConstString GetName() const;
68
69   ConstString GetMangledName() const;
70
71   CompilerDeclContext GetDeclContext() const;
72
73   // If this decl represents a function, return the return type
74   CompilerType GetFunctionReturnType() const;
75
76   // If this decl represents a function, return the number of arguments for the
77   // function
78   size_t GetNumFunctionArguments() const;
79
80   // If this decl represents a function, return the argument type given a zero
81   // based argument index
82   CompilerType GetFunctionArgumentType(size_t arg_idx) const;
83
84 private:
85   TypeSystem *m_type_system;
86   void *m_opaque_decl;
87 };
88
89 bool operator==(const CompilerDecl &lhs, const CompilerDecl &rhs);
90 bool operator!=(const CompilerDecl &lhs, const CompilerDecl &rhs);
91
92 } // namespace lldb_private
93
94 #endif // #ifndef liblldb_CompilerDecl_h_