diff options
author | Tom Tromey <tom@tromey.com> | 2016-11-12 11:12:41 -0700 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2017-01-10 19:13:52 -0700 |
commit | 12a5cedd4f2c5b1f4e303efda6f8ac3e06eec944 (patch) | |
tree | d6ff5c796adacfb52ad115776031ccd7a25355d6 /gdb/python/py-cmd.c | |
parent | 788f258604773ccbe9ccba71f9b1725930324275 (diff) | |
download | gdb-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/python/py-cmd.c')
-rw-r--r-- | gdb/python/py-cmd.c | 26 |
1 files changed, 10 insertions, 16 deletions
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" |