diff options
author | Tom Tromey <tom@tromey.com> | 2016-11-12 11:15:46 -0700 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2017-01-10 19:13:53 -0700 |
commit | 0e9dcc758786feaaaf5026c6e59af42b30a35d36 (patch) | |
tree | 6e9f0c6542aba84323fe6359f3f364ea780ac99c | |
parent | 12a5cedd4f2c5b1f4e303efda6f8ac3e06eec944 (diff) | |
download | gdb-0e9dcc758786feaaaf5026c6e59af42b30a35d36.zip gdb-0e9dcc758786feaaaf5026c6e59af42b30a35d36.tar.gz gdb-0e9dcc758786feaaaf5026c6e59af42b30a35d36.tar.bz2 |
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.
-rw-r--r-- | gdb/ChangeLog | 4 | ||||
-rw-r--r-- | gdb/python/py-function.c | 32 |
2 files changed, 15 insertions, 21 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index a773b3c..010fa0c 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,9 @@ 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. 2017-01-10 Tom Tromey <tom@tromey.com> diff --git a/gdb/python/py-function.c b/gdb/python/py-function.c index 8db1ea6..13c7a11 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; } |