/Users/buildslave/jenkins/workspace/coverage/llvm-project/lldb/source/Plugins/LanguageRuntime/CPlusPlus/CPPLanguageRuntime.h
Line | Count | Source (jump to first uncovered line) |
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 | | //===----------------------------------------------------------------------===// |
8 | | |
9 | | #ifndef LLDB_SOURCE_PLUGINS_LANGUAGERUNTIME_CPLUSPLUS_CPPLANGUAGERUNTIME_H |
10 | | #define LLDB_SOURCE_PLUGINS_LANGUAGERUNTIME_CPLUSPLUS_CPPLANGUAGERUNTIME_H |
11 | | |
12 | | #include <vector> |
13 | | |
14 | | #include "llvm/ADT/StringMap.h" |
15 | | |
16 | | #include "lldb/Core/PluginInterface.h" |
17 | | #include "lldb/Target/LanguageRuntime.h" |
18 | | #include "lldb/lldb-private.h" |
19 | | |
20 | | namespace lldb_private { |
21 | | |
22 | | class CPPLanguageRuntime : public LanguageRuntime { |
23 | | public: |
24 | | enum class LibCppStdFunctionCallableCase { |
25 | | Lambda = 0, |
26 | | CallableObject, |
27 | | FreeOrMemberFunction, |
28 | | Invalid |
29 | | }; |
30 | | |
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; |
38 | | }; |
39 | | |
40 | | LibCppStdFunctionCallableInfo |
41 | | FindLibCppStdFunctionCallableInfo(lldb::ValueObjectSP &valobj_sp); |
42 | | |
43 | | static char ID; |
44 | | |
45 | 40 | bool isA(const void *ClassID) const override { |
46 | 40 | return ClassID == &ID || LanguageRuntime::isA(ClassID)0 ; |
47 | 40 | } |
48 | | |
49 | 40 | static bool classof(const LanguageRuntime *runtime) { |
50 | 40 | return runtime->isA(&ID); |
51 | 40 | } |
52 | | |
53 | 551k | lldb::LanguageType GetLanguageType() const override { |
54 | 551k | return lldb::eLanguageTypeC_plus_plus; |
55 | 551k | } |
56 | | |
57 | 20 | static CPPLanguageRuntime *Get(Process &process) { |
58 | 20 | return llvm::cast_or_null<CPPLanguageRuntime>( |
59 | 20 | process.GetLanguageRuntime(lldb::eLanguageTypeC_plus_plus)); |
60 | 20 | } |
61 | | |
62 | | bool GetObjectDescription(Stream &str, ValueObject &object) override; |
63 | | |
64 | | bool GetObjectDescription(Stream &str, Value &value, |
65 | | ExecutionContextScope *exe_scope) override; |
66 | | |
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; |
79 | | |
80 | | bool IsAllowedRuntimeValue(ConstString name) override; |
81 | | protected: |
82 | | // Classes that inherit from CPPLanguageRuntime can see and modify these |
83 | | CPPLanguageRuntime(Process *process); |
84 | | |
85 | | private: |
86 | | using OperatorStringToCallableInfoMap = |
87 | | llvm::StringMap<CPPLanguageRuntime::LibCppStdFunctionCallableInfo>; |
88 | | |
89 | | OperatorStringToCallableInfoMap CallableLookupCache; |
90 | | }; |
91 | | |
92 | | } // namespace lldb_private |
93 | | |
94 | | #endif // LLDB_SOURCE_PLUGINS_LANGUAGERUNTIME_CPLUSPLUS_CPPLANGUAGERUNTIME_H |