Remove a cleanup in Python

This removes cleanups from gdbpy_decode_line, in favor of a use of
unique_xmalloc_ptr.

ChangeLog
2017-08-03  Tom Tromey  <tom@tromey.com>

	* python/python.c (gdbpy_decode_line): Use unique_xmalloc_ptr.
This commit is contained in:
Tom Tromey 2017-04-30 22:12:13 -06:00
parent 7f968c899f
commit 0d50bde32b
2 changed files with 11 additions and 23 deletions

View File

@ -1,3 +1,7 @@
2017-08-03 Tom Tromey <tom@tromey.com>
* python/python.c (gdbpy_decode_line): Use unique_xmalloc_ptr.
2017-08-03 Tom Tromey <tom@tromey.com>
* python/python.c (compute_python_string): Return std::string.

View File

@ -652,7 +652,6 @@ gdbpy_decode_line (PyObject *self, PyObject *args)
appease gcc. */
struct symtab_and_line sal;
char *arg = NULL;
struct cleanup *cleanups;
gdbpy_ref<> result;
gdbpy_ref<> unparsed;
event_location_up location;
@ -660,8 +659,6 @@ gdbpy_decode_line (PyObject *self, PyObject *args)
if (! PyArg_ParseTuple (args, "|s", &arg))
return NULL;
cleanups = make_cleanup (null_cleanup, NULL);
sals.sals = NULL;
if (arg != NULL)
@ -685,12 +682,13 @@ gdbpy_decode_line (PyObject *self, PyObject *args)
}
END_CATCH
/* Ensure that the sals data is freed, when needed. */
gdb::unique_xmalloc_ptr<struct symtab_and_line> free_sals;
if (sals.sals != NULL && sals.sals != &sal)
make_cleanup (xfree, sals.sals);
free_sals.reset (sals.sals);
if (except.reason < 0)
{
do_cleanups (cleanups);
/* We know this will always throw. */
gdbpy_convert_exception (except);
return NULL;
@ -702,20 +700,14 @@ gdbpy_decode_line (PyObject *self, PyObject *args)
result.reset (PyTuple_New (sals.nelts));
if (result == NULL)
{
do_cleanups (cleanups);
return NULL;
}
return NULL;
for (i = 0; i < sals.nelts; ++i)
{
PyObject *obj;
obj = symtab_and_line_to_sal_object (sals.sals[i]);
if (! obj)
{
do_cleanups (cleanups);
return NULL;
}
return NULL;
PyTuple_SetItem (result.get (), i, obj);
}
@ -728,19 +720,13 @@ gdbpy_decode_line (PyObject *self, PyObject *args)
gdbpy_ref<> return_result (PyTuple_New (2));
if (return_result == NULL)
{
do_cleanups (cleanups);
return NULL;
}
return NULL;
if (arg != NULL && strlen (arg) > 0)
{
unparsed.reset (PyString_FromString (arg));
if (unparsed == NULL)
{
do_cleanups (cleanups);
return NULL;
}
return NULL;
}
else
{
@ -751,8 +737,6 @@ gdbpy_decode_line (PyObject *self, PyObject *args)
PyTuple_SetItem (return_result.get (), 0, unparsed.release ());
PyTuple_SetItem (return_result.get (), 1, result.release ());
do_cleanups (cleanups);
return return_result.release ();
}