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:
parent
12a5cedd4f
commit
0e9dcc7587
2 changed files with 15 additions and 21 deletions
|
@ -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>
|
2017-01-10 Tom Tromey <tom@tromey.com>
|
||||||
|
|
||||||
* python/py-cmd.c (cmdpy_function): Use gdbpy_enter, gdbpy_ref.
|
* python/py-cmd.c (cmdpy_function): Use gdbpy_enter, gdbpy_ref.
|
||||||
|
|
|
@ -62,34 +62,28 @@ fnpy_call (struct gdbarch *gdbarch, const struct language_defn *language,
|
||||||
struct value *value = NULL;
|
struct value *value = NULL;
|
||||||
/* 'result' must be set to NULL, this initially indicates whether
|
/* 'result' must be set to NULL, this initially indicates whether
|
||||||
the function was called, or not. */
|
the function was called, or not. */
|
||||||
PyObject *result = NULL;
|
gdbpy_ref result;
|
||||||
PyObject *callable, *args;
|
|
||||||
struct cleanup *cleanup;
|
|
||||||
|
|
||||||
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
|
/* convert_values_to_python can return NULL on error. If we
|
||||||
encounter this, do not call the function, but allow the Python ->
|
encounter this, do not call the function, but allow the Python ->
|
||||||
error code conversion below to deal with the Python exception.
|
error code conversion below to deal with the Python exception.
|
||||||
Note, that this is different if the function simply does not
|
Note, that this is different if the function simply does not
|
||||||
have arguments. */
|
have arguments. */
|
||||||
|
|
||||||
if (args)
|
if (args != NULL)
|
||||||
{
|
{
|
||||||
callable = PyObject_GetAttrString ((PyObject *) cookie, "invoke");
|
gdbpy_ref callable (PyObject_GetAttrString ((PyObject *) cookie,
|
||||||
if (! callable)
|
"invoke"));
|
||||||
{
|
if (callable == NULL)
|
||||||
Py_DECREF (args);
|
|
||||||
error (_("No method named 'invoke' in object."));
|
error (_("No method named 'invoke' in object."));
|
||||||
|
|
||||||
|
result.reset (PyObject_Call (callable.get (), args.get (), NULL));
|
||||||
}
|
}
|
||||||
|
|
||||||
result = PyObject_Call (callable, args, NULL);
|
if (result == NULL)
|
||||||
Py_DECREF (callable);
|
|
||||||
Py_DECREF (args);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!result)
|
|
||||||
{
|
{
|
||||||
PyObject *ptype, *pvalue, *ptraceback;
|
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)
|
if (value == NULL)
|
||||||
{
|
{
|
||||||
Py_DECREF (result);
|
|
||||||
gdbpy_print_stack ();
|
gdbpy_print_stack ();
|
||||||
error (_("Error while executing Python code."));
|
error (_("Error while executing Python code."));
|
||||||
}
|
}
|
||||||
|
|
||||||
Py_DECREF (result);
|
|
||||||
do_cleanups (cleanup);
|
|
||||||
|
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue