Add missing "breaks"
[deliverable/binutils-gdb.git] / gdb / mi / mi-cmd-stack.c
index acb44a28ee51cd0ec79835f7a96989c0fcd75cd9..52660bdd498e16181ae681063c379abd7cc558ea 100644 (file)
@@ -1,5 +1,5 @@
 /* MI Command Set - stack commands.
-   Copyright (C) 2000-2017 Free Software Foundation, Inc.
+   Copyright (C) 2000-2018 Free Software Foundation, Inc.
    Contributed by Cygnus Solutions (a Red Hat company).
 
    This file is part of GDB.
@@ -34,6 +34,7 @@
 #include "extension.h"
 #include <ctype.h>
 #include "mi-parse.h"
+#include "common/gdb_optional.h"
 
 enum what_to_list { locals, arguments, all };
 
@@ -46,7 +47,7 @@ static void list_args_or_locals (enum what_to_list what,
 static int frame_filters = 0;
 
 void
-mi_cmd_enable_frame_filters (char *command, char **argv, int argc)
+mi_cmd_enable_frame_filters (const char *command, char **argv, int argc)
 {
   if (argc != 0)
     error (_("-enable-frame-filters: no arguments allowed"));
@@ -56,7 +57,8 @@ mi_cmd_enable_frame_filters (char *command, char **argv, int argc)
 /* Like apply_ext_lang_frame_filter, but take a print_values */
 
 static enum ext_lang_bt_status
-mi_apply_ext_lang_frame_filter (struct frame_info *frame, int flags,
+mi_apply_ext_lang_frame_filter (struct frame_info *frame,
+                               frame_filter_flags flags,
                                enum print_values print_values,
                                struct ui_out *out,
                                int frame_low, int frame_high)
@@ -76,12 +78,11 @@ mi_apply_ext_lang_frame_filter (struct frame_info *frame, int flags,
    displayed.  */
 
 void
-mi_cmd_stack_list_frames (char *command, char **argv, int argc)
+mi_cmd_stack_list_frames (const char *command, char **argv, int argc)
 {
   int frame_low;
   int frame_high;
   int i;
-  struct cleanup *cleanup_stack;
   struct frame_info *fi;
   enum ext_lang_bt_status result = EXT_LANG_BT_ERROR;
   int raw_arg = 0;
@@ -142,11 +143,11 @@ mi_cmd_stack_list_frames (char *command, char **argv, int argc)
   if (fi == NULL)
     error (_("-stack-list-frames: Not enough frames in stack."));
 
-  cleanup_stack = make_cleanup_ui_out_list_begin_end (current_uiout, "stack");
+  ui_out_emit_list list_emitter (current_uiout, "stack");
 
   if (! raw_arg && frame_filters)
     {
-      int flags = PRINT_LEVEL | PRINT_FRAME_INFO;
+      frame_filter_flags flags = PRINT_LEVEL | PRINT_FRAME_INFO;
       int py_frame_low = frame_low;
 
       /* We cannot pass -1 to frame_low, as that would signify a
@@ -176,12 +177,10 @@ mi_cmd_stack_list_frames (char *command, char **argv, int argc)
          print_frame_info (fi, 1, LOC_AND_ADDRESS, 0 /* args */, 0);
        }
     }
-
-  do_cleanups (cleanup_stack);
 }
 
 void
