* py-finishbreakpoint.c (bpfinishpy_init): Reorganize to call
authorTom Tromey <tromey@redhat.com>
Thu, 28 Feb 2013 19:21:44 +0000 (19:21 +0000)
committerTom Tromey <tromey@redhat.com>
Thu, 28 Feb 2013 19:21:44 +0000 (19:21 +0000)
frame_object_to_frame_info inside TRY_CATCH.

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

index 77bae9b6cb86179512f4f976f0380bf7faef4347..b9c67570d3c0b043ab85855abba3d549e800525f 100644 (file)
@@ -1,3 +1,8 @@
+2013-02-28  Tom Tromey  <tromey@redhat.com>
+
+       * py-finishbreakpoint.c (bpfinishpy_init): Reorganize to call
+       frame_object_to_frame_info inside TRY_CATCH.
+
 2013-02-28  Tom Tromey  <tromey@redhat.com>
 
        * py-block.c (gdbpy_block_for_pc): Call block_for_pc inside
index 56853088d67ba08014a2edd590173f90d36b44c4..d3d6bfdb89709efc9f3c1e9c41380a6e37b472ad 100644 (file)
@@ -173,39 +173,43 @@ bpfinishpy_init (PyObject *self, PyObject *args, PyObject *kwargs)
                                     &frame_obj, &internal))
     return -1;
 
-  /* Default frame to gdb.newest_frame if necessary.  */
-  if (!frame_obj)
-    frame_obj = gdbpy_newest_frame (NULL, NULL);
-  else
-    Py_INCREF (frame_obj);
-
-  frame = frame_object_to_frame_info (frame_obj);
-  Py_DECREF (frame_obj);
-
-  if (frame == NULL)
-    goto invalid_frame;
-  
   TRY_CATCH (except, RETURN_MASK_ALL)
     {
-      prev_frame = get_prev_frame (frame);
-      if (prev_frame == 0)
-        {
-          PyErr_SetString (PyExc_ValueError, _("\"FinishBreakpoint\" not "   \
-                                               "meaningful in the outermost "\
-                                               "frame."));
-        }
-      else if (get_frame_type (prev_frame) == DUMMY_FRAME)
-        {
-          PyErr_SetString (PyExc_ValueError, _("\"FinishBreakpoint\" cannot "\
-                                               "be set on a dummy frame."));
-        }
+      /* Default frame to newest frame if necessary.  */
+      if (frame_obj == NULL)
+       frame = get_current_frame ();
       else
-        {
-          frame_id = get_frame_id (prev_frame);
-          if (frame_id_eq (frame_id, null_frame_id))
-            PyErr_SetString (PyExc_ValueError,
-                             _("Invalid ID for the `frame' object."));
-        }
+       frame = frame_object_to_frame_info (frame_obj);
+
+      if (frame == NULL)
+       {
+         PyErr_SetString (PyExc_ValueError, 
+                          _("Invalid ID for the `frame' object."));
+       }
+      else
+       {
+         prev_frame = get_prev_frame (frame);
+         if (prev_frame == 0)
+           {
+             PyErr_SetString (PyExc_ValueError,
+                              _("\"FinishBreakpoint\" not "
+                                "meaningful in the outermost "
+                                "frame."));
+           }
+         else if (get_frame_type (prev_frame) == DUMMY_FRAME)
+           {
+             PyErr_SetString (PyExc_ValueError,
+                              _("\"FinishBreakpoint\" cannot "
+                                "be set on a dummy frame."));
+           }
+         else
+           {
+             frame_id = get_frame_id (prev_frame);
+             if (frame_id_eq (frame_id, null_frame_id))
+               PyErr_SetString (PyExc_ValueError,
+                                _("Invalid ID for the `frame' object."));
+           }
+       }
     }
   if (except.reason < 0)
     {
@@ -305,11 +309,6 @@ bpfinishpy_init (PyObject *self, PyObject *args, PyObject *kwargs)
   self_bpfinish->py_bp.bp->pspace = current_program_space;
 
   return 0;
-  
- invalid_frame:
-  PyErr_SetString (PyExc_ValueError, 
-                   _("Invalid ID for the `frame' object."));
-  return -1;
 }
 
 /* Called when GDB notices that the finish breakpoint BP_OBJ is out of