aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2016-11-12 11:12:41 -0700
committerTom Tromey <tom@tromey.com>2017-01-10 19:13:52 -0700
commit12a5cedd4f2c5b1f4e303efda6f8ac3e06eec944 (patch)
treed6ff5c796adacfb52ad115776031ccd7a25355d6 /gdb
parent788f258604773ccbe9ccba71f9b1725930324275 (diff)
downloadgdb-12a5cedd4f2c5b1f4e303efda6f8ac3e06eec944.zip
gdb-12a5cedd4f2c5b1f4e303efda6f8ac3e06eec944.tar.gz
gdb-12a5cedd4f2c5b1f4e303efda6f8ac3e06eec944.tar.bz2
Use gdbpy_enter in cmdpy_function
This changes cmdpy_function to use gdbpy_enter and gdbpy_ref. 2017-01-10 Tom Tromey <tom@tromey.com> * python/py-cmd.c (cmdpy_function): Use gdbpy_enter, gdbpy_ref.
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog4
-rw-r--r--gdb/python/py-cmd.c26
2 files changed, 14 insertions, 16 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 9f19ede..a773b3c 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,9 @@
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>
+
* python/py-varobj.c (py_varobj_iter_dtor, py_varobj_iter_next):
Use gdbpy_enter_varobj.
diff --git a/gdb/python/py-cmd.c b/gdb/python/py-cmd.c
index 9afa7e4..8b6293f 100644
--- a/gdb/python/py-cmd.c
+++ b/gdb/python/py-cmd.c
@@ -117,10 +117,8 @@ static void
cmdpy_function (struct cmd_list_element *command, char *args, int from_tty)
{
cmdpy_object *obj = (cmdpy_object *) get_cmd_context (command);
- PyObject *argobj, *ttyobj, *result;
- struct cleanup *cleanup;
- cleanup = ensure_python_env (get_current_arch (), current_language);
+ gdbpy_enter enter_py (get_current_arch (), current_language);
if (! obj)
error (_("Invalid invocation of Python command object."));
@@ -129,7 +127,6 @@ cmdpy_function (struct cmd_list_element *command, char *args, int from_tty)
if (obj->command->prefixname)
{
/* A prefix command does not need an invoke method. */
- do_cleanups (cleanup);
return;
}
error (_("Python command object missing 'invoke' method."));
@@ -137,21 +134,21 @@ cmdpy_function (struct cmd_list_element *command, char *args, int from_tty)
if (! args)
args = "";
- argobj = PyUnicode_Decode (args, strlen (args), host_charset (), NULL);
- if (! argobj)
+ gdbpy_ref argobj (PyUnicode_Decode (args, strlen (args), host_charset (),
+ NULL));
+ if (argobj == NULL)
{
gdbpy_print_stack ();
error (_("Could not convert arguments to Python string."));
}
- ttyobj = from_tty ? Py_True : Py_False;
- Py_INCREF (ttyobj);
- result = PyObject_CallMethodObjArgs ((PyObject *) obj, invoke_cst, argobj,
- ttyobj, NULL);
- Py_DECREF (argobj);
- Py_DECREF (ttyobj);
+ gdbpy_ref ttyobj (from_tty ? Py_True : Py_False);
+ Py_INCREF (ttyobj.get ());
+ gdbpy_ref result (PyObject_CallMethodObjArgs ((PyObject *) obj, invoke_cst,
+ argobj.get (), ttyobj.get (),
+ NULL));
- if (! result)
+ if (result == NULL)
{
PyObject *ptype, *pvalue, *ptraceback;
@@ -199,9 +196,6 @@ cmdpy_function (struct cmd_list_element *command, char *args, int from_tty)
error ("%s", msg.get ());
}
}
-
- Py_DECREF (result);
- do_cleanups (cleanup);
}
/* Helper function for the Python command completers (both "pure"