diff options
author | Simon Marchi <simon.marchi@polymtl.ca> | 2017-12-05 16:30:25 -0500 |
---|---|---|
committer | Simon Marchi <simon.marchi@ericsson.com> | 2017-12-05 16:30:25 -0500 |
commit | 53c934e9fed9a35542661690e4e71febcbebb539 (patch) | |
tree | 62e0cdfb7ab0a8ddc57e4905e7aae92d5bd7048a | |
parent | a8142ee195063e8c7202429e80ee58185c34b3fc (diff) | |
download | fsf-binutils-gdb-53c934e9fed9a35542661690e4e71febcbebb539.zip fsf-binutils-gdb-53c934e9fed9a35542661690e4e71febcbebb539.tar.gz fsf-binutils-gdb-53c934e9fed9a35542661690e4e71febcbebb539.tar.bz2 |
Make tdesc_feature::types an std::vector
This patch makes tdesc_feature::types an std::vector of unique_ptr of
tdesc_type. This way, we don't need to manually free the objects and
the vector in ~tdesc_feature.
gdb/ChangeLog:
* target-descriptions.c (tdesc_type_p): Remove typedef.
(DEF_VEC_P (tdesc_type_p)): Remove.
(struct tdesc_feature) <types>: Change type to std::vector.
<~tdesc_feature>: Replace with default implementation.
<accept>: Adjust.
(tdesc_named_type): Adjust.
(tdesc_create_vector): Adjust.
(tdesc_create_struct): Adjust.
(tdesc_create_union): Adjust.
(tdesc_create_flags): Adjust.
(tdesc_create_enum): Adjust.
-rw-r--r-- | gdb/ChangeLog | 14 | ||||
-rw-r--r-- | gdb/target-descriptions.c | 60 |
2 files changed, 34 insertions, 40 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index a21aa7e..34df1b2 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,17 @@ +2017-12-05 Simon Marchi <simon.marchi@polymtl.ca> + + * target-descriptions.c (tdesc_type_p): Remove typedef. + (DEF_VEC_P (tdesc_type_p)): Remove. + (struct tdesc_feature) <types>: Change type to std::vector. + <~tdesc_feature>: Replace with default implementation. + <accept>: Adjust. + (tdesc_named_type): Adjust. + (tdesc_create_vector): Adjust. + (tdesc_create_struct): Adjust. + (tdesc_create_union): Adjust. + (tdesc_create_flags): Adjust. + (tdesc_create_enum): Adjust. + 2017-12-05 Simon Marchi <simon.marchi@ericsson.com> * target-descriptions.c (struct tdesc_reg) <tdesc_reg>: Change diff --git a/gdb/target-descriptions.c b/gdb/target-descriptions.c index ee2d506..8f105a6 100644 --- a/gdb/target-descriptions.c +++ b/gdb/target-descriptions.c @@ -192,7 +192,7 @@ enum tdesc_type_kind TDESC_TYPE_ENUM }; -typedef struct tdesc_type : tdesc_element +struct tdesc_type : tdesc_element { tdesc_type (const char *name_, enum tdesc_type_kind kind_) : name (xstrdup (name_)), kind (kind_) @@ -269,8 +269,9 @@ typedef struct tdesc_type : tdesc_element { return !(*this == other); } -} *tdesc_type_p; -DEF_VEC_P(tdesc_type_p); +}; + +typedef std::unique_ptr<tdesc_type> tdesc_type_up; /* A feature from a target description. Each feature is a collection of other elements, e.g. registers and types. */ @@ -281,15 +282,7 @@ struct tdesc_feature : tdesc_element : name (name_) {} - virtual ~tdesc_feature () - { - struct tdesc_type *type; - int ix; - - for (ix = 0; VEC_iterate (tdesc_type_p, types, ix, type); ix++) - delete type; - VEC_free (tdesc_type_p, types); - } + virtual ~tdesc_feature () = default; DISABLE_COPY_AND_ASSIGN (tdesc_feature); @@ -301,17 +294,13 @@ struct tdesc_feature : tdesc_element std::vector<std::unique_ptr<tdesc_reg>> registers; /* The types associated with this feature. */ - VEC(tdesc_type_p) *types = NULL; + std::vector<tdesc_type_up> types; void accept (tdesc_element_visitor &v) const override { v.visit_pre (this); - struct tdesc_type *type; - - for (int ix = 0; - VEC_iterate (tdesc_type_p, types, ix, type); - ix++) + for (const tdesc_type_up &type : types) type->accept (v); for (const tdesc_reg_up ® : registers) @@ -337,20 +326,15 @@ struct tdesc_feature : tdesc_element return false; } - if (VEC_length (tdesc_type_p, types) - != VEC_length (tdesc_type_p, other.types)) + if (types.size () != other.types.size ()) return false; - tdesc_type *type; - - for (int ix = 0; - VEC_iterate (tdesc_type_p, types, ix, type); - ix++) + for (int ix = 0; ix < types.size (); ix++) { - tdesc_type *type2 - = VEC_index (tdesc_type_p, other.types, ix); + const tdesc_type_up &type1 = types[ix]; + const tdesc_type_up &type2 = other.types[ix]; - if (type != type2 && *type != *type2) + if (type1 != type2 && *type1 != *type2) return false; } @@ -361,7 +345,6 @@ struct tdesc_feature : tdesc_element { return !(*this == other); } - }; typedef std::unique_ptr<tdesc_feature> tdesc_feature_up; @@ -773,16 +756,13 @@ tdesc_predefined_type (enum tdesc_type_kind kind) struct tdesc_type * tdesc_named_type (const struct tdesc_feature *feature, const char *id) { - int ix; - struct tdesc_type *type; - /* First try target-defined types. */ - for (ix = 0; VEC_iterate (tdesc_type_p, feature->types, ix, type); ix++) + for (const tdesc_type_up &type : feature->types) if (strcmp (type->name, id) == 0) - return type; + return type.get (); /* Next try the predefined types. */ - for (ix = 0; ix < ARRAY_SIZE (tdesc_predefined_types); ix++) + for (int ix = 0; ix < ARRAY_SIZE (tdesc_predefined_types); ix++) if (strcmp (tdesc_predefined_types[ix].name, id) == 0) return &tdesc_predefined_types[ix]; @@ -1496,7 +1476,7 @@ tdesc_create_vector (struct tdesc_feature *feature, const char *name, type->u.v.type = field_type; type->u.v.count = count; - VEC_safe_push (tdesc_type_p, feature->types, type); + feature->types.emplace_back (type); return type; } @@ -1507,7 +1487,7 @@ tdesc_create_struct (struct tdesc_feature *feature, const char *name) { struct tdesc_type *type = new tdesc_type (name, TDESC_TYPE_STRUCT); - VEC_safe_push (tdesc_type_p, feature->types, type); + feature->types.emplace_back (type); return type; } @@ -1528,7 +1508,7 @@ tdesc_create_union (struct tdesc_feature *feature, const char *name) { struct tdesc_type *type = new tdesc_type (name, TDESC_TYPE_UNION); - VEC_safe_push (tdesc_type_p, feature->types, type); + feature->types.emplace_back (type); return type; } @@ -1544,7 +1524,7 @@ tdesc_create_flags (struct tdesc_feature *feature, const char *name, type->u.u.size = size; - VEC_safe_push (tdesc_type_p, feature->types, type); + feature->types.emplace_back (type); return type; } @@ -1558,7 +1538,7 @@ tdesc_create_enum (struct tdesc_feature *feature, const char *name, type->u.u.size = size; - VEC_safe_push (tdesc_type_p, feature->types, type); + feature->types.emplace_back (type); return type; } |