Use gdbpy_enter_varobj in py-varobj.c
authorTom Tromey <tom@tromey.com>
Wed, 9 Nov 2016 03:14:32 +0000 (20:14 -0700)
committerTom Tromey <tom@tromey.com>
Wed, 11 Jan 2017 02:13:51 +0000 (19:13 -0700)
This converts the remaining functions in py-varobj.c to use
gdbpy_enter_varobj.

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

* python/py-varobj.c (py_varobj_iter_dtor, py_varobj_iter_next):
Use gdbpy_enter_varobj.

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

index 6bca72d57fbaae5ce537f4f47f832586ddbef724..9f19ede0ab67de502d683a96504b5d02a0d3a254 100644 (file)
@@ -1,3 +1,8 @@
+2017-01-10  Tom Tromey  <tom@tromey.com>
+
+       * python/py-varobj.c (py_varobj_iter_dtor, py_varobj_iter_next):
+       Use gdbpy_enter_varobj.
+
 2017-01-10  Tom Tromey  <tom@tromey.com>
 
        * varobj.c (gdbpy_enter_varobj): New constructor.
index ffdfa30a69fe0b22a51a23a9e38f6afefc943b7e..bac226fa64b2d6945b4610ff7814a327b6cd0a10 100644 (file)
@@ -39,11 +39,8 @@ static void
 py_varobj_iter_dtor (struct varobj_iter *self)
 {
   struct py_varobj_iter *dis = (struct py_varobj_iter *) self;
-  struct cleanup *back_to = varobj_ensure_python_env (self->var);
-
+  gdbpy_enter_varobj enter_py (self->var);
   Py_XDECREF (dis->iter);
-
-  do_cleanups (back_to);
 }
 
 /* Implementation of the 'next' method of pretty-printed varobj
@@ -53,8 +50,6 @@ static varobj_item *
 py_varobj_iter_next (struct varobj_iter *self)
 {
   struct py_varobj_iter *t = (struct py_varobj_iter *) self;
-  struct cleanup *back_to;
-  PyObject *item;
   PyObject *py_v;
   varobj_item *vitem;
   const char *name = NULL;
@@ -62,9 +57,9 @@ py_varobj_iter_next (struct varobj_iter *self)
   if (!gdb_python_initialized)
     return NULL;
 
-  back_to = varobj_ensure_python_env (self->var);
+  gdbpy_enter_varobj enter_py (self->var);
 
-  item = PyIter_Next (t->iter);
+  gdbpy_ref item (PyIter_Next (t->iter));
 
   if (item == NULL)
     {
@@ -92,7 +87,7 @@ py_varobj_iter_next (struct varobj_iter *self)
 
          name_str = xstrprintf ("<error at %d>",
                                 self->next_raw_index++);
-         item = Py_BuildValue ("(ss)", name_str, value_str.get ());
+         item.reset (Py_BuildValue ("(ss)", name_str, value_str.get ()));
          xfree (name_str);
          if (item == NULL)
            {
@@ -108,7 +103,7 @@ py_varobj_iter_next (struct varobj_iter *self)
        }
     }
 
-  if (!PyArg_ParseTuple (item, "sO", &name, &py_v))
+  if (!PyArg_ParseTuple (item.get (), "sO", &name, &py_v))
     {
       gdbpy_print_stack ();
       error (_("Invalid item from the child list"));
@@ -121,7 +116,6 @@ py_varobj_iter_next (struct varobj_iter *self)
   vitem->name = name;
 
   self->next_raw_index++;
-  do_cleanups (back_to);
   return vitem;
 }