[RFA] Change frame_filter_flags to use DEF_ENUM_FLAGS_TYPE
Commit Message
This changes frame_filter_flags to use DEF_ENUM_FLAGS_TYPE, and
updates all the uses. It also changes the enum constants to use <<,
as suggested by Sergio.
ChangeLog
2017-04-25 Tom Tromey <tom@tromey.com>
* stack.c (backtrace_command_1): Update.
* python/python-internal.h (gdbpy_apply_frame_filter): Change type
of "flags".
* python/py-framefilter.c (py_print_frame)
(gdbpy_apply_frame_filter): Change type of "flags".
* mi/mi-cmd-stack.c (mi_apply_ext_lang_frame_filter): Change type
of "flags".
(mi_cmd_stack_list_frames, mi_cmd_stack_list_locals)
(mi_cmd_stack_list_args, mi_cmd_stack_list_variables): Update.
* extension.h (enum frame_filter_flag): Rename from
frame_filter_flags.
(frame_filter_flags): Define using DEF_ENUM_FLAGS_TYPE.
(apply_ext_lang_frame_filter): Change type of "flags".
* extension.c (apply_ext_lang_frame_filter): Change type of
"flags".
* extension-priv.h (struct extension_language_ops)
<apply_frame_filter>: Change type of "flags".
---
gdb/ChangeLog | 20 ++++++++++++++++++++
gdb/extension-priv.h | 3 ++-
gdb/extension.c | 3 ++-
gdb/extension.h | 17 ++++++++++-------
gdb/mi/mi-cmd-stack.c | 11 ++++++-----
gdb/python/py-framefilter.c | 4 ++--
gdb/python/python-internal.h | 3 ++-
gdb/stack.c | 2 +-
8 files changed, 45 insertions(+), 18 deletions(-)
Comments
On Thursday, April 27 2017, Tom Tromey wrote:
> This changes frame_filter_flags to use DEF_ENUM_FLAGS_TYPE, and
> updates all the uses. It also changes the enum constants to use <<,
> as suggested by Sergio.
Hey, that's awesome, Tom. Thanks for doing this; also, very good to use
DEF_ENUM_FLAGS_TYPE. This will make it prettier when printing these
values on GDB.
> ChangeLog
> 2017-04-25 Tom Tromey <tom@tromey.com>
>
> * stack.c (backtrace_command_1): Update.
> * python/python-internal.h (gdbpy_apply_frame_filter): Change type
> of "flags".
> * python/py-framefilter.c (py_print_frame)
> (gdbpy_apply_frame_filter): Change type of "flags".
> * mi/mi-cmd-stack.c (mi_apply_ext_lang_frame_filter): Change type
> of "flags".
> (mi_cmd_stack_list_frames, mi_cmd_stack_list_locals)
> (mi_cmd_stack_list_args, mi_cmd_stack_list_variables): Update.
> * extension.h (enum frame_filter_flag): Rename from
> frame_filter_flags.
> (frame_filter_flags): Define using DEF_ENUM_FLAGS_TYPE.
> (apply_ext_lang_frame_filter): Change type of "flags".
> * extension.c (apply_ext_lang_frame_filter): Change type of
> "flags".
> * extension-priv.h (struct extension_language_ops)
> <apply_frame_filter>: Change type of "flags".
> ---
> gdb/ChangeLog | 20 ++++++++++++++++++++
> gdb/extension-priv.h | 3 ++-
> gdb/extension.c | 3 ++-
> gdb/extension.h | 17 ++++++++++-------
> gdb/mi/mi-cmd-stack.c | 11 ++++++-----
> gdb/python/py-framefilter.c | 4 ++--
> gdb/python/python-internal.h | 3 ++-
> gdb/stack.c | 2 +-
> 8 files changed, 45 insertions(+), 18 deletions(-)
>
> diff --git a/gdb/ChangeLog b/gdb/ChangeLog
> index 7571fa9..35a1e81 100644
> --- a/gdb/ChangeLog
> +++ b/gdb/ChangeLog
> @@ -1,3 +1,23 @@
> +2017-04-25 Tom Tromey <tom@tromey.com>
> +
> + * stack.c (backtrace_command_1): Update.
> + * python/python-internal.h (gdbpy_apply_frame_filter): Change type
> + of "flags".
> + * python/py-framefilter.c (py_print_frame)
> + (gdbpy_apply_frame_filter): Change type of "flags".
> + * mi/mi-cmd-stack.c (mi_apply_ext_lang_frame_filter): Change type
> + of "flags".
> + (mi_cmd_stack_list_frames, mi_cmd_stack_list_locals)
> + (mi_cmd_stack_list_args, mi_cmd_stack_list_variables): Update.
> + * extension.h (enum frame_filter_flag): Rename from
> + frame_filter_flags.
> + (frame_filter_flags): Define using DEF_ENUM_FLAGS_TYPE.
> + (apply_ext_lang_frame_filter): Change type of "flags".
> + * extension.c (apply_ext_lang_frame_filter): Change type of
> + "flags".
> + * extension-priv.h (struct extension_language_ops)
> + <apply_frame_filter>: Change type of "flags".
> +
> 2017-04-22 Tom Tromey <tom@tromey.com>
>
> PR python/16497:
> diff --git a/gdb/extension-priv.h b/gdb/extension-priv.h
> index f77f088..05bb850 100644
> --- a/gdb/extension-priv.h
> +++ b/gdb/extension-priv.h
> @@ -202,7 +202,8 @@ struct extension_language_ops
> or SCR_BT_COMPLETED on success. */
> enum ext_lang_bt_status (*apply_frame_filter)
> (const struct extension_language_defn *,
> - struct frame_info *frame, int flags, enum ext_lang_frame_args args_type,
> + struct frame_info *frame, frame_filter_flags flags,
> + enum ext_lang_frame_args args_type,
> struct ui_out *out, int frame_low, int frame_high);
>
> /* Update values held by the extension language when OBJFILE is discarded.
> diff --git a/gdb/extension.c b/gdb/extension.c
> index cfbae2c..4a7bc6e 100644
> --- a/gdb/extension.c
> +++ b/gdb/extension.c
> @@ -553,7 +553,8 @@ apply_ext_lang_val_pretty_printer (struct type *type,
> rather than trying filters in other extension languages. */
>
> enum ext_lang_bt_status
> -apply_ext_lang_frame_filter (struct frame_info *frame, int flags,
> +apply_ext_lang_frame_filter (struct frame_info *frame,
> + frame_filter_flags flags,
> enum ext_lang_frame_args args_type,
> struct ui_out *out,
> int frame_low, int frame_high)
> diff --git a/gdb/extension.h b/gdb/extension.h
> index cda2ebf..a9e3c85 100644
> --- a/gdb/extension.h
> +++ b/gdb/extension.h
> @@ -87,24 +87,26 @@ enum ext_lang_bt_status
>
> /* Flags to pass to apply_extlang_frame_filter. */
>
> -enum frame_filter_flags
> +enum frame_filter_flag
> {
> /* Set this flag if frame level is to be printed. */
> - PRINT_LEVEL = 1,
> + PRINT_LEVEL = 1 << 0,
>
> /* Set this flag if frame information is to be printed. */
> - PRINT_FRAME_INFO = 2,
> + PRINT_FRAME_INFO = 1 << 1,
>
> /* Set this flag if frame arguments are to be printed. */
> - PRINT_ARGS = 4,
> + PRINT_ARGS = 1 << 2,
>
> /* Set this flag if frame locals are to be printed. */
> - PRINT_LOCALS = 8,
> + PRINT_LOCALS = 1 << 3,
>
> /* Set this flag if a "More frames" message is to be printed. */
> - PRINT_MORE_FRAMES = 16,
> + PRINT_MORE_FRAMES = 1 << 4,
> };
>
> +DEF_ENUM_FLAGS_TYPE (enum frame_filter_flag, frame_filter_flags);
> +
> /* A choice of the different frame argument printing strategies that
> can occur in different cases of frame filter instantiation. */
>
> @@ -235,7 +237,8 @@ extern int apply_ext_lang_val_pretty_printer
> const struct language_defn *language);
>
> extern enum ext_lang_bt_status apply_ext_lang_frame_filter
> - (struct frame_info *frame, int flags, enum ext_lang_frame_args args_type,
> + (struct frame_info *frame, frame_filter_flags flags,
> + enum ext_lang_frame_args args_type,
> struct ui_out *out, int frame_low, int frame_high);
>
> extern void preserve_ext_lang_values (struct objfile *, htab_t copied_types);
> diff --git a/gdb/mi/mi-cmd-stack.c b/gdb/mi/mi-cmd-stack.c
> index 6250b75..4b9230e 100644
> --- a/gdb/mi/mi-cmd-stack.c
> +++ b/gdb/mi/mi-cmd-stack.c
> @@ -57,7 +57,8 @@ mi_cmd_enable_frame_filters (const 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)
> @@ -146,7 +147,7 @@ mi_cmd_stack_list_frames (const char *command, char **argv, int argc)
>
> 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
> @@ -262,7 +263,7 @@ mi_cmd_stack_list_locals (const 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);
> @@ -359,7 +360,7 @@ mi_cmd_stack_list_args (const char *command, char **argv, int argc)
>
> 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
> @@ -451,7 +452,7 @@ mi_cmd_stack_list_variables (const 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,
> diff --git a/gdb/python/py-framefilter.c b/gdb/python/py-framefilter.c
> index 9eef81b..22bf3b0 100644
> --- a/gdb/python/py-framefilter.c
> +++ b/gdb/python/py-framefilter.c
> @@ -920,7 +920,7 @@ py_print_args (PyObject *filter,
> on success. It can also throw an exception RETURN_QUIT. */
>
> static enum ext_lang_bt_status
> -py_print_frame (PyObject *filter, int flags,
> +py_print_frame (PyObject *filter, frame_filter_flags flags,
> enum ext_lang_frame_args args_type,
> struct ui_out *out, int indent, htab_t levels_printed)
> {
> @@ -1332,7 +1332,7 @@ bootstrap_python_frame_filters (struct frame_info *frame,
>
> enum ext_lang_bt_status
> gdbpy_apply_frame_filter (const struct extension_language_defn *extlang,
> - struct frame_info *frame, int flags,
> + struct frame_info *frame, frame_filter_flags flags,
> enum ext_lang_frame_args args_type,
> struct ui_out *out, int frame_low, int frame_high)
> {
> diff --git a/gdb/python/python-internal.h b/gdb/python/python-internal.h
> index e84c8d2..b6cca7c 100644
> --- a/gdb/python/python-internal.h
> +++ b/gdb/python/python-internal.h
> @@ -453,7 +453,8 @@ extern enum ext_lang_rc gdbpy_apply_val_pretty_printer
> const struct language_defn *language);
> extern enum ext_lang_bt_status gdbpy_apply_frame_filter
> (const struct extension_language_defn *,
> - struct frame_info *frame, int flags, enum ext_lang_frame_args args_type,
> + struct frame_info *frame, frame_filter_flags flags,
> + enum ext_lang_frame_args args_type,
> struct ui_out *out, int frame_low, int frame_high);
> extern void gdbpy_preserve_values (const struct extension_language_defn *,
> struct objfile *objfile,
> diff --git a/gdb/stack.c b/gdb/stack.c
> index 37e8767..7493eb1 100644
> --- a/gdb/stack.c
> +++ b/gdb/stack.c
> @@ -1797,7 +1797,7 @@ backtrace_command_1 (char *count_exp, int show_locals, int no_filters,
>
> if (! no_filters)
> {
> - int flags = PRINT_LEVEL | PRINT_FRAME_INFO | PRINT_ARGS;
> + frame_filter_flags flags = PRINT_LEVEL | PRINT_FRAME_INFO | PRINT_ARGS;
> enum ext_lang_frame_args arg_type;
>
> if (show_locals)
> --
> 2.9.3
LGTM.
Thanks,
On 04/28/2017 04:43 AM, Sergio Durigan Junior wrote:
> On Thursday, April 27 2017, Tom Tromey wrote:
>
>> This changes frame_filter_flags to use DEF_ENUM_FLAGS_TYPE, and
>> updates all the uses. It also changes the enum constants to use <<,
>> as suggested by Sergio.
>
> Hey, that's awesome, Tom. Thanks for doing this; also, very good to use
> DEF_ENUM_FLAGS_TYPE. This will make it prettier when printing these
> values on GDB.
(and catch misuses at compile time.)
>
> LGTM.
To me too.
Thanks,
Pedro Alves
>>>>> "Pedro" == Pedro Alves <palves@redhat.com> writes:
>> LGTM.
Pedro> To me too.
Thanks for the reviews. I wrote this on top of an earlier patch, so I'm
just going to sit on it until that one is ready.
Tom
@@ -1,3 +1,23 @@
+2017-04-25 Tom Tromey <tom@tromey.com>
+
+ * stack.c (backtrace_command_1): Update.
+ * python/python-internal.h (gdbpy_apply_frame_filter): Change type
+ of "flags".
+ * python/py-framefilter.c (py_print_frame)
+ (gdbpy_apply_frame_filter): Change type of "flags".
+ * mi/mi-cmd-stack.c (mi_apply_ext_lang_frame_filter): Change type
+ of "flags".
+ (mi_cmd_stack_list_frames, mi_cmd_stack_list_locals)
+ (mi_cmd_stack_list_args, mi_cmd_stack_list_variables): Update.
+ * extension.h (enum frame_filter_flag): Rename from
+ frame_filter_flags.
+ (frame_filter_flags): Define using DEF_ENUM_FLAGS_TYPE.
+ (apply_ext_lang_frame_filter): Change type of "flags".
+ * extension.c (apply_ext_lang_frame_filter): Change type of
+ "flags".
+ * extension-priv.h (struct extension_language_ops)
+ <apply_frame_filter>: Change type of "flags".
+
2017-04-22 Tom Tromey <tom@tromey.com>
PR python/16497:
@@ -202,7 +202,8 @@ struct extension_language_ops
or SCR_BT_COMPLETED on success. */
enum ext_lang_bt_status (*apply_frame_filter)
(const struct extension_language_defn *,
- struct frame_info *frame, int flags, enum ext_lang_frame_args args_type,
+ struct frame_info *frame, frame_filter_flags flags,
+ enum ext_lang_frame_args args_type,
struct ui_out *out, int frame_low, int frame_high);
/* Update values held by the extension language when OBJFILE is discarded.
@@ -553,7 +553,8 @@ apply_ext_lang_val_pretty_printer (struct type *type,
rather than trying filters in other extension languages. */
enum ext_lang_bt_status
-apply_ext_lang_frame_filter (struct frame_info *frame, int flags,
+apply_ext_lang_frame_filter (struct frame_info *frame,
+ frame_filter_flags flags,
enum ext_lang_frame_args args_type,
struct ui_out *out,
int frame_low, int frame_high)
@@ -87,24 +87,26 @@ enum ext_lang_bt_status
/* Flags to pass to apply_extlang_frame_filter. */
-enum frame_filter_flags
+enum frame_filter_flag
{
/* Set this flag if frame level is to be printed. */
- PRINT_LEVEL = 1,
+ PRINT_LEVEL = 1 << 0,
/* Set this flag if frame information is to be printed. */
- PRINT_FRAME_INFO = 2,
+ PRINT_FRAME_INFO = 1 << 1,
/* Set this flag if frame arguments are to be printed. */
- PRINT_ARGS = 4,
+ PRINT_ARGS = 1 << 2,
/* Set this flag if frame locals are to be printed. */
- PRINT_LOCALS = 8,
+ PRINT_LOCALS = 1 << 3,
/* Set this flag if a "More frames" message is to be printed. */
- PRINT_MORE_FRAMES = 16,
+ PRINT_MORE_FRAMES = 1 << 4,
};
+DEF_ENUM_FLAGS_TYPE (enum frame_filter_flag, frame_filter_flags);
+
/* A choice of the different frame argument printing strategies that
can occur in different cases of frame filter instantiation. */
@@ -235,7 +237,8 @@ extern int apply_ext_lang_val_pretty_printer
const struct language_defn *language);
extern enum ext_lang_bt_status apply_ext_lang_frame_filter
- (struct frame_info *frame, int flags, enum ext_lang_frame_args args_type,
+ (struct frame_info *frame, frame_filter_flags flags,
+ enum ext_lang_frame_args args_type,
struct ui_out *out, int frame_low, int frame_high);
extern void preserve_ext_lang_values (struct objfile *, htab_t copied_types);
@@ -57,7 +57,8 @@ mi_cmd_enable_frame_filters (const 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)
@@ -146,7 +147,7 @@ mi_cmd_stack_list_frames (const char *command, char **argv, int argc)
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
@@ -262,7 +263,7 @@ mi_cmd_stack_list_locals (const 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);
@@ -359,7 +360,7 @@ mi_cmd_stack_list_args (const char *command, char **argv, int argc)
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
@@ -451,7 +452,7 @@ mi_cmd_stack_list_variables (const 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,
@@ -920,7 +920,7 @@ py_print_args (PyObject *filter,
on success. It can also throw an exception RETURN_QUIT. */
static enum ext_lang_bt_status
-py_print_frame (PyObject *filter, int flags,
+py_print_frame (PyObject *filter, frame_filter_flags flags,
enum ext_lang_frame_args args_type,
struct ui_out *out, int indent, htab_t levels_printed)
{
@@ -1332,7 +1332,7 @@ bootstrap_python_frame_filters (struct frame_info *frame,
enum ext_lang_bt_status
gdbpy_apply_frame_filter (const struct extension_language_defn *extlang,
- struct frame_info *frame, int flags,
+ struct frame_info *frame, frame_filter_flags flags,
enum ext_lang_frame_args args_type,
struct ui_out *out, int frame_low, int frame_high)
{
@@ -453,7 +453,8 @@ extern enum ext_lang_rc gdbpy_apply_val_pretty_printer
const struct language_defn *language);
extern enum ext_lang_bt_status gdbpy_apply_frame_filter
(const struct extension_language_defn *,
- struct frame_info *frame, int flags, enum ext_lang_frame_args args_type,
+ struct frame_info *frame, frame_filter_flags flags,
+ enum ext_lang_frame_args args_type,
struct ui_out *out, int frame_low, int frame_high);
extern void gdbpy_preserve_values (const struct extension_language_defn *,
struct objfile *objfile,
@@ -1797,7 +1797,7 @@ backtrace_command_1 (char *count_exp, int show_locals, int no_filters,
if (! no_filters)
{
- int flags = PRINT_LEVEL | PRINT_FRAME_INFO | PRINT_ARGS;
+ frame_filter_flags flags = PRINT_LEVEL | PRINT_FRAME_INFO | PRINT_ARGS;
enum ext_lang_frame_args arg_type;
if (show_locals)