gdb: make get_dyn_prop a method of struct type

Move get_dyn_prop, currently a free function, to be a method on struct
type.

gdb/ChangeLog:

	* gdbtypes.h (struct type) <get_dyn_prop>: New method.
	(get_dyn_prop): Remove.  Update all users to use
	type::dyn_prop.
	* gdbtypes.c (get_dyn_prop): Rename to...
	(type::dyn_prop): ... this.
This commit is contained in:
Simon Marchi 2020-05-07 11:32:25 -04:00
parent d11a9fabab
commit 24e99c6c3c
6 changed files with 32 additions and 27 deletions

View File

@ -1,3 +1,11 @@
2020-05-07 Simon Marchi <simon.marchi@efficios.com>
* gdbtypes.h (struct type) <get_dyn_prop>: New method.
(get_dyn_prop): Remove. Update all users to use
type::dyn_prop.
* gdbtypes.c (get_dyn_prop): Rename to...
(type::dyn_prop): ... this.
2020-05-06 Simon Marchi <simon.marchi@efficios.com>
* gdbtypes.h (struct main_type) <flag_static>: Remove.

View File

@ -2812,7 +2812,7 @@ ada_value_slice_from_ptr (struct value *array_ptr, struct type *type,
= create_static_range_type (NULL, base_index_type, low, high);
struct type *slice_type = create_array_type_with_stride
(NULL, TYPE_TARGET_TYPE (type0), index_type,
get_dyn_prop (DYN_PROP_BYTE_STRIDE, type0),
type0->dyn_prop (DYN_PROP_BYTE_STRIDE),
TYPE_FIELD_BITSIZE (type0, 0));
int base_low = ada_discrete_type_low_bound (TYPE_INDEX_TYPE (type0));
LONGEST base_low_pos, low_pos;
@ -2842,7 +2842,7 @@ ada_value_slice (struct value *array, int low, int high)
= create_static_range_type (NULL, TYPE_INDEX_TYPE (type), low, high);
struct type *slice_type = create_array_type_with_stride
(NULL, TYPE_TARGET_TYPE (type), index_type,
get_dyn_prop (DYN_PROP_BYTE_STRIDE, type),
type->dyn_prop (DYN_PROP_BYTE_STRIDE),
TYPE_FIELD_BITSIZE (type, 0));
LONGEST low_pos, high_pos;

View File

@ -776,13 +776,13 @@ print_record_field_types (struct type *type, struct type *outer_type,
struct ui_file *stream, int show, int level,
const struct type_print_options *flags)
{
struct dynamic_prop *prop = get_dyn_prop (DYN_PROP_VARIANT_PARTS, type);
struct dynamic_prop *prop = type->dyn_prop (DYN_PROP_VARIANT_PARTS);
if (prop != nullptr)
{
if (prop->kind == PROP_TYPE)
{
type = prop->data.original_type;
prop = get_dyn_prop (DYN_PROP_VARIANT_PARTS, type);
prop = type->dyn_prop (DYN_PROP_VARIANT_PARTS);
}
gdb_assert (prop->kind == PROP_VARIANT_PARTS);
print_record_field_types_dynamic (*prop->data.variant_parts,

View File

@ -1188,7 +1188,7 @@ update_static_array_size (struct type *type)
struct type *range_type = TYPE_INDEX_TYPE (type);
if (get_dyn_prop (DYN_PROP_BYTE_STRIDE, type) == nullptr
if (type->dyn_prop (DYN_PROP_BYTE_STRIDE) == nullptr
&& has_static_range (TYPE_RANGE_DATA (range_type))
&& (!type_not_associated (type)
&& !type_not_allocated (type)))
@ -1957,7 +1957,7 @@ stub_noname_complaint (void)
static int
array_type_has_dynamic_stride (struct type *type)
{
struct dynamic_prop *prop = get_dyn_prop (DYN_PROP_BYTE_STRIDE, type);
struct dynamic_prop *prop = type->dyn_prop (DYN_PROP_BYTE_STRIDE);
return (prop != NULL && prop->kind != PROP_CONST);
}
@ -1990,7 +1990,7 @@ is_dynamic_type_internal (struct type *type, int top_level)
if (TYPE_ALLOCATED_PROP (type))
return 1;
struct dynamic_prop *prop = get_dyn_prop (DYN_PROP_VARIANT_PARTS, type);
struct dynamic_prop *prop = type->dyn_prop (DYN_PROP_VARIANT_PARTS);
if (prop != nullptr && prop->kind != PROP_TYPE)
return 1;
@ -2199,7 +2199,7 @@ resolve_dynamic_array_or_string (struct type *type,
else
elt_type = TYPE_TARGET_TYPE (type);
prop = get_dyn_prop (DYN_PROP_BYTE_STRIDE, type);
prop = type->dyn_prop (DYN_PROP_BYTE_STRIDE);
if (prop != NULL)
{
if (dwarf2_evaluate_property (prop, NULL, addr_stack, &value))
@ -2436,8 +2436,7 @@ resolve_dynamic_struct (struct type *type,
resolved_type = copy_type (type);
struct dynamic_prop *variant_prop = get_dyn_prop (DYN_PROP_VARIANT_PARTS,
resolved_type);
dynamic_prop *variant_prop = resolved_type->dyn_prop (DYN_PROP_VARIANT_PARTS);
if (variant_prop != nullptr && variant_prop->kind == PROP_VARIANT_PARTS)
{
compute_variant_fields (type, resolved_type, addr_stack,
@ -2652,10 +2651,10 @@ resolve_dynamic_type (struct type *type,
/* See gdbtypes.h */
struct dynamic_prop *
get_dyn_prop (enum dynamic_prop_node_kind prop_kind, const struct type *type)
dynamic_prop *
type::dyn_prop (dynamic_prop_node_kind prop_kind) const
{
struct dynamic_prop_list *node = TYPE_DYN_PROP_LIST (type);
dynamic_prop_list *node = TYPE_DYN_PROP_LIST (this);
while (node != NULL)
{

View File

@ -339,15 +339,15 @@ DEF_ENUM_FLAGS_TYPE (enum type_instance_flag_value, type_instance_flags);
/* * True if this type is allocatable. */
#define TYPE_IS_ALLOCATABLE(t) \
(get_dyn_prop (DYN_PROP_ALLOCATED, t) != NULL)
((t)->dyn_prop (DYN_PROP_ALLOCATED) != NULL)
/* * True if this type has variant parts. */
#define TYPE_HAS_VARIANT_PARTS(t) \
(get_dyn_prop (DYN_PROP_VARIANT_PARTS, t) != nullptr)
((t)->dyn_prop (DYN_PROP_VARIANT_PARTS) != nullptr)
/* * True if this type has a dynamic length. */
#define TYPE_HAS_DYNAMIC_LENGTH(t) \
(get_dyn_prop (DYN_PROP_BYTE_SIZE, t) != nullptr)
((t)->dyn_prop (DYN_PROP_BYTE_SIZE) != nullptr)
/* * Instruction-space delimited type. This is for Harvard architectures
which have separate instruction and data address spaces (and perhaps
@ -874,6 +874,10 @@ struct main_type
struct type
{
/* * Return the dynamic property of the requested KIND from this type's
list of dynamic properties. */
dynamic_prop *dyn_prop (dynamic_prop_node_kind kind) const;
/* * 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
@ -1433,7 +1437,7 @@ extern bool set_type_align (struct type *, ULONGEST);
/* Property accessors for the type data location. */
#define TYPE_DATA_LOCATION(thistype) \
get_dyn_prop (DYN_PROP_DATA_LOCATION, thistype)
((thistype)->dyn_prop (DYN_PROP_DATA_LOCATION))
#define TYPE_DATA_LOCATION_BATON(thistype) \
TYPE_DATA_LOCATION (thistype)->data.baton
#define TYPE_DATA_LOCATION_ADDR(thistype) \
@ -1441,13 +1445,13 @@ extern bool set_type_align (struct type *, ULONGEST);
#define TYPE_DATA_LOCATION_KIND(thistype) \
TYPE_DATA_LOCATION (thistype)->kind
#define TYPE_DYNAMIC_LENGTH(thistype) \
get_dyn_prop (DYN_PROP_BYTE_SIZE, thistype)
((thistype)->dyn_prop (DYN_PROP_BYTE_SIZE))
/* Property accessors for the type allocated/associated. */
#define TYPE_ALLOCATED_PROP(thistype) \
get_dyn_prop (DYN_PROP_ALLOCATED, thistype)
((thistype)->dyn_prop (DYN_PROP_ALLOCATED))
#define TYPE_ASSOCIATED_PROP(thistype) \
get_dyn_prop (DYN_PROP_ASSOCIATED, thistype)
((thistype)->dyn_prop (DYN_PROP_ASSOCIATED))
/* Attribute accessors for dynamic properties. */
#define TYPE_DYN_PROP_LIST(thistype) \
@ -2093,11 +2097,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);
/* * Return the dynamic property of the requested KIND from TYPE's
list of dynamic properties. */
extern struct dynamic_prop *get_dyn_prop
(enum dynamic_prop_node_kind kind, const struct type *type);
/* * Given a dynamic property PROP of a given KIND, add this dynamic
property to the given TYPE.

View File

@ -708,8 +708,7 @@ rust_print_struct_def (struct type *type, const char *varstring,
if (is_enum)
{
fputs_filtered ("enum ", stream);
struct dynamic_prop *prop = get_dyn_prop (DYN_PROP_VARIANT_PARTS,
type);
dynamic_prop *prop = type->dyn_prop (DYN_PROP_VARIANT_PARTS);
if (prop != nullptr && prop->kind == PROP_TYPE)
type = prop->data.original_type;
}