This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[RFA 02/11] Use gdbpy_enter in fnpy_call
- From: Tom Tromey <tom at tromey dot com>
- To: gdb-patches at sourceware dot org
- Cc: Tom Tromey <tom at tromey dot com>
- Date: Sat, 12 Nov 2016 14:28:36 -0700
- Subject: [RFA 02/11] Use gdbpy_enter in fnpy_call
- Authentication-results: sourceware.org; auth=none
- References: <1478986125-15122-1-git-send-email-tom@tromey.com>
This changes fnpy_call to use gdbpy_enter and gdbpy_ref.
2016-11-12 Tom Tromey <tom@tromey.com>
* python/py-function.c (fnpy_call): Use gdbpy_enter, gdbpy_ref.
---
gdb/ChangeLog | 4 ++++
gdb/python/py-function.c | 32 +++++++++++---------------------
2 files changed, 15 insertions(+), 21 deletions(-)
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 9c0e5d2..1a7e8e2 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,9 @@
2016-11-12 Tom Tromey <tom@tromey.com>
+ * python/py-function.c (fnpy_call): Use gdbpy_enter, gdbpy_ref.
+
+2016-11-12 Tom Tromey <tom@tromey.com>
+
* python/py-cmd.c (cmdpy_function): Use gdbpy_enter, gdbpy_ref.
2016-11-10 Tom Tromey <tom@tromey.com>
diff --git a/gdb/python/py-function.c b/gdb/python/py-function.c
index 2bdab7e..00f0848 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;
}
--
2.7.4