From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 443 invoked by alias); 1 Oct 2012 14:59:47 -0000 Mailing-List: contact archer-commits-help@sourceware.org; run by ezmlm Sender: Precedence: bulk List-Post: List-Help: List-Subscribe: Received: (qmail 412 invoked by uid 9514); 1 Oct 2012 14:59:45 -0000 Date: Mon, 01 Oct 2012 14:59:00 -0000 Message-ID: <20121001145945.397.qmail@sourceware.org> From: pmuldoon@sourceware.org To: archer-commits@sourceware.org Subject: [SCM] archer-pmuldoon-python-backtrace: Use a flags integer instead of explicit parameters. X-Git-Refname: refs/heads/archer-pmuldoon-python-backtrace X-Git-Reftype: branch X-Git-Oldrev: 78f6a8a88dd85365967299efc21ec6282687cd15 X-Git-Newrev: c77c423e819ce42fc776b3ada0cb369f17312c30 X-SW-Source: 2012-q4/txt/msg00001.txt.bz2 List-Id: The branch, archer-pmuldoon-python-backtrace has been updated via c77c423e819ce42fc776b3ada0cb369f17312c30 (commit) from 78f6a8a88dd85365967299efc21ec6282687cd15 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email. - Log ----------------------------------------------------------------- commit c77c423e819ce42fc776b3ada0cb369f17312c30 Author: Phil Muldoon Date: Mon Oct 1 15:59:16 2012 +0100 Use a flags integer instead of explicit parameters. ----------------------------------------------------------------------- Summary of changes: gdb/mi/mi-cmd-stack.c | 51 +++++++++++---------------------------- gdb/python/lib/gdb/__init__.py | 3 ++ gdb/python/py-framefilter.c | 47 +++++++++++++++++++++--------------- gdb/python/python.h | 23 +++++++++++++++-- gdb/stack.c | 19 ++++++++------- 5 files changed, 75 insertions(+), 68 deletions(-) First 500 lines of diff: diff --git a/gdb/mi/mi-cmd-stack.c b/gdb/mi/mi-cmd-stack.c index 773ab75..c99ab05 100644 --- a/gdb/mi/mi-cmd-stack.c +++ b/gdb/mi/mi-cmd-stack.c @@ -112,18 +112,13 @@ mi_cmd_stack_list_frames (char *command, char **argv, int argc) if (! raw_arg && frame_filters) { int count = frame_high; + int flags = PRINT_LEVEL | PRINT_FRAME_INFO; if (frame_high != -1) count = (frame_high - frame_low) + 1; - result = apply_frame_filter (fi,/* frame */ - 1, /* print_level */ - 1, /* print_frame_info */ - 0, /* print_args */ - 0, /* print_locals */ - 0, /* mi_print_args_type */ - 0, /* cli_print_args_type */ - current_uiout, /* out */ - count /* count */); + + result = apply_frame_filter (fi, flags, 0, NULL, current_uiout, + count); } /* Run the inbuilt backtrace if there are no filters registered, or @@ -216,15 +211,10 @@ mi_cmd_stack_list_locals (char *command, char **argv, int argc) if (! raw_arg && frame_filters) { - result = apply_frame_filter (frame,/* frame */ - 1, /* print_level */ - 0, /* print_frame_info */ - 0, /* print_args */ - 1, /* print_locals */ - print_value, /* mi_print_args_type */ - 0, /* cli_print_args_type */ - current_uiout, /* out */ - 1 /* count */); + int flags = PRINT_LEVEL | PRINT_LOCALS; + + result = apply_frame_filter (frame, flags, print_value, + NULL, current_uiout, 1); } if (! frame_filters || raw_arg || result == PY_BT_ERROR @@ -289,19 +279,13 @@ mi_cmd_stack_list_args (char *command, char **argv, int argc) if (! raw_arg && frame_filters) { int count = frame_high; + int flags = PRINT_LEVEL | PRINT_ARGS; if (frame_high != -1) count = (frame_high - frame_low) + 1; - result = apply_frame_filter (fi,/* frame */ - 1, /* print_level */ - 0, /* print_frame_info */ - 1, /* print_args */ - 0, /* print_locals */ - print_values, /* mi_print_args_type */ - 0, /* cli_print_args_type */ - current_uiout, /* out */ - count /* count */); + result = apply_frame_filter (fi, flags, print_values, NULL, + current_uiout, count); } if (! frame_filters || raw_arg || result == PY_BT_ERROR @@ -352,15 +336,10 @@ mi_cmd_stack_list_variables (char *command, char **argv, int argc) if (! raw_arg && frame_filters) { - result = apply_frame_filter (frame,/* frame */ - 1, /* print_level */ - 0, /* print_frame_info */ - 1, /* print_args */ - 1, /* print_locals */ - print_value, /* mi_print_args_type */ - 0, /* cli_print_args_type */ - current_uiout, /* out */ - 1 /* count */); + int flags = PRINT_LEVEL | PRINT_ARGS | PRINT_LOCALS; + + result = apply_frame_filter (frame, flags, print_value, NULL, + current_uiout, 1); } if (! frame_filters || raw_arg || result == PY_BT_ERROR diff --git a/gdb/python/lib/gdb/__init__.py b/gdb/python/lib/gdb/__init__.py index 0e020fe..750e29e 100644 --- a/gdb/python/lib/gdb/__init__.py +++ b/gdb/python/lib/gdb/__init__.py @@ -70,6 +70,9 @@ sys.argv = [''] # Initial pretty printers. pretty_printers = [] +# Initial frame filters. +frame_filters = {} + # Convenience variable to GDB's python directory PYTHONDIR = os.path.dirname(os.path.dirname(__file__)) diff --git a/gdb/python/py-framefilter.c b/gdb/python/py-framefilter.c index f3b0aaa..d806ceb 100644 --- a/gdb/python/py-framefilter.c +++ b/gdb/python/py-framefilter.c @@ -30,6 +30,7 @@ #include "hashtab.h" #include "mi/mi-cmds.h" #include "demangle.h" +#include "mi/mi-cmds.h" #ifdef HAVE_PYTHON #include "python-internal.h" @@ -1225,24 +1226,24 @@ bootstrap_python_frame_filters (struct frame_info *frame) /* Public and dispatch function for frame filters. This is the only publicly exported function in this file. FRAME is the source - frame to start frame-filter invocation. PRINT_LEVEL is a flag - indicating whether to print the frame's relative level in the + frame to start frame-filter invocation. FLAGS is an integer + holding the flags for printing. The following elements of the + FRAME_FILTER_FLAGS enum denotes makeup of FLAGS: PRINT_LEVEL is a + flag indicating whether to print the frame's relative level in the output. PRINT_FRAME_INFO is a flag that indicates whether this function should print the frame information, PRINT_ARGS is a flag that indicates whether to print frame arguments, and PRINT_LOCALS, likewise, with frame local variables. MI_PRINT_ARGS_TYPE is an - element from an internal enumerator from MI that indicates which - values types to print. This parameter is ignored if the output is - detected to be CLI. CLI_PRINT_FRAME_ARGS_TYPE likewise is a an - element of what value types to print from CLI. OUT is the output - stream to print, and COUNT is a delimiter (required for MI - slices). */ -int -apply_frame_filter (struct frame_info *frame, int print_level, - int print_frame_info, int print_args, - int print_locals, int mi_print_args_type, - const char *cli_print_frame_args_type, - struct ui_out *out, int count) + enum from MI that indicates which values types to print. This + parameter is ignored if the output is detected to be CLI. + CLI_PRINT_FRAME_ARGS_TYPE likewise is a an element of what value + types to print from CLI. OUT is the output stream to print, and + COUNT is a delimiter (required for MI slices). */ + +int apply_frame_filter (struct frame_info *frame, int flags, + enum print_values mi_print_args_type, + const char *cli_print_frame_args_type, + struct ui_out *out, int count) { struct gdbarch *gdbarch = get_frame_arch (frame); struct cleanup *cleanups; @@ -1250,6 +1251,13 @@ apply_frame_filter (struct frame_info *frame, int print_level, int print_result = 0; int success = 0; PyObject *iterable; + int print_level, print_frame_info, print_args, print_locals; + + /* Extract print settings from FLAGS. */ + print_level = (flags & PRINT_LEVEL) ? 1 : 0; + print_frame_info = (flags & PRINT_FRAME_INFO) ? 1 : 0; + print_args = (flags & PRINT_ARGS) ? 1 : 0; + print_locals = (flags & PRINT_LOCALS) ? 1 : 0; cleanups = ensure_python_env (gdbarch, current_language); @@ -1319,13 +1327,12 @@ apply_frame_filter (struct frame_info *frame, int print_level, #else /* HAVE_PYTHON */ int -apply_frame_filter (struct frame_info *frame, int print_level, - int print_frame_info, int print_args, - int print_locals, int mi_print_args_type, - const char *cli_print_frame_args_type, - struct ui_out *out, int count) +int apply_frame_filter (struct frame_info *frame, int flags, + enum print_values mi_print_args_type, + const char *cli_print_args_type, + struct ui_out *out, int count) { - return PY_BT_NO_FILTERS + return PY_BT_NO_FILTERS; } #endif /* HAVE_PYTHON */ diff --git a/gdb/python/python.h b/gdb/python/python.h index e06647c..4918757 100644 --- a/gdb/python/python.h +++ b/gdb/python/python.h @@ -21,6 +21,7 @@ #define GDB_PYTHON_H #include "value.h" +#include "mi/mi-cmds.h" struct breakpoint_object; @@ -33,6 +34,23 @@ static const int PY_BT_ERROR = 0; static const int PY_BT_COMPLETED = 1; static const int PY_BT_NO_FILTERS = 2; +/* Flags to pass to apply_frame_filter. */ + +enum frame_filter_flags + { + /* Set this flag if frame level is to be printed. */ + PRINT_LEVEL = 1, + + /* Set this flag if frame information is to be printed. */ + PRINT_FRAME_INFO = 2, + + /* Set this flag if frame arguments are to be printed. */ + PRINT_ARGS = 4, + + /* Set this flag if frame locals are to be printed. */ + PRINT_LOCALS = 8, + }; + extern void finish_python_initialization (void); void eval_python_from_control_command (struct command_line *); @@ -46,9 +64,8 @@ int apply_val_pretty_printer (struct type *type, const gdb_byte *valaddr, const struct value_print_options *options, const struct language_defn *language); -int apply_frame_filter (struct frame_info *frame, int print_level, - int print_frame_info, int print_args, - int print_locals, int mi_print_args_type, +int apply_frame_filter (struct frame_info *frame, int flags, + enum print_values mi_print_args_type, const char *cli_print_args_type, struct ui_out *out, int count); diff --git a/gdb/stack.c b/gdb/stack.c index 368a8c8..46add40 100644 --- a/gdb/stack.c +++ b/gdb/stack.c @@ -1724,16 +1724,17 @@ backtrace_command_1 (char *count_exp, int show_locals, int raw, } if (! raw) - result = apply_frame_filter (trailing, /* frame */ - 1, /* print_level */ - 1, /* print_frame_info */ - 1, /* print_args */ - show_locals, /* print_locals */ - 0, /* mi_print_args_type */ - print_frame_arguments, /* cli_print_args_type */ - current_uiout, /* out */ - count /* count */); + { + int flags = PRINT_LEVEL | PRINT_FRAME_INFO | PRINT_ARGS; + + if (show_locals) + flags |= PRINT_LOCALS; + result = apply_frame_filter (trailing, flags, 0, + print_frame_arguments, + current_uiout, count); + + } /* Run the inbuilt backtrace if there are no filters registered, or if there was an error in the Python backtracing output. */ if (raw || result == PY_BT_ERROR || result == PY_BT_NO_FILTERS) hooks/post-receive -- Repository for Project Archer.