blob: e818a0c424d166f0de6874871c5c261740f12395 [file]
//===----------------------------------------------------------------------===//
//
// 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);
}