diff options
author | Simon Marchi <simon.marchi@ericsson.com> | 2015-11-17 13:31:29 +0000 |
---|---|---|
committer | Pedro Alves <palves@redhat.com> | 2015-11-17 13:31:29 +0000 |
commit | 0c801b966379f7826fdd793b26ae879c2edf78d1 (patch) | |
tree | 7fbfb4292f6c342d0e0902a9d744c338355fa100 | |
parent | 8d297bbf604c8318ffc72d5a7b3db654409c5ed9 (diff) | |
download | gdb-0c801b966379f7826fdd793b26ae879c2edf78d1.zip gdb-0c801b966379f7826fdd793b26ae879c2edf78d1.tar.gz gdb-0c801b966379f7826fdd793b26ae879c2edf78d1.tar.bz2 |
Convert c_string_type to an enum flags type
c_string_type contains values meant to be OR'ed together (even though
some bits are mutually exclusive), so it makes sense to make it an
enum flags type.
gdb/ChangeLog:
2015-11-17 Simon Marchi <simon.marchi@ericsson.com>
* c-exp.y (exp): Adjust, change enum c_string_type to
c_string_type.
(parse_string_or_char): Likewise.
* c-lang.c (charset_for_string_type): Likewise.
(classify_type): Likewise.
(c_printchar): Likewise.
(c_printstr): Likewise.
(evaluate_subexp_c): Likewise. And change cast to enum
c_string_type_values.
* c-lang.h: Include "common/enum_flags.h".
(enum c_string_type): Rename to...
(enum c_string_type_values): ...this.
(c_string_type): Define new enum flags type.
-rw-r--r-- | gdb/ChangeLog | 16 | ||||
-rw-r--r-- | gdb/c-exp.y | 6 | ||||
-rw-r--r-- | gdb/c-lang.c | 17 | ||||
-rw-r--r-- | gdb/c-lang.h | 5 |
4 files changed, 31 insertions, 13 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 1c6cc7d..a5a752c 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,19 @@ +2015-11-17 Simon Marchi <simon.marchi@ericsson.com> + + * c-exp.y (exp): Adjust, change enum c_string_type to + c_string_type. + (parse_string_or_char): Likewise. + * c-lang.c (charset_for_string_type): Likewise. + (classify_type): Likewise. + (c_printchar): Likewise. + (c_printstr): Likewise. + (evaluate_subexp_c): Likewise. And change cast to enum + c_string_type_values. + * c-lang.h: Include "common/enum_flags.h". + (enum c_string_type): Rename to... + (enum c_string_type_values): ...this. + (c_string_type): Define new enum flags type. + 2015-11-17 Pedro Alves <palves@redhat.com> * btrace.h: Include common/enum-flags.h. diff --git a/gdb/c-exp.y b/gdb/c-exp.y index f2de0ae..9127756 100644 --- a/gdb/c-exp.y +++ b/gdb/c-exp.y @@ -864,7 +864,7 @@ string_exp: exp : string_exp { int i; - enum c_string_type type = C_STRING; + c_string_type type = C_STRING; for (i = 0; i < $1.len; ++i) { @@ -878,7 +878,7 @@ exp : string_exp if (type != C_STRING && type != $1.tokens[i].type) error (_("Undefined string concatenation.")); - type = (enum c_string_type) $1.tokens[i].type; + type = (enum c_string_type_values) $1.tokens[i].type; break; default: /* internal error */ @@ -2164,7 +2164,7 @@ parse_string_or_char (const char *tokptr, const char **outptr, struct typed_stoken *value, int *host_chars) { int quote; - enum c_string_type type; + c_string_type type; int is_objc = 0; /* Build the gdb internal form of the input string in tempbuf. Note diff --git a/gdb/c-lang.c b/gdb/c-lang.c index 384783c..2646b05 100644 --- a/gdb/c-lang.c +++ b/gdb/c-lang.c @@ -41,8 +41,7 @@ extern void _initialize_c_language (void); character set name. */ static const char * -charset_for_string_type (enum c_string_type str_type, - struct gdbarch *gdbarch) +charset_for_string_type (c_string_type str_type, struct gdbarch *gdbarch) { switch (str_type & ~C_CHAR) { @@ -72,11 +71,11 @@ charset_for_string_type (enum c_string_type str_type, characters of this type in target BYTE_ORDER to the host character set. */ -static enum c_string_type +static c_string_type classify_type (struct type *elttype, struct gdbarch *gdbarch, const char **encoding) { - enum c_string_type result; + c_string_type result; /* We loop because ELTTYPE may be a typedef, and we want to successively peel each typedef until we reach a type we @@ -155,7 +154,7 @@ c_emit_char (int c, struct type *type, void c_printchar (int c, struct type *type, struct ui_file *stream) { - enum c_string_type str_type; + c_string_type str_type; str_type = classify_type (type, get_type_arch (type), NULL); switch (str_type) @@ -191,7 +190,7 @@ c_printstr (struct ui_file *stream, struct type *type, const char *user_encoding, int force_ellipses, const struct value_print_options *options) { - enum c_string_type str_type; + c_string_type str_type; const char *type_encoding; const char *encoding; @@ -577,7 +576,7 @@ evaluate_subexp_c (struct type *expect_type, struct expression *exp, struct obstack output; struct cleanup *cleanup; struct value *result; - enum c_string_type dest_type; + c_string_type dest_type; const char *dest_charset; int satisfy_expected = 0; @@ -589,8 +588,8 @@ evaluate_subexp_c (struct type *expect_type, struct expression *exp, ++*pos; limit = *pos + BYTES_TO_EXP_ELEM (oplen + 1); - dest_type - = (enum c_string_type) longest_to_int (exp->elts[*pos].longconst); + dest_type = ((enum c_string_type_values) + longest_to_int (exp->elts[*pos].longconst)); switch (dest_type & ~C_CHAR) { case C_STRING: diff --git a/gdb/c-lang.h b/gdb/c-lang.h index 5e30481..b921cf4 100644 --- a/gdb/c-lang.h +++ b/gdb/c-lang.h @@ -29,12 +29,13 @@ struct parser_state; #include "value.h" #include "macroexp.h" #include "parser-defs.h" +#include "common/enum-flags.h" /* The various kinds of C string and character. Note that these values are chosen so that they may be or'd together in certain ways. */ -enum c_string_type +enum c_string_type_values { /* An ordinary string: "value". */ C_STRING = 0, @@ -56,6 +57,8 @@ enum c_string_type C_CHAR_32 = 7 }; +DEF_ENUM_FLAGS_TYPE (enum c_string_type_values, c_string_type); + /* Defined in c-exp.y. */ extern int c_parse (struct parser_state *); |