1 //===-- CPPLanguageRuntime.h
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
7 //===----------------------------------------------------------------------===//
9 #ifndef LLDB_SOURCE_PLUGINS_LANGUAGERUNTIME_CPLUSPLUS_CPPLANGUAGERUNTIME_H
10 #define LLDB_SOURCE_PLUGINS_LANGUAGERUNTIME_CPLUSPLUS_CPPLANGUAGERUNTIME_H
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
{
24 enum class LibCppStdFunctionCallableCase
{
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
);
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.
70 /// Current thrad of execution.
72 /// \param[in] stop_others
73 /// True if other threads should pause during execution.
76 /// A ThreadPlan Shared pointer
77 lldb::ThreadPlanSP
GetStepThroughTrampolinePlan(Thread
&thread
,
78 bool stop_others
) override
;
80 bool IsAllowedRuntimeValue(ConstString name
) override
;
82 // Classes that inherit from CPPLanguageRuntime can see and modify these
83 CPPLanguageRuntime(Process
*process
);
86 using OperatorStringToCallableInfoMap
=
87 llvm::StringMap
<CPPLanguageRuntime::LibCppStdFunctionCallableInfo
>;
89 OperatorStringToCallableInfoMap CallableLookupCache
;
92 } // namespace lldb_private
94 #endif // LLDB_SOURCE_PLUGINS_LANGUAGERUNTIME_CPLUSPLUS_CPPLANGUAGERUNTIME_H