13925204cSMed Ismail Bennani //===-- ScriptedPythonInterface.cpp ---------------------------------------===// 23925204cSMed Ismail Bennani // 33925204cSMed Ismail Bennani // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 43925204cSMed Ismail Bennani // See https://llvm.org/LICENSE.txt for license information. 53925204cSMed Ismail Bennani // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 63925204cSMed Ismail Bennani // 73925204cSMed Ismail Bennani //===----------------------------------------------------------------------===// 83925204cSMed Ismail Bennani 93925204cSMed Ismail Bennani #include "lldb/Host/Config.h" 103925204cSMed Ismail Bennani #include "lldb/Utility/Log.h" 113925204cSMed Ismail Bennani #include "lldb/Utility/Logging.h" 123925204cSMed Ismail Bennani #include "lldb/lldb-enumerations.h" 133925204cSMed Ismail Bennani 143925204cSMed Ismail Bennani #if LLDB_ENABLE_PYTHON 153925204cSMed Ismail Bennani 163925204cSMed Ismail Bennani // LLDB Python header must be included first 173925204cSMed Ismail Bennani #include "lldb-python.h" 183925204cSMed Ismail Bennani 193925204cSMed Ismail Bennani #include "SWIGPythonBridge.h" 203925204cSMed Ismail Bennani #include "ScriptInterpreterPythonImpl.h" 213925204cSMed Ismail Bennani #include "ScriptedPythonInterface.h" 223925204cSMed Ismail Bennani 233925204cSMed Ismail Bennani using namespace lldb; 243925204cSMed Ismail Bennani using namespace lldb_private; 253925204cSMed Ismail Bennani 263925204cSMed Ismail Bennani ScriptedPythonInterface::ScriptedPythonInterface( 273925204cSMed Ismail Bennani ScriptInterpreterPythonImpl &interpreter) 283925204cSMed Ismail Bennani : ScriptedInterface(), m_interpreter(interpreter) {} 293925204cSMed Ismail Bennani 303925204cSMed Ismail Bennani Status 313925204cSMed Ismail Bennani ScriptedPythonInterface::GetStatusFromMethod(llvm::StringRef method_name) { 323925204cSMed Ismail Bennani Status error; 333925204cSMed Ismail Bennani Dispatch<Status>(method_name, error); 343925204cSMed Ismail Bennani 353925204cSMed Ismail Bennani return error; 363925204cSMed Ismail Bennani } 373925204cSMed Ismail Bennani 38*5f6f33daSMed Ismail Bennani template <> 39*5f6f33daSMed Ismail Bennani Status ScriptedPythonInterface::ExtractValueFromPythonObject<Status>( 40*5f6f33daSMed Ismail Bennani python::PythonObject &p, Status &error) { 41*5f6f33daSMed Ismail Bennani if (lldb::SBError *sb_error = reinterpret_cast<lldb::SBError *>( 42*5f6f33daSMed Ismail Bennani LLDBSWIGPython_CastPyObjectToSBError(p.get()))) 43*5f6f33daSMed Ismail Bennani error = m_interpreter.GetStatusFromSBError(*sb_error); 44*5f6f33daSMed Ismail Bennani else 45*5f6f33daSMed Ismail Bennani error.SetErrorString("Couldn't cast lldb::SBError to lldb::Status."); 46*5f6f33daSMed Ismail Bennani 47*5f6f33daSMed Ismail Bennani return error; 48*5f6f33daSMed Ismail Bennani } 49*5f6f33daSMed Ismail Bennani 50*5f6f33daSMed Ismail Bennani template <> 51*5f6f33daSMed Ismail Bennani lldb::DataExtractorSP 52*5f6f33daSMed Ismail Bennani ScriptedPythonInterface::ExtractValueFromPythonObject<lldb::DataExtractorSP>( 53*5f6f33daSMed Ismail Bennani python::PythonObject &p, Status &error) { 54*5f6f33daSMed Ismail Bennani lldb::SBData *sb_data = reinterpret_cast<lldb::SBData *>( 55*5f6f33daSMed Ismail Bennani LLDBSWIGPython_CastPyObjectToSBData(p.get())); 56*5f6f33daSMed Ismail Bennani 57*5f6f33daSMed Ismail Bennani if (!sb_data) { 58*5f6f33daSMed Ismail Bennani error.SetErrorString("Couldn't cast lldb::SBError to lldb::Status."); 59*5f6f33daSMed Ismail Bennani return nullptr; 60*5f6f33daSMed Ismail Bennani } 61*5f6f33daSMed Ismail Bennani 62*5f6f33daSMed Ismail Bennani return m_interpreter.GetDataExtractorFromSBData(*sb_data); 63*5f6f33daSMed Ismail Bennani } 64*5f6f33daSMed Ismail Bennani 653925204cSMed Ismail Bennani #endif 66