diff options
author | Simon Marchi <simon.marchi@polymtl.ca> | 2017-11-22 15:08:06 -0500 |
---|---|---|
committer | Simon Marchi <simon.marchi@ericsson.com> | 2017-11-22 15:08:06 -0500 |
commit | 0604393c22f626f26b5a4a30e57da40404f5aa5e (patch) | |
tree | 9c0975d7db4c7d18f7a5a23816ac31b683e7dfb2 /gdb/mi | |
parent | ddf0ea085b626ddcbb14f88f495bcb677b7ab6e9 (diff) | |
download | binutils-0604393c22f626f26b5a4a30e57da40404f5aa5e.zip binutils-0604393c22f626f26b5a4a30e57da40404f5aa5e.tar.gz binutils-0604393c22f626f26b5a4a30e57da40404f5aa5e.tar.bz2 |
Replace VEC (varobj_update_result) with std::vector
This patch replaces makes varobj_update return an std::vector, and
updates the fallouts.
To make that easier, the varobj_update_result is c++ified a bit. I
added a constructor and initialized its fields in-class. The newobj
vector is also made an std::vector, so that it's automatically freed
when varobj_update_result is destroyed and handled correctly by the
default move constructor. I disabled copy constructor and assignment
for that structure, because normally it never needs to be copied, only
moved.
As a result, the newobj parameter of update_dynamic_varobj_children must
be changed to an std::vector. The patch converts the other vector
parameters of update_dynamic_varobj_children to std::vector. It's not
strictly necessary to do it in the same patch, but I think it makes
sense to do it.
gdb/ChangeLog:
* varobj.h (struct varobj_update_result): Add constructor, add
move constructor, disable copy and assign, initialize fields.
<newobj>: Change type to std::vector.
(varobj_update): Return std::vector.
* varobj.c (install_dynamic_child): Change VEC parameters to
std::vector and adjust.
(update_dynamic_varobj_children): Likewise.
(varobj_update): Return std::vector and adjust.
* mi/mi-cmd-var.c (varobj_update_one): Adjust to vector changes.
Diffstat (limited to 'gdb/mi')
-rw-r--r-- | gdb/mi/mi-cmd-var.c | 49 |
1 files changed, 20 insertions, 29 deletions
diff --git a/gdb/mi/mi-cmd-var.c b/gdb/mi/mi-cmd-var.c index 084cc38..d051874 100644 --- a/gdb/mi/mi-cmd-var.c +++ b/gdb/mi/mi-cmd-var.c @@ -685,27 +685,24 @@ varobj_update_one (struct varobj *var, enum print_values print_values, int is_explicit) { struct ui_out *uiout = current_uiout; - VEC (varobj_update_result) *changes; - varobj_update_result *r; - int i; - - changes = varobj_update (&var, is_explicit); + + std::vector<varobj_update_result> changes = varobj_update (&var, is_explicit); - for (i = 0; VEC_iterate (varobj_update_result, changes, i, r); ++i) + for (const varobj_update_result &r : changes) { int from, to; gdb::optional<ui_out_emit_tuple> tuple_emitter; if (mi_version (uiout) > 1) tuple_emitter.emplace (uiout, nullptr); - uiout->field_string ("name", varobj_get_objname (r->varobj)); + uiout->field_string ("name", varobj_get_objname (r.varobj)); - switch (r->status) + switch (r.status) { case VAROBJ_IN_SCOPE: - if (mi_print_value_p (r->varobj, print_values)) + if (mi_print_value_p (r.varobj, print_values)) { - std::string val = varobj_get_value (r->varobj); + std::string val = varobj_get_value (r.varobj); uiout->field_string ("value", val.c_str ()); } @@ -719,53 +716,47 @@ varobj_update_one (struct varobj *var, enum print_values print_values, break; } - if (r->status != VAROBJ_INVALID) + if (r.status != VAROBJ_INVALID) { - if (r->type_changed) + if (r.type_changed) uiout->field_string ("type_changed", "true"); else uiout->field_string ("type_changed", "false"); } - if (r->type_changed) + if (r.type_changed) { - std::string type_name = varobj_get_type (r->varobj); + std::string type_name = varobj_get_type (r.varobj); uiout->field_string ("new_type", type_name.c_str ()); } - if (r->type_changed || r->children_changed) + if (r.type_changed || r.children_changed) uiout->field_int ("new_num_children", - varobj_get_num_children (r->varobj)); + varobj_get_num_children (r.varobj)); gdb::unique_xmalloc_ptr<char> display_hint - = varobj_get_display_hint (r->varobj); + = varobj_get_display_hint (r.varobj); if (display_hint) uiout->field_string ("displayhint", display_hint.get ()); - if (varobj_is_dynamic_p (r->varobj)) + if (varobj_is_dynamic_p (r.varobj)) uiout->field_int ("dynamic", 1); - varobj_get_child_range (r->varobj, &from, &to); - uiout->field_int ("has_more", varobj_has_more (r->varobj, to)); + varobj_get_child_range (r.varobj, &from, &to); + uiout->field_int ("has_more", varobj_has_more (r.varobj, to)); - if (r->newobj) + if (!r.newobj.empty ()) { - int j; - varobj_p child; - ui_out_emit_list list_emitter (uiout, "new_children"); - for (j = 0; VEC_iterate (varobj_p, r->newobj, j, child); ++j) + + for (varobj *child : r.newobj) { ui_out_emit_tuple tuple_emitter (uiout, NULL); print_varobj (child, print_values, 1 /* print_expression */); } - - VEC_free (varobj_p, r->newobj); - r->newobj = NULL; /* Paranoia. */ } } - VEC_free (varobj_update_result, changes); } void |