| //===----------------------------------------------------------------------===// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #include "ScriptInterpreterBridge.h" |
| #include "API/SBCommandReturnObjectImpl.h" |
| #include "lldb/API/SBAttachInfo.h" |
| #include "lldb/API/SBBreakpoint.h" |
| #include "lldb/API/SBBreakpointLocation.h" |
| #include "lldb/API/SBCommandReturnObject.h" |
| #include "lldb/API/SBData.h" |
| #include "lldb/API/SBDebugger.h" |
| #include "lldb/API/SBError.h" |
| #include "lldb/API/SBEvent.h" |
| #include "lldb/API/SBExecutionContext.h" |
| #include "lldb/API/SBFrame.h" |
| #include "lldb/API/SBFrameList.h" |
| #include "lldb/API/SBLaunchInfo.h" |
| #include "lldb/API/SBMemoryRegionInfo.h" |
| #include "lldb/API/SBStream.h" |
| #include "lldb/API/SBSymbolContext.h" |
| #include "lldb/API/SBTarget.h" |
| #include "lldb/API/SBThread.h" |
| #include "lldb/API/SBValue.h" |
| #include "lldb/Host/ProcessLaunchInfo.h" |
| #include "lldb/Interpreter/CommandReturnObject.h" |
| #include "lldb/Target/ExecutionContext.h" |
| #include "lldb/Utility/StreamString.h" |
| #include "lldb/ValueObject/ValueObject.h" |
| |
| using namespace lldb; |
| using namespace lldb_private; |
| |
| lldb::DataExtractorSP |
| ScriptInterpreterBridge::GetDataExtractor(const lldb::SBData &data) { |
| return data.m_opaque_sp; |
| } |
| |
| lldb::BreakpointSP |
| ScriptInterpreterBridge::GetBreakpoint(const lldb::SBBreakpoint &breakpoint) { |
| return breakpoint.m_opaque_wp.lock(); |
| } |
| |
| lldb::BreakpointLocationSP ScriptInterpreterBridge::GetBreakpointLocation( |
| const lldb::SBBreakpointLocation &break_loc) { |
| return break_loc.m_opaque_wp.lock(); |
| } |
| |
| CommandReturnObject *ScriptInterpreterBridge::GetCommandReturnObject( |
| const lldb::SBCommandReturnObject &cmd_retobj) { |
| return cmd_retobj.m_opaque_up->get(); |
| } |
| |
| lldb::DebuggerSP |
| ScriptInterpreterBridge::GetDebugger(const lldb::SBDebugger &debugger) { |
| return debugger.m_opaque_sp; |
| } |
| |
| lldb::ProcessAttachInfoSP ScriptInterpreterBridge::GetProcessAttachInfo( |
| const lldb::SBAttachInfo &attach_info) { |
| return attach_info.m_opaque_sp; |
| } |
| |
| lldb::ProcessLaunchInfoSP ScriptInterpreterBridge::GetProcessLaunchInfo( |
| const lldb::SBLaunchInfo &launch_info) { |
| return std::make_shared<ProcessLaunchInfo>( |
| *reinterpret_cast<ProcessLaunchInfo *>(launch_info.m_opaque_sp.get())); |
| } |
| |
| Status ScriptInterpreterBridge::GetStatus(const lldb::SBError &error) { |
| if (error.m_opaque_up) |
| return error.m_opaque_up->Clone(); |
| |
| return Status(); |
| } |
| |
| lldb::ThreadSP |
| ScriptInterpreterBridge::GetThread(const lldb::SBThread &thread) { |
| if (thread.m_opaque_sp) |
| return thread.m_opaque_sp->GetThreadSP(); |
| return nullptr; |
| } |
| |
| lldb::StackFrameSP |
| ScriptInterpreterBridge::GetStackFrame(const lldb::SBFrame &frame) { |
| if (frame.m_opaque_sp) |
| return frame.m_opaque_sp->GetFrameSP(); |
| return nullptr; |
| } |
| |
| Event *ScriptInterpreterBridge::GetEvent(const lldb::SBEvent &event) { |
| return event.m_opaque_ptr; |
| } |
| |
| lldb::StreamSP |
| ScriptInterpreterBridge::GetStream(const lldb::SBStream &stream) { |
| if (stream.m_opaque_up) { |
| lldb::StreamSP s = std::make_shared<lldb_private::StreamString>(); |
| *s << reinterpret_cast<StreamString *>(stream.m_opaque_up.get())->m_packet; |
| return s; |
| } |
| |
| return nullptr; |
| } |
| |
| SymbolContext ScriptInterpreterBridge::GetSymbolContext( |
| const lldb::SBSymbolContext &sb_sym_ctx) { |
| if (sb_sym_ctx.m_opaque_up) |
| return *sb_sym_ctx.m_opaque_up; |
| return {}; |
| } |
| |
| std::optional<lldb_private::MemoryRegionInfo> |
| ScriptInterpreterBridge::GetMemoryRegionInfo( |
| const lldb::SBMemoryRegionInfo &mem_region) { |
| if (!mem_region.m_opaque_up) |
| return std::nullopt; |
| return *mem_region.m_opaque_up.get(); |
| } |
| |
| lldb::ExecutionContextRefSP ScriptInterpreterBridge::GetExecutionContextRef( |
| const lldb::SBExecutionContext &exe_ctx) { |
| return exe_ctx.m_exe_ctx_sp; |
| } |
| |
| lldb::StackFrameListSP ScriptInterpreterBridge::GetStackFrameList( |
| const lldb::SBFrameList &frame_list) { |
| return frame_list.m_opaque_sp; |
| } |
| |
| lldb::TargetSP |
| ScriptInterpreterBridge::GetTarget(const lldb::SBTarget &target) { |
| return target.m_opaque_sp; |
| } |
| |
| lldb::ValueObjectSP |
| ScriptInterpreterBridge::GetValueObject(const lldb::SBValue &value) { |
| if (!value.m_opaque_sp) |
| return lldb::ValueObjectSP(); |
| |
| lldb_private::ValueLocker locker; |
| return locker.GetLockedSP(*value.m_opaque_sp); |
| } |