Use gdbpy_enter in fnpy_call

This changes fnpy_call to use gdbpy_enter and gdbpy_ref.

2017-01-10  Tom Tromey  <tom@tromey.com>

	* python/py-function.c (fnpy_call): Use gdbpy_enter, gdbpy_ref.
This commit is contained in:
Tom Tromey 2016-11-12 11:15:46 -07:00
parent 12a5cedd4f
commit 0e9dcc7587
2 changed files with 15 additions and 21 deletions

View File

@ -1,3 +1,7 @@
2017-01-10 Tom Tromey <tom@tromey.com>
* python/py-function.c (fnpy_call): Use gdbpy_enter, gdbpy_ref.
2017-01-10 Tom Tromey <tom@tromey.com>
* python/py-cmd.c (cmdpy_function): Use gdbpy_enter, gdbpy_ref.

View File

@ -62,34 +62,28 @@ fnpy_call (struct gdbarch *gdbarch, const struct language_defn *language,
struct value *value = NULL;
/* 'result' must be set to NULL, this initially indicates whether
the function was called, or not. */
PyObject *result = NULL;
PyObject *callable, *args;
struct cleanup *cleanup;
gdbpy_ref result;
cleanup = ensure_python_env (gdbarch, language);
gdbpy_enter enter_py (gdbarch, language);
args = convert_values_to_python (argc, argv);
gdbpy_ref args (convert_values_to_python (argc, argv));
/* convert_values_to_python can return NULL on error. If we
encounter this, do not call the function, but allow the Python ->
error code conversion below to deal with the Python exception.
Note, that this is different if the function simply does not
have arguments. */
if (args)
if (args != NULL)
{
callable = PyObject_GetAttrString ((PyObject *) cookie, "invoke");
if (! callable)
{
Py_DECREF (args);
error (_("No method named 'invoke' in object."));
}
gdbpy_ref callable (PyObject_GetAttrString ((PyObject *) cookie,
"invoke"));
if (callable == NULL)
error (_("No method named 'invoke' in object."));
result = PyObject_Call (callable, args, NULL);
Py_DECREF (callable);
Py_DECREF (args);
result.reset (PyObject_Call (callable.get (), args.get (), NULL));
}
if (!result)
if (result == NULL)
{
PyObject *ptype, *pvalue, *ptraceback;
@ -141,17 +135,13 @@ fnpy_call (struct gdbarch *gdbarch, const struct language_defn *language,
}
}
value = convert_value_from_python (result);
value = convert_value_from_python (result.get ());
if (value == NULL)
{
Py_DECREF (result);
gdbpy_print_stack ();
error (_("Error while executing Python code."));
}
Py_DECREF (result);
do_cleanups (cleanup);
return value;
}