From: Simon Marchi Date: Thu, 7 May 2020 15:32:25 +0000 (-0400) Subject: gdb: make get_dyn_prop a method of struct type X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=24e99c6c3c78e38a9919c9f8e8b831713f8303a3;p=binutils-gdb.git 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) : 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. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 1eb8c111c69..e295fd1d65a 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,11 @@ +2020-05-07 Simon Marchi + + * gdbtypes.h (struct type) : 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 * gdbtypes.h (struct main_type) : Remove. diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c index bfbc69084ec..be26231524d 100644 --- a/gdb/ada-lang.c +++ b/gdb/ada-lang.c @@ -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; diff --git a/gdb/ada-typeprint.c b/gdb/ada-typeprint.c index 83972fe125d..7ef8bd5ef9e 100644 --- a/gdb/ada-typeprint.c +++ b/gdb/ada-typeprint.c @@ -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, diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c index 9a6a6dd74b1..715db0772b7 100644 --- a/gdb/gdbtypes.c +++ b/gdb/gdbtypes.c @@ -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) { diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h index d9bfa56cc45..2845b71906a 100644 --- a/gdb/gdbtypes.h +++ b/gdb/gdbtypes.h @@ -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. diff --git a/gdb/rust-lang.c b/gdb/rust-lang.c index 20661e48d96..f2fb0119b00 100644 --- a/gdb/rust-lang.c +++ b/gdb/rust-lang.c @@ -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; }