[memprof] Move YAML traits to MemProf.h (NFC) (#118668)
[llvm-project.git] / lldb / source / Plugins / LanguageRuntime / CPlusPlus / CPPLanguageRuntime.h
blob57cfe28245808cf031ef8a2155e7276a5d281e93
1 //===-- CPPLanguageRuntime.h
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 //===----------------------------------------------------------------------===//
9 #ifndef LLDB_SOURCE_PLUGINS_LANGUAGERUNTIME_CPLUSPLUS_CPPLANGUAGERUNTIME_H
10 #define LLDB_SOURCE_PLUGINS_LANGUAGERUNTIME_CPLUSPLUS_CPPLANGUAGERUNTIME_H
12 #include <vector>
14 #include "llvm/ADT/StringMap.h"
16 #include "lldb/Core/PluginInterface.h"
17 #include "lldb/Target/LanguageRuntime.h"
18 #include "lldb/lldb-private.h"
20 namespace lldb_private {
22 class CPPLanguageRuntime : public LanguageRuntime {
23 public:
24 enum class LibCppStdFunctionCallableCase {
25 Lambda = 0,
26 CallableObject,
27 FreeOrMemberFunction,
28 Invalid
31 struct LibCppStdFunctionCallableInfo {
32 Symbol callable_symbol;
33 Address callable_address;
34 LineEntry callable_line_entry;
35 lldb::addr_t member_f_pointer_value = 0u;
36 LibCppStdFunctionCallableCase callable_case =
37 LibCppStdFunctionCallableCase::Invalid;
40 LibCppStdFunctionCallableInfo
41 FindLibCppStdFunctionCallableInfo(lldb::ValueObjectSP &valobj_sp);
43 static char ID;
45 bool isA(const void *ClassID) const override {
46 return ClassID == &ID || LanguageRuntime::isA(ClassID);
49 static bool classof(const LanguageRuntime *runtime) {
50 return runtime->isA(&ID);
53 lldb::LanguageType GetLanguageType() const override {
54 return lldb::eLanguageTypeC_plus_plus;
57 static CPPLanguageRuntime *Get(Process &process) {
58 return llvm::cast_or_null<CPPLanguageRuntime>(
59 process.GetLanguageRuntime(lldb::eLanguageTypeC_plus_plus));
62 llvm::Error GetObjectDescription(Stream &str, ValueObject &object) override;
64 llvm::Error GetObjectDescription(Stream &str, Value &value,
65 ExecutionContextScope *exe_scope) override;
67 /// Obtain a ThreadPlan to get us into C++ constructs such as std::function.
68 ///
69 /// \param[in] thread
70 /// Current thrad of execution.
71 ///
72 /// \param[in] stop_others
73 /// True if other threads should pause during execution.
74 ///
75 /// \return
76 /// A ThreadPlan Shared pointer
77 lldb::ThreadPlanSP GetStepThroughTrampolinePlan(Thread &thread,
78 bool stop_others) override;
80 bool IsAllowedRuntimeValue(ConstString name) override;
81 protected:
82 // Classes that inherit from CPPLanguageRuntime can see and modify these
83 CPPLanguageRuntime(Process *process);
85 private:
86 using OperatorStringToCallableInfoMap =
87 llvm::StringMap<CPPLanguageRuntime::LibCppStdFunctionCallableInfo>;
89 OperatorStringToCallableInfoMap CallableLookupCache;
92 } // namespace lldb_private
94 #endif // LLDB_SOURCE_PLUGINS_LANGUAGERUNTIME_CPLUSPLUS_CPPLANGUAGERUNTIME_H