gdb: make remove_dyn_prop a method of struct type

Move remove_dyn_prop, currently a free function, to be a method of
struct type.

gdb/ChangeLog:

	* gdbtypes.h (struct type) <remove_dyn_prop>: New method.
	(remove_dyn_prop): Remove.  Update all users to use
	type::remove_dyn_prop.
	* gdbtypes.c (remove_dyn_prop): Rename to...
	(type::remove_dyn_prop): ... this.
This commit is contained in:
Simon Marchi 2020-05-07 11:08:54 -04:00
parent 5c54719c22
commit 7aa9131366
4 changed files with 19 additions and 12 deletions

View File

@ -1,3 +1,11 @@
2020-05-07 Simon Marchi <simon.marchi@efficios.com>
* gdbtypes.h (struct type) <remove_dyn_prop>: New method.
(remove_dyn_prop): Remove. Update all users to use
type::remove_dyn_prop.
* gdbtypes.c (remove_dyn_prop): Rename to...
(type::remove_dyn_prop): ... this.
2020-05-07 Simon Marchi via Gdb-patches <gdb-patches@sourceware.org>
* gdbtypes.h (struct type) <add_dyn_prop>: New method.

View File

@ -2204,7 +2204,7 @@ resolve_dynamic_array_or_string (struct type *type,
{
if (dwarf2_evaluate_property (prop, NULL, addr_stack, &value))
{
remove_dyn_prop (DYN_PROP_BYTE_STRIDE, type);
type->remove_dyn_prop (DYN_PROP_BYTE_STRIDE);
bit_stride = (unsigned int) (value * 8);
}
else
@ -2621,7 +2621,7 @@ resolve_dynamic_type_internal (struct type *type,
if (type_length.has_value ())
{
TYPE_LENGTH (resolved_type) = *type_length;
remove_dyn_prop (DYN_PROP_BYTE_SIZE, resolved_type);
resolved_type->remove_dyn_prop (DYN_PROP_BYTE_SIZE);
}
/* Resolve data_location attribute. */
@ -2683,27 +2683,26 @@ type::add_dyn_prop (dynamic_prop_node_kind prop_kind, dynamic_prop prop)
TYPE_DYN_PROP_LIST (this) = temp;
}
/* Remove dynamic property from TYPE in case it exists. */
/* See gdbtypes.h. */
void
remove_dyn_prop (enum dynamic_prop_node_kind prop_kind,
struct type *type)
type::remove_dyn_prop (dynamic_prop_node_kind kind)
{
struct dynamic_prop_list *prev_node, *curr_node;
curr_node = TYPE_DYN_PROP_LIST (type);
curr_node = TYPE_DYN_PROP_LIST (this);
prev_node = NULL;
while (NULL != curr_node)
{
if (curr_node->prop_kind == prop_kind)
if (curr_node->prop_kind == kind)
{
/* Update the linked list but don't free anything.
The property was allocated on objstack and it is not known
if we are on top of it. Nevertheless, everything is released
when the complete objstack is freed. */
if (NULL == prev_node)
TYPE_DYN_PROP_LIST (type) = curr_node->next;
TYPE_DYN_PROP_LIST (this) = curr_node->next;
else
prev_node->next = curr_node->next;

View File

@ -884,6 +884,9 @@ struct type
This function assumes that this type is objfile-owned. */
void add_dyn_prop (dynamic_prop_node_kind kind, dynamic_prop prop);
/* * Remove dynamic property of kind KIND from this type, if it exists. */
void remove_dyn_prop (dynamic_prop_node_kind kind);
/* * Type that is a pointer to this type.
NULL if no such pointer-to type is known yet.
The debugger may add the address of such a type
@ -2103,9 +2106,6 @@ extern struct type *resolve_dynamic_type
/* * Predicate if the type has dynamic values, which are not resolved yet. */
extern int is_dynamic_type (struct type *type);
extern void remove_dyn_prop (enum dynamic_prop_node_kind prop_kind,
struct type *type);
extern struct type *check_typedef (struct type *);
extern void check_stub_method_group (struct type *, int);

View File

@ -2291,7 +2291,7 @@ set_internalvar (struct internalvar *var, struct value *val)
when accessing the value.
If we keep it, we would still refer to the origin value.
Remove the location property in case it exist. */
remove_dyn_prop (DYN_PROP_DATA_LOCATION, value_type (new_data.value));
value_type (new_data.value)->remove_dyn_prop (DYN_PROP_DATA_LOCATION);
break;
}