diff options
author | Yao Qi <yao@codesourcery.com> | 2013-09-10 08:58:23 +0800 |
---|---|---|
committer | Yao Qi <yao@codesourcery.com> | 2014-06-12 15:27:09 +0800 |
commit | 5a2e0d6e89f69f0c3d013cf43f3bd3d97b5e628b (patch) | |
tree | d46ef80b8bebe70443c8fe61b1999fddb0033e4f /gdb/varobj.c | |
parent | c151b1c645a87136b61d9c16741b40f59694ed02 (diff) | |
download | binutils-gdb-5a2e0d6e89f69f0c3d013cf43f3bd3d97b5e628b.tar.gz |
Use 'struct varobj_item' to represent name and value pair
Hi,
name and value pair is widely used in varobj.c. This patch is to add
a new struct varobj_item to represent them, so that the number of
function arguments can be reduced. Finally, the iteration is done on
'struct varobj_item' instead of PyObject after this patch series.
V2:
- Fix changelog entry.
- Fix one grammatical mistake.
gdb:
2014-06-12 Yao Qi <yao@codesourcery.com>
* varobj.c (struct varobj_item): New structure.
(create_child_with_value): Update declaration.
(varobj_add_child): Replace arguments 'name' and 'value' with
'item'. All callers updated.
(install_dynamic_child): Likewise.
(update_dynamic_varobj_children): Likewise.
(varobj_add_child): Likewise.
(create_child_with_value): Likewise.
Diffstat (limited to 'gdb/varobj.c')
-rw-r--r-- | gdb/varobj.c | 65 |
1 files changed, 40 insertions, 25 deletions
diff --git a/gdb/varobj.c b/gdb/varobj.c index 80163683c75..0467a7930ca 100644 --- a/gdb/varobj.c +++ b/gdb/varobj.c @@ -108,6 +108,17 @@ struct varobj_root struct varobj_root *next; }; +/* A node or item of varobj, composed of the name and the value. */ + +struct varobj_item +{ + /* Name of this item. */ + char *name; + + /* Value of this item. */ + struct value *value; +}; + /* Dynamic part of varobj. */ struct varobj_dynamic @@ -169,8 +180,8 @@ static void uninstall_variable (struct varobj *); static struct varobj *create_child (struct varobj *, int, char *); static struct varobj * -create_child_with_value (struct varobj *parent, int index, char *name, - struct value *value); +create_child_with_value (struct varobj *parent, int index, + struct varobj_item *item); /* Utility routines */ @@ -214,8 +225,7 @@ static int is_root_p (struct varobj *var); #if HAVE_PYTHON static struct varobj *varobj_add_child (struct varobj *var, - char *name, - struct value *value); + struct varobj_item *item); #endif /* HAVE_PYTHON */ @@ -714,13 +724,12 @@ install_dynamic_child (struct varobj *var, VEC (varobj_p) **unchanged, int *cchanged, int index, - char *name, - struct value *value) + struct varobj_item *item) { if (VEC_length (varobj_p, var->children) < index + 1) { /* There's no child yet. */ - struct varobj *child = varobj_add_child (var, name, value); + struct varobj *child = varobj_add_child (var, item); if (new) { @@ -731,14 +740,14 @@ install_dynamic_child (struct varobj *var, else { varobj_p existing = VEC_index (varobj_p, var->children, index); - int type_updated = update_type_if_necessary (existing, value); + int type_updated = update_type_if_necessary (existing, item->value); if (type_updated) { if (type_changed) VEC_safe_push (varobj_p, *type_changed, existing); } - if (install_new_value (existing, value, 0)) + if (install_new_value (existing, item->value, 0)) { if (!type_updated && changed) VEC_safe_push (varobj_p, *changed, existing); @@ -889,7 +898,7 @@ update_dynamic_varobj_children (struct varobj *var, { PyObject *py_v; const char *name; - struct value *v; + struct varobj_item varobj_item; struct cleanup *inner; int can_mention = from < 0 || i >= from; @@ -901,15 +910,17 @@ update_dynamic_varobj_children (struct varobj *var, error (_("Invalid item from the child list")); } - v = convert_value_from_python (py_v); - if (v == NULL) + varobj_item.value = convert_value_from_python (py_v); + if (varobj_item.value == NULL) gdbpy_print_stack (); + varobj_item.name = xstrdup (name); + install_dynamic_child (var, can_mention ? changed : NULL, can_mention ? type_changed : NULL, can_mention ? new : NULL, can_mention ? unchanged : NULL, can_mention ? cchanged : NULL, i, - xstrdup (name), v); + &varobj_item); do_cleanups (inner); } else @@ -1028,11 +1039,11 @@ varobj_list_children (struct varobj *var, int *from, int *to) #if HAVE_PYTHON static struct varobj * -varobj_add_child (struct varobj *var, char *name, struct value *value) +varobj_add_child (struct varobj *var, struct varobj_item *item) { - varobj_p v = create_child_with_value (var, + varobj_p v = create_child_with_value (var, VEC_length (varobj_p, var->children), - name, value); + item); VEC_safe_push (varobj_p, var->children, v); return v; @@ -2107,13 +2118,17 @@ uninstall_variable (struct varobj *var) static struct varobj * create_child (struct varobj *parent, int index, char *name) { - return create_child_with_value (parent, index, name, - value_of_child (parent, index)); + struct varobj_item item; + + item.name = name; + item.value = value_of_child (parent, index); + + return create_child_with_value (parent, index, &item); } static struct varobj * -create_child_with_value (struct varobj *parent, int index, char *name, - struct value *value) +create_child_with_value (struct varobj *parent, int index, + struct varobj_item *item) { struct varobj *child; char *childs_name; @@ -2121,7 +2136,7 @@ create_child_with_value (struct varobj *parent, int index, char *name, child = new_variable (); /* NAME is allocated by caller. */ - child->name = name; + child->name = item->name; child->index = index; child->parent = parent; child->root = parent->root; @@ -2129,22 +2144,22 @@ create_child_with_value (struct varobj *parent, int index, char *name, if (varobj_is_anonymous_child (child)) childs_name = xstrprintf ("%s.%d_anonymous", parent->obj_name, index); else - childs_name = xstrprintf ("%s.%s", parent->obj_name, name); + childs_name = xstrprintf ("%s.%s", parent->obj_name, item->name); child->obj_name = childs_name; install_variable (child); /* Compute the type of the child. Must do this before calling install_new_value. */ - if (value != NULL) + if (item->value != NULL) /* If the child had no evaluation errors, var->value will be non-NULL and contain a valid type. */ - child->type = value_actual_type (value, 0, NULL); + child->type = value_actual_type (item->value, 0, NULL); else /* Otherwise, we must compute the type. */ child->type = (*child->root->lang_ops->type_of_child) (child->parent, child->index); - install_new_value (child, value, 1); + install_new_value (child, item->value, 1); return child; } |