LLDB mainline
ScriptedThreadPythonInterface.cpp
Go to the documentation of this file.
1//===-- ScriptedThreadPythonInterface.cpp ---------------------------------===//
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#include "../lldb-python.h"
10
12#include "lldb/Host/Config.h"
14#include "lldb/Utility/Log.h"
16
17#include "../SWIGPythonBridge.h"
20#include <optional>
21
22using namespace lldb;
23using namespace lldb_private;
24using namespace lldb_private::python;
26
30
31llvm::Expected<StructuredData::GenericSP>
33 const ScriptedMetadata &scripted_metadata, ExecutionContext &exe_ctx,
34 StructuredData::Generic *script_obj) {
35 ExecutionContextRefSP exe_ctx_ref_sp =
36 std::make_shared<ExecutionContextRef>(exe_ctx);
38 scripted_metadata, script_obj, exe_ctx_ref_sp,
39 scripted_metadata.GetArgsSP());
40}
41
44 LogAndDefault(Dispatch("get_thread_id"), LLVM_PRETTY_FUNCTION);
45 if (!obj)
47
48 return obj->GetUnsignedIntegerValue(LLDB_INVALID_THREAD_ID);
49}
50
51std::optional<std::string> ScriptedThreadPythonInterface::GetName() {
53 LogAndDefault(Dispatch("get_name"), LLVM_PRETTY_FUNCTION);
54 if (!obj)
55 return {};
56
57 return obj->GetStringValue().str();
58}
59
62 LogAndDefault(Dispatch("get_state"), LLVM_PRETTY_FUNCTION);
63 if (!obj)
64 return eStateInvalid;
65
66 return static_cast<StateType>(obj->GetUnsignedIntegerValue(eStateInvalid));
67}
68
69std::optional<std::string> ScriptedThreadPythonInterface::GetQueue() {
71 LogAndDefault(Dispatch("get_queue"), LLVM_PRETTY_FUNCTION);
72 if (!obj)
73 return {};
74
75 return obj->GetStringValue().str();
76}
77
81 LLVM_PRETTY_FUNCTION);
82 if (!dict)
83 return {};
84
85 return dict;
86}
87
91 LLVM_PRETTY_FUNCTION);
92 if (!arr)
93 return {};
94
95 return arr;
96}
97
101 LLVM_PRETTY_FUNCTION);
102 if (!dict)
103 return {};
104
105 return dict;
106}
107
110 LogAndDefault(Dispatch("get_register_context"), LLVM_PRETTY_FUNCTION);
111 if (!obj)
112 return {};
113
114 return obj->GetStringValue().str();
115}
116
120 LLVM_PRETTY_FUNCTION);
121 if (!arr)
122 return {};
123
124 return arr;
125}
126
127std::optional<std::string>
130 Dispatch("get_scripted_frame_plugin"), LLVM_PRETTY_FUNCTION);
131 if (!obj)
132 return {};
133
134 return obj->GetStringValue().str();
135}
136
139 return m_interpreter.CreateScriptedFrameInterface();
140}
141
148
ScriptInterpreterPythonImpl::Locker Locker
"lldb/Target/ExecutionContext.h" A class that contains an execution context.
static bool RegisterPlugin(llvm::StringRef name, llvm::StringRef description, ABICreateInstance create_callback)
static bool UnregisterPlugin(ABICreateInstance create_callback)
static bool CreateInstance(lldb::ScriptLanguage language, ScriptedInterfaceUsages usages)
StructuredData::DictionarySP GetArgsSP() const
ScriptInterpreterPythonImpl & m_interpreter
static T LogAndDefault(llvm::Expected< T > value_or_err, llvm::StringRef caller)
Log the failure in value_or_err and fall back to a default-constructed T.
ScriptedPythonInterface(ScriptInterpreterPythonImpl &interpreter)
llvm::Expected< T > Dispatch(llvm::StringRef method_name, Args &&...args)
Call method_name on the scripted object.
llvm::Expected< StructuredData::GenericSP > CreatePluginObject(const ScriptedMetadata &scripted_metadata, StructuredData::Generic *script_obj, Args... args)
std::optional< std::string > GetScriptedFramePluginName() override
StructuredData::DictionarySP GetStopReason() override
StructuredData::DictionarySP GetRegisterInfo() override
std::optional< std::string > GetRegisterContext() override
ScriptedThreadPythonInterface(ScriptInterpreterPythonImpl &interpreter)
llvm::Expected< StructuredData::GenericSP > CreatePluginObject(const ScriptedMetadata &scripted_metadata, ExecutionContext &exe_ctx, StructuredData::Generic *script_obj=nullptr) override
lldb::ScriptedFrameInterfaceSP CreateScriptedFrameInterface() override
std::shared_ptr< Dictionary > DictionarySP
std::shared_ptr< Object > ObjectSP
std::shared_ptr< Array > ArraySP
#define LLDB_INVALID_THREAD_ID
A class that represents a running process on the host machine.
@ eScriptLanguagePython
@ eScriptedExtensionScriptedThread
StateType
Process and Thread States.
uint64_t tid_t
Definition lldb-types.h:85
std::shared_ptr< lldb_private::ScriptedFrameInterface > ScriptedFrameInterfaceSP
std::shared_ptr< lldb_private::ExecutionContextRef > ExecutionContextRefSP