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