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.
This commit is contained in:
parent
8d297bbf60
commit
0c801b9663
4 changed files with 31 additions and 13 deletions
|
@ -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>
|
2015-11-17 Pedro Alves <palves@redhat.com>
|
||||||
|
|
||||||
* btrace.h: Include common/enum-flags.h.
|
* btrace.h: Include common/enum-flags.h.
|
||||||
|
|
|
@ -864,7 +864,7 @@ string_exp:
|
||||||
exp : string_exp
|
exp : string_exp
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
enum c_string_type type = C_STRING;
|
c_string_type type = C_STRING;
|
||||||
|
|
||||||
for (i = 0; i < $1.len; ++i)
|
for (i = 0; i < $1.len; ++i)
|
||||||
{
|
{
|
||||||
|
@ -878,7 +878,7 @@ exp : string_exp
|
||||||
if (type != C_STRING
|
if (type != C_STRING
|
||||||
&& type != $1.tokens[i].type)
|
&& type != $1.tokens[i].type)
|
||||||
error (_("Undefined string concatenation."));
|
error (_("Undefined string concatenation."));
|
||||||
type = (enum c_string_type) $1.tokens[i].type;
|
type = (enum c_string_type_values) $1.tokens[i].type;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
/* internal error */
|
/* internal error */
|
||||||
|
@ -2164,7 +2164,7 @@ parse_string_or_char (const char *tokptr, const char **outptr,
|
||||||
struct typed_stoken *value, int *host_chars)
|
struct typed_stoken *value, int *host_chars)
|
||||||
{
|
{
|
||||||
int quote;
|
int quote;
|
||||||
enum c_string_type type;
|
c_string_type type;
|
||||||
int is_objc = 0;
|
int is_objc = 0;
|
||||||
|
|
||||||
/* Build the gdb internal form of the input string in tempbuf. Note
|
/* Build the gdb internal form of the input string in tempbuf. Note
|
||||||
|
|
17
gdb/c-lang.c
17
gdb/c-lang.c
|
@ -41,8 +41,7 @@ extern void _initialize_c_language (void);
|
||||||
character set name. */
|
character set name. */
|
||||||
|
|
||||||
static const char *
|
static const char *
|
||||||
charset_for_string_type (enum c_string_type str_type,
|
charset_for_string_type (c_string_type str_type, struct gdbarch *gdbarch)
|
||||||
struct gdbarch *gdbarch)
|
|
||||||
{
|
{
|
||||||
switch (str_type & ~C_CHAR)
|
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
|
characters of this type in target BYTE_ORDER to the host character
|
||||||
set. */
|
set. */
|
||||||
|
|
||||||
static enum c_string_type
|
static c_string_type
|
||||||
classify_type (struct type *elttype, struct gdbarch *gdbarch,
|
classify_type (struct type *elttype, struct gdbarch *gdbarch,
|
||||||
const char **encoding)
|
const char **encoding)
|
||||||
{
|
{
|
||||||
enum c_string_type result;
|
c_string_type result;
|
||||||
|
|
||||||
/* We loop because ELTTYPE may be a typedef, and we want to
|
/* We loop because ELTTYPE may be a typedef, and we want to
|
||||||
successively peel each typedef until we reach a type we
|
successively peel each typedef until we reach a type we
|
||||||
|
@ -155,7 +154,7 @@ c_emit_char (int c, struct type *type,
|
||||||
void
|
void
|
||||||
c_printchar (int c, struct type *type, struct ui_file *stream)
|
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);
|
str_type = classify_type (type, get_type_arch (type), NULL);
|
||||||
switch (str_type)
|
switch (str_type)
|
||||||
|
@ -191,7 +190,7 @@ c_printstr (struct ui_file *stream, struct type *type,
|
||||||
const char *user_encoding, int force_ellipses,
|
const char *user_encoding, int force_ellipses,
|
||||||
const struct value_print_options *options)
|
const struct value_print_options *options)
|
||||||
{
|
{
|
||||||
enum c_string_type str_type;
|
c_string_type str_type;
|
||||||
const char *type_encoding;
|
const char *type_encoding;
|
||||||
const char *encoding;
|
const char *encoding;
|
||||||
|
|
||||||
|
@ -577,7 +576,7 @@ evaluate_subexp_c (struct type *expect_type, struct expression *exp,
|
||||||
struct obstack output;
|
struct obstack output;
|
||||||
struct cleanup *cleanup;
|
struct cleanup *cleanup;
|
||||||
struct value *result;
|
struct value *result;
|
||||||
enum c_string_type dest_type;
|
c_string_type dest_type;
|
||||||
const char *dest_charset;
|
const char *dest_charset;
|
||||||
int satisfy_expected = 0;
|
int satisfy_expected = 0;
|
||||||
|
|
||||||
|
@ -589,8 +588,8 @@ evaluate_subexp_c (struct type *expect_type, struct expression *exp,
|
||||||
|
|
||||||
++*pos;
|
++*pos;
|
||||||
limit = *pos + BYTES_TO_EXP_ELEM (oplen + 1);
|
limit = *pos + BYTES_TO_EXP_ELEM (oplen + 1);
|
||||||
dest_type
|
dest_type = ((enum c_string_type_values)
|
||||||
= (enum c_string_type) longest_to_int (exp->elts[*pos].longconst);
|
longest_to_int (exp->elts[*pos].longconst));
|
||||||
switch (dest_type & ~C_CHAR)
|
switch (dest_type & ~C_CHAR)
|
||||||
{
|
{
|
||||||
case C_STRING:
|
case C_STRING:
|
||||||
|
|
|
@ -29,12 +29,13 @@ struct parser_state;
|
||||||
#include "value.h"
|
#include "value.h"
|
||||||
#include "macroexp.h"
|
#include "macroexp.h"
|
||||||
#include "parser-defs.h"
|
#include "parser-defs.h"
|
||||||
|
#include "common/enum-flags.h"
|
||||||
|
|
||||||
|
|
||||||
/* The various kinds of C string and character. Note that these
|
/* The various kinds of C string and character. Note that these
|
||||||
values are chosen so that they may be or'd together in certain
|
values are chosen so that they may be or'd together in certain
|
||||||
ways. */
|
ways. */
|
||||||
enum c_string_type
|
enum c_string_type_values
|
||||||
{
|
{
|
||||||
/* An ordinary string: "value". */
|
/* An ordinary string: "value". */
|
||||||
C_STRING = 0,
|
C_STRING = 0,
|
||||||
|
@ -56,6 +57,8 @@ enum c_string_type
|
||||||
C_CHAR_32 = 7
|
C_CHAR_32 = 7
|
||||||
};
|
};
|
||||||
|
|
||||||
|
DEF_ENUM_FLAGS_TYPE (enum c_string_type_values, c_string_type);
|
||||||
|
|
||||||
/* Defined in c-exp.y. */
|
/* Defined in c-exp.y. */
|
||||||
|
|
||||||
extern int c_parse (struct parser_state *);
|
extern int c_parse (struct parser_state *);
|
||||||
|
|
Loading…
Reference in a new issue