aboutsummaryrefslogtreecommitdiff
path: root/gdb/python/py-frame.c
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/python/py-frame.c')
-rw-r--r--gdb/python/py-frame.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/gdb/python/py-frame.c b/gdb/python/py-frame.c
index f66d22b..ecd55d2 100644
--- a/gdb/python/py-frame.c
+++ b/gdb/python/py-frame.c
@@ -241,12 +241,13 @@ static PyObject *
frapy_read_register (PyObject *self, PyObject *args)
{
PyObject *pyo_reg_id;
- struct value *val = NULL;
+ PyObject *result = nullptr;
if (!PyArg_UnpackTuple (args, "read_register", 1, 1, &pyo_reg_id))
return NULL;
try
{
+ scoped_value_mark free_values;
frame_info_ptr frame;
int regnum;
@@ -257,17 +258,19 @@ frapy_read_register (PyObject *self, PyObject *args)
return nullptr;
gdb_assert (regnum >= 0);
- val = value_of_register (regnum, frame);
+ struct value *val = value_of_register (regnum, frame);
if (val == NULL)
PyErr_SetString (PyExc_ValueError, _("Can't read register."));
+ else
+ result = value_to_value_object (val);
}
catch (const gdb_exception &except)
{
GDB_PY_HANDLE_EXCEPTION (except);
}
- return val == NULL ? NULL : value_to_value_object (val);
+ return result;
}
/* Implementation of gdb.Frame.block (self) -> gdb.Block.
@@ -482,7 +485,6 @@ frapy_read_var (PyObject *self, PyObject *args)
PyObject *sym_obj, *block_obj = NULL;
struct symbol *var = NULL; /* gcc-4.3.2 false warning. */
const struct block *block = NULL;
- struct value *val = NULL;
if (!PyArg_ParseTuple (args, "O|O", &sym_obj, &block_obj))
return NULL;
@@ -540,18 +542,21 @@ frapy_read_var (PyObject *self, PyObject *args)
return NULL;
}
+ PyObject *result = nullptr;
try
{
FRAPY_REQUIRE_VALID (self, frame);
- val = read_var_value (var, block, frame);
+ scoped_value_mark free_values;
+ struct value *val = read_var_value (var, block, frame);
+ result = value_to_value_object (val);
}
catch (const gdb_exception &except)
{
GDB_PY_HANDLE_EXCEPTION (except);
}
- return value_to_value_object (val);
+ return result;
}
/* Select this frame. */