* [PATCH 2/4] gdb: remove TYPE_DECLARED_CLASS
2021-03-24 14:01 [PATCH 1/4] gdb: add type::is_declared_class / type::set_is_declared_class Simon Marchi
@ 2021-03-24 14:01 ` Simon Marchi
2021-03-24 14:01 ` [PATCH 3/4] gdb: add type::is_flag_enum / type::set_is_flag_enum Simon Marchi
` (2 subsequent siblings)
3 siblings, 0 replies; 6+ messages in thread
From: Simon Marchi @ 2021-03-24 14:01 UTC (permalink / raw)
To: gdb-patches; +Cc: Simon Marchi
gdb/ChangeLog:
* gdbtypes.h (TYPE_DECLARED_CLASS): Remove, replace all uses
with type::is_declared_class.
Change-Id: Ifecb2342417ecd7bf570c3205344b09d706daab2
---
gdb/c-exp.y | 2 +-
gdb/c-typeprint.c | 8 ++++----
gdb/compile/compile-cplus-types.c | 6 +++---
gdb/d-exp.y | 2 +-
gdb/dwarf2/read.c | 2 +-
gdb/gdbtypes.c | 6 +++---
gdb/gdbtypes.h | 8 --------
gdb/valops.c | 2 +-
8 files changed, 14 insertions(+), 22 deletions(-)
diff --git a/gdb/c-exp.y b/gdb/c-exp.y
index c0e4b494f3d..d6a2322dbf6 100644
--- a/gdb/c-exp.y
+++ b/gdb/c-exp.y
@@ -1879,7 +1879,7 @@ type_aggregate_p (struct type *type)
|| type->code () == TYPE_CODE_UNION
|| type->code () == TYPE_CODE_NAMESPACE
|| (type->code () == TYPE_CODE_ENUM
- && TYPE_DECLARED_CLASS (type)));
+ && type->is_declared_class ()));
}
/* Validate a parameter typelist. */
diff --git a/gdb/c-typeprint.c b/gdb/c-typeprint.c
index b861aafbdc9..f81f1c2c113 100644
--- a/gdb/c-typeprint.c
+++ b/gdb/c-typeprint.c
@@ -965,7 +965,7 @@ output_access_specifier (struct ui_file *stream,
static bool
need_access_label_p (struct type *type)
{
- if (TYPE_DECLARED_CLASS (type))
+ if (type->is_declared_class ())
{
QUIT;
for (int i = TYPE_N_BASECLASSES (type); i < type->num_fields (); i++)
@@ -1061,7 +1061,7 @@ c_type_print_base_struct_union (struct type *type, struct ui_file *stream,
c_type_print_modifier (type, stream, 0, 1, language);
if (type->code () == TYPE_CODE_UNION)
fprintf_filtered (stream, "union ");
- else if (TYPE_DECLARED_CLASS (type))
+ else if (type->is_declared_class ())
fprintf_filtered (stream, "class ");
else
fprintf_filtered (stream, "struct ");
@@ -1499,7 +1499,7 @@ c_type_print_base_1 (struct type *type, struct ui_file *stream,
fprintf_filtered (stream, "union ");
else if (type->code () == TYPE_CODE_STRUCT)
{
- if (TYPE_DECLARED_CLASS (type))
+ if (type->is_declared_class ())
fprintf_filtered (stream, "class ");
else
fprintf_filtered (stream, "struct ");
@@ -1552,7 +1552,7 @@ c_type_print_base_1 (struct type *type, struct ui_file *stream,
case TYPE_CODE_ENUM:
c_type_print_modifier (type, stream, 0, 1, language);
fprintf_filtered (stream, "enum ");
- if (TYPE_DECLARED_CLASS (type))
+ if (type->is_declared_class ())
fprintf_filtered (stream, "class ");
/* Print the tag name if it exists.
The aCC compiler emits a spurious
diff --git a/gdb/compile/compile-cplus-types.c b/gdb/compile/compile-cplus-types.c
index d666ac3a83e..71ad6791e1d 100644
--- a/gdb/compile/compile-cplus-types.c
+++ b/gdb/compile/compile-cplus-types.c
@@ -91,7 +91,7 @@ get_method_access_flag (const struct type *type, int fni, int num)
gdb_assert (type->code () == TYPE_CODE_STRUCT);
/* If this type was not declared a class, everything is public. */
- if (!TYPE_DECLARED_CLASS (type))
+ if (!type->is_declared_class ())
return GCC_CP_ACCESS_PUBLIC;
/* Otherwise, read accessibility from the fn_field. */
@@ -828,11 +828,11 @@ compile_cplus_convert_struct_or_union (compile_cplus_instance *instance,
gcc_decl resuld;
if (type->code () == TYPE_CODE_STRUCT)
{
- const char *what = TYPE_DECLARED_CLASS (type) ? "struct" : "class";
+ const char *what = type->is_declared_class () ? "class" : "struct";
resuld = instance->plugin ().build_decl
(what, name.get (), (GCC_CP_SYMBOL_CLASS | nested_access
- | (TYPE_DECLARED_CLASS (type)
+ | (type->is_declared_class ()
? GCC_CP_FLAG_CLASS_NOFLAG
: GCC_CP_FLAG_CLASS_IS_STRUCT)),
0, nullptr, 0, filename, line);
diff --git a/gdb/d-exp.y b/gdb/d-exp.y
index 90c342e0e21..20884baebba 100644
--- a/gdb/d-exp.y
+++ b/gdb/d-exp.y
@@ -640,7 +640,7 @@ type_aggregate_p (struct type *type)
|| type->code () == TYPE_CODE_UNION
|| type->code () == TYPE_CODE_MODULE
|| (type->code () == TYPE_CODE_ENUM
- && TYPE_DECLARED_CLASS (type)));
+ && type->is_declared_class ()));
}
/* Take care of parsing a number (anything that starts with a digit).
diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c
index 43669df3cc8..774fe14914e 100644
--- a/gdb/dwarf2/read.c
+++ b/gdb/dwarf2/read.c
@@ -23305,7 +23305,7 @@ determine_prefix (struct die_info *die, struct dwarf2_cu *cu)
return determine_prefix (parent, cu);
case DW_TAG_enumeration_type:
parent_type = read_type_die (parent, cu);
- if (TYPE_DECLARED_CLASS (parent_type))
+ if (parent_type->is_declared_class ())
{
if (parent_type->name () != NULL)
return parent_type->name ();
diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c
index 1b2d4836959..5a20e7e16ca 100644
--- a/gdb/gdbtypes.c
+++ b/gdb/gdbtypes.c
@@ -4507,7 +4507,7 @@ rank_one_type_parm_int (struct type *parm, struct type *arg, struct value *value
case TYPE_CODE_CHAR:
case TYPE_CODE_RANGE:
case TYPE_CODE_BOOL:
- if (TYPE_DECLARED_CLASS (arg))
+ if (arg->is_declared_class ())
return INCOMPATIBLE_TYPE_BADNESS;
return INTEGER_PROMOTION_BADNESS;
case TYPE_CODE_FLT:
@@ -4531,7 +4531,7 @@ rank_one_type_parm_enum (struct type *parm, struct type *arg, struct value *valu
case TYPE_CODE_RANGE:
case TYPE_CODE_BOOL:
case TYPE_CODE_ENUM:
- if (TYPE_DECLARED_CLASS (parm) || TYPE_DECLARED_CLASS (arg))
+ if (parm->is_declared_class () || arg->is_declared_class ())
return INCOMPATIBLE_TYPE_BADNESS;
return INTEGER_CONVERSION_BADNESS;
case TYPE_CODE_FLT:
@@ -4551,7 +4551,7 @@ rank_one_type_parm_char (struct type *parm, struct type *arg, struct value *valu
case TYPE_CODE_RANGE:
case TYPE_CODE_BOOL:
case TYPE_CODE_ENUM:
- if (TYPE_DECLARED_CLASS (arg))
+ if (arg->is_declared_class ())
return INCOMPATIBLE_TYPE_BADNESS;
return INTEGER_CONVERSION_BADNESS;
case TYPE_CODE_FLT:
diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h
index 7444e7ad239..9677d068ee1 100644
--- a/gdb/gdbtypes.h
+++ b/gdb/gdbtypes.h
@@ -220,14 +220,6 @@ DEF_ENUM_FLAGS_TYPE (enum type_instance_flag_value, type_instance_flags);
#define TYPE_NOTTEXT(t) (((t)->instance_flags ()) & TYPE_INSTANCE_FLAG_NOTTEXT)
-/* * True if this type was declared using the "class" keyword. This is
- only valid for C++ structure and enum types. If false, a structure
- was declared as a "struct"; if true it was declared "class". For
- enum types, this is true when "enum class" or "enum struct" was
- used to declare the type.. */
-
-#define TYPE_DECLARED_CLASS(t) ((t)->declared_class ())
-
/* * True if this type is a "flag" enum. A flag enum is one where all
the values are pairwise disjoint when "and"ed together. This
affects how enum values are printed. */
diff --git a/gdb/valops.c b/gdb/valops.c
index fec821ad932..d22c8c0a2e6 100644
--- a/gdb/valops.c
+++ b/gdb/valops.c
@@ -3312,7 +3312,7 @@ enum_constant_from_type (struct type *type, const char *name)
int name_len = strlen (name);
gdb_assert (type->code () == TYPE_CODE_ENUM
- && TYPE_DECLARED_CLASS (type));
+ && type->is_declared_class ());
for (i = TYPE_N_BASECLASSES (type); i < type->num_fields (); ++i)
{
--
2.30.0
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 3/4] gdb: add type::is_flag_enum / type::set_is_flag_enum
2021-03-24 14:01 [PATCH 1/4] gdb: add type::is_declared_class / type::set_is_declared_class Simon Marchi
2021-03-24 14:01 ` [PATCH 2/4] gdb: remove TYPE_DECLARED_CLASS Simon Marchi
@ 2021-03-24 14:01 ` Simon Marchi
2021-03-24 14:01 ` [PATCH 4/4] gdb: remove TYPE_FLAG_ENUM Simon Marchi
2021-04-01 18:04 ` [PATCH 1/4] gdb: add type::is_declared_class / type::set_is_declared_class Tom Tromey
3 siblings, 0 replies; 6+ messages in thread
From: Simon Marchi @ 2021-03-24 14:01 UTC (permalink / raw)
To: gdb-patches; +Cc: Simon Marchi
Add the `is_flag_enum` and `set_is_flag_enum` methods on `struct type`,
in order to remove the `TYPE_FLAG_ENUM` macro. In this patch, the macro
is changed to use the getter, so all the call sites of the macro that
are used as a setter are changed to use the setter method directly. The
next patch will remove the macro completely.
gdb/ChangeLog:
* gdbtypes.h (struct type) <is_flag_enum,
set_is_flag_enum>: New methods.
(TYPE_FLAG_ENUM): Use type::is_flag_enum, change all
write call sites to use type::set_is_flag_enum.
Change-Id: I9c56c91626c8d784947ba94fcb97818526b81d1c
---
gdb/dwarf2/read.c | 2 +-
gdb/gdbtypes.h | 22 ++++++++++++++++------
2 files changed, 17 insertions(+), 7 deletions(-)
diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c
index 774fe14914e..be364bfed83 100644
--- a/gdb/dwarf2/read.c
+++ b/gdb/dwarf2/read.c
@@ -16675,7 +16675,7 @@ update_enumeration_type_from_children (struct die_info *die,
type->set_is_unsigned (true);
if (flag_enum)
- TYPE_FLAG_ENUM (type) = 1;
+ type->set_is_flag_enum (true);
}
/* Given a DW_AT_enumeration_type die, set its type. We do not
diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h
index 9677d068ee1..52c17532692 100644
--- a/gdb/gdbtypes.h
+++ b/gdb/gdbtypes.h
@@ -220,11 +220,7 @@ DEF_ENUM_FLAGS_TYPE (enum type_instance_flag_value, type_instance_flags);
#define TYPE_NOTTEXT(t) (((t)->instance_flags ()) & TYPE_INSTANCE_FLAG_NOTTEXT)
-/* * True if this type is a "flag" enum. A flag enum is one where all
- the values are pairwise disjoint when "and"ed together. This
- affects how enum values are printed. */
-
-#define TYPE_FLAG_ENUM(t) (TYPE_MAIN_TYPE (t)->flag_flag_enum)
+#define TYPE_FLAG_ENUM(t) ((t)->is_flag_enum ())
/* * Constant type. If this is set, the corresponding type has a
const modifier. */
@@ -812,7 +808,7 @@ struct main_type
/* * True if this is an enum type with disjoint values. This
affects how the enum is printed. */
- unsigned int flag_flag_enum : 1;
+ unsigned int m_flag_flag_enum : 1;
/* * A discriminant telling us which field of the type_specific
union is being used for this type, if any. */
@@ -1196,6 +1192,20 @@ struct type
this->main_type->m_flag_declared_class = is_declared_class;
}
+ /* True if this type is a "flag" enum. A flag enum is one where all
+ the values are pairwise disjoint when "and"ed together. This
+ affects how enum values are printed. */
+
+ bool is_flag_enum () const
+ {
+ return this->main_type->m_flag_flag_enum;
+ }
+
+ void set_is_flag_enum (bool is_flag_enum)
+ {
+ this->main_type->m_flag_flag_enum = is_flag_enum;
+ }
+
/* * Assuming that THIS is a TYPE_CODE_FIXED_POINT, return a reference
to this type's fixed_point_info. */
--
2.30.0
^ permalink raw reply [flat|nested] 6+ messages in thread