Merge async and sync code paths some more
[deliverable/binutils-gdb.git] / gdb / mi / mi-cmd-stack.c
index 608dc4e183b0d8427be404519a56bfb162368b3a..520db2bc8296e50ba1dffe2c0a7c19165756fd07 100644 (file)
@@ -1,5 +1,5 @@
 /* MI Command Set - stack commands.
-   Copyright (C) 2000-2014 Free Software Foundation, Inc.
+   Copyright (C) 2000-2015 Free Software Foundation, Inc.
    Contributed by Cygnus Solutions (a Red Hat company).
 
    This file is part of GDB.
@@ -29,7 +29,6 @@
 #include "dictionary.h"
 #include "language.h"
 #include "valprint.h"
-#include "exceptions.h"
 #include "utils.h"
 #include "mi-getopt.h"
 #include "extension.h"
@@ -54,6 +53,22 @@ mi_cmd_enable_frame_filters (char *command, char **argv, int argc)
   frame_filters = 1;
 }
 
+/* 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,
+                               enum print_values print_values,
+                               struct ui_out *out,
+                               int frame_low, int frame_high)
+{
+  /* ext_lang_frame_args's MI options are compatible with MI print
+     values.  */
+  return apply_ext_lang_frame_filter (frame, flags,
+                                     (enum ext_lang_frame_args) print_values,
+                                     out,
+                                     frame_low, frame_high);
+}
+
 /* Print a list of the stack frames.  Args can be none, in which case
    we want to print the whole backtrace, or a pair of numbers
    specifying the frame numbers at which to start and stop the
@@ -200,7 +215,7 @@ mi_cmd_stack_list_locals (char *command, char **argv, int argc)
   struct frame_info *frame;
   int raw_arg = 0;
   enum ext_lang_bt_status result = EXT_LANG_BT_ERROR;
-  int print_value;
+  enum print_values print_value;
   int oind = 0;
   int skip_unavailable = 0;
   int i;
@@ -253,8 +268,8 @@ mi_cmd_stack_list_locals (char *command, char **argv, int argc)
      {
        int flags = PRINT_LEVEL | PRINT_LOCALS;
 
-       result = apply_ext_lang_frame_filter (frame, flags, print_value,
-                                            current_uiout, 0, 0);
+       result = mi_apply_ext_lang_frame_filter (frame, flags, print_value,
+                                               current_uiout, 0, 0);
      }
 
    /* Run the inbuilt backtrace if there are no filters registered, or
@@ -359,9 +374,9 @@ mi_cmd_stack_list_args (char *command, char **argv, int argc)
       if (py_frame_low == -1)
        py_frame_low++;
 
-      result = apply_ext_lang_frame_filter (get_current_frame (), flags,
-                                           print_values, current_uiout,
-                                           py_frame_low, frame_high);
+      result = mi_apply_ext_lang_frame_filter (get_current_frame (), flags,
+                                              print_values, current_uiout,
+                                              py_frame_low, frame_high);
     }
 
      /* Run the inbuilt backtrace if there are no filters registered, or
@@ -397,7 +412,7 @@ mi_cmd_stack_list_variables (char *command, char **argv, int argc)
   struct frame_info *frame;
   int raw_arg = 0;
   enum ext_lang_bt_status result = EXT_LANG_BT_ERROR;
-  int print_value;
+  enum print_values print_value;
   int oind = 0;
   int skip_unavailable = 0;
 
@@ -449,8 +464,9 @@ mi_cmd_stack_list_variables (char *command, char **argv, int argc)
      {
        int flags = PRINT_LEVEL | PRINT_ARGS | PRINT_LOCALS;
 
-       result = apply_ext_lang_frame_filter (frame, flags, print_value,
-                                            current_uiout, 0, 0);
+       result = mi_apply_ext_lang_frame_filter (frame, flags,
+                                               print_value,
+                                               current_uiout, 0, 0);
      }
 
    /* Run the inbuilt backtrace if there are no filters registered, or
@@ -521,15 +537,13 @@ list_arg_or_local (const struct frame_arg *arg, enum what_to_list what,
 
   if (arg->val || arg->error)
     {
-      volatile struct gdb_exception except;
+      const char *error_message = NULL;
 
       if (arg->error)
-       except.message = arg->error;
+       error_message = arg->error;
       else
        {
-         /* TRY_CATCH has two statements, wrap it in a block.  */
-
-         TRY_CATCH (except, RETURN_MASK_ERROR)
+         TRY
            {
              struct value_print_options opts;
 
@@ -538,10 +552,15 @@ list_arg_or_local (const struct frame_arg *arg, enum what_to_list what,
              common_val_print (arg->val, stb, 0, &opts,
                                language_def (SYMBOL_LANGUAGE (arg->sym)));
            }
+         CATCH (except, RETURN_MASK_ERROR)
+           {
+             error_message = except.message;
+           }
+         END_CATCH
        }
-      if (except.message)
+      if (error_message != NULL)
        fprintf_filtered (stb, _("<error reading variable: %s>"),
-                         except.message);
+                         error_message);
       ui_out_field_stream (uiout, "value", stb);
     }
 
@@ -629,7 +648,7 @@ list_args_or_locals (enum what_to_list what, enum print_values values,
              if (SYMBOL_IS_ARGUMENT (sym))
                sym2 = lookup_symbol (SYMBOL_LINKAGE_NAME (sym),
                                      block, VAR_DOMAIN,
-                                     NULL);
+                                     NULL).symbol;
              else
                sym2 = sym;
              gdb_assert (sym2 != NULL);
This page took 0.025152 seconds and 4 git commands to generate.