/* Python interface to program spaces.
- Copyright (C) 2010-2019 Free Software Foundation, Inc.
+ Copyright (C) 2010-2020 Free Software Foundation, Inc.
This file is part of GDB.
#include "objfiles.h"
#include "language.h"
#include "arch-utils.h"
-#include "py-ref.h"
#include "solib.h"
#include "block.h"
static int
pspy_set_printers (PyObject *o, PyObject *value, void *ignore)
{
- PyObject *tmp;
pspace_object *self = (pspace_object *) o;
if (! value)
}
/* Take care in case the LHS and RHS are related somehow. */
- tmp = self->printers;
+ gdbpy_ref<> tmp (self->printers);
Py_INCREF (value);
self->printers = value;
- Py_XDECREF (tmp);
return 0;
}
static int
pspy_set_frame_filters (PyObject *o, PyObject *frame, void *ignore)
{
- PyObject *tmp;
pspace_object *self = (pspace_object *) o;
if (! frame)
}
/* Take care in case the LHS and RHS are related somehow. */
- tmp = self->frame_filters;
+ gdbpy_ref<> tmp (self->frame_filters);
Py_INCREF (frame);
self->frame_filters = frame;
- Py_XDECREF (tmp);
return 0;
}
static int
pspy_set_frame_unwinders (PyObject *o, PyObject *unwinders, void *ignore)
{
- PyObject *tmp;
pspace_object *self = (pspace_object *) o;
if (!unwinders)
}
/* Take care in case the LHS and RHS are related somehow. */
- tmp = self->frame_unwinders;
+ gdbpy_ref<> tmp (self->frame_unwinders);
Py_INCREF (unwinders);
self->frame_unwinders = unwinders;
- Py_XDECREF (tmp);
return 0;
}
static int
pspy_set_type_printers (PyObject *o, PyObject *value, void *ignore)
{
- PyObject *tmp;
pspace_object *self = (pspace_object *) o;
if (! value)
}
/* Take care in case the LHS and RHS are related somehow. */
- tmp = self->type_printers;
+ gdbpy_ref<> tmp (self->type_printers);
Py_INCREF (value);
self->type_printers = value;
- Py_XDECREF (tmp);
return 0;
}
if (self->pspace != NULL)
{
- struct objfile *objf;
-
- ALL_PSPACE_OBJFILES (self->pspace, objf)
+ for (objfile *objf : self->pspace->objfiles ())
{
gdbpy_ref<> item = objfile_to_objfile_object (objf);
if (!PyArg_ParseTuple (args, GDB_PY_LLU_ARG, &pc))
return NULL;
- TRY
+ try
{
scoped_restore_current_program_space saver;
if (cust != NULL && COMPUNIT_OBJFILE (cust) != NULL)
block = block_for_pc (pc);
}
- CATCH (except, RETURN_MASK_ALL)
+ catch (const gdb_exception &except)
{
GDB_PY_HANDLE_EXCEPTION (except);
}
- END_CATCH
if (cust == NULL || COMPUNIT_OBJFILE (cust) == NULL)
- {
- PyErr_SetString (PyExc_RuntimeError,
- _("Cannot locate object file for block."));
- return NULL;
- }
+ Py_RETURN_NONE;
if (block)
return block_to_block_object (block, COMPUNIT_OBJFILE (cust));
if (!PyArg_ParseTuple (args, GDB_PY_LLU_ARG, &pc_llu))
return NULL;
- TRY
+ try
{
struct symtab_and_line sal;
CORE_ADDR pc;
sal = find_pc_line (pc, 0);
result = symtab_and_line_to_sal_object (sal);
}
- CATCH (except, RETURN_MASK_ALL)
+ catch (const gdb_exception &except)
{
GDB_PY_HANDLE_EXCEPTION (except);
}
- END_CATCH
return result;
}