aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2016-11-12 11:15:46 -0700
committerTom Tromey <tom@tromey.com>2017-01-10 19:13:53 -0700
commit0e9dcc758786feaaaf5026c6e59af42b30a35d36 (patch)
tree6e9f0c6542aba84323fe6359f3f364ea780ac99c
parent12a5cedd4f2c5b1f4e303efda6f8ac3e06eec944 (diff)
downloadgdb-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/ChangeLog4
-rw-r--r--gdb/python/py-function.c32
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;
}