summaryrefslogtreecommitdiff
path: root/gdb/varobj.c
diff options
context:
space:
mode:
authorYao Qi <yao@codesourcery.com>2013-09-10 08:58:23 +0800
committerYao Qi <yao@codesourcery.com>2014-06-12 15:27:09 +0800
commit5a2e0d6e89f69f0c3d013cf43f3bd3d97b5e628b (patch)
treed46ef80b8bebe70443c8fe61b1999fddb0033e4f /gdb/varobj.c
parentc151b1c645a87136b61d9c16741b40f59694ed02 (diff)
downloadbinutils-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.c65
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;
}