[1/7] gdb: convert QUAL_* macros into an enum_flags
Checks
| Context |
Check |
Description |
| linaro-tcwg-bot/tcwg_gdb_build--master-arm |
success
|
Build passed
|
| linaro-tcwg-bot/tcwg_gdb_build--master-aarch64 |
success
|
Build passed
|
Commit Message
Replace the QUAL_CONST / QUAL_RESTRICT / QUAL_VOLATILE macros with an
enum plus an enum flags_type. Use it where applicable.
Note that the value stored on the parser's union is the raw enum, not
the enum_flags type. enum_flags has a user-provided default constructor
(to initialize it to 0), which would make the generated YYSTYPE union's
default constructor deleted. The d_qualify helper function accepts the
enum_flags type though.
Change-Id: Ib146f6db66c849ac2f0ee575a98bff7b90d5e17c
---
gdb/cp-name-parser.c | 4 ++--
gdb/cp-name-parser.h | 21 ++++++++++++++-------
gdb/cp-name-parser.y | 11 ++++++-----
3 files changed, 22 insertions(+), 14 deletions(-)
@@ -110,8 +110,8 @@ cpname_state::make_name (const char *name, int len)
may already be qualified; duplicate qualifiers are not created. */
struct demangle_component *
-cpname_state::d_qualify (struct demangle_component *lhs, int qualifiers,
- int is_method)
+cpname_state::d_qualify (struct demangle_component *lhs,
+ qual_flags qualifiers, int is_method)
{
struct demangle_component **inner_p;
enum demangle_component_type type;
@@ -21,16 +21,11 @@
#define GDB_CP_NAME_PARSER_H
#include "demangle.h"
+#include "gdbsupport/enum-flags.h"
union cp_name_parser_YYSTYPE;
struct demangle_parse_info;
-/* Flags passed to cpname_state::d_qualify. */
-
-#define QUAL_CONST 1
-#define QUAL_RESTRICT 2
-#define QUAL_VOLATILE 4
-
/* Flags passed to cpname_state::d_int_type. */
#define INT_CHAR (1 << 0)
@@ -46,6 +41,18 @@ struct demangle_parse_info;
namespace cp_name_parser {
+/* Type qualifiers, passed to cpname_state::d_qualify. */
+
+enum qual_flag
+{
+ QUAL_NONE = 0,
+ QUAL_CONST = 1,
+ QUAL_RESTRICT = 2,
+ QUAL_VOLATILE = 4,
+};
+
+DEF_ENUM_FLAGS_TYPE (enum qual_flag, qual_flags);
+
/* State of an ongoing parse. */
struct cpname_state
@@ -100,7 +107,7 @@ struct cpname_state
struct demangle_component *make_name (const char *name, int len);
struct demangle_component *d_qualify (struct demangle_component *lhs,
- int qualifiers, int is_method);
+ qual_flags qualifiers, int is_method);
struct demangle_component *d_int_type (int flags);
@@ -60,6 +60,7 @@
int fold_flag;
} abstract;
int lval;
+ cp_name_parser::qual_flag qual;
const char *opname;
}
@@ -84,7 +85,7 @@
%type <nested1> nested_name
-%type <lval> qualifier qualifiers qualifiers_opt
+%type <qual> qualifier qualifiers qualifiers_opt
%type <lval> int_part int_seq
@@ -518,16 +519,16 @@ function_arglist: '(' function_args ')' qualifiers_opt %prec NAME
/* Should do something about DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL */
qualifiers_opt : /* epsilon */
- { $$ = 0; }
+ { $$ = cp_name_parser::QUAL_NONE; }
| qualifiers
;
qualifier : RESTRICT
- { $$ = QUAL_RESTRICT; }
+ { $$ = cp_name_parser::QUAL_RESTRICT; }
| VOLATILE_KEYWORD
- { $$ = QUAL_VOLATILE; }
+ { $$ = cp_name_parser::QUAL_VOLATILE; }
| CONST_KEYWORD
- { $$ = QUAL_CONST; }
+ { $$ = cp_name_parser::QUAL_CONST; }
;
qualifiers : qualifier