-mi_cmd_stack_info_depth (char *command, char **argv, int argc)
+mi_cmd_stack_info_depth (const char *command, char **argv, int argc)
 {
   int frame_high;
   int i;
@@ -210,7 +209,7 @@ mi_cmd_stack_info_depth (char *command, char **argv, int argc)
    values.  */
 
 void
-mi_cmd_stack_list_locals (char *command, char **argv, int argc)
+mi_cmd_stack_list_locals (const char *command, char **argv, int argc)
 {
   struct frame_info *frame;
   int raw_arg = 0;
@@ -246,6 +245,7 @@ mi_cmd_stack_list_locals (char *command, char **argv, int argc)
            {
            case NO_FRAME_FILTERS:
              raw_arg = oind;
+             break;
            case SKIP_UNAVAILABLE:
              skip_unavailable = 1;
              break;
@@ -264,7 +264,7 @@ mi_cmd_stack_list_locals (char *command, char **argv, int argc)
 
    if (! raw_arg && frame_filters)
      {
-       int flags = PRINT_LEVEL | PRINT_LOCALS;
+       frame_filter_flags flags = PRINT_LEVEL | PRINT_LOCALS;
 
        result = mi_apply_ext_lang_frame_filter (frame, flags, print_value,
                                                current_uiout, 0, 0);
@@ -284,13 +284,12 @@ mi_cmd_stack_list_locals (char *command, char **argv, int argc)
    values.  */
 
 void
-mi_cmd_stack_list_args (char *command, char **argv, int argc)
+mi_cmd_stack_list_args (const char *command, char **argv, int argc)
 {
   int frame_low;
   int frame_high;
   int i;
   struct frame_info *fi;
-  struct cleanup *cleanup_stack_args;
   enum print_values print_values;
   struct ui_out *uiout = current_uiout;
   int raw_arg = 0;
@@ -358,12 +357,11 @@ mi_cmd_stack_list_args (char *command, char **argv, int argc)
   if (fi == NULL)
     error (_("-stack-list-arguments: Not enough frames in stack."));
 
-  cleanup_stack_args
-    = make_cleanup_ui_out_list_begin_end (uiout, "stack-args");
+  ui_out_emit_list list_emitter (uiout, "stack-args");
 
   if (! raw_arg && frame_filters)
     {
-      int flags = PRINT_LEVEL | PRINT_ARGS;
+      frame_filter_flags flags = PRINT_LEVEL | PRINT_ARGS;
       int py_frame_low = frame_low;
 
       /* We cannot pass -1 to frame_low, as that would signify a
@@ -387,16 +385,12 @@ mi_cmd_stack_list_args (char *command, char **argv, int argc)
           fi && (i <= frame_high || frame_high == -1);
           i++, fi = get_prev_frame (fi))
        {
-         struct cleanup *cleanup_frame;
-
          QUIT;
-         cleanup_frame = make_cleanup_ui_out_tuple_begin_end (uiout, "frame");
+         ui_out_emit_tuple tuple_emitter (uiout, "frame");
          uiout->field_int ("level", i);
          list_args_or_locals (arguments, print_values, fi, skip_unavailable);
-         do_cleanups (cleanup_frame);
        }
     }
-  do_cleanups (cleanup_stack_args);
 }
 
 /* Print a list of the local variables (including arguments) for the 
@@ -405,7 +399,7 @@ mi_cmd_stack_list_args (char *command, char **argv, int argc)
    parse_print_value for possible values.  */
 
 void
-mi_cmd_stack_list_variables (char *command, char **argv, int argc)
+mi_cmd_stack_list_variables (const char *command, char **argv, int argc)
 {
   struct frame_info *frame;
   int raw_arg = 0;
@@ -459,7 +453,7 @@ mi_cmd_stack_list_variables (char *command, char **argv, int argc)
 
    if (! raw_arg && frame_filters)
      {
-       int flags = PRINT_LEVEL | PRINT_ARGS | PRINT_LOCALS;
+       frame_filter_flags flags = PRINT_LEVEL | PRINT_ARGS | PRINT_LOCALS;
 
        result = mi_apply_ext_lang_frame_filter (frame, flags,
                                                print_value,
@@ -486,7 +480,6 @@ static void
 list_arg_or_local (const struct frame_arg *arg, enum what_to_list what,
                   enum print_values values, int skip_unavailable)
 {
-  struct cleanup *old_chain;
   struct ui_out *uiout = current_uiout;
 
   gdb_assert (!arg->val || !arg->error);
@@ -510,10 +503,9 @@ list_arg_or_local (const struct frame_arg *arg, enum what_to_list what,
                                         TYPE_LENGTH (value_type (arg->val))))))
     return;
 
-  old_chain = make_cleanup (null_cleanup, NULL);
-
+  gdb::optional<ui_out_emit_tuple> tuple_emitter;
   if (values != PRINT_NO_VALUES || what == all)
-    make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
+    tuple_emitter.emplace (uiout, nullptr);
 
   string_file stb;
 
@@ -559,8 +551,6 @@ list_arg_or_local (const struct frame_arg *arg, enum what_to_list what,
        stb.printf (_("<error reading variable: %s>"), error_message);
       uiout->field_stream ("value", stb);
     }
-
-  do_cleanups (old_chain);
 }
 
 /* Print a list of the objects for the frame FI in a certain form,
@@ -576,9 +566,8 @@ list_args_or_locals (enum what_to_list what, enum print_values values,
   const struct block *block;
   struct symbol *sym;
   struct block_iterator iter;
-  struct cleanup *cleanup_list;
   struct type *type;
-  char *name_of_result;
+  const char *name_of_result;
   struct ui_out *uiout = current_uiout;
 
   block = get_frame_block (fi, 0);
@@ -599,7 +588,7 @@ list_args_or_locals (enum what_to_list what, enum print_values values,
                      "unexpected what_to_list: %d", (int) what);
     }
 
-  cleanup_list = make_cleanup_ui_out_list_begin_end (uiout, name_of_result);
+  ui_out_emit_list list_emitter (uiout, name_of_result);
 
   while (block != 0)
     {
@@ -687,11 +676,10 @@ list_args_or_locals (enum what_to_list what, enum print_values values,
       else
        block = BLOCK_SUPERBLOCK (block);
     }
-  do_cleanups (cleanup_list);
 }
 
 void
-mi_cmd_stack_select_frame (char *command, char **argv, int argc)
+mi_cmd_stack_select_frame (const char *command, char **argv, int argc)
 {
   if (argc == 0 || argc > 1)
     error (_("-stack-select-frame: Usage: FRAME_SPEC"));
@@ -700,7 +688,7 @@ mi_cmd_stack_select_frame (char *command, char **argv, int argc)
 }
 
 void
-mi_cmd_stack_info_frame (char *command, char **argv, int argc)
+mi_cmd_stack_info_frame (const char *command, char **argv, int argc)
 {
   if (argc > 0)
     error (_("-stack-info-frame: No arguments allowed"));
This page took 0.029169 seconds and 4 git commands to generate.