From: Tom Tromey Date: Sat, 12 Nov 2016 18:15:46 +0000 (-0700) Subject: Use gdbpy_enter in fnpy_call X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=0e9dcc758786feaaaf5026c6e59af42b30a35d36;p=binutils-gdb.git Use gdbpy_enter in fnpy_call This changes fnpy_call to use gdbpy_enter and gdbpy_ref. 2017-01-10 Tom Tromey * python/py-function.c (fnpy_call): Use gdbpy_enter, gdbpy_ref. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index a773b3c60ed..010fa0ca02b 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,7 @@ +2017-01-10 Tom Tromey + + * python/py-function.c (fnpy_call): Use gdbpy_enter, gdbpy_ref. + 2017-01-10 Tom Tromey * python/py-cmd.c (cmdpy_function): Use gdbpy_enter, gdbpy_ref. diff --git a/gdb/python/py-function.c b/gdb/python/py-function.c index 8db1ea6ff69..13c7a114854 100644 --- a/gdb/python/py-function.c +++ b/gdb/python/py-function.c @@ -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; }