================ @@ -1024,6 +1024,46 @@ static void LLDBSwigPythonCallPythonLogOutputCallback(const char *str, } } +// For NotificationCallback functions +static void LLDBSwigPythonCallPythonSBNotificationCallback( + lldb::NotificationType type, lldb::SBDebugger &debugger, + lldb::SBExecutionContext &exe_ctx, void *baton) { + + if (baton != Py_None) { + SWIG_PYTHON_THREAD_BEGIN_BLOCK; + + // Convert debugger and exe_ctx to Python objects + PythonObject debugger_arg = SWIGBridge::ToSWIGWrapper( + std::make_unique<SBDebugger>(debugger)); // Wrap debugger reference + + PythonObject exe_ctx_arg = SWIGBridge::ToSWIGWrapper( + std::make_unique<SBExecutionContext>(exe_ctx)); // Wrap ExecutionContext + + // Create a tuple of arguments (type, debugger, exe_ctx) + PyObject *args = PyTuple_New(3); + + // Add NotificationType as an integer to the tuple + PyTuple_SetItem(args, 0, PyLong_FromLong(static_cast<long>(type))); + + // Add debugger and exe_ctx to the tuple + Py_INCREF(debugger_arg.get()); + PyTuple_SetItem(args, 1, debugger_arg.get()); + + Py_INCREF(exe_ctx_arg.get()); + PyTuple_SetItem(args, 2, exe_ctx_arg.get()); + + // Call the Python function with the tuple of arguments (type, debugger, exe_ctx) + PyObject *result = PyObject_CallFunction( + reinterpret_cast<PyObject *>(baton), const_cast<char *>("O"), args); + + // Clean up + Py_XDECREF(result); + Py_DECREF(args); // Decrement reference count for args ---------------- labath wrote:
Could this use PythonObject wrappers instead? Something like `PythonCallable(baton)(PythonInteger(type), debugger_arg, exe_ctx_arg)` ? https://github.com/llvm/llvm-project/pull/111206 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits