Use gdbpy_enter in py-param.c
authorTom Tromey <tom@tromey.com>
Sat, 12 Nov 2016 18:23:36 +0000 (11:23 -0700)
committerTom Tromey <tom@tromey.com>
Wed, 11 Jan 2017 02:13:53 +0000 (19:13 -0700)
This converts the remaining functions in py-param.c to use
gdbpy_enter.

2017-01-10  Tom Tromey  <tom@tromey.com>

* python/py-param.c (get_set_value, get_show_value): Use
gdbpy_enter, gdbpy_ref.

gdb/ChangeLog
gdb/python/py-param.c

index 010fa0ca02b8a29f620ea7f8d774329f97727fdb..618150cfc504da51b7eb4b64805746dd5f52a2b3 100644 (file)
@@ -1,3 +1,8 @@
+2017-01-10  Tom Tromey  <tom@tromey.com>
+
+       * python/py-param.c (get_set_value, get_show_value): Use
+       gdbpy_enter, gdbpy_ref.
+
 2017-01-10  Tom Tromey  <tom@tromey.com>
 
        * python/py-function.c (fnpy_call): Use gdbpy_enter, gdbpy_ref.
index d9d8baaf350eb2fabad697d348854e343d276d16..b692824ae1f3be7fdd460ddaaba4fbc324b521e5 100644 (file)
@@ -363,18 +363,24 @@ get_set_value (char *args, int from_tty,
 {
   PyObject *obj = (PyObject *) get_cmd_context (c);
   gdb::unique_xmalloc_ptr<char> set_doc_string;
-  struct cleanup *cleanup = ensure_python_env (get_current_arch (),
-                                              current_language);
-  PyObject *set_doc_func = PyString_FromString ("get_set_string");
 
-  if (! set_doc_func)
-    goto error;
+  gdbpy_enter enter_py (get_current_arch (), current_language);
+  gdbpy_ref set_doc_func (PyString_FromString ("get_set_string"));
 
-  if (PyObject_HasAttr (obj, set_doc_func))
+  if (set_doc_func == NULL)
     {
-      set_doc_string = call_doc_function (obj, set_doc_func, NULL);
+      gdbpy_print_stack ();
+      return;
+    }
+
+  if (PyObject_HasAttr (obj, set_doc_func.get ()))
+    {
+      set_doc_string = call_doc_function (obj, set_doc_func.get (), NULL);
       if (! set_doc_string)
-       goto error;
+       {
+         gdbpy_print_stack ();
+         return;
+       }
     }
   else
     {
@@ -385,16 +391,6 @@ get_set_value (char *args, int from_tty,
     }
 
   fprintf_filtered (gdb_stdout, "%s\n", set_doc_string.get ());
-
-  Py_XDECREF (set_doc_func);
-  do_cleanups (cleanup);
-  return;
-
- error:
-  Py_XDECREF (set_doc_func);
-  gdbpy_print_stack ();
-  do_cleanups (cleanup);
-  return;
 }
 
 /* A callback function that is registered against the respective
@@ -410,24 +406,33 @@ get_show_value (struct ui_file *file, int from_tty,
 {
   PyObject *obj = (PyObject *) get_cmd_context (c);
   gdb::unique_xmalloc_ptr<char> show_doc_string;
-  struct cleanup *cleanup = ensure_python_env (get_current_arch (),
-                                              current_language);
-  PyObject *show_doc_func = PyString_FromString ("get_show_string");
 
-  if (! show_doc_func)
-    goto error;
+  gdbpy_enter enter_py (get_current_arch (), current_language);
+  gdbpy_ref show_doc_func (PyString_FromString ("get_show_string"));
+
+  if (show_doc_func == NULL)
+    {
+      gdbpy_print_stack ();
+      return;
+    }
 
-  if (PyObject_HasAttr (obj, show_doc_func))
+  if (PyObject_HasAttr (obj, show_doc_func.get ()))
     {
-      PyObject *val_obj = PyString_FromString (value);
+      gdbpy_ref val_obj (PyString_FromString (value));
 
-      if (! val_obj)
-       goto error;
+      if (val_obj == NULL)
+       {
+         gdbpy_print_stack ();
+         return;
+       }
 
-      show_doc_string = call_doc_function (obj, show_doc_func, val_obj);
-      Py_DECREF (val_obj);
+      show_doc_string = call_doc_function (obj, show_doc_func.get (),
+                                          val_obj.get ());
       if (! show_doc_string)
-       goto error;
+       {
+         gdbpy_print_stack ();
+         return;
+       }
 
       fprintf_filtered (file, "%s\n", show_doc_string.get ());
     }
@@ -439,16 +444,6 @@ get_show_value (struct ui_file *file, int from_tty,
       show_doc_string  = get_doc_string (obj, show_doc_cst);
       fprintf_filtered (file, "%s %s\n", show_doc_string.get (), value);
     }
-
-  Py_XDECREF (show_doc_func);
-  do_cleanups (cleanup);
-  return;
-
- error:
-  Py_XDECREF (show_doc_func);
-  gdbpy_print_stack ();
-  do_cleanups (cleanup);
-  return;
 }
 \f