X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Fmi%2Fmi-cmd-stack.c;h=52660bdd498e16181ae681063c379abd7cc558ea;hb=15c9ffd6977a93869243dce04988cbaa8340bb00;hp=acb44a28ee51cd0ec79835f7a96989c0fcd75cd9;hpb=d7e747318f4d04af033f16325f9b6d74f67079ec;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/mi/mi-cmd-stack.c b/gdb/mi/mi-cmd-stack.c index acb44a28ee..52660bdd49 100644 --- a/gdb/mi/mi-cmd-stack.c +++ b/gdb/mi/mi-cmd-stack.c @@ -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 #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 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_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"));