@@ -229,176 +229,6 @@ PythonObject lldb_private::python::SWIGBridge::LLDBSwigPythonCreateCommandObject
229
229
return pfunc(SWIGBridge::ToSWIGWrapper(std::move(debugger_sp)), dict);
230
230
}
231
231
232
- PythonObject lldb_private::python::SWIGBridge::LLDBSwigPythonCreateScriptedBreakpointResolver(
233
- const char *python_class_name, const char *session_dictionary_name,
234
- const StructuredDataImpl &args_impl,
235
- const lldb::BreakpointSP &breakpoint_sp) {
236
-
237
- if (python_class_name == NULL || python_class_name[0] == '\0' ||
238
- !session_dictionary_name)
239
- return PythonObject();
240
-
241
- PyErr_Cleaner py_err_cleaner(true);
242
-
243
- auto dict = PythonModule::MainModule().ResolveName<PythonDictionary>(
244
- session_dictionary_name);
245
- auto pfunc = PythonObject::ResolveNameWithDictionary<PythonCallable>(
246
- python_class_name, dict);
247
-
248
- if (!pfunc.IsAllocated())
249
- return PythonObject();
250
-
251
- PythonObject result =
252
- pfunc(SWIGBridge::ToSWIGWrapper(breakpoint_sp), SWIGBridge::ToSWIGWrapper(args_impl), dict);
253
- // FIXME: At this point we should check that the class we found supports all
254
- // the methods that we need.
255
-
256
- if (result.IsAllocated()) {
257
- // Check that __callback__ is defined:
258
- auto callback_func = result.ResolveName<PythonCallable>("__callback__");
259
- if (callback_func.IsAllocated())
260
- return result;
261
- }
262
- return PythonObject();
263
- }
264
-
265
- unsigned int lldb_private::python::SWIGBridge::LLDBSwigPythonCallBreakpointResolver(
266
- void *implementor, const char *method_name,
267
- lldb_private::SymbolContext *sym_ctx) {
268
- PyErr_Cleaner py_err_cleaner(false);
269
- PythonObject self(PyRefType::Borrowed, static_cast<PyObject *>(implementor));
270
- auto pfunc = self.ResolveName<PythonCallable>(method_name);
271
-
272
- if (!pfunc.IsAllocated())
273
- return 0;
274
-
275
- PythonObject result = sym_ctx ? pfunc(SWIGBridge::ToSWIGWrapper(*sym_ctx)) : pfunc();
276
-
277
- if (PyErr_Occurred()) {
278
- PyErr_Print();
279
- PyErr_Clear();
280
- return 0;
281
- }
282
-
283
- // The callback will return a bool, but we're need to also return ints
284
- // so we're squirrelling the bool through as an int... And if you return
285
- // nothing, we'll continue.
286
- if (strcmp(method_name, "__callback__") == 0) {
287
- if (result.get() == Py_False)
288
- return 0;
289
- else
290
- return 1;
291
- }
292
-
293
- long long ret_val = unwrapOrSetPythonException(As<long long>(result));
294
-
295
- if (PyErr_Occurred()) {
296
- PyErr_Print();
297
- PyErr_Clear();
298
- return 0;
299
- }
300
-
301
- return ret_val;
302
- }
303
-
304
- PythonObject lldb_private::python::SWIGBridge::LLDBSwigPythonCreateScriptedStopHook(
305
- lldb::TargetSP target_sp, const char *python_class_name,
306
- const char *session_dictionary_name, const StructuredDataImpl &args_impl,
307
- Status &error) {
308
- if (python_class_name == NULL || python_class_name[0] == '\0') {
309
- error = Status::FromErrorString("Empty class name.");
310
- return PythonObject();
311
- }
312
- if (!session_dictionary_name) {
313
- error = Status::FromErrorString("No session dictionary");
314
- return PythonObject();
315
- }
316
-
317
- PyErr_Cleaner py_err_cleaner(true);
318
-
319
- auto dict = PythonModule::MainModule().ResolveName<PythonDictionary>(
320
- session_dictionary_name);
321
- auto pfunc = PythonObject::ResolveNameWithDictionary<PythonCallable>(
322
- python_class_name, dict);
323
-
324
- if (!pfunc.IsAllocated()) {
325
- error = Status::FromErrorStringWithFormat("Could not find class: %s.",
326
- python_class_name);
327
- return PythonObject();
328
- }
329
-
330
- PythonObject result =
331
- pfunc(SWIGBridge::ToSWIGWrapper(target_sp), SWIGBridge::ToSWIGWrapper(args_impl), dict);
332
-
333
- if (result.IsAllocated()) {
334
- // Check that the handle_stop callback is defined:
335
- auto callback_func = result.ResolveName<PythonCallable>("handle_stop");
336
- if (callback_func.IsAllocated()) {
337
- if (auto args_info = callback_func.GetArgInfo()) {
338
- size_t num_args = (*args_info).max_positional_args;
339
- if (num_args != 2) {
340
- error = Status::FromErrorStringWithFormat(
341
- "Wrong number of args for "
342
- "handle_stop callback, should be 2 (excluding self), got: %zu",
343
- num_args);
344
- return PythonObject();
345
- } else
346
- return result;
347
- } else {
348
- error = Status::FromErrorString(
349
- "Couldn't get num arguments for handle_stop "
350
- "callback.");
351
- return PythonObject();
352
- }
353
- return result;
354
- } else {
355
- error = Status::FromErrorStringWithFormat(
356
- "Class \"%s\" is missing the required "
357
- "handle_stop callback.",
358
- python_class_name);
359
- }
360
- }
361
- return PythonObject();
362
- }
363
-
364
- bool lldb_private::python::SWIGBridge::LLDBSwigPythonStopHookCallHandleStop(
365
- void *implementor, lldb::ExecutionContextRefSP exc_ctx_sp,
366
- lldb::StreamSP stream) {
367
- // handle_stop will return a bool with the meaning "should_stop"...
368
- // If you return nothing we'll assume we are going to stop.
369
- // Also any errors should return true, since we should stop on error.
370
-
371
- PyErr_Cleaner py_err_cleaner(false);
372
- PythonObject self(PyRefType::Borrowed, static_cast<PyObject *>(implementor));
373
- auto pfunc = self.ResolveName<PythonCallable>("handle_stop");
374
-
375
- if (!pfunc.IsAllocated())
376
- return true;
377
-
378
- std::shared_ptr<lldb::SBStream> sb_stream = std::make_shared<lldb::SBStream>();
379
- PythonObject sb_stream_arg = SWIGBridge::ToSWIGWrapper(sb_stream);
380
- PythonObject result =
381
- pfunc(SWIGBridge::ToSWIGWrapper(std::move(exc_ctx_sp)), sb_stream_arg);
382
-
383
- if (PyErr_Occurred()) {
384
- stream->PutCString("Python error occurred handling stop-hook.");
385
- PyErr_Print();
386
- PyErr_Clear();
387
- return true;
388
- }
389
-
390
- // Now add the result to the output stream. SBStream only
391
- // makes an internally help StreamString which I can't interpose, so I
392
- // have to copy it over here.
393
- stream->PutCString(sb_stream->GetData());
394
- sb_stream_arg.release();
395
-
396
- if (result.get() == Py_False)
397
- return false;
398
- else
399
- return true;
400
- }
401
-
402
232
// wrapper that calls an optional instance member of an object taking no
403
233
// arguments
404
234
static PyObject *LLDBSwigPython_CallOptionalMember(
@@ -652,6 +482,18 @@ void *lldb_private::python::LLDBSWIGPython_CastPyObjectToSBStream(PyObject * dat
652
482
return sb_ptr;
653
483
}
654
484
485
+ void *lldb_private::python::LLDBSWIGPython_CastPyObjectToSBSymbolContext(PyObject * data) {
486
+ lldb::SBSymbolContext *sb_ptr = nullptr;
487
+
488
+ int valid_cast =
489
+ SWIG_ConvertPtr(data, (void **)&sb_ptr, SWIGTYPE_p_lldb__SBSymbolContext, 0);
490
+
491
+ if (valid_cast == -1)
492
+ return NULL;
493
+
494
+ return sb_ptr;
495
+ }
496
+
655
497
void *lldb_private::python::LLDBSWIGPython_CastPyObjectToSBValue(PyObject * data) {
656
498
lldb::SBValue *sb_ptr = NULL;
657
499
@@ -677,6 +519,19 @@ void *lldb_private::python::LLDBSWIGPython_CastPyObjectToSBMemoryRegionInfo(PyOb
677
519
return sb_ptr;
678
520
}
679
521
522
+ void *lldb_private::python::LLDBSWIGPython_CastPyObjectToSBExecutionContext(PyObject *
523
+ data) {
524
+ lldb::SBExecutionContext *sb_ptr = NULL;
525
+
526
+ int valid_cast = SWIG_ConvertPtr(data, (void **)&sb_ptr,
527
+ SWIGTYPE_p_lldb__SBExecutionContext, 0);
528
+
529
+ if (valid_cast == -1)
530
+ return NULL;
531
+
532
+ return sb_ptr;
533
+ }
534
+
680
535
bool lldb_private::python::SWIGBridge::LLDBSwigPythonCallCommand(
681
536
const char *python_function_name, const char *session_dictionary_name,
682
537
lldb::DebuggerSP debugger, const char *args,
0 commit comments