From a5defcdc217d048f8a7e1815d16986d87b1c2148 Mon Sep 17 00:00:00 2001 From: Vladimir Prus Date: Wed, 26 Mar 2008 14:11:18 +0000 Subject: [PATCH] * varobj.c (struct varobj_root): Rename use_selected_frame to floating, and clarify the meaning. (varobj_create, varobj_update, new_root_variable): Adjust. (value_of_root): Don't use type_changed as in variable, adjust comment. (c_value_of_root): Adjust. --- gdb/ChangeLog | 9 +++++++++ gdb/varobj.c | 51 ++++++++++++++++++++++----------------------------- 2 files changed, 31 insertions(+), 29 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index fc80108..fe1c56f 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,12 @@ +2008-03-26 Vladimir Prus + + * varobj.c (struct varobj_root): Rename use_selected_frame to + floating, and clarify the meaning. + (varobj_create, varobj_update, new_root_variable): Adjust. + (value_of_root): Don't use type_changed as in variable, + adjust comment. + (c_value_of_root): Adjust. + 2008-03-25 Pedro Alves * linux-nat.c (linux_nat_attach): Add the pid we attached to, to diff --git a/gdb/varobj.c b/gdb/varobj.c index c8d85a9..56f3726 100644 --- a/gdb/varobj.c +++ b/gdb/varobj.c @@ -75,9 +75,10 @@ struct varobj_root was created. */ int thread_id; - /* If 1, "update" always recomputes the frame & valid block - using the currently selected frame. */ - int use_selected_frame; + /* If 1, the -var-update always recomputes the value in the + current thread and frame. Otherwise, variable object is + always updated in the specific scope/thread/frame */ + int floating; /* Flag that indicates validity: set to 0 when this varobj_root refers to symbols that do not exist anymore. */ @@ -472,7 +473,7 @@ varobj_create (char *objname, /* frame = -2 means always use selected frame */ if (type == USE_SELECTED_FRAME) - var->root->use_selected_frame = 1; + var->root->floating = 1; block = NULL; if (fi != NULL) @@ -1157,10 +1158,9 @@ varobj_update (struct varobj **varp, struct varobj ***changelist, the frame in which a local existed. We are letting the value_of_root variable dispose of the varobj if the type has changed. */ - type_changed = 1; new = value_of_root (varp, &type_changed); - /* If this is a "use_selected_frame" varobj, and its type has changed, + /* If this is a floating varobj, and its type has changed, them note that it's changed. */ if (type_changed) VEC_safe_push (varobj_p, result, *varp); @@ -1504,7 +1504,7 @@ new_root_variable (void) var->root->exp = NULL; var->root->valid_block = NULL; var->root->frame = null_frame_id; - var->root->use_selected_frame = 0; + var->root->floating = 0; var->root->rootvar = NULL; var->root->is_valid = 1; @@ -1699,16 +1699,15 @@ name_of_child (struct varobj *var, int index) return (*var->root->lang->name_of_child) (var, index); } -/* What is the ``struct value *'' of the root variable VAR? - TYPE_CHANGED controls what to do if the type of a - use_selected_frame = 1 variable changes. On input, - TYPE_CHANGED = 1 means discard the old varobj, and replace - it with this one. TYPE_CHANGED = 0 means leave it around. - NB: In both cases, var_handle will point to the new varobj, - so if you use TYPE_CHANGED = 0, you will have to stash the - old varobj pointer away somewhere before calling this. - On return, TYPE_CHANGED will be 1 if the type has changed, and - 0 otherwise. */ +/* What is the ``struct value *'' of the root variable VAR? + For floating variable object, evaluation can get us a value + of different type from what is stored in varobj already. In + that case: + - *type_changed will be set to 1 + - old varobj will be freed, and new one will be + created, with the same name. + - *var_handle will be set to the new varobj + Otherwise, *type_changed will be set to 0. */ static struct value * value_of_root (struct varobj **var_handle, int *type_changed) { @@ -1725,7 +1724,7 @@ value_of_root (struct varobj **var_handle, int *type_changed) if (!is_root_p (var)) return NULL; - if (var->root->use_selected_frame) + if (var->root->floating) { struct varobj *tmp_var; char *old_type, *new_type; @@ -1745,16 +1744,10 @@ value_of_root (struct varobj **var_handle, int *type_changed) } else { - if (*type_changed) - { - tmp_var->obj_name = - savestring (var->obj_name, strlen (var->obj_name)); - varobj_delete (var, NULL, 0); - } - else - { - tmp_var->obj_name = varobj_gen_name (); - } + tmp_var->obj_name = + savestring (var->obj_name, strlen (var->obj_name)); + varobj_delete (var, NULL, 0); + install_variable (tmp_var); *var_handle = tmp_var; var = *var_handle; @@ -2200,7 +2193,7 @@ c_value_of_root (struct varobj **var_handle) inferior_ptid, get_frame_id (deprecated_safe_get_selected_frame ())); /* Determine whether the variable is still around. */ - if (var->root->valid_block == NULL || var->root->use_selected_frame) + if (var->root->valid_block == NULL || var->root->floating) within_scope = 1; else if (var->root->thread_id == 0) { -- 2.7.4