+2001-01-27 Mark Kettenis <kettenis@gnu.org>
+
+ * ui-out.c (do_list_end): New function.
+ (make_cleanup_ui_out_list_end): New function.
+ * ui-out.h: Provide prototype for make_cleanup_ui_out_list_end.
+ * stack.c (print_frame) [UI_OUT]: Call
+ make_cleanup_ui_out_list_end to make sure we mark the end of the
+ list if we do a non-local exit. At the end of the function,
+ instead of calling ui_out_list_end directly, let do_cleanups
+ handle it.
+
2001-01-26 Fernando Nasser <fnasser@redhat.com>
Fix double parsing of filenames passed as command line arguments
/* Print and select stack frames for GDB, the GNU debugger.
- Copyright 1986, 1987, 1989, 1991-1996, 1998-2000 Free Software Foundation, Inc.
+ Copyright 1986, 1987, 1989, 1991, 1992, 1993, 1994, 1995, 1996,
+ 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
This file is part of GDB.
#ifdef UI_OUT
struct ui_stream *stb;
struct cleanup *old_chain;
+ struct cleanup *list_chain;
stb = ui_out_stream_new (uiout);
old_chain = make_cleanup_ui_out_stream_delete (stb);
#ifdef UI_OUT
ui_out_list_begin (uiout, "frame");
+ list_chain = make_cleanup_ui_out_list_end (uiout);
#endif
if (level >= 0)
#endif /* PC_SOLIB */
#ifdef UI_OUT
- ui_out_list_end (uiout);
+ /* do_cleanups will call ui_out_list_end() for us. */
+ do_cleanups (list_chain);
ui_out_text (uiout, "\n");
do_cleanups (old_chain);
#else
uiout->list_flag--;
}
+static void
+do_list_end (void *uiout)
+{
+ ui_out_list_end (uiout);
+}
+
+struct cleanup *
+make_cleanup_ui_out_list_end (struct ui_out *uiout)
+{
+ return make_cleanup (do_list_end, uiout);
+}
+
void
ui_out_field_int (struct ui_out *uiout, char *fldname, int value)
{
extern void ui_out_list_end (struct ui_out *uiout);
+extern struct cleanup *make_cleanup_ui_out_list_end (struct ui_out *uiout);
+
extern void ui_out_field_int (struct ui_out *uiout, char *fldname, int value);
extern void ui_out_field_core_addr (struct ui_out *uiout, char *fldname,