1*5796c8dcSSimon Schubert /* Implementation of the GDB variable objects API. 2*5796c8dcSSimon Schubert 3*5796c8dcSSimon Schubert Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 4*5796c8dcSSimon Schubert 2009 Free Software Foundation, Inc. 5*5796c8dcSSimon Schubert 6*5796c8dcSSimon Schubert This program is free software; you can redistribute it and/or modify 7*5796c8dcSSimon Schubert it under the terms of the GNU General Public License as published by 8*5796c8dcSSimon Schubert the Free Software Foundation; either version 3 of the License, or 9*5796c8dcSSimon Schubert (at your option) any later version. 10*5796c8dcSSimon Schubert 11*5796c8dcSSimon Schubert This program is distributed in the hope that it will be useful, 12*5796c8dcSSimon Schubert but WITHOUT ANY WARRANTY; without even the implied warranty of 13*5796c8dcSSimon Schubert MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14*5796c8dcSSimon Schubert GNU General Public License for more details. 15*5796c8dcSSimon Schubert 16*5796c8dcSSimon Schubert You should have received a copy of the GNU General Public License 17*5796c8dcSSimon Schubert along with this program. If not, see <http://www.gnu.org/licenses/>. */ 18*5796c8dcSSimon Schubert 19*5796c8dcSSimon Schubert #include "defs.h" 20*5796c8dcSSimon Schubert #include "exceptions.h" 21*5796c8dcSSimon Schubert #include "value.h" 22*5796c8dcSSimon Schubert #include "expression.h" 23*5796c8dcSSimon Schubert #include "frame.h" 24*5796c8dcSSimon Schubert #include "language.h" 25*5796c8dcSSimon Schubert #include "wrapper.h" 26*5796c8dcSSimon Schubert #include "gdbcmd.h" 27*5796c8dcSSimon Schubert #include "block.h" 28*5796c8dcSSimon Schubert #include "valprint.h" 29*5796c8dcSSimon Schubert 30*5796c8dcSSimon Schubert #include "gdb_assert.h" 31*5796c8dcSSimon Schubert #include "gdb_string.h" 32*5796c8dcSSimon Schubert #include "gdb_regex.h" 33*5796c8dcSSimon Schubert 34*5796c8dcSSimon Schubert #include "varobj.h" 35*5796c8dcSSimon Schubert #include "vec.h" 36*5796c8dcSSimon Schubert #include "gdbthread.h" 37*5796c8dcSSimon Schubert #include "inferior.h" 38*5796c8dcSSimon Schubert 39*5796c8dcSSimon Schubert #if HAVE_PYTHON 40*5796c8dcSSimon Schubert #include "python/python.h" 41*5796c8dcSSimon Schubert #include "python/python-internal.h" 42*5796c8dcSSimon Schubert #else 43*5796c8dcSSimon Schubert typedef int PyObject; 44*5796c8dcSSimon Schubert #endif 45*5796c8dcSSimon Schubert 46*5796c8dcSSimon Schubert /* Non-zero if we want to see trace of varobj level stuff. */ 47*5796c8dcSSimon Schubert 48*5796c8dcSSimon Schubert int varobjdebug = 0; 49*5796c8dcSSimon Schubert static void 50*5796c8dcSSimon Schubert show_varobjdebug (struct ui_file *file, int from_tty, 51*5796c8dcSSimon Schubert struct cmd_list_element *c, const char *value) 52*5796c8dcSSimon Schubert { 53*5796c8dcSSimon Schubert fprintf_filtered (file, _("Varobj debugging is %s.\n"), value); 54*5796c8dcSSimon Schubert } 55*5796c8dcSSimon Schubert 56*5796c8dcSSimon Schubert /* String representations of gdb's format codes */ 57*5796c8dcSSimon Schubert char *varobj_format_string[] = 58*5796c8dcSSimon Schubert { "natural", "binary", "decimal", "hexadecimal", "octal" }; 59*5796c8dcSSimon Schubert 60*5796c8dcSSimon Schubert /* String representations of gdb's known languages */ 61*5796c8dcSSimon Schubert char *varobj_language_string[] = { "unknown", "C", "C++", "Java" }; 62*5796c8dcSSimon Schubert 63*5796c8dcSSimon Schubert /* True if we want to allow Python-based pretty-printing. */ 64*5796c8dcSSimon Schubert static int pretty_printing = 0; 65*5796c8dcSSimon Schubert 66*5796c8dcSSimon Schubert void 67*5796c8dcSSimon Schubert varobj_enable_pretty_printing (void) 68*5796c8dcSSimon Schubert { 69*5796c8dcSSimon Schubert pretty_printing = 1; 70*5796c8dcSSimon Schubert } 71*5796c8dcSSimon Schubert 72*5796c8dcSSimon Schubert /* Data structures */ 73*5796c8dcSSimon Schubert 74*5796c8dcSSimon Schubert /* Every root variable has one of these structures saved in its 75*5796c8dcSSimon Schubert varobj. Members which must be free'd are noted. */ 76*5796c8dcSSimon Schubert struct varobj_root 77*5796c8dcSSimon Schubert { 78*5796c8dcSSimon Schubert 79*5796c8dcSSimon Schubert /* Alloc'd expression for this parent. */ 80*5796c8dcSSimon Schubert struct expression *exp; 81*5796c8dcSSimon Schubert 82*5796c8dcSSimon Schubert /* Block for which this expression is valid */ 83*5796c8dcSSimon Schubert struct block *valid_block; 84*5796c8dcSSimon Schubert 85*5796c8dcSSimon Schubert /* The frame for this expression. This field is set iff valid_block is 86*5796c8dcSSimon Schubert not NULL. */ 87*5796c8dcSSimon Schubert struct frame_id frame; 88*5796c8dcSSimon Schubert 89*5796c8dcSSimon Schubert /* The thread ID that this varobj_root belong to. This field 90*5796c8dcSSimon Schubert is only valid if valid_block is not NULL. 91*5796c8dcSSimon Schubert When not 0, indicates which thread 'frame' belongs to. 92*5796c8dcSSimon Schubert When 0, indicates that the thread list was empty when the varobj_root 93*5796c8dcSSimon Schubert was created. */ 94*5796c8dcSSimon Schubert int thread_id; 95*5796c8dcSSimon Schubert 96*5796c8dcSSimon Schubert /* If 1, the -var-update always recomputes the value in the 97*5796c8dcSSimon Schubert current thread and frame. Otherwise, variable object is 98*5796c8dcSSimon Schubert always updated in the specific scope/thread/frame */ 99*5796c8dcSSimon Schubert int floating; 100*5796c8dcSSimon Schubert 101*5796c8dcSSimon Schubert /* Flag that indicates validity: set to 0 when this varobj_root refers 102*5796c8dcSSimon Schubert to symbols that do not exist anymore. */ 103*5796c8dcSSimon Schubert int is_valid; 104*5796c8dcSSimon Schubert 105*5796c8dcSSimon Schubert /* Language info for this variable and its children */ 106*5796c8dcSSimon Schubert struct language_specific *lang; 107*5796c8dcSSimon Schubert 108*5796c8dcSSimon Schubert /* The varobj for this root node. */ 109*5796c8dcSSimon Schubert struct varobj *rootvar; 110*5796c8dcSSimon Schubert 111*5796c8dcSSimon Schubert /* Next root variable */ 112*5796c8dcSSimon Schubert struct varobj_root *next; 113*5796c8dcSSimon Schubert }; 114*5796c8dcSSimon Schubert 115*5796c8dcSSimon Schubert /* Every variable in the system has a structure of this type defined 116*5796c8dcSSimon Schubert for it. This structure holds all information necessary to manipulate 117*5796c8dcSSimon Schubert a particular object variable. Members which must be freed are noted. */ 118*5796c8dcSSimon Schubert struct varobj 119*5796c8dcSSimon Schubert { 120*5796c8dcSSimon Schubert 121*5796c8dcSSimon Schubert /* Alloc'd name of the variable for this object.. If this variable is a 122*5796c8dcSSimon Schubert child, then this name will be the child's source name. 123*5796c8dcSSimon Schubert (bar, not foo.bar) */ 124*5796c8dcSSimon Schubert /* NOTE: This is the "expression" */ 125*5796c8dcSSimon Schubert char *name; 126*5796c8dcSSimon Schubert 127*5796c8dcSSimon Schubert /* Alloc'd expression for this child. Can be used to create a 128*5796c8dcSSimon Schubert root variable corresponding to this child. */ 129*5796c8dcSSimon Schubert char *path_expr; 130*5796c8dcSSimon Schubert 131*5796c8dcSSimon Schubert /* The alloc'd name for this variable's object. This is here for 132*5796c8dcSSimon Schubert convenience when constructing this object's children. */ 133*5796c8dcSSimon Schubert char *obj_name; 134*5796c8dcSSimon Schubert 135*5796c8dcSSimon Schubert /* Index of this variable in its parent or -1 */ 136*5796c8dcSSimon Schubert int index; 137*5796c8dcSSimon Schubert 138*5796c8dcSSimon Schubert /* The type of this variable. This can be NULL 139*5796c8dcSSimon Schubert for artifial variable objects -- currently, the "accessibility" 140*5796c8dcSSimon Schubert variable objects in C++. */ 141*5796c8dcSSimon Schubert struct type *type; 142*5796c8dcSSimon Schubert 143*5796c8dcSSimon Schubert /* The value of this expression or subexpression. A NULL value 144*5796c8dcSSimon Schubert indicates there was an error getting this value. 145*5796c8dcSSimon Schubert Invariant: if varobj_value_is_changeable_p (this) is non-zero, 146*5796c8dcSSimon Schubert the value is either NULL, or not lazy. */ 147*5796c8dcSSimon Schubert struct value *value; 148*5796c8dcSSimon Schubert 149*5796c8dcSSimon Schubert /* The number of (immediate) children this variable has */ 150*5796c8dcSSimon Schubert int num_children; 151*5796c8dcSSimon Schubert 152*5796c8dcSSimon Schubert /* If this object is a child, this points to its immediate parent. */ 153*5796c8dcSSimon Schubert struct varobj *parent; 154*5796c8dcSSimon Schubert 155*5796c8dcSSimon Schubert /* Children of this object. */ 156*5796c8dcSSimon Schubert VEC (varobj_p) *children; 157*5796c8dcSSimon Schubert 158*5796c8dcSSimon Schubert /* Whether the children of this varobj were requested. This field is 159*5796c8dcSSimon Schubert used to decide if dynamic varobj should recompute their children. 160*5796c8dcSSimon Schubert In the event that the frontend never asked for the children, we 161*5796c8dcSSimon Schubert can avoid that. */ 162*5796c8dcSSimon Schubert int children_requested; 163*5796c8dcSSimon Schubert 164*5796c8dcSSimon Schubert /* Description of the root variable. Points to root variable for children. */ 165*5796c8dcSSimon Schubert struct varobj_root *root; 166*5796c8dcSSimon Schubert 167*5796c8dcSSimon Schubert /* The format of the output for this object */ 168*5796c8dcSSimon Schubert enum varobj_display_formats format; 169*5796c8dcSSimon Schubert 170*5796c8dcSSimon Schubert /* Was this variable updated via a varobj_set_value operation */ 171*5796c8dcSSimon Schubert int updated; 172*5796c8dcSSimon Schubert 173*5796c8dcSSimon Schubert /* Last print value. */ 174*5796c8dcSSimon Schubert char *print_value; 175*5796c8dcSSimon Schubert 176*5796c8dcSSimon Schubert /* Is this variable frozen. Frozen variables are never implicitly 177*5796c8dcSSimon Schubert updated by -var-update * 178*5796c8dcSSimon Schubert or -var-update <direct-or-indirect-parent>. */ 179*5796c8dcSSimon Schubert int frozen; 180*5796c8dcSSimon Schubert 181*5796c8dcSSimon Schubert /* Is the value of this variable intentionally not fetched? It is 182*5796c8dcSSimon Schubert not fetched if either the variable is frozen, or any parents is 183*5796c8dcSSimon Schubert frozen. */ 184*5796c8dcSSimon Schubert int not_fetched; 185*5796c8dcSSimon Schubert 186*5796c8dcSSimon Schubert /* Sub-range of children which the MI consumer has requested. If 187*5796c8dcSSimon Schubert FROM < 0 or TO < 0, means that all children have been 188*5796c8dcSSimon Schubert requested. */ 189*5796c8dcSSimon Schubert int from; 190*5796c8dcSSimon Schubert int to; 191*5796c8dcSSimon Schubert 192*5796c8dcSSimon Schubert /* The pretty-printer constructor. If NULL, then the default 193*5796c8dcSSimon Schubert pretty-printer will be looked up. If None, then no 194*5796c8dcSSimon Schubert pretty-printer will be installed. */ 195*5796c8dcSSimon Schubert PyObject *constructor; 196*5796c8dcSSimon Schubert 197*5796c8dcSSimon Schubert /* The pretty-printer that has been constructed. If NULL, then a 198*5796c8dcSSimon Schubert new printer object is needed, and one will be constructed. */ 199*5796c8dcSSimon Schubert PyObject *pretty_printer; 200*5796c8dcSSimon Schubert 201*5796c8dcSSimon Schubert /* The iterator returned by the printer's 'children' method, or NULL 202*5796c8dcSSimon Schubert if not available. */ 203*5796c8dcSSimon Schubert PyObject *child_iter; 204*5796c8dcSSimon Schubert 205*5796c8dcSSimon Schubert /* We request one extra item from the iterator, so that we can 206*5796c8dcSSimon Schubert report to the caller whether there are more items than we have 207*5796c8dcSSimon Schubert already reported. However, we don't want to install this value 208*5796c8dcSSimon Schubert when we read it, because that will mess up future updates. So, 209*5796c8dcSSimon Schubert we stash it here instead. */ 210*5796c8dcSSimon Schubert PyObject *saved_item; 211*5796c8dcSSimon Schubert }; 212*5796c8dcSSimon Schubert 213*5796c8dcSSimon Schubert struct cpstack 214*5796c8dcSSimon Schubert { 215*5796c8dcSSimon Schubert char *name; 216*5796c8dcSSimon Schubert struct cpstack *next; 217*5796c8dcSSimon Schubert }; 218*5796c8dcSSimon Schubert 219*5796c8dcSSimon Schubert /* A list of varobjs */ 220*5796c8dcSSimon Schubert 221*5796c8dcSSimon Schubert struct vlist 222*5796c8dcSSimon Schubert { 223*5796c8dcSSimon Schubert struct varobj *var; 224*5796c8dcSSimon Schubert struct vlist *next; 225*5796c8dcSSimon Schubert }; 226*5796c8dcSSimon Schubert 227*5796c8dcSSimon Schubert /* Private function prototypes */ 228*5796c8dcSSimon Schubert 229*5796c8dcSSimon Schubert /* Helper functions for the above subcommands. */ 230*5796c8dcSSimon Schubert 231*5796c8dcSSimon Schubert static int delete_variable (struct cpstack **, struct varobj *, int); 232*5796c8dcSSimon Schubert 233*5796c8dcSSimon Schubert static void delete_variable_1 (struct cpstack **, int *, 234*5796c8dcSSimon Schubert struct varobj *, int, int); 235*5796c8dcSSimon Schubert 236*5796c8dcSSimon Schubert static int install_variable (struct varobj *); 237*5796c8dcSSimon Schubert 238*5796c8dcSSimon Schubert static void uninstall_variable (struct varobj *); 239*5796c8dcSSimon Schubert 240*5796c8dcSSimon Schubert static struct varobj *create_child (struct varobj *, int, char *); 241*5796c8dcSSimon Schubert 242*5796c8dcSSimon Schubert static struct varobj * 243*5796c8dcSSimon Schubert create_child_with_value (struct varobj *parent, int index, const char *name, 244*5796c8dcSSimon Schubert struct value *value); 245*5796c8dcSSimon Schubert 246*5796c8dcSSimon Schubert /* Utility routines */ 247*5796c8dcSSimon Schubert 248*5796c8dcSSimon Schubert static struct varobj *new_variable (void); 249*5796c8dcSSimon Schubert 250*5796c8dcSSimon Schubert static struct varobj *new_root_variable (void); 251*5796c8dcSSimon Schubert 252*5796c8dcSSimon Schubert static void free_variable (struct varobj *var); 253*5796c8dcSSimon Schubert 254*5796c8dcSSimon Schubert static struct cleanup *make_cleanup_free_variable (struct varobj *var); 255*5796c8dcSSimon Schubert 256*5796c8dcSSimon Schubert static struct type *get_type (struct varobj *var); 257*5796c8dcSSimon Schubert 258*5796c8dcSSimon Schubert static struct type *get_value_type (struct varobj *var); 259*5796c8dcSSimon Schubert 260*5796c8dcSSimon Schubert static struct type *get_target_type (struct type *); 261*5796c8dcSSimon Schubert 262*5796c8dcSSimon Schubert static enum varobj_display_formats variable_default_display (struct varobj *); 263*5796c8dcSSimon Schubert 264*5796c8dcSSimon Schubert static void cppush (struct cpstack **pstack, char *name); 265*5796c8dcSSimon Schubert 266*5796c8dcSSimon Schubert static char *cppop (struct cpstack **pstack); 267*5796c8dcSSimon Schubert 268*5796c8dcSSimon Schubert static int install_new_value (struct varobj *var, struct value *value, 269*5796c8dcSSimon Schubert int initial); 270*5796c8dcSSimon Schubert 271*5796c8dcSSimon Schubert /* Language-specific routines. */ 272*5796c8dcSSimon Schubert 273*5796c8dcSSimon Schubert static enum varobj_languages variable_language (struct varobj *var); 274*5796c8dcSSimon Schubert 275*5796c8dcSSimon Schubert static int number_of_children (struct varobj *); 276*5796c8dcSSimon Schubert 277*5796c8dcSSimon Schubert static char *name_of_variable (struct varobj *); 278*5796c8dcSSimon Schubert 279*5796c8dcSSimon Schubert static char *name_of_child (struct varobj *, int); 280*5796c8dcSSimon Schubert 281*5796c8dcSSimon Schubert static struct value *value_of_root (struct varobj **var_handle, int *); 282*5796c8dcSSimon Schubert 283*5796c8dcSSimon Schubert static struct value *value_of_child (struct varobj *parent, int index); 284*5796c8dcSSimon Schubert 285*5796c8dcSSimon Schubert static char *my_value_of_variable (struct varobj *var, 286*5796c8dcSSimon Schubert enum varobj_display_formats format); 287*5796c8dcSSimon Schubert 288*5796c8dcSSimon Schubert static char *value_get_print_value (struct value *value, 289*5796c8dcSSimon Schubert enum varobj_display_formats format, 290*5796c8dcSSimon Schubert struct varobj *var); 291*5796c8dcSSimon Schubert 292*5796c8dcSSimon Schubert static int varobj_value_is_changeable_p (struct varobj *var); 293*5796c8dcSSimon Schubert 294*5796c8dcSSimon Schubert static int is_root_p (struct varobj *var); 295*5796c8dcSSimon Schubert 296*5796c8dcSSimon Schubert static struct varobj * 297*5796c8dcSSimon Schubert varobj_add_child (struct varobj *var, const char *name, struct value *value); 298*5796c8dcSSimon Schubert 299*5796c8dcSSimon Schubert /* C implementation */ 300*5796c8dcSSimon Schubert 301*5796c8dcSSimon Schubert static int c_number_of_children (struct varobj *var); 302*5796c8dcSSimon Schubert 303*5796c8dcSSimon Schubert static char *c_name_of_variable (struct varobj *parent); 304*5796c8dcSSimon Schubert 305*5796c8dcSSimon Schubert static char *c_name_of_child (struct varobj *parent, int index); 306*5796c8dcSSimon Schubert 307*5796c8dcSSimon Schubert static char *c_path_expr_of_child (struct varobj *child); 308*5796c8dcSSimon Schubert 309*5796c8dcSSimon Schubert static struct value *c_value_of_root (struct varobj **var_handle); 310*5796c8dcSSimon Schubert 311*5796c8dcSSimon Schubert static struct value *c_value_of_child (struct varobj *parent, int index); 312*5796c8dcSSimon Schubert 313*5796c8dcSSimon Schubert static struct type *c_type_of_child (struct varobj *parent, int index); 314*5796c8dcSSimon Schubert 315*5796c8dcSSimon Schubert static char *c_value_of_variable (struct varobj *var, 316*5796c8dcSSimon Schubert enum varobj_display_formats format); 317*5796c8dcSSimon Schubert 318*5796c8dcSSimon Schubert /* C++ implementation */ 319*5796c8dcSSimon Schubert 320*5796c8dcSSimon Schubert static int cplus_number_of_children (struct varobj *var); 321*5796c8dcSSimon Schubert 322*5796c8dcSSimon Schubert static void cplus_class_num_children (struct type *type, int children[3]); 323*5796c8dcSSimon Schubert 324*5796c8dcSSimon Schubert static char *cplus_name_of_variable (struct varobj *parent); 325*5796c8dcSSimon Schubert 326*5796c8dcSSimon Schubert static char *cplus_name_of_child (struct varobj *parent, int index); 327*5796c8dcSSimon Schubert 328*5796c8dcSSimon Schubert static char *cplus_path_expr_of_child (struct varobj *child); 329*5796c8dcSSimon Schubert 330*5796c8dcSSimon Schubert static struct value *cplus_value_of_root (struct varobj **var_handle); 331*5796c8dcSSimon Schubert 332*5796c8dcSSimon Schubert static struct value *cplus_value_of_child (struct varobj *parent, int index); 333*5796c8dcSSimon Schubert 334*5796c8dcSSimon Schubert static struct type *cplus_type_of_child (struct varobj *parent, int index); 335*5796c8dcSSimon Schubert 336*5796c8dcSSimon Schubert static char *cplus_value_of_variable (struct varobj *var, 337*5796c8dcSSimon Schubert enum varobj_display_formats format); 338*5796c8dcSSimon Schubert 339*5796c8dcSSimon Schubert /* Java implementation */ 340*5796c8dcSSimon Schubert 341*5796c8dcSSimon Schubert static int java_number_of_children (struct varobj *var); 342*5796c8dcSSimon Schubert 343*5796c8dcSSimon Schubert static char *java_name_of_variable (struct varobj *parent); 344*5796c8dcSSimon Schubert 345*5796c8dcSSimon Schubert static char *java_name_of_child (struct varobj *parent, int index); 346*5796c8dcSSimon Schubert 347*5796c8dcSSimon Schubert static char *java_path_expr_of_child (struct varobj *child); 348*5796c8dcSSimon Schubert 349*5796c8dcSSimon Schubert static struct value *java_value_of_root (struct varobj **var_handle); 350*5796c8dcSSimon Schubert 351*5796c8dcSSimon Schubert static struct value *java_value_of_child (struct varobj *parent, int index); 352*5796c8dcSSimon Schubert 353*5796c8dcSSimon Schubert static struct type *java_type_of_child (struct varobj *parent, int index); 354*5796c8dcSSimon Schubert 355*5796c8dcSSimon Schubert static char *java_value_of_variable (struct varobj *var, 356*5796c8dcSSimon Schubert enum varobj_display_formats format); 357*5796c8dcSSimon Schubert 358*5796c8dcSSimon Schubert /* The language specific vector */ 359*5796c8dcSSimon Schubert 360*5796c8dcSSimon Schubert struct language_specific 361*5796c8dcSSimon Schubert { 362*5796c8dcSSimon Schubert 363*5796c8dcSSimon Schubert /* The language of this variable */ 364*5796c8dcSSimon Schubert enum varobj_languages language; 365*5796c8dcSSimon Schubert 366*5796c8dcSSimon Schubert /* The number of children of PARENT. */ 367*5796c8dcSSimon Schubert int (*number_of_children) (struct varobj * parent); 368*5796c8dcSSimon Schubert 369*5796c8dcSSimon Schubert /* The name (expression) of a root varobj. */ 370*5796c8dcSSimon Schubert char *(*name_of_variable) (struct varobj * parent); 371*5796c8dcSSimon Schubert 372*5796c8dcSSimon Schubert /* The name of the INDEX'th child of PARENT. */ 373*5796c8dcSSimon Schubert char *(*name_of_child) (struct varobj * parent, int index); 374*5796c8dcSSimon Schubert 375*5796c8dcSSimon Schubert /* Returns the rooted expression of CHILD, which is a variable 376*5796c8dcSSimon Schubert obtain that has some parent. */ 377*5796c8dcSSimon Schubert char *(*path_expr_of_child) (struct varobj * child); 378*5796c8dcSSimon Schubert 379*5796c8dcSSimon Schubert /* The ``struct value *'' of the root variable ROOT. */ 380*5796c8dcSSimon Schubert struct value *(*value_of_root) (struct varobj ** root_handle); 381*5796c8dcSSimon Schubert 382*5796c8dcSSimon Schubert /* The ``struct value *'' of the INDEX'th child of PARENT. */ 383*5796c8dcSSimon Schubert struct value *(*value_of_child) (struct varobj * parent, int index); 384*5796c8dcSSimon Schubert 385*5796c8dcSSimon Schubert /* The type of the INDEX'th child of PARENT. */ 386*5796c8dcSSimon Schubert struct type *(*type_of_child) (struct varobj * parent, int index); 387*5796c8dcSSimon Schubert 388*5796c8dcSSimon Schubert /* The current value of VAR. */ 389*5796c8dcSSimon Schubert char *(*value_of_variable) (struct varobj * var, 390*5796c8dcSSimon Schubert enum varobj_display_formats format); 391*5796c8dcSSimon Schubert }; 392*5796c8dcSSimon Schubert 393*5796c8dcSSimon Schubert /* Array of known source language routines. */ 394*5796c8dcSSimon Schubert static struct language_specific languages[vlang_end] = { 395*5796c8dcSSimon Schubert /* Unknown (try treating as C */ 396*5796c8dcSSimon Schubert { 397*5796c8dcSSimon Schubert vlang_unknown, 398*5796c8dcSSimon Schubert c_number_of_children, 399*5796c8dcSSimon Schubert c_name_of_variable, 400*5796c8dcSSimon Schubert c_name_of_child, 401*5796c8dcSSimon Schubert c_path_expr_of_child, 402*5796c8dcSSimon Schubert c_value_of_root, 403*5796c8dcSSimon Schubert c_value_of_child, 404*5796c8dcSSimon Schubert c_type_of_child, 405*5796c8dcSSimon Schubert c_value_of_variable} 406*5796c8dcSSimon Schubert , 407*5796c8dcSSimon Schubert /* C */ 408*5796c8dcSSimon Schubert { 409*5796c8dcSSimon Schubert vlang_c, 410*5796c8dcSSimon Schubert c_number_of_children, 411*5796c8dcSSimon Schubert c_name_of_variable, 412*5796c8dcSSimon Schubert c_name_of_child, 413*5796c8dcSSimon Schubert c_path_expr_of_child, 414*5796c8dcSSimon Schubert c_value_of_root, 415*5796c8dcSSimon Schubert c_value_of_child, 416*5796c8dcSSimon Schubert c_type_of_child, 417*5796c8dcSSimon Schubert c_value_of_variable} 418*5796c8dcSSimon Schubert , 419*5796c8dcSSimon Schubert /* C++ */ 420*5796c8dcSSimon Schubert { 421*5796c8dcSSimon Schubert vlang_cplus, 422*5796c8dcSSimon Schubert cplus_number_of_children, 423*5796c8dcSSimon Schubert cplus_name_of_variable, 424*5796c8dcSSimon Schubert cplus_name_of_child, 425*5796c8dcSSimon Schubert cplus_path_expr_of_child, 426*5796c8dcSSimon Schubert cplus_value_of_root, 427*5796c8dcSSimon Schubert cplus_value_of_child, 428*5796c8dcSSimon Schubert cplus_type_of_child, 429*5796c8dcSSimon Schubert cplus_value_of_variable} 430*5796c8dcSSimon Schubert , 431*5796c8dcSSimon Schubert /* Java */ 432*5796c8dcSSimon Schubert { 433*5796c8dcSSimon Schubert vlang_java, 434*5796c8dcSSimon Schubert java_number_of_children, 435*5796c8dcSSimon Schubert java_name_of_variable, 436*5796c8dcSSimon Schubert java_name_of_child, 437*5796c8dcSSimon Schubert java_path_expr_of_child, 438*5796c8dcSSimon Schubert java_value_of_root, 439*5796c8dcSSimon Schubert java_value_of_child, 440*5796c8dcSSimon Schubert java_type_of_child, 441*5796c8dcSSimon Schubert java_value_of_variable} 442*5796c8dcSSimon Schubert }; 443*5796c8dcSSimon Schubert 444*5796c8dcSSimon Schubert /* A little convenience enum for dealing with C++/Java */ 445*5796c8dcSSimon Schubert enum vsections 446*5796c8dcSSimon Schubert { 447*5796c8dcSSimon Schubert v_public = 0, v_private, v_protected 448*5796c8dcSSimon Schubert }; 449*5796c8dcSSimon Schubert 450*5796c8dcSSimon Schubert /* Private data */ 451*5796c8dcSSimon Schubert 452*5796c8dcSSimon Schubert /* Mappings of varobj_display_formats enums to gdb's format codes */ 453*5796c8dcSSimon Schubert static int format_code[] = { 0, 't', 'd', 'x', 'o' }; 454*5796c8dcSSimon Schubert 455*5796c8dcSSimon Schubert /* Header of the list of root variable objects */ 456*5796c8dcSSimon Schubert static struct varobj_root *rootlist; 457*5796c8dcSSimon Schubert 458*5796c8dcSSimon Schubert /* Prime number indicating the number of buckets in the hash table */ 459*5796c8dcSSimon Schubert /* A prime large enough to avoid too many colisions */ 460*5796c8dcSSimon Schubert #define VAROBJ_TABLE_SIZE 227 461*5796c8dcSSimon Schubert 462*5796c8dcSSimon Schubert /* Pointer to the varobj hash table (built at run time) */ 463*5796c8dcSSimon Schubert static struct vlist **varobj_table; 464*5796c8dcSSimon Schubert 465*5796c8dcSSimon Schubert /* Is the variable X one of our "fake" children? */ 466*5796c8dcSSimon Schubert #define CPLUS_FAKE_CHILD(x) \ 467*5796c8dcSSimon Schubert ((x) != NULL && (x)->type == NULL && (x)->value == NULL) 468*5796c8dcSSimon Schubert 469*5796c8dcSSimon Schubert 470*5796c8dcSSimon Schubert /* API Implementation */ 471*5796c8dcSSimon Schubert static int 472*5796c8dcSSimon Schubert is_root_p (struct varobj *var) 473*5796c8dcSSimon Schubert { 474*5796c8dcSSimon Schubert return (var->root->rootvar == var); 475*5796c8dcSSimon Schubert } 476*5796c8dcSSimon Schubert 477*5796c8dcSSimon Schubert #ifdef HAVE_PYTHON 478*5796c8dcSSimon Schubert /* Helper function to install a Python environment suitable for 479*5796c8dcSSimon Schubert use during operations on VAR. */ 480*5796c8dcSSimon Schubert struct cleanup * 481*5796c8dcSSimon Schubert varobj_ensure_python_env (struct varobj *var) 482*5796c8dcSSimon Schubert { 483*5796c8dcSSimon Schubert return ensure_python_env (var->root->exp->gdbarch, 484*5796c8dcSSimon Schubert var->root->exp->language_defn); 485*5796c8dcSSimon Schubert } 486*5796c8dcSSimon Schubert #endif 487*5796c8dcSSimon Schubert 488*5796c8dcSSimon Schubert /* Creates a varobj (not its children) */ 489*5796c8dcSSimon Schubert 490*5796c8dcSSimon Schubert /* Return the full FRAME which corresponds to the given CORE_ADDR 491*5796c8dcSSimon Schubert or NULL if no FRAME on the chain corresponds to CORE_ADDR. */ 492*5796c8dcSSimon Schubert 493*5796c8dcSSimon Schubert static struct frame_info * 494*5796c8dcSSimon Schubert find_frame_addr_in_frame_chain (CORE_ADDR frame_addr) 495*5796c8dcSSimon Schubert { 496*5796c8dcSSimon Schubert struct frame_info *frame = NULL; 497*5796c8dcSSimon Schubert 498*5796c8dcSSimon Schubert if (frame_addr == (CORE_ADDR) 0) 499*5796c8dcSSimon Schubert return NULL; 500*5796c8dcSSimon Schubert 501*5796c8dcSSimon Schubert for (frame = get_current_frame (); 502*5796c8dcSSimon Schubert frame != NULL; 503*5796c8dcSSimon Schubert frame = get_prev_frame (frame)) 504*5796c8dcSSimon Schubert { 505*5796c8dcSSimon Schubert /* The CORE_ADDR we get as argument was parsed from a string GDB 506*5796c8dcSSimon Schubert output as $fp. This output got truncated to gdbarch_addr_bit. 507*5796c8dcSSimon Schubert Truncate the frame base address in the same manner before 508*5796c8dcSSimon Schubert comparing it against our argument. */ 509*5796c8dcSSimon Schubert CORE_ADDR frame_base = get_frame_base_address (frame); 510*5796c8dcSSimon Schubert int addr_bit = gdbarch_addr_bit (get_frame_arch (frame)); 511*5796c8dcSSimon Schubert if (addr_bit < (sizeof (CORE_ADDR) * HOST_CHAR_BIT)) 512*5796c8dcSSimon Schubert frame_base &= ((CORE_ADDR) 1 << addr_bit) - 1; 513*5796c8dcSSimon Schubert 514*5796c8dcSSimon Schubert if (frame_base == frame_addr) 515*5796c8dcSSimon Schubert return frame; 516*5796c8dcSSimon Schubert } 517*5796c8dcSSimon Schubert 518*5796c8dcSSimon Schubert return NULL; 519*5796c8dcSSimon Schubert } 520*5796c8dcSSimon Schubert 521*5796c8dcSSimon Schubert struct varobj * 522*5796c8dcSSimon Schubert varobj_create (char *objname, 523*5796c8dcSSimon Schubert char *expression, CORE_ADDR frame, enum varobj_type type) 524*5796c8dcSSimon Schubert { 525*5796c8dcSSimon Schubert struct varobj *var; 526*5796c8dcSSimon Schubert struct frame_info *fi; 527*5796c8dcSSimon Schubert struct frame_info *old_fi = NULL; 528*5796c8dcSSimon Schubert struct block *block; 529*5796c8dcSSimon Schubert struct cleanup *old_chain; 530*5796c8dcSSimon Schubert 531*5796c8dcSSimon Schubert /* Fill out a varobj structure for the (root) variable being constructed. */ 532*5796c8dcSSimon Schubert var = new_root_variable (); 533*5796c8dcSSimon Schubert old_chain = make_cleanup_free_variable (var); 534*5796c8dcSSimon Schubert 535*5796c8dcSSimon Schubert if (expression != NULL) 536*5796c8dcSSimon Schubert { 537*5796c8dcSSimon Schubert char *p; 538*5796c8dcSSimon Schubert enum varobj_languages lang; 539*5796c8dcSSimon Schubert struct value *value = NULL; 540*5796c8dcSSimon Schubert 541*5796c8dcSSimon Schubert /* Parse and evaluate the expression, filling in as much of the 542*5796c8dcSSimon Schubert variable's data as possible. */ 543*5796c8dcSSimon Schubert 544*5796c8dcSSimon Schubert if (has_stack_frames ()) 545*5796c8dcSSimon Schubert { 546*5796c8dcSSimon Schubert /* Allow creator to specify context of variable */ 547*5796c8dcSSimon Schubert if ((type == USE_CURRENT_FRAME) || (type == USE_SELECTED_FRAME)) 548*5796c8dcSSimon Schubert fi = get_selected_frame (NULL); 549*5796c8dcSSimon Schubert else 550*5796c8dcSSimon Schubert /* FIXME: cagney/2002-11-23: This code should be doing a 551*5796c8dcSSimon Schubert lookup using the frame ID and not just the frame's 552*5796c8dcSSimon Schubert ``address''. This, of course, means an interface 553*5796c8dcSSimon Schubert change. However, with out that interface change ISAs, 554*5796c8dcSSimon Schubert such as the ia64 with its two stacks, won't work. 555*5796c8dcSSimon Schubert Similar goes for the case where there is a frameless 556*5796c8dcSSimon Schubert function. */ 557*5796c8dcSSimon Schubert fi = find_frame_addr_in_frame_chain (frame); 558*5796c8dcSSimon Schubert } 559*5796c8dcSSimon Schubert else 560*5796c8dcSSimon Schubert fi = NULL; 561*5796c8dcSSimon Schubert 562*5796c8dcSSimon Schubert /* frame = -2 means always use selected frame */ 563*5796c8dcSSimon Schubert if (type == USE_SELECTED_FRAME) 564*5796c8dcSSimon Schubert var->root->floating = 1; 565*5796c8dcSSimon Schubert 566*5796c8dcSSimon Schubert block = NULL; 567*5796c8dcSSimon Schubert if (fi != NULL) 568*5796c8dcSSimon Schubert block = get_frame_block (fi, 0); 569*5796c8dcSSimon Schubert 570*5796c8dcSSimon Schubert p = expression; 571*5796c8dcSSimon Schubert innermost_block = NULL; 572*5796c8dcSSimon Schubert /* Wrap the call to parse expression, so we can 573*5796c8dcSSimon Schubert return a sensible error. */ 574*5796c8dcSSimon Schubert if (!gdb_parse_exp_1 (&p, block, 0, &var->root->exp)) 575*5796c8dcSSimon Schubert { 576*5796c8dcSSimon Schubert return NULL; 577*5796c8dcSSimon Schubert } 578*5796c8dcSSimon Schubert 579*5796c8dcSSimon Schubert /* Don't allow variables to be created for types. */ 580*5796c8dcSSimon Schubert if (var->root->exp->elts[0].opcode == OP_TYPE) 581*5796c8dcSSimon Schubert { 582*5796c8dcSSimon Schubert do_cleanups (old_chain); 583*5796c8dcSSimon Schubert fprintf_unfiltered (gdb_stderr, "Attempt to use a type name" 584*5796c8dcSSimon Schubert " as an expression.\n"); 585*5796c8dcSSimon Schubert return NULL; 586*5796c8dcSSimon Schubert } 587*5796c8dcSSimon Schubert 588*5796c8dcSSimon Schubert var->format = variable_default_display (var); 589*5796c8dcSSimon Schubert var->root->valid_block = innermost_block; 590*5796c8dcSSimon Schubert var->name = xstrdup (expression); 591*5796c8dcSSimon Schubert /* For a root var, the name and the expr are the same. */ 592*5796c8dcSSimon Schubert var->path_expr = xstrdup (expression); 593*5796c8dcSSimon Schubert 594*5796c8dcSSimon Schubert /* When the frame is different from the current frame, 595*5796c8dcSSimon Schubert we must select the appropriate frame before parsing 596*5796c8dcSSimon Schubert the expression, otherwise the value will not be current. 597*5796c8dcSSimon Schubert Since select_frame is so benign, just call it for all cases. */ 598*5796c8dcSSimon Schubert if (innermost_block) 599*5796c8dcSSimon Schubert { 600*5796c8dcSSimon Schubert /* User could specify explicit FRAME-ADDR which was not found but 601*5796c8dcSSimon Schubert EXPRESSION is frame specific and we would not be able to evaluate 602*5796c8dcSSimon Schubert it correctly next time. With VALID_BLOCK set we must also set 603*5796c8dcSSimon Schubert FRAME and THREAD_ID. */ 604*5796c8dcSSimon Schubert if (fi == NULL) 605*5796c8dcSSimon Schubert error (_("Failed to find the specified frame")); 606*5796c8dcSSimon Schubert 607*5796c8dcSSimon Schubert var->root->frame = get_frame_id (fi); 608*5796c8dcSSimon Schubert var->root->thread_id = pid_to_thread_id (inferior_ptid); 609*5796c8dcSSimon Schubert old_fi = get_selected_frame (NULL); 610*5796c8dcSSimon Schubert select_frame (fi); 611*5796c8dcSSimon Schubert } 612*5796c8dcSSimon Schubert 613*5796c8dcSSimon Schubert /* We definitely need to catch errors here. 614*5796c8dcSSimon Schubert If evaluate_expression succeeds we got the value we wanted. 615*5796c8dcSSimon Schubert But if it fails, we still go on with a call to evaluate_type() */ 616*5796c8dcSSimon Schubert if (!gdb_evaluate_expression (var->root->exp, &value)) 617*5796c8dcSSimon Schubert { 618*5796c8dcSSimon Schubert /* Error getting the value. Try to at least get the 619*5796c8dcSSimon Schubert right type. */ 620*5796c8dcSSimon Schubert struct value *type_only_value = evaluate_type (var->root->exp); 621*5796c8dcSSimon Schubert var->type = value_type (type_only_value); 622*5796c8dcSSimon Schubert } 623*5796c8dcSSimon Schubert else 624*5796c8dcSSimon Schubert var->type = value_type (value); 625*5796c8dcSSimon Schubert 626*5796c8dcSSimon Schubert install_new_value (var, value, 1 /* Initial assignment */); 627*5796c8dcSSimon Schubert 628*5796c8dcSSimon Schubert /* Set language info */ 629*5796c8dcSSimon Schubert lang = variable_language (var); 630*5796c8dcSSimon Schubert var->root->lang = &languages[lang]; 631*5796c8dcSSimon Schubert 632*5796c8dcSSimon Schubert /* Set ourselves as our root */ 633*5796c8dcSSimon Schubert var->root->rootvar = var; 634*5796c8dcSSimon Schubert 635*5796c8dcSSimon Schubert /* Reset the selected frame */ 636*5796c8dcSSimon Schubert if (old_fi != NULL) 637*5796c8dcSSimon Schubert select_frame (old_fi); 638*5796c8dcSSimon Schubert } 639*5796c8dcSSimon Schubert 640*5796c8dcSSimon Schubert /* If the variable object name is null, that means this 641*5796c8dcSSimon Schubert is a temporary variable, so don't install it. */ 642*5796c8dcSSimon Schubert 643*5796c8dcSSimon Schubert if ((var != NULL) && (objname != NULL)) 644*5796c8dcSSimon Schubert { 645*5796c8dcSSimon Schubert var->obj_name = xstrdup (objname); 646*5796c8dcSSimon Schubert 647*5796c8dcSSimon Schubert /* If a varobj name is duplicated, the install will fail so 648*5796c8dcSSimon Schubert we must clenup */ 649*5796c8dcSSimon Schubert if (!install_variable (var)) 650*5796c8dcSSimon Schubert { 651*5796c8dcSSimon Schubert do_cleanups (old_chain); 652*5796c8dcSSimon Schubert return NULL; 653*5796c8dcSSimon Schubert } 654*5796c8dcSSimon Schubert } 655*5796c8dcSSimon Schubert 656*5796c8dcSSimon Schubert discard_cleanups (old_chain); 657*5796c8dcSSimon Schubert return var; 658*5796c8dcSSimon Schubert } 659*5796c8dcSSimon Schubert 660*5796c8dcSSimon Schubert /* Generates an unique name that can be used for a varobj */ 661*5796c8dcSSimon Schubert 662*5796c8dcSSimon Schubert char * 663*5796c8dcSSimon Schubert varobj_gen_name (void) 664*5796c8dcSSimon Schubert { 665*5796c8dcSSimon Schubert static int id = 0; 666*5796c8dcSSimon Schubert char *obj_name; 667*5796c8dcSSimon Schubert 668*5796c8dcSSimon Schubert /* generate a name for this object */ 669*5796c8dcSSimon Schubert id++; 670*5796c8dcSSimon Schubert obj_name = xstrprintf ("var%d", id); 671*5796c8dcSSimon Schubert 672*5796c8dcSSimon Schubert return obj_name; 673*5796c8dcSSimon Schubert } 674*5796c8dcSSimon Schubert 675*5796c8dcSSimon Schubert /* Given an OBJNAME, returns the pointer to the corresponding varobj. Call 676*5796c8dcSSimon Schubert error if OBJNAME cannot be found. */ 677*5796c8dcSSimon Schubert 678*5796c8dcSSimon Schubert struct varobj * 679*5796c8dcSSimon Schubert varobj_get_handle (char *objname) 680*5796c8dcSSimon Schubert { 681*5796c8dcSSimon Schubert struct vlist *cv; 682*5796c8dcSSimon Schubert const char *chp; 683*5796c8dcSSimon Schubert unsigned int index = 0; 684*5796c8dcSSimon Schubert unsigned int i = 1; 685*5796c8dcSSimon Schubert 686*5796c8dcSSimon Schubert for (chp = objname; *chp; chp++) 687*5796c8dcSSimon Schubert { 688*5796c8dcSSimon Schubert index = (index + (i++ * (unsigned int) *chp)) % VAROBJ_TABLE_SIZE; 689*5796c8dcSSimon Schubert } 690*5796c8dcSSimon Schubert 691*5796c8dcSSimon Schubert cv = *(varobj_table + index); 692*5796c8dcSSimon Schubert while ((cv != NULL) && (strcmp (cv->var->obj_name, objname) != 0)) 693*5796c8dcSSimon Schubert cv = cv->next; 694*5796c8dcSSimon Schubert 695*5796c8dcSSimon Schubert if (cv == NULL) 696*5796c8dcSSimon Schubert error (_("Variable object not found")); 697*5796c8dcSSimon Schubert 698*5796c8dcSSimon Schubert return cv->var; 699*5796c8dcSSimon Schubert } 700*5796c8dcSSimon Schubert 701*5796c8dcSSimon Schubert /* Given the handle, return the name of the object */ 702*5796c8dcSSimon Schubert 703*5796c8dcSSimon Schubert char * 704*5796c8dcSSimon Schubert varobj_get_objname (struct varobj *var) 705*5796c8dcSSimon Schubert { 706*5796c8dcSSimon Schubert return var->obj_name; 707*5796c8dcSSimon Schubert } 708*5796c8dcSSimon Schubert 709*5796c8dcSSimon Schubert /* Given the handle, return the expression represented by the object */ 710*5796c8dcSSimon Schubert 711*5796c8dcSSimon Schubert char * 712*5796c8dcSSimon Schubert varobj_get_expression (struct varobj *var) 713*5796c8dcSSimon Schubert { 714*5796c8dcSSimon Schubert return name_of_variable (var); 715*5796c8dcSSimon Schubert } 716*5796c8dcSSimon Schubert 717*5796c8dcSSimon Schubert /* Deletes a varobj and all its children if only_children == 0, 718*5796c8dcSSimon Schubert otherwise deletes only the children; returns a malloc'ed list of all the 719*5796c8dcSSimon Schubert (malloc'ed) names of the variables that have been deleted (NULL terminated) */ 720*5796c8dcSSimon Schubert 721*5796c8dcSSimon Schubert int 722*5796c8dcSSimon Schubert varobj_delete (struct varobj *var, char ***dellist, int only_children) 723*5796c8dcSSimon Schubert { 724*5796c8dcSSimon Schubert int delcount; 725*5796c8dcSSimon Schubert int mycount; 726*5796c8dcSSimon Schubert struct cpstack *result = NULL; 727*5796c8dcSSimon Schubert char **cp; 728*5796c8dcSSimon Schubert 729*5796c8dcSSimon Schubert /* Initialize a stack for temporary results */ 730*5796c8dcSSimon Schubert cppush (&result, NULL); 731*5796c8dcSSimon Schubert 732*5796c8dcSSimon Schubert if (only_children) 733*5796c8dcSSimon Schubert /* Delete only the variable children */ 734*5796c8dcSSimon Schubert delcount = delete_variable (&result, var, 1 /* only the children */ ); 735*5796c8dcSSimon Schubert else 736*5796c8dcSSimon Schubert /* Delete the variable and all its children */ 737*5796c8dcSSimon Schubert delcount = delete_variable (&result, var, 0 /* parent+children */ ); 738*5796c8dcSSimon Schubert 739*5796c8dcSSimon Schubert /* We may have been asked to return a list of what has been deleted */ 740*5796c8dcSSimon Schubert if (dellist != NULL) 741*5796c8dcSSimon Schubert { 742*5796c8dcSSimon Schubert *dellist = xmalloc ((delcount + 1) * sizeof (char *)); 743*5796c8dcSSimon Schubert 744*5796c8dcSSimon Schubert cp = *dellist; 745*5796c8dcSSimon Schubert mycount = delcount; 746*5796c8dcSSimon Schubert *cp = cppop (&result); 747*5796c8dcSSimon Schubert while ((*cp != NULL) && (mycount > 0)) 748*5796c8dcSSimon Schubert { 749*5796c8dcSSimon Schubert mycount--; 750*5796c8dcSSimon Schubert cp++; 751*5796c8dcSSimon Schubert *cp = cppop (&result); 752*5796c8dcSSimon Schubert } 753*5796c8dcSSimon Schubert 754*5796c8dcSSimon Schubert if (mycount || (*cp != NULL)) 755*5796c8dcSSimon Schubert warning (_("varobj_delete: assertion failed - mycount(=%d) <> 0"), 756*5796c8dcSSimon Schubert mycount); 757*5796c8dcSSimon Schubert } 758*5796c8dcSSimon Schubert 759*5796c8dcSSimon Schubert return delcount; 760*5796c8dcSSimon Schubert } 761*5796c8dcSSimon Schubert 762*5796c8dcSSimon Schubert /* Convenience function for varobj_set_visualizer. Instantiate a 763*5796c8dcSSimon Schubert pretty-printer for a given value. */ 764*5796c8dcSSimon Schubert static PyObject * 765*5796c8dcSSimon Schubert instantiate_pretty_printer (PyObject *constructor, struct value *value) 766*5796c8dcSSimon Schubert { 767*5796c8dcSSimon Schubert #if HAVE_PYTHON 768*5796c8dcSSimon Schubert PyObject *val_obj = NULL; 769*5796c8dcSSimon Schubert PyObject *printer; 770*5796c8dcSSimon Schubert 771*5796c8dcSSimon Schubert val_obj = value_to_value_object (value); 772*5796c8dcSSimon Schubert if (! val_obj) 773*5796c8dcSSimon Schubert return NULL; 774*5796c8dcSSimon Schubert 775*5796c8dcSSimon Schubert printer = PyObject_CallFunctionObjArgs (constructor, val_obj, NULL); 776*5796c8dcSSimon Schubert Py_DECREF (val_obj); 777*5796c8dcSSimon Schubert return printer; 778*5796c8dcSSimon Schubert #endif 779*5796c8dcSSimon Schubert return NULL; 780*5796c8dcSSimon Schubert } 781*5796c8dcSSimon Schubert 782*5796c8dcSSimon Schubert /* Set/Get variable object display format */ 783*5796c8dcSSimon Schubert 784*5796c8dcSSimon Schubert enum varobj_display_formats 785*5796c8dcSSimon Schubert varobj_set_display_format (struct varobj *var, 786*5796c8dcSSimon Schubert enum varobj_display_formats format) 787*5796c8dcSSimon Schubert { 788*5796c8dcSSimon Schubert switch (format) 789*5796c8dcSSimon Schubert { 790*5796c8dcSSimon Schubert case FORMAT_NATURAL: 791*5796c8dcSSimon Schubert case FORMAT_BINARY: 792*5796c8dcSSimon Schubert case FORMAT_DECIMAL: 793*5796c8dcSSimon Schubert case FORMAT_HEXADECIMAL: 794*5796c8dcSSimon Schubert case FORMAT_OCTAL: 795*5796c8dcSSimon Schubert var->format = format; 796*5796c8dcSSimon Schubert break; 797*5796c8dcSSimon Schubert 798*5796c8dcSSimon Schubert default: 799*5796c8dcSSimon Schubert var->format = variable_default_display (var); 800*5796c8dcSSimon Schubert } 801*5796c8dcSSimon Schubert 802*5796c8dcSSimon Schubert if (varobj_value_is_changeable_p (var) 803*5796c8dcSSimon Schubert && var->value && !value_lazy (var->value)) 804*5796c8dcSSimon Schubert { 805*5796c8dcSSimon Schubert xfree (var->print_value); 806*5796c8dcSSimon Schubert var->print_value = value_get_print_value (var->value, var->format, var); 807*5796c8dcSSimon Schubert } 808*5796c8dcSSimon Schubert 809*5796c8dcSSimon Schubert return var->format; 810*5796c8dcSSimon Schubert } 811*5796c8dcSSimon Schubert 812*5796c8dcSSimon Schubert enum varobj_display_formats 813*5796c8dcSSimon Schubert varobj_get_display_format (struct varobj *var) 814*5796c8dcSSimon Schubert { 815*5796c8dcSSimon Schubert return var->format; 816*5796c8dcSSimon Schubert } 817*5796c8dcSSimon Schubert 818*5796c8dcSSimon Schubert char * 819*5796c8dcSSimon Schubert varobj_get_display_hint (struct varobj *var) 820*5796c8dcSSimon Schubert { 821*5796c8dcSSimon Schubert char *result = NULL; 822*5796c8dcSSimon Schubert 823*5796c8dcSSimon Schubert #if HAVE_PYTHON 824*5796c8dcSSimon Schubert struct cleanup *back_to = varobj_ensure_python_env (var); 825*5796c8dcSSimon Schubert 826*5796c8dcSSimon Schubert if (var->pretty_printer) 827*5796c8dcSSimon Schubert result = gdbpy_get_display_hint (var->pretty_printer); 828*5796c8dcSSimon Schubert 829*5796c8dcSSimon Schubert do_cleanups (back_to); 830*5796c8dcSSimon Schubert #endif 831*5796c8dcSSimon Schubert 832*5796c8dcSSimon Schubert return result; 833*5796c8dcSSimon Schubert } 834*5796c8dcSSimon Schubert 835*5796c8dcSSimon Schubert /* Return true if the varobj has items after TO, false otherwise. */ 836*5796c8dcSSimon Schubert 837*5796c8dcSSimon Schubert int 838*5796c8dcSSimon Schubert varobj_has_more (struct varobj *var, int to) 839*5796c8dcSSimon Schubert { 840*5796c8dcSSimon Schubert if (VEC_length (varobj_p, var->children) > to) 841*5796c8dcSSimon Schubert return 1; 842*5796c8dcSSimon Schubert return ((to == -1 || VEC_length (varobj_p, var->children) == to) 843*5796c8dcSSimon Schubert && var->saved_item != NULL); 844*5796c8dcSSimon Schubert } 845*5796c8dcSSimon Schubert 846*5796c8dcSSimon Schubert /* If the variable object is bound to a specific thread, that 847*5796c8dcSSimon Schubert is its evaluation can always be done in context of a frame 848*5796c8dcSSimon Schubert inside that thread, returns GDB id of the thread -- which 849*5796c8dcSSimon Schubert is always positive. Otherwise, returns -1. */ 850*5796c8dcSSimon Schubert int 851*5796c8dcSSimon Schubert varobj_get_thread_id (struct varobj *var) 852*5796c8dcSSimon Schubert { 853*5796c8dcSSimon Schubert if (var->root->valid_block && var->root->thread_id > 0) 854*5796c8dcSSimon Schubert return var->root->thread_id; 855*5796c8dcSSimon Schubert else 856*5796c8dcSSimon Schubert return -1; 857*5796c8dcSSimon Schubert } 858*5796c8dcSSimon Schubert 859*5796c8dcSSimon Schubert void 860*5796c8dcSSimon Schubert varobj_set_frozen (struct varobj *var, int frozen) 861*5796c8dcSSimon Schubert { 862*5796c8dcSSimon Schubert /* When a variable is unfrozen, we don't fetch its value. 863*5796c8dcSSimon Schubert The 'not_fetched' flag remains set, so next -var-update 864*5796c8dcSSimon Schubert won't complain. 865*5796c8dcSSimon Schubert 866*5796c8dcSSimon Schubert We don't fetch the value, because for structures the client 867*5796c8dcSSimon Schubert should do -var-update anyway. It would be bad to have different 868*5796c8dcSSimon Schubert client-size logic for structure and other types. */ 869*5796c8dcSSimon Schubert var->frozen = frozen; 870*5796c8dcSSimon Schubert } 871*5796c8dcSSimon Schubert 872*5796c8dcSSimon Schubert int 873*5796c8dcSSimon Schubert varobj_get_frozen (struct varobj *var) 874*5796c8dcSSimon Schubert { 875*5796c8dcSSimon Schubert return var->frozen; 876*5796c8dcSSimon Schubert } 877*5796c8dcSSimon Schubert 878*5796c8dcSSimon Schubert /* A helper function that restricts a range to what is actually 879*5796c8dcSSimon Schubert available in a VEC. This follows the usual rules for the meaning 880*5796c8dcSSimon Schubert of FROM and TO -- if either is negative, the entire range is 881*5796c8dcSSimon Schubert used. */ 882*5796c8dcSSimon Schubert 883*5796c8dcSSimon Schubert static void 884*5796c8dcSSimon Schubert restrict_range (VEC (varobj_p) *children, int *from, int *to) 885*5796c8dcSSimon Schubert { 886*5796c8dcSSimon Schubert if (*from < 0 || *to < 0) 887*5796c8dcSSimon Schubert { 888*5796c8dcSSimon Schubert *from = 0; 889*5796c8dcSSimon Schubert *to = VEC_length (varobj_p, children); 890*5796c8dcSSimon Schubert } 891*5796c8dcSSimon Schubert else 892*5796c8dcSSimon Schubert { 893*5796c8dcSSimon Schubert if (*from > VEC_length (varobj_p, children)) 894*5796c8dcSSimon Schubert *from = VEC_length (varobj_p, children); 895*5796c8dcSSimon Schubert if (*to > VEC_length (varobj_p, children)) 896*5796c8dcSSimon Schubert *to = VEC_length (varobj_p, children); 897*5796c8dcSSimon Schubert if (*from > *to) 898*5796c8dcSSimon Schubert *from = *to; 899*5796c8dcSSimon Schubert } 900*5796c8dcSSimon Schubert } 901*5796c8dcSSimon Schubert 902*5796c8dcSSimon Schubert /* A helper for update_dynamic_varobj_children that installs a new 903*5796c8dcSSimon Schubert child when needed. */ 904*5796c8dcSSimon Schubert 905*5796c8dcSSimon Schubert static void 906*5796c8dcSSimon Schubert install_dynamic_child (struct varobj *var, 907*5796c8dcSSimon Schubert VEC (varobj_p) **changed, 908*5796c8dcSSimon Schubert VEC (varobj_p) **new, 909*5796c8dcSSimon Schubert VEC (varobj_p) **unchanged, 910*5796c8dcSSimon Schubert int *cchanged, 911*5796c8dcSSimon Schubert int index, 912*5796c8dcSSimon Schubert const char *name, 913*5796c8dcSSimon Schubert struct value *value) 914*5796c8dcSSimon Schubert { 915*5796c8dcSSimon Schubert if (VEC_length (varobj_p, var->children) < index + 1) 916*5796c8dcSSimon Schubert { 917*5796c8dcSSimon Schubert /* There's no child yet. */ 918*5796c8dcSSimon Schubert struct varobj *child = varobj_add_child (var, name, value); 919*5796c8dcSSimon Schubert if (new) 920*5796c8dcSSimon Schubert { 921*5796c8dcSSimon Schubert VEC_safe_push (varobj_p, *new, child); 922*5796c8dcSSimon Schubert *cchanged = 1; 923*5796c8dcSSimon Schubert } 924*5796c8dcSSimon Schubert } 925*5796c8dcSSimon Schubert else 926*5796c8dcSSimon Schubert { 927*5796c8dcSSimon Schubert varobj_p existing = VEC_index (varobj_p, var->children, index); 928*5796c8dcSSimon Schubert if (install_new_value (existing, value, 0)) 929*5796c8dcSSimon Schubert { 930*5796c8dcSSimon Schubert if (changed) 931*5796c8dcSSimon Schubert VEC_safe_push (varobj_p, *changed, existing); 932*5796c8dcSSimon Schubert } 933*5796c8dcSSimon Schubert else if (unchanged) 934*5796c8dcSSimon Schubert VEC_safe_push (varobj_p, *unchanged, existing); 935*5796c8dcSSimon Schubert } 936*5796c8dcSSimon Schubert } 937*5796c8dcSSimon Schubert 938*5796c8dcSSimon Schubert #if HAVE_PYTHON 939*5796c8dcSSimon Schubert 940*5796c8dcSSimon Schubert static int 941*5796c8dcSSimon Schubert dynamic_varobj_has_child_method (struct varobj *var) 942*5796c8dcSSimon Schubert { 943*5796c8dcSSimon Schubert struct cleanup *back_to; 944*5796c8dcSSimon Schubert PyObject *printer = var->pretty_printer; 945*5796c8dcSSimon Schubert int result; 946*5796c8dcSSimon Schubert 947*5796c8dcSSimon Schubert back_to = varobj_ensure_python_env (var); 948*5796c8dcSSimon Schubert result = PyObject_HasAttr (printer, gdbpy_children_cst); 949*5796c8dcSSimon Schubert do_cleanups (back_to); 950*5796c8dcSSimon Schubert return result; 951*5796c8dcSSimon Schubert } 952*5796c8dcSSimon Schubert 953*5796c8dcSSimon Schubert #endif 954*5796c8dcSSimon Schubert 955*5796c8dcSSimon Schubert static int 956*5796c8dcSSimon Schubert update_dynamic_varobj_children (struct varobj *var, 957*5796c8dcSSimon Schubert VEC (varobj_p) **changed, 958*5796c8dcSSimon Schubert VEC (varobj_p) **new, 959*5796c8dcSSimon Schubert VEC (varobj_p) **unchanged, 960*5796c8dcSSimon Schubert int *cchanged, 961*5796c8dcSSimon Schubert int update_children, 962*5796c8dcSSimon Schubert int from, 963*5796c8dcSSimon Schubert int to) 964*5796c8dcSSimon Schubert { 965*5796c8dcSSimon Schubert #if HAVE_PYTHON 966*5796c8dcSSimon Schubert struct cleanup *back_to; 967*5796c8dcSSimon Schubert PyObject *children; 968*5796c8dcSSimon Schubert int i; 969*5796c8dcSSimon Schubert PyObject *printer = var->pretty_printer; 970*5796c8dcSSimon Schubert 971*5796c8dcSSimon Schubert back_to = varobj_ensure_python_env (var); 972*5796c8dcSSimon Schubert 973*5796c8dcSSimon Schubert *cchanged = 0; 974*5796c8dcSSimon Schubert if (!PyObject_HasAttr (printer, gdbpy_children_cst)) 975*5796c8dcSSimon Schubert { 976*5796c8dcSSimon Schubert do_cleanups (back_to); 977*5796c8dcSSimon Schubert return 0; 978*5796c8dcSSimon Schubert } 979*5796c8dcSSimon Schubert 980*5796c8dcSSimon Schubert if (update_children || !var->child_iter) 981*5796c8dcSSimon Schubert { 982*5796c8dcSSimon Schubert children = PyObject_CallMethodObjArgs (printer, gdbpy_children_cst, 983*5796c8dcSSimon Schubert NULL); 984*5796c8dcSSimon Schubert 985*5796c8dcSSimon Schubert if (!children) 986*5796c8dcSSimon Schubert { 987*5796c8dcSSimon Schubert gdbpy_print_stack (); 988*5796c8dcSSimon Schubert error (_("Null value returned for children")); 989*5796c8dcSSimon Schubert } 990*5796c8dcSSimon Schubert 991*5796c8dcSSimon Schubert make_cleanup_py_decref (children); 992*5796c8dcSSimon Schubert 993*5796c8dcSSimon Schubert if (!PyIter_Check (children)) 994*5796c8dcSSimon Schubert error (_("Returned value is not iterable")); 995*5796c8dcSSimon Schubert 996*5796c8dcSSimon Schubert Py_XDECREF (var->child_iter); 997*5796c8dcSSimon Schubert var->child_iter = PyObject_GetIter (children); 998*5796c8dcSSimon Schubert if (!var->child_iter) 999*5796c8dcSSimon Schubert { 1000*5796c8dcSSimon Schubert gdbpy_print_stack (); 1001*5796c8dcSSimon Schubert error (_("Could not get children iterator")); 1002*5796c8dcSSimon Schubert } 1003*5796c8dcSSimon Schubert 1004*5796c8dcSSimon Schubert Py_XDECREF (var->saved_item); 1005*5796c8dcSSimon Schubert var->saved_item = NULL; 1006*5796c8dcSSimon Schubert 1007*5796c8dcSSimon Schubert i = 0; 1008*5796c8dcSSimon Schubert } 1009*5796c8dcSSimon Schubert else 1010*5796c8dcSSimon Schubert i = VEC_length (varobj_p, var->children); 1011*5796c8dcSSimon Schubert 1012*5796c8dcSSimon Schubert /* We ask for one extra child, so that MI can report whether there 1013*5796c8dcSSimon Schubert are more children. */ 1014*5796c8dcSSimon Schubert for (; to < 0 || i < to + 1; ++i) 1015*5796c8dcSSimon Schubert { 1016*5796c8dcSSimon Schubert PyObject *item; 1017*5796c8dcSSimon Schubert 1018*5796c8dcSSimon Schubert /* See if there was a leftover from last time. */ 1019*5796c8dcSSimon Schubert if (var->saved_item) 1020*5796c8dcSSimon Schubert { 1021*5796c8dcSSimon Schubert item = var->saved_item; 1022*5796c8dcSSimon Schubert var->saved_item = NULL; 1023*5796c8dcSSimon Schubert } 1024*5796c8dcSSimon Schubert else 1025*5796c8dcSSimon Schubert item = PyIter_Next (var->child_iter); 1026*5796c8dcSSimon Schubert 1027*5796c8dcSSimon Schubert if (!item) 1028*5796c8dcSSimon Schubert break; 1029*5796c8dcSSimon Schubert 1030*5796c8dcSSimon Schubert /* We don't want to push the extra child on any report list. */ 1031*5796c8dcSSimon Schubert if (to < 0 || i < to) 1032*5796c8dcSSimon Schubert { 1033*5796c8dcSSimon Schubert PyObject *py_v; 1034*5796c8dcSSimon Schubert char *name; 1035*5796c8dcSSimon Schubert struct value *v; 1036*5796c8dcSSimon Schubert struct cleanup *inner; 1037*5796c8dcSSimon Schubert int can_mention = from < 0 || i >= from; 1038*5796c8dcSSimon Schubert 1039*5796c8dcSSimon Schubert inner = make_cleanup_py_decref (item); 1040*5796c8dcSSimon Schubert 1041*5796c8dcSSimon Schubert if (!PyArg_ParseTuple (item, "sO", &name, &py_v)) 1042*5796c8dcSSimon Schubert error (_("Invalid item from the child list")); 1043*5796c8dcSSimon Schubert 1044*5796c8dcSSimon Schubert v = convert_value_from_python (py_v); 1045*5796c8dcSSimon Schubert install_dynamic_child (var, can_mention ? changed : NULL, 1046*5796c8dcSSimon Schubert can_mention ? new : NULL, 1047*5796c8dcSSimon Schubert can_mention ? unchanged : NULL, 1048*5796c8dcSSimon Schubert can_mention ? cchanged : NULL, i, name, v); 1049*5796c8dcSSimon Schubert do_cleanups (inner); 1050*5796c8dcSSimon Schubert } 1051*5796c8dcSSimon Schubert else 1052*5796c8dcSSimon Schubert { 1053*5796c8dcSSimon Schubert Py_XDECREF (var->saved_item); 1054*5796c8dcSSimon Schubert var->saved_item = item; 1055*5796c8dcSSimon Schubert 1056*5796c8dcSSimon Schubert /* We want to truncate the child list just before this 1057*5796c8dcSSimon Schubert element. */ 1058*5796c8dcSSimon Schubert break; 1059*5796c8dcSSimon Schubert } 1060*5796c8dcSSimon Schubert } 1061*5796c8dcSSimon Schubert 1062*5796c8dcSSimon Schubert if (i < VEC_length (varobj_p, var->children)) 1063*5796c8dcSSimon Schubert { 1064*5796c8dcSSimon Schubert int j; 1065*5796c8dcSSimon Schubert *cchanged = 1; 1066*5796c8dcSSimon Schubert for (j = i; j < VEC_length (varobj_p, var->children); ++j) 1067*5796c8dcSSimon Schubert varobj_delete (VEC_index (varobj_p, var->children, j), NULL, 0); 1068*5796c8dcSSimon Schubert VEC_truncate (varobj_p, var->children, i); 1069*5796c8dcSSimon Schubert } 1070*5796c8dcSSimon Schubert 1071*5796c8dcSSimon Schubert /* If there are fewer children than requested, note that the list of 1072*5796c8dcSSimon Schubert children changed. */ 1073*5796c8dcSSimon Schubert if (to >= 0 && VEC_length (varobj_p, var->children) < to) 1074*5796c8dcSSimon Schubert *cchanged = 1; 1075*5796c8dcSSimon Schubert 1076*5796c8dcSSimon Schubert var->num_children = VEC_length (varobj_p, var->children); 1077*5796c8dcSSimon Schubert 1078*5796c8dcSSimon Schubert do_cleanups (back_to); 1079*5796c8dcSSimon Schubert 1080*5796c8dcSSimon Schubert return 1; 1081*5796c8dcSSimon Schubert #else 1082*5796c8dcSSimon Schubert gdb_assert (0 && "should never be called if Python is not enabled"); 1083*5796c8dcSSimon Schubert #endif 1084*5796c8dcSSimon Schubert } 1085*5796c8dcSSimon Schubert 1086*5796c8dcSSimon Schubert int 1087*5796c8dcSSimon Schubert varobj_get_num_children (struct varobj *var) 1088*5796c8dcSSimon Schubert { 1089*5796c8dcSSimon Schubert if (var->num_children == -1) 1090*5796c8dcSSimon Schubert { 1091*5796c8dcSSimon Schubert if (var->pretty_printer) 1092*5796c8dcSSimon Schubert { 1093*5796c8dcSSimon Schubert int dummy; 1094*5796c8dcSSimon Schubert 1095*5796c8dcSSimon Schubert /* If we have a dynamic varobj, don't report -1 children. 1096*5796c8dcSSimon Schubert So, try to fetch some children first. */ 1097*5796c8dcSSimon Schubert update_dynamic_varobj_children (var, NULL, NULL, NULL, &dummy, 1098*5796c8dcSSimon Schubert 0, 0, 0); 1099*5796c8dcSSimon Schubert } 1100*5796c8dcSSimon Schubert else 1101*5796c8dcSSimon Schubert var->num_children = number_of_children (var); 1102*5796c8dcSSimon Schubert } 1103*5796c8dcSSimon Schubert 1104*5796c8dcSSimon Schubert return var->num_children >= 0 ? var->num_children : 0; 1105*5796c8dcSSimon Schubert } 1106*5796c8dcSSimon Schubert 1107*5796c8dcSSimon Schubert /* Creates a list of the immediate children of a variable object; 1108*5796c8dcSSimon Schubert the return code is the number of such children or -1 on error */ 1109*5796c8dcSSimon Schubert 1110*5796c8dcSSimon Schubert VEC (varobj_p)* 1111*5796c8dcSSimon Schubert varobj_list_children (struct varobj *var, int *from, int *to) 1112*5796c8dcSSimon Schubert { 1113*5796c8dcSSimon Schubert struct varobj *child; 1114*5796c8dcSSimon Schubert char *name; 1115*5796c8dcSSimon Schubert int i, children_changed; 1116*5796c8dcSSimon Schubert 1117*5796c8dcSSimon Schubert var->children_requested = 1; 1118*5796c8dcSSimon Schubert 1119*5796c8dcSSimon Schubert if (var->pretty_printer) 1120*5796c8dcSSimon Schubert { 1121*5796c8dcSSimon Schubert /* This, in theory, can result in the number of children changing without 1122*5796c8dcSSimon Schubert frontend noticing. But well, calling -var-list-children on the same 1123*5796c8dcSSimon Schubert varobj twice is not something a sane frontend would do. */ 1124*5796c8dcSSimon Schubert update_dynamic_varobj_children (var, NULL, NULL, NULL, &children_changed, 1125*5796c8dcSSimon Schubert 0, 0, *to); 1126*5796c8dcSSimon Schubert restrict_range (var->children, from, to); 1127*5796c8dcSSimon Schubert return var->children; 1128*5796c8dcSSimon Schubert } 1129*5796c8dcSSimon Schubert 1130*5796c8dcSSimon Schubert if (var->num_children == -1) 1131*5796c8dcSSimon Schubert var->num_children = number_of_children (var); 1132*5796c8dcSSimon Schubert 1133*5796c8dcSSimon Schubert /* If that failed, give up. */ 1134*5796c8dcSSimon Schubert if (var->num_children == -1) 1135*5796c8dcSSimon Schubert return var->children; 1136*5796c8dcSSimon Schubert 1137*5796c8dcSSimon Schubert /* If we're called when the list of children is not yet initialized, 1138*5796c8dcSSimon Schubert allocate enough elements in it. */ 1139*5796c8dcSSimon Schubert while (VEC_length (varobj_p, var->children) < var->num_children) 1140*5796c8dcSSimon Schubert VEC_safe_push (varobj_p, var->children, NULL); 1141*5796c8dcSSimon Schubert 1142*5796c8dcSSimon Schubert for (i = 0; i < var->num_children; i++) 1143*5796c8dcSSimon Schubert { 1144*5796c8dcSSimon Schubert varobj_p existing = VEC_index (varobj_p, var->children, i); 1145*5796c8dcSSimon Schubert 1146*5796c8dcSSimon Schubert if (existing == NULL) 1147*5796c8dcSSimon Schubert { 1148*5796c8dcSSimon Schubert /* Either it's the first call to varobj_list_children for 1149*5796c8dcSSimon Schubert this variable object, and the child was never created, 1150*5796c8dcSSimon Schubert or it was explicitly deleted by the client. */ 1151*5796c8dcSSimon Schubert name = name_of_child (var, i); 1152*5796c8dcSSimon Schubert existing = create_child (var, i, name); 1153*5796c8dcSSimon Schubert VEC_replace (varobj_p, var->children, i, existing); 1154*5796c8dcSSimon Schubert } 1155*5796c8dcSSimon Schubert } 1156*5796c8dcSSimon Schubert 1157*5796c8dcSSimon Schubert restrict_range (var->children, from, to); 1158*5796c8dcSSimon Schubert return var->children; 1159*5796c8dcSSimon Schubert } 1160*5796c8dcSSimon Schubert 1161*5796c8dcSSimon Schubert static struct varobj * 1162*5796c8dcSSimon Schubert varobj_add_child (struct varobj *var, const char *name, struct value *value) 1163*5796c8dcSSimon Schubert { 1164*5796c8dcSSimon Schubert varobj_p v = create_child_with_value (var, 1165*5796c8dcSSimon Schubert VEC_length (varobj_p, var->children), 1166*5796c8dcSSimon Schubert name, value); 1167*5796c8dcSSimon Schubert VEC_safe_push (varobj_p, var->children, v); 1168*5796c8dcSSimon Schubert return v; 1169*5796c8dcSSimon Schubert } 1170*5796c8dcSSimon Schubert 1171*5796c8dcSSimon Schubert /* Obtain the type of an object Variable as a string similar to the one gdb 1172*5796c8dcSSimon Schubert prints on the console */ 1173*5796c8dcSSimon Schubert 1174*5796c8dcSSimon Schubert char * 1175*5796c8dcSSimon Schubert varobj_get_type (struct varobj *var) 1176*5796c8dcSSimon Schubert { 1177*5796c8dcSSimon Schubert /* For the "fake" variables, do not return a type. (It's type is 1178*5796c8dcSSimon Schubert NULL, too.) 1179*5796c8dcSSimon Schubert Do not return a type for invalid variables as well. */ 1180*5796c8dcSSimon Schubert if (CPLUS_FAKE_CHILD (var) || !var->root->is_valid) 1181*5796c8dcSSimon Schubert return NULL; 1182*5796c8dcSSimon Schubert 1183*5796c8dcSSimon Schubert return type_to_string (var->type); 1184*5796c8dcSSimon Schubert } 1185*5796c8dcSSimon Schubert 1186*5796c8dcSSimon Schubert /* Obtain the type of an object variable. */ 1187*5796c8dcSSimon Schubert 1188*5796c8dcSSimon Schubert struct type * 1189*5796c8dcSSimon Schubert varobj_get_gdb_type (struct varobj *var) 1190*5796c8dcSSimon Schubert { 1191*5796c8dcSSimon Schubert return var->type; 1192*5796c8dcSSimon Schubert } 1193*5796c8dcSSimon Schubert 1194*5796c8dcSSimon Schubert /* Return a pointer to the full rooted expression of varobj VAR. 1195*5796c8dcSSimon Schubert If it has not been computed yet, compute it. */ 1196*5796c8dcSSimon Schubert char * 1197*5796c8dcSSimon Schubert varobj_get_path_expr (struct varobj *var) 1198*5796c8dcSSimon Schubert { 1199*5796c8dcSSimon Schubert if (var->path_expr != NULL) 1200*5796c8dcSSimon Schubert return var->path_expr; 1201*5796c8dcSSimon Schubert else 1202*5796c8dcSSimon Schubert { 1203*5796c8dcSSimon Schubert /* For root varobjs, we initialize path_expr 1204*5796c8dcSSimon Schubert when creating varobj, so here it should be 1205*5796c8dcSSimon Schubert child varobj. */ 1206*5796c8dcSSimon Schubert gdb_assert (!is_root_p (var)); 1207*5796c8dcSSimon Schubert return (*var->root->lang->path_expr_of_child) (var); 1208*5796c8dcSSimon Schubert } 1209*5796c8dcSSimon Schubert } 1210*5796c8dcSSimon Schubert 1211*5796c8dcSSimon Schubert enum varobj_languages 1212*5796c8dcSSimon Schubert varobj_get_language (struct varobj *var) 1213*5796c8dcSSimon Schubert { 1214*5796c8dcSSimon Schubert return variable_language (var); 1215*5796c8dcSSimon Schubert } 1216*5796c8dcSSimon Schubert 1217*5796c8dcSSimon Schubert int 1218*5796c8dcSSimon Schubert varobj_get_attributes (struct varobj *var) 1219*5796c8dcSSimon Schubert { 1220*5796c8dcSSimon Schubert int attributes = 0; 1221*5796c8dcSSimon Schubert 1222*5796c8dcSSimon Schubert if (varobj_editable_p (var)) 1223*5796c8dcSSimon Schubert /* FIXME: define masks for attributes */ 1224*5796c8dcSSimon Schubert attributes |= 0x00000001; /* Editable */ 1225*5796c8dcSSimon Schubert 1226*5796c8dcSSimon Schubert return attributes; 1227*5796c8dcSSimon Schubert } 1228*5796c8dcSSimon Schubert 1229*5796c8dcSSimon Schubert int 1230*5796c8dcSSimon Schubert varobj_pretty_printed_p (struct varobj *var) 1231*5796c8dcSSimon Schubert { 1232*5796c8dcSSimon Schubert return var->pretty_printer != NULL; 1233*5796c8dcSSimon Schubert } 1234*5796c8dcSSimon Schubert 1235*5796c8dcSSimon Schubert char * 1236*5796c8dcSSimon Schubert varobj_get_formatted_value (struct varobj *var, 1237*5796c8dcSSimon Schubert enum varobj_display_formats format) 1238*5796c8dcSSimon Schubert { 1239*5796c8dcSSimon Schubert return my_value_of_variable (var, format); 1240*5796c8dcSSimon Schubert } 1241*5796c8dcSSimon Schubert 1242*5796c8dcSSimon Schubert char * 1243*5796c8dcSSimon Schubert varobj_get_value (struct varobj *var) 1244*5796c8dcSSimon Schubert { 1245*5796c8dcSSimon Schubert return my_value_of_variable (var, var->format); 1246*5796c8dcSSimon Schubert } 1247*5796c8dcSSimon Schubert 1248*5796c8dcSSimon Schubert /* Set the value of an object variable (if it is editable) to the 1249*5796c8dcSSimon Schubert value of the given expression */ 1250*5796c8dcSSimon Schubert /* Note: Invokes functions that can call error() */ 1251*5796c8dcSSimon Schubert 1252*5796c8dcSSimon Schubert int 1253*5796c8dcSSimon Schubert varobj_set_value (struct varobj *var, char *expression) 1254*5796c8dcSSimon Schubert { 1255*5796c8dcSSimon Schubert struct value *val; 1256*5796c8dcSSimon Schubert int offset = 0; 1257*5796c8dcSSimon Schubert int error = 0; 1258*5796c8dcSSimon Schubert 1259*5796c8dcSSimon Schubert /* The argument "expression" contains the variable's new value. 1260*5796c8dcSSimon Schubert We need to first construct a legal expression for this -- ugh! */ 1261*5796c8dcSSimon Schubert /* Does this cover all the bases? */ 1262*5796c8dcSSimon Schubert struct expression *exp; 1263*5796c8dcSSimon Schubert struct value *value; 1264*5796c8dcSSimon Schubert int saved_input_radix = input_radix; 1265*5796c8dcSSimon Schubert char *s = expression; 1266*5796c8dcSSimon Schubert int i; 1267*5796c8dcSSimon Schubert 1268*5796c8dcSSimon Schubert gdb_assert (varobj_editable_p (var)); 1269*5796c8dcSSimon Schubert 1270*5796c8dcSSimon Schubert input_radix = 10; /* ALWAYS reset to decimal temporarily */ 1271*5796c8dcSSimon Schubert exp = parse_exp_1 (&s, 0, 0); 1272*5796c8dcSSimon Schubert if (!gdb_evaluate_expression (exp, &value)) 1273*5796c8dcSSimon Schubert { 1274*5796c8dcSSimon Schubert /* We cannot proceed without a valid expression. */ 1275*5796c8dcSSimon Schubert xfree (exp); 1276*5796c8dcSSimon Schubert return 0; 1277*5796c8dcSSimon Schubert } 1278*5796c8dcSSimon Schubert 1279*5796c8dcSSimon Schubert /* All types that are editable must also be changeable. */ 1280*5796c8dcSSimon Schubert gdb_assert (varobj_value_is_changeable_p (var)); 1281*5796c8dcSSimon Schubert 1282*5796c8dcSSimon Schubert /* The value of a changeable variable object must not be lazy. */ 1283*5796c8dcSSimon Schubert gdb_assert (!value_lazy (var->value)); 1284*5796c8dcSSimon Schubert 1285*5796c8dcSSimon Schubert /* Need to coerce the input. We want to check if the 1286*5796c8dcSSimon Schubert value of the variable object will be different 1287*5796c8dcSSimon Schubert after assignment, and the first thing value_assign 1288*5796c8dcSSimon Schubert does is coerce the input. 1289*5796c8dcSSimon Schubert For example, if we are assigning an array to a pointer variable we 1290*5796c8dcSSimon Schubert should compare the pointer with the the array's address, not with the 1291*5796c8dcSSimon Schubert array's content. */ 1292*5796c8dcSSimon Schubert value = coerce_array (value); 1293*5796c8dcSSimon Schubert 1294*5796c8dcSSimon Schubert /* The new value may be lazy. gdb_value_assign, or 1295*5796c8dcSSimon Schubert rather value_contents, will take care of this. 1296*5796c8dcSSimon Schubert If fetching of the new value will fail, gdb_value_assign 1297*5796c8dcSSimon Schubert with catch the exception. */ 1298*5796c8dcSSimon Schubert if (!gdb_value_assign (var->value, value, &val)) 1299*5796c8dcSSimon Schubert return 0; 1300*5796c8dcSSimon Schubert 1301*5796c8dcSSimon Schubert /* If the value has changed, record it, so that next -var-update can 1302*5796c8dcSSimon Schubert report this change. If a variable had a value of '1', we've set it 1303*5796c8dcSSimon Schubert to '333' and then set again to '1', when -var-update will report this 1304*5796c8dcSSimon Schubert variable as changed -- because the first assignment has set the 1305*5796c8dcSSimon Schubert 'updated' flag. There's no need to optimize that, because return value 1306*5796c8dcSSimon Schubert of -var-update should be considered an approximation. */ 1307*5796c8dcSSimon Schubert var->updated = install_new_value (var, val, 0 /* Compare values. */); 1308*5796c8dcSSimon Schubert input_radix = saved_input_radix; 1309*5796c8dcSSimon Schubert return 1; 1310*5796c8dcSSimon Schubert } 1311*5796c8dcSSimon Schubert 1312*5796c8dcSSimon Schubert #if HAVE_PYTHON 1313*5796c8dcSSimon Schubert 1314*5796c8dcSSimon Schubert /* A helper function to install a constructor function and visualizer 1315*5796c8dcSSimon Schubert in a varobj. */ 1316*5796c8dcSSimon Schubert 1317*5796c8dcSSimon Schubert static void 1318*5796c8dcSSimon Schubert install_visualizer (struct varobj *var, PyObject *constructor, 1319*5796c8dcSSimon Schubert PyObject *visualizer) 1320*5796c8dcSSimon Schubert { 1321*5796c8dcSSimon Schubert Py_XDECREF (var->constructor); 1322*5796c8dcSSimon Schubert var->constructor = constructor; 1323*5796c8dcSSimon Schubert 1324*5796c8dcSSimon Schubert Py_XDECREF (var->pretty_printer); 1325*5796c8dcSSimon Schubert var->pretty_printer = visualizer; 1326*5796c8dcSSimon Schubert 1327*5796c8dcSSimon Schubert Py_XDECREF (var->child_iter); 1328*5796c8dcSSimon Schubert var->child_iter = NULL; 1329*5796c8dcSSimon Schubert } 1330*5796c8dcSSimon Schubert 1331*5796c8dcSSimon Schubert /* Install the default visualizer for VAR. */ 1332*5796c8dcSSimon Schubert 1333*5796c8dcSSimon Schubert static void 1334*5796c8dcSSimon Schubert install_default_visualizer (struct varobj *var) 1335*5796c8dcSSimon Schubert { 1336*5796c8dcSSimon Schubert if (pretty_printing) 1337*5796c8dcSSimon Schubert { 1338*5796c8dcSSimon Schubert PyObject *pretty_printer = NULL; 1339*5796c8dcSSimon Schubert 1340*5796c8dcSSimon Schubert if (var->value) 1341*5796c8dcSSimon Schubert { 1342*5796c8dcSSimon Schubert pretty_printer = gdbpy_get_varobj_pretty_printer (var->value); 1343*5796c8dcSSimon Schubert if (! pretty_printer) 1344*5796c8dcSSimon Schubert { 1345*5796c8dcSSimon Schubert gdbpy_print_stack (); 1346*5796c8dcSSimon Schubert error (_("Cannot instantiate printer for default visualizer")); 1347*5796c8dcSSimon Schubert } 1348*5796c8dcSSimon Schubert } 1349*5796c8dcSSimon Schubert 1350*5796c8dcSSimon Schubert if (pretty_printer == Py_None) 1351*5796c8dcSSimon Schubert { 1352*5796c8dcSSimon Schubert Py_DECREF (pretty_printer); 1353*5796c8dcSSimon Schubert pretty_printer = NULL; 1354*5796c8dcSSimon Schubert } 1355*5796c8dcSSimon Schubert 1356*5796c8dcSSimon Schubert install_visualizer (var, NULL, pretty_printer); 1357*5796c8dcSSimon Schubert } 1358*5796c8dcSSimon Schubert } 1359*5796c8dcSSimon Schubert 1360*5796c8dcSSimon Schubert /* Instantiate and install a visualizer for VAR using CONSTRUCTOR to 1361*5796c8dcSSimon Schubert make a new object. */ 1362*5796c8dcSSimon Schubert 1363*5796c8dcSSimon Schubert static void 1364*5796c8dcSSimon Schubert construct_visualizer (struct varobj *var, PyObject *constructor) 1365*5796c8dcSSimon Schubert { 1366*5796c8dcSSimon Schubert PyObject *pretty_printer; 1367*5796c8dcSSimon Schubert 1368*5796c8dcSSimon Schubert Py_INCREF (constructor); 1369*5796c8dcSSimon Schubert if (constructor == Py_None) 1370*5796c8dcSSimon Schubert pretty_printer = NULL; 1371*5796c8dcSSimon Schubert else 1372*5796c8dcSSimon Schubert { 1373*5796c8dcSSimon Schubert pretty_printer = instantiate_pretty_printer (constructor, var->value); 1374*5796c8dcSSimon Schubert if (! pretty_printer) 1375*5796c8dcSSimon Schubert { 1376*5796c8dcSSimon Schubert gdbpy_print_stack (); 1377*5796c8dcSSimon Schubert Py_DECREF (constructor); 1378*5796c8dcSSimon Schubert constructor = Py_None; 1379*5796c8dcSSimon Schubert Py_INCREF (constructor); 1380*5796c8dcSSimon Schubert } 1381*5796c8dcSSimon Schubert 1382*5796c8dcSSimon Schubert if (pretty_printer == Py_None) 1383*5796c8dcSSimon Schubert { 1384*5796c8dcSSimon Schubert Py_DECREF (pretty_printer); 1385*5796c8dcSSimon Schubert pretty_printer = NULL; 1386*5796c8dcSSimon Schubert } 1387*5796c8dcSSimon Schubert } 1388*5796c8dcSSimon Schubert 1389*5796c8dcSSimon Schubert install_visualizer (var, constructor, pretty_printer); 1390*5796c8dcSSimon Schubert } 1391*5796c8dcSSimon Schubert 1392*5796c8dcSSimon Schubert #endif /* HAVE_PYTHON */ 1393*5796c8dcSSimon Schubert 1394*5796c8dcSSimon Schubert /* A helper function for install_new_value. This creates and installs 1395*5796c8dcSSimon Schubert a visualizer for VAR, if appropriate. */ 1396*5796c8dcSSimon Schubert 1397*5796c8dcSSimon Schubert static void 1398*5796c8dcSSimon Schubert install_new_value_visualizer (struct varobj *var) 1399*5796c8dcSSimon Schubert { 1400*5796c8dcSSimon Schubert #if HAVE_PYTHON 1401*5796c8dcSSimon Schubert /* If the constructor is None, then we want the raw value. If VAR 1402*5796c8dcSSimon Schubert does not have a value, just skip this. */ 1403*5796c8dcSSimon Schubert if (var->constructor != Py_None && var->value) 1404*5796c8dcSSimon Schubert { 1405*5796c8dcSSimon Schubert struct cleanup *cleanup; 1406*5796c8dcSSimon Schubert PyObject *pretty_printer = NULL; 1407*5796c8dcSSimon Schubert 1408*5796c8dcSSimon Schubert cleanup = varobj_ensure_python_env (var); 1409*5796c8dcSSimon Schubert 1410*5796c8dcSSimon Schubert if (!var->constructor) 1411*5796c8dcSSimon Schubert install_default_visualizer (var); 1412*5796c8dcSSimon Schubert else 1413*5796c8dcSSimon Schubert construct_visualizer (var, var->constructor); 1414*5796c8dcSSimon Schubert 1415*5796c8dcSSimon Schubert do_cleanups (cleanup); 1416*5796c8dcSSimon Schubert } 1417*5796c8dcSSimon Schubert #else 1418*5796c8dcSSimon Schubert /* Do nothing. */ 1419*5796c8dcSSimon Schubert #endif 1420*5796c8dcSSimon Schubert } 1421*5796c8dcSSimon Schubert 1422*5796c8dcSSimon Schubert /* Assign a new value to a variable object. If INITIAL is non-zero, 1423*5796c8dcSSimon Schubert this is the first assignement after the variable object was just 1424*5796c8dcSSimon Schubert created, or changed type. In that case, just assign the value 1425*5796c8dcSSimon Schubert and return 0. 1426*5796c8dcSSimon Schubert Otherwise, assign the new value, and return 1 if the value is different 1427*5796c8dcSSimon Schubert from the current one, 0 otherwise. The comparison is done on textual 1428*5796c8dcSSimon Schubert representation of value. Therefore, some types need not be compared. E.g. 1429*5796c8dcSSimon Schubert for structures the reported value is always "{...}", so no comparison is 1430*5796c8dcSSimon Schubert necessary here. If the old value was NULL and new one is not, or vice versa, 1431*5796c8dcSSimon Schubert we always return 1. 1432*5796c8dcSSimon Schubert 1433*5796c8dcSSimon Schubert The VALUE parameter should not be released -- the function will 1434*5796c8dcSSimon Schubert take care of releasing it when needed. */ 1435*5796c8dcSSimon Schubert static int 1436*5796c8dcSSimon Schubert install_new_value (struct varobj *var, struct value *value, int initial) 1437*5796c8dcSSimon Schubert { 1438*5796c8dcSSimon Schubert int changeable; 1439*5796c8dcSSimon Schubert int need_to_fetch; 1440*5796c8dcSSimon Schubert int changed = 0; 1441*5796c8dcSSimon Schubert int intentionally_not_fetched = 0; 1442*5796c8dcSSimon Schubert char *print_value = NULL; 1443*5796c8dcSSimon Schubert 1444*5796c8dcSSimon Schubert /* We need to know the varobj's type to decide if the value should 1445*5796c8dcSSimon Schubert be fetched or not. C++ fake children (public/protected/private) don't have 1446*5796c8dcSSimon Schubert a type. */ 1447*5796c8dcSSimon Schubert gdb_assert (var->type || CPLUS_FAKE_CHILD (var)); 1448*5796c8dcSSimon Schubert changeable = varobj_value_is_changeable_p (var); 1449*5796c8dcSSimon Schubert 1450*5796c8dcSSimon Schubert /* If the type has custom visualizer, we consider it to be always 1451*5796c8dcSSimon Schubert changeable. FIXME: need to make sure this behaviour will not 1452*5796c8dcSSimon Schubert mess up read-sensitive values. */ 1453*5796c8dcSSimon Schubert if (var->pretty_printer) 1454*5796c8dcSSimon Schubert changeable = 1; 1455*5796c8dcSSimon Schubert 1456*5796c8dcSSimon Schubert need_to_fetch = changeable; 1457*5796c8dcSSimon Schubert 1458*5796c8dcSSimon Schubert /* We are not interested in the address of references, and given 1459*5796c8dcSSimon Schubert that in C++ a reference is not rebindable, it cannot 1460*5796c8dcSSimon Schubert meaningfully change. So, get hold of the real value. */ 1461*5796c8dcSSimon Schubert if (value) 1462*5796c8dcSSimon Schubert value = coerce_ref (value); 1463*5796c8dcSSimon Schubert 1464*5796c8dcSSimon Schubert if (var->type && TYPE_CODE (var->type) == TYPE_CODE_UNION) 1465*5796c8dcSSimon Schubert /* For unions, we need to fetch the value implicitly because 1466*5796c8dcSSimon Schubert of implementation of union member fetch. When gdb 1467*5796c8dcSSimon Schubert creates a value for a field and the value of the enclosing 1468*5796c8dcSSimon Schubert structure is not lazy, it immediately copies the necessary 1469*5796c8dcSSimon Schubert bytes from the enclosing values. If the enclosing value is 1470*5796c8dcSSimon Schubert lazy, the call to value_fetch_lazy on the field will read 1471*5796c8dcSSimon Schubert the data from memory. For unions, that means we'll read the 1472*5796c8dcSSimon Schubert same memory more than once, which is not desirable. So 1473*5796c8dcSSimon Schubert fetch now. */ 1474*5796c8dcSSimon Schubert need_to_fetch = 1; 1475*5796c8dcSSimon Schubert 1476*5796c8dcSSimon Schubert /* The new value might be lazy. If the type is changeable, 1477*5796c8dcSSimon Schubert that is we'll be comparing values of this type, fetch the 1478*5796c8dcSSimon Schubert value now. Otherwise, on the next update the old value 1479*5796c8dcSSimon Schubert will be lazy, which means we've lost that old value. */ 1480*5796c8dcSSimon Schubert if (need_to_fetch && value && value_lazy (value)) 1481*5796c8dcSSimon Schubert { 1482*5796c8dcSSimon Schubert struct varobj *parent = var->parent; 1483*5796c8dcSSimon Schubert int frozen = var->frozen; 1484*5796c8dcSSimon Schubert for (; !frozen && parent; parent = parent->parent) 1485*5796c8dcSSimon Schubert frozen |= parent->frozen; 1486*5796c8dcSSimon Schubert 1487*5796c8dcSSimon Schubert if (frozen && initial) 1488*5796c8dcSSimon Schubert { 1489*5796c8dcSSimon Schubert /* For variables that are frozen, or are children of frozen 1490*5796c8dcSSimon Schubert variables, we don't do fetch on initial assignment. 1491*5796c8dcSSimon Schubert For non-initial assignemnt we do the fetch, since it means we're 1492*5796c8dcSSimon Schubert explicitly asked to compare the new value with the old one. */ 1493*5796c8dcSSimon Schubert intentionally_not_fetched = 1; 1494*5796c8dcSSimon Schubert } 1495*5796c8dcSSimon Schubert else if (!gdb_value_fetch_lazy (value)) 1496*5796c8dcSSimon Schubert { 1497*5796c8dcSSimon Schubert /* Set the value to NULL, so that for the next -var-update, 1498*5796c8dcSSimon Schubert we don't try to compare the new value with this value, 1499*5796c8dcSSimon Schubert that we couldn't even read. */ 1500*5796c8dcSSimon Schubert value = NULL; 1501*5796c8dcSSimon Schubert } 1502*5796c8dcSSimon Schubert } 1503*5796c8dcSSimon Schubert 1504*5796c8dcSSimon Schubert 1505*5796c8dcSSimon Schubert /* Below, we'll be comparing string rendering of old and new 1506*5796c8dcSSimon Schubert values. Don't get string rendering if the value is 1507*5796c8dcSSimon Schubert lazy -- if it is, the code above has decided that the value 1508*5796c8dcSSimon Schubert should not be fetched. */ 1509*5796c8dcSSimon Schubert if (value && !value_lazy (value) && !var->pretty_printer) 1510*5796c8dcSSimon Schubert print_value = value_get_print_value (value, var->format, var); 1511*5796c8dcSSimon Schubert 1512*5796c8dcSSimon Schubert /* If the type is changeable, compare the old and the new values. 1513*5796c8dcSSimon Schubert If this is the initial assignment, we don't have any old value 1514*5796c8dcSSimon Schubert to compare with. */ 1515*5796c8dcSSimon Schubert if (!initial && changeable) 1516*5796c8dcSSimon Schubert { 1517*5796c8dcSSimon Schubert /* If the value of the varobj was changed by -var-set-value, then the 1518*5796c8dcSSimon Schubert value in the varobj and in the target is the same. However, that value 1519*5796c8dcSSimon Schubert is different from the value that the varobj had after the previous 1520*5796c8dcSSimon Schubert -var-update. So need to the varobj as changed. */ 1521*5796c8dcSSimon Schubert if (var->updated) 1522*5796c8dcSSimon Schubert { 1523*5796c8dcSSimon Schubert changed = 1; 1524*5796c8dcSSimon Schubert } 1525*5796c8dcSSimon Schubert else if (! var->pretty_printer) 1526*5796c8dcSSimon Schubert { 1527*5796c8dcSSimon Schubert /* Try to compare the values. That requires that both 1528*5796c8dcSSimon Schubert values are non-lazy. */ 1529*5796c8dcSSimon Schubert if (var->not_fetched && value_lazy (var->value)) 1530*5796c8dcSSimon Schubert { 1531*5796c8dcSSimon Schubert /* This is a frozen varobj and the value was never read. 1532*5796c8dcSSimon Schubert Presumably, UI shows some "never read" indicator. 1533*5796c8dcSSimon Schubert Now that we've fetched the real value, we need to report 1534*5796c8dcSSimon Schubert this varobj as changed so that UI can show the real 1535*5796c8dcSSimon Schubert value. */ 1536*5796c8dcSSimon Schubert changed = 1; 1537*5796c8dcSSimon Schubert } 1538*5796c8dcSSimon Schubert else if (var->value == NULL && value == NULL) 1539*5796c8dcSSimon Schubert /* Equal. */ 1540*5796c8dcSSimon Schubert ; 1541*5796c8dcSSimon Schubert else if (var->value == NULL || value == NULL) 1542*5796c8dcSSimon Schubert { 1543*5796c8dcSSimon Schubert changed = 1; 1544*5796c8dcSSimon Schubert } 1545*5796c8dcSSimon Schubert else 1546*5796c8dcSSimon Schubert { 1547*5796c8dcSSimon Schubert gdb_assert (!value_lazy (var->value)); 1548*5796c8dcSSimon Schubert gdb_assert (!value_lazy (value)); 1549*5796c8dcSSimon Schubert 1550*5796c8dcSSimon Schubert gdb_assert (var->print_value != NULL && print_value != NULL); 1551*5796c8dcSSimon Schubert if (strcmp (var->print_value, print_value) != 0) 1552*5796c8dcSSimon Schubert changed = 1; 1553*5796c8dcSSimon Schubert } 1554*5796c8dcSSimon Schubert } 1555*5796c8dcSSimon Schubert } 1556*5796c8dcSSimon Schubert 1557*5796c8dcSSimon Schubert if (!initial && !changeable) 1558*5796c8dcSSimon Schubert { 1559*5796c8dcSSimon Schubert /* For values that are not changeable, we don't compare the values. 1560*5796c8dcSSimon Schubert However, we want to notice if a value was not NULL and now is NULL, 1561*5796c8dcSSimon Schubert or vise versa, so that we report when top-level varobjs come in scope 1562*5796c8dcSSimon Schubert and leave the scope. */ 1563*5796c8dcSSimon Schubert changed = (var->value != NULL) != (value != NULL); 1564*5796c8dcSSimon Schubert } 1565*5796c8dcSSimon Schubert 1566*5796c8dcSSimon Schubert /* We must always keep the new value, since children depend on it. */ 1567*5796c8dcSSimon Schubert if (var->value != NULL && var->value != value) 1568*5796c8dcSSimon Schubert value_free (var->value); 1569*5796c8dcSSimon Schubert var->value = value; 1570*5796c8dcSSimon Schubert if (value != NULL) 1571*5796c8dcSSimon Schubert value_incref (value); 1572*5796c8dcSSimon Schubert if (value && value_lazy (value) && intentionally_not_fetched) 1573*5796c8dcSSimon Schubert var->not_fetched = 1; 1574*5796c8dcSSimon Schubert else 1575*5796c8dcSSimon Schubert var->not_fetched = 0; 1576*5796c8dcSSimon Schubert var->updated = 0; 1577*5796c8dcSSimon Schubert 1578*5796c8dcSSimon Schubert install_new_value_visualizer (var); 1579*5796c8dcSSimon Schubert 1580*5796c8dcSSimon Schubert /* If we installed a pretty-printer, re-compare the printed version 1581*5796c8dcSSimon Schubert to see if the variable changed. */ 1582*5796c8dcSSimon Schubert if (var->pretty_printer) 1583*5796c8dcSSimon Schubert { 1584*5796c8dcSSimon Schubert xfree (print_value); 1585*5796c8dcSSimon Schubert print_value = value_get_print_value (var->value, var->format, var); 1586*5796c8dcSSimon Schubert if (!var->print_value || strcmp (var->print_value, print_value) != 0) 1587*5796c8dcSSimon Schubert changed = 1; 1588*5796c8dcSSimon Schubert } 1589*5796c8dcSSimon Schubert if (var->print_value) 1590*5796c8dcSSimon Schubert xfree (var->print_value); 1591*5796c8dcSSimon Schubert var->print_value = print_value; 1592*5796c8dcSSimon Schubert 1593*5796c8dcSSimon Schubert gdb_assert (!var->value || value_type (var->value)); 1594*5796c8dcSSimon Schubert 1595*5796c8dcSSimon Schubert return changed; 1596*5796c8dcSSimon Schubert } 1597*5796c8dcSSimon Schubert 1598*5796c8dcSSimon Schubert /* Return the requested range for a varobj. VAR is the varobj. FROM 1599*5796c8dcSSimon Schubert and TO are out parameters; *FROM and *TO will be set to the 1600*5796c8dcSSimon Schubert selected sub-range of VAR. If no range was selected using 1601*5796c8dcSSimon Schubert -var-set-update-range, then both will be -1. */ 1602*5796c8dcSSimon Schubert void 1603*5796c8dcSSimon Schubert varobj_get_child_range (struct varobj *var, int *from, int *to) 1604*5796c8dcSSimon Schubert { 1605*5796c8dcSSimon Schubert *from = var->from; 1606*5796c8dcSSimon Schubert *to = var->to; 1607*5796c8dcSSimon Schubert } 1608*5796c8dcSSimon Schubert 1609*5796c8dcSSimon Schubert /* Set the selected sub-range of children of VAR to start at index 1610*5796c8dcSSimon Schubert FROM and end at index TO. If either FROM or TO is less than zero, 1611*5796c8dcSSimon Schubert this is interpreted as a request for all children. */ 1612*5796c8dcSSimon Schubert void 1613*5796c8dcSSimon Schubert varobj_set_child_range (struct varobj *var, int from, int to) 1614*5796c8dcSSimon Schubert { 1615*5796c8dcSSimon Schubert var->from = from; 1616*5796c8dcSSimon Schubert var->to = to; 1617*5796c8dcSSimon Schubert } 1618*5796c8dcSSimon Schubert 1619*5796c8dcSSimon Schubert void 1620*5796c8dcSSimon Schubert varobj_set_visualizer (struct varobj *var, const char *visualizer) 1621*5796c8dcSSimon Schubert { 1622*5796c8dcSSimon Schubert #if HAVE_PYTHON 1623*5796c8dcSSimon Schubert PyObject *mainmod, *globals, *pretty_printer, *constructor; 1624*5796c8dcSSimon Schubert struct cleanup *back_to, *value; 1625*5796c8dcSSimon Schubert 1626*5796c8dcSSimon Schubert back_to = varobj_ensure_python_env (var); 1627*5796c8dcSSimon Schubert 1628*5796c8dcSSimon Schubert mainmod = PyImport_AddModule ("__main__"); 1629*5796c8dcSSimon Schubert globals = PyModule_GetDict (mainmod); 1630*5796c8dcSSimon Schubert Py_INCREF (globals); 1631*5796c8dcSSimon Schubert make_cleanup_py_decref (globals); 1632*5796c8dcSSimon Schubert 1633*5796c8dcSSimon Schubert constructor = PyRun_String (visualizer, Py_eval_input, globals, globals); 1634*5796c8dcSSimon Schubert 1635*5796c8dcSSimon Schubert if (! constructor) 1636*5796c8dcSSimon Schubert { 1637*5796c8dcSSimon Schubert gdbpy_print_stack (); 1638*5796c8dcSSimon Schubert error (_("Could not evaluate visualizer expression: %s"), visualizer); 1639*5796c8dcSSimon Schubert } 1640*5796c8dcSSimon Schubert 1641*5796c8dcSSimon Schubert construct_visualizer (var, constructor); 1642*5796c8dcSSimon Schubert Py_XDECREF (constructor); 1643*5796c8dcSSimon Schubert 1644*5796c8dcSSimon Schubert /* If there are any children now, wipe them. */ 1645*5796c8dcSSimon Schubert varobj_delete (var, NULL, 1 /* children only */); 1646*5796c8dcSSimon Schubert var->num_children = -1; 1647*5796c8dcSSimon Schubert 1648*5796c8dcSSimon Schubert do_cleanups (back_to); 1649*5796c8dcSSimon Schubert #else 1650*5796c8dcSSimon Schubert error (_("Python support required")); 1651*5796c8dcSSimon Schubert #endif 1652*5796c8dcSSimon Schubert } 1653*5796c8dcSSimon Schubert 1654*5796c8dcSSimon Schubert /* Update the values for a variable and its children. This is a 1655*5796c8dcSSimon Schubert two-pronged attack. First, re-parse the value for the root's 1656*5796c8dcSSimon Schubert expression to see if it's changed. Then go all the way 1657*5796c8dcSSimon Schubert through its children, reconstructing them and noting if they've 1658*5796c8dcSSimon Schubert changed. 1659*5796c8dcSSimon Schubert 1660*5796c8dcSSimon Schubert The EXPLICIT parameter specifies if this call is result 1661*5796c8dcSSimon Schubert of MI request to update this specific variable, or 1662*5796c8dcSSimon Schubert result of implicit -var-update *. For implicit request, we don't 1663*5796c8dcSSimon Schubert update frozen variables. 1664*5796c8dcSSimon Schubert 1665*5796c8dcSSimon Schubert NOTE: This function may delete the caller's varobj. If it 1666*5796c8dcSSimon Schubert returns TYPE_CHANGED, then it has done this and VARP will be modified 1667*5796c8dcSSimon Schubert to point to the new varobj. */ 1668*5796c8dcSSimon Schubert 1669*5796c8dcSSimon Schubert VEC(varobj_update_result) *varobj_update (struct varobj **varp, int explicit) 1670*5796c8dcSSimon Schubert { 1671*5796c8dcSSimon Schubert int changed = 0; 1672*5796c8dcSSimon Schubert int type_changed = 0; 1673*5796c8dcSSimon Schubert int i; 1674*5796c8dcSSimon Schubert int vleft; 1675*5796c8dcSSimon Schubert struct varobj *v; 1676*5796c8dcSSimon Schubert struct varobj **cv; 1677*5796c8dcSSimon Schubert struct varobj **templist = NULL; 1678*5796c8dcSSimon Schubert struct value *new; 1679*5796c8dcSSimon Schubert VEC (varobj_update_result) *stack = NULL; 1680*5796c8dcSSimon Schubert VEC (varobj_update_result) *result = NULL; 1681*5796c8dcSSimon Schubert struct frame_info *fi; 1682*5796c8dcSSimon Schubert 1683*5796c8dcSSimon Schubert /* Frozen means frozen -- we don't check for any change in 1684*5796c8dcSSimon Schubert this varobj, including its going out of scope, or 1685*5796c8dcSSimon Schubert changing type. One use case for frozen varobjs is 1686*5796c8dcSSimon Schubert retaining previously evaluated expressions, and we don't 1687*5796c8dcSSimon Schubert want them to be reevaluated at all. */ 1688*5796c8dcSSimon Schubert if (!explicit && (*varp)->frozen) 1689*5796c8dcSSimon Schubert return result; 1690*5796c8dcSSimon Schubert 1691*5796c8dcSSimon Schubert if (!(*varp)->root->is_valid) 1692*5796c8dcSSimon Schubert { 1693*5796c8dcSSimon Schubert varobj_update_result r = {*varp}; 1694*5796c8dcSSimon Schubert r.status = VAROBJ_INVALID; 1695*5796c8dcSSimon Schubert VEC_safe_push (varobj_update_result, result, &r); 1696*5796c8dcSSimon Schubert return result; 1697*5796c8dcSSimon Schubert } 1698*5796c8dcSSimon Schubert 1699*5796c8dcSSimon Schubert if ((*varp)->root->rootvar == *varp) 1700*5796c8dcSSimon Schubert { 1701*5796c8dcSSimon Schubert varobj_update_result r = {*varp}; 1702*5796c8dcSSimon Schubert r.status = VAROBJ_IN_SCOPE; 1703*5796c8dcSSimon Schubert 1704*5796c8dcSSimon Schubert /* Update the root variable. value_of_root can return NULL 1705*5796c8dcSSimon Schubert if the variable is no longer around, i.e. we stepped out of 1706*5796c8dcSSimon Schubert the frame in which a local existed. We are letting the 1707*5796c8dcSSimon Schubert value_of_root variable dispose of the varobj if the type 1708*5796c8dcSSimon Schubert has changed. */ 1709*5796c8dcSSimon Schubert new = value_of_root (varp, &type_changed); 1710*5796c8dcSSimon Schubert r.varobj = *varp; 1711*5796c8dcSSimon Schubert 1712*5796c8dcSSimon Schubert r.type_changed = type_changed; 1713*5796c8dcSSimon Schubert if (install_new_value ((*varp), new, type_changed)) 1714*5796c8dcSSimon Schubert r.changed = 1; 1715*5796c8dcSSimon Schubert 1716*5796c8dcSSimon Schubert if (new == NULL) 1717*5796c8dcSSimon Schubert r.status = VAROBJ_NOT_IN_SCOPE; 1718*5796c8dcSSimon Schubert r.value_installed = 1; 1719*5796c8dcSSimon Schubert 1720*5796c8dcSSimon Schubert if (r.status == VAROBJ_NOT_IN_SCOPE) 1721*5796c8dcSSimon Schubert { 1722*5796c8dcSSimon Schubert if (r.type_changed || r.changed) 1723*5796c8dcSSimon Schubert VEC_safe_push (varobj_update_result, result, &r); 1724*5796c8dcSSimon Schubert return result; 1725*5796c8dcSSimon Schubert } 1726*5796c8dcSSimon Schubert 1727*5796c8dcSSimon Schubert VEC_safe_push (varobj_update_result, stack, &r); 1728*5796c8dcSSimon Schubert } 1729*5796c8dcSSimon Schubert else 1730*5796c8dcSSimon Schubert { 1731*5796c8dcSSimon Schubert varobj_update_result r = {*varp}; 1732*5796c8dcSSimon Schubert VEC_safe_push (varobj_update_result, stack, &r); 1733*5796c8dcSSimon Schubert } 1734*5796c8dcSSimon Schubert 1735*5796c8dcSSimon Schubert /* Walk through the children, reconstructing them all. */ 1736*5796c8dcSSimon Schubert while (!VEC_empty (varobj_update_result, stack)) 1737*5796c8dcSSimon Schubert { 1738*5796c8dcSSimon Schubert varobj_update_result r = *(VEC_last (varobj_update_result, stack)); 1739*5796c8dcSSimon Schubert struct varobj *v = r.varobj; 1740*5796c8dcSSimon Schubert 1741*5796c8dcSSimon Schubert VEC_pop (varobj_update_result, stack); 1742*5796c8dcSSimon Schubert 1743*5796c8dcSSimon Schubert /* Update this variable, unless it's a root, which is already 1744*5796c8dcSSimon Schubert updated. */ 1745*5796c8dcSSimon Schubert if (!r.value_installed) 1746*5796c8dcSSimon Schubert { 1747*5796c8dcSSimon Schubert new = value_of_child (v->parent, v->index); 1748*5796c8dcSSimon Schubert if (install_new_value (v, new, 0 /* type not changed */)) 1749*5796c8dcSSimon Schubert { 1750*5796c8dcSSimon Schubert r.changed = 1; 1751*5796c8dcSSimon Schubert v->updated = 0; 1752*5796c8dcSSimon Schubert } 1753*5796c8dcSSimon Schubert } 1754*5796c8dcSSimon Schubert 1755*5796c8dcSSimon Schubert /* We probably should not get children of a varobj that has a 1756*5796c8dcSSimon Schubert pretty-printer, but for which -var-list-children was never 1757*5796c8dcSSimon Schubert invoked. */ 1758*5796c8dcSSimon Schubert if (v->pretty_printer) 1759*5796c8dcSSimon Schubert { 1760*5796c8dcSSimon Schubert VEC (varobj_p) *changed = 0, *new = 0, *unchanged = 0; 1761*5796c8dcSSimon Schubert int i, children_changed = 0; 1762*5796c8dcSSimon Schubert 1763*5796c8dcSSimon Schubert if (v->frozen) 1764*5796c8dcSSimon Schubert continue; 1765*5796c8dcSSimon Schubert 1766*5796c8dcSSimon Schubert if (!v->children_requested) 1767*5796c8dcSSimon Schubert { 1768*5796c8dcSSimon Schubert int dummy; 1769*5796c8dcSSimon Schubert 1770*5796c8dcSSimon Schubert /* If we initially did not have potential children, but 1771*5796c8dcSSimon Schubert now we do, consider the varobj as changed. 1772*5796c8dcSSimon Schubert Otherwise, if children were never requested, consider 1773*5796c8dcSSimon Schubert it as unchanged -- presumably, such varobj is not yet 1774*5796c8dcSSimon Schubert expanded in the UI, so we need not bother getting 1775*5796c8dcSSimon Schubert it. */ 1776*5796c8dcSSimon Schubert if (!varobj_has_more (v, 0)) 1777*5796c8dcSSimon Schubert { 1778*5796c8dcSSimon Schubert update_dynamic_varobj_children (v, NULL, NULL, NULL, 1779*5796c8dcSSimon Schubert &dummy, 0, 0, 0); 1780*5796c8dcSSimon Schubert if (varobj_has_more (v, 0)) 1781*5796c8dcSSimon Schubert r.changed = 1; 1782*5796c8dcSSimon Schubert } 1783*5796c8dcSSimon Schubert 1784*5796c8dcSSimon Schubert if (r.changed) 1785*5796c8dcSSimon Schubert VEC_safe_push (varobj_update_result, result, &r); 1786*5796c8dcSSimon Schubert 1787*5796c8dcSSimon Schubert continue; 1788*5796c8dcSSimon Schubert } 1789*5796c8dcSSimon Schubert 1790*5796c8dcSSimon Schubert /* If update_dynamic_varobj_children returns 0, then we have 1791*5796c8dcSSimon Schubert a non-conforming pretty-printer, so we skip it. */ 1792*5796c8dcSSimon Schubert if (update_dynamic_varobj_children (v, &changed, &new, &unchanged, 1793*5796c8dcSSimon Schubert &children_changed, 1, 1794*5796c8dcSSimon Schubert v->from, v->to)) 1795*5796c8dcSSimon Schubert { 1796*5796c8dcSSimon Schubert if (children_changed || new) 1797*5796c8dcSSimon Schubert { 1798*5796c8dcSSimon Schubert r.children_changed = 1; 1799*5796c8dcSSimon Schubert r.new = new; 1800*5796c8dcSSimon Schubert } 1801*5796c8dcSSimon Schubert /* Push in reverse order so that the first child is 1802*5796c8dcSSimon Schubert popped from the work stack first, and so will be 1803*5796c8dcSSimon Schubert added to result first. This does not affect 1804*5796c8dcSSimon Schubert correctness, just "nicer". */ 1805*5796c8dcSSimon Schubert for (i = VEC_length (varobj_p, changed) - 1; i >= 0; --i) 1806*5796c8dcSSimon Schubert { 1807*5796c8dcSSimon Schubert varobj_p tmp = VEC_index (varobj_p, changed, i); 1808*5796c8dcSSimon Schubert varobj_update_result r = {tmp}; 1809*5796c8dcSSimon Schubert r.changed = 1; 1810*5796c8dcSSimon Schubert r.value_installed = 1; 1811*5796c8dcSSimon Schubert VEC_safe_push (varobj_update_result, stack, &r); 1812*5796c8dcSSimon Schubert } 1813*5796c8dcSSimon Schubert for (i = VEC_length (varobj_p, unchanged) - 1; i >= 0; --i) 1814*5796c8dcSSimon Schubert { 1815*5796c8dcSSimon Schubert varobj_p tmp = VEC_index (varobj_p, unchanged, i); 1816*5796c8dcSSimon Schubert if (!tmp->frozen) 1817*5796c8dcSSimon Schubert { 1818*5796c8dcSSimon Schubert varobj_update_result r = {tmp}; 1819*5796c8dcSSimon Schubert r.value_installed = 1; 1820*5796c8dcSSimon Schubert VEC_safe_push (varobj_update_result, stack, &r); 1821*5796c8dcSSimon Schubert } 1822*5796c8dcSSimon Schubert } 1823*5796c8dcSSimon Schubert if (r.changed || r.children_changed) 1824*5796c8dcSSimon Schubert VEC_safe_push (varobj_update_result, result, &r); 1825*5796c8dcSSimon Schubert 1826*5796c8dcSSimon Schubert /* Free CHANGED and UNCHANGED, but not NEW, because NEW 1827*5796c8dcSSimon Schubert has been put into the result vector. */ 1828*5796c8dcSSimon Schubert VEC_free (varobj_p, changed); 1829*5796c8dcSSimon Schubert VEC_free (varobj_p, unchanged); 1830*5796c8dcSSimon Schubert 1831*5796c8dcSSimon Schubert continue; 1832*5796c8dcSSimon Schubert } 1833*5796c8dcSSimon Schubert } 1834*5796c8dcSSimon Schubert 1835*5796c8dcSSimon Schubert /* Push any children. Use reverse order so that the first 1836*5796c8dcSSimon Schubert child is popped from the work stack first, and so 1837*5796c8dcSSimon Schubert will be added to result first. This does not 1838*5796c8dcSSimon Schubert affect correctness, just "nicer". */ 1839*5796c8dcSSimon Schubert for (i = VEC_length (varobj_p, v->children)-1; i >= 0; --i) 1840*5796c8dcSSimon Schubert { 1841*5796c8dcSSimon Schubert varobj_p c = VEC_index (varobj_p, v->children, i); 1842*5796c8dcSSimon Schubert /* Child may be NULL if explicitly deleted by -var-delete. */ 1843*5796c8dcSSimon Schubert if (c != NULL && !c->frozen) 1844*5796c8dcSSimon Schubert { 1845*5796c8dcSSimon Schubert varobj_update_result r = {c}; 1846*5796c8dcSSimon Schubert VEC_safe_push (varobj_update_result, stack, &r); 1847*5796c8dcSSimon Schubert } 1848*5796c8dcSSimon Schubert } 1849*5796c8dcSSimon Schubert 1850*5796c8dcSSimon Schubert if (r.changed || r.type_changed) 1851*5796c8dcSSimon Schubert VEC_safe_push (varobj_update_result, result, &r); 1852*5796c8dcSSimon Schubert } 1853*5796c8dcSSimon Schubert 1854*5796c8dcSSimon Schubert VEC_free (varobj_update_result, stack); 1855*5796c8dcSSimon Schubert 1856*5796c8dcSSimon Schubert return result; 1857*5796c8dcSSimon Schubert } 1858*5796c8dcSSimon Schubert 1859*5796c8dcSSimon Schubert 1860*5796c8dcSSimon Schubert /* Helper functions */ 1861*5796c8dcSSimon Schubert 1862*5796c8dcSSimon Schubert /* 1863*5796c8dcSSimon Schubert * Variable object construction/destruction 1864*5796c8dcSSimon Schubert */ 1865*5796c8dcSSimon Schubert 1866*5796c8dcSSimon Schubert static int 1867*5796c8dcSSimon Schubert delete_variable (struct cpstack **resultp, struct varobj *var, 1868*5796c8dcSSimon Schubert int only_children_p) 1869*5796c8dcSSimon Schubert { 1870*5796c8dcSSimon Schubert int delcount = 0; 1871*5796c8dcSSimon Schubert 1872*5796c8dcSSimon Schubert delete_variable_1 (resultp, &delcount, var, 1873*5796c8dcSSimon Schubert only_children_p, 1 /* remove_from_parent_p */ ); 1874*5796c8dcSSimon Schubert 1875*5796c8dcSSimon Schubert return delcount; 1876*5796c8dcSSimon Schubert } 1877*5796c8dcSSimon Schubert 1878*5796c8dcSSimon Schubert /* Delete the variable object VAR and its children */ 1879*5796c8dcSSimon Schubert /* IMPORTANT NOTE: If we delete a variable which is a child 1880*5796c8dcSSimon Schubert and the parent is not removed we dump core. It must be always 1881*5796c8dcSSimon Schubert initially called with remove_from_parent_p set */ 1882*5796c8dcSSimon Schubert static void 1883*5796c8dcSSimon Schubert delete_variable_1 (struct cpstack **resultp, int *delcountp, 1884*5796c8dcSSimon Schubert struct varobj *var, int only_children_p, 1885*5796c8dcSSimon Schubert int remove_from_parent_p) 1886*5796c8dcSSimon Schubert { 1887*5796c8dcSSimon Schubert int i; 1888*5796c8dcSSimon Schubert 1889*5796c8dcSSimon Schubert /* Delete any children of this variable, too. */ 1890*5796c8dcSSimon Schubert for (i = 0; i < VEC_length (varobj_p, var->children); ++i) 1891*5796c8dcSSimon Schubert { 1892*5796c8dcSSimon Schubert varobj_p child = VEC_index (varobj_p, var->children, i); 1893*5796c8dcSSimon Schubert if (!child) 1894*5796c8dcSSimon Schubert continue; 1895*5796c8dcSSimon Schubert if (!remove_from_parent_p) 1896*5796c8dcSSimon Schubert child->parent = NULL; 1897*5796c8dcSSimon Schubert delete_variable_1 (resultp, delcountp, child, 0, only_children_p); 1898*5796c8dcSSimon Schubert } 1899*5796c8dcSSimon Schubert VEC_free (varobj_p, var->children); 1900*5796c8dcSSimon Schubert 1901*5796c8dcSSimon Schubert /* if we were called to delete only the children we are done here */ 1902*5796c8dcSSimon Schubert if (only_children_p) 1903*5796c8dcSSimon Schubert return; 1904*5796c8dcSSimon Schubert 1905*5796c8dcSSimon Schubert /* Otherwise, add it to the list of deleted ones and proceed to do so */ 1906*5796c8dcSSimon Schubert /* If the name is null, this is a temporary variable, that has not 1907*5796c8dcSSimon Schubert yet been installed, don't report it, it belongs to the caller... */ 1908*5796c8dcSSimon Schubert if (var->obj_name != NULL) 1909*5796c8dcSSimon Schubert { 1910*5796c8dcSSimon Schubert cppush (resultp, xstrdup (var->obj_name)); 1911*5796c8dcSSimon Schubert *delcountp = *delcountp + 1; 1912*5796c8dcSSimon Schubert } 1913*5796c8dcSSimon Schubert 1914*5796c8dcSSimon Schubert /* If this variable has a parent, remove it from its parent's list */ 1915*5796c8dcSSimon Schubert /* OPTIMIZATION: if the parent of this variable is also being deleted, 1916*5796c8dcSSimon Schubert (as indicated by remove_from_parent_p) we don't bother doing an 1917*5796c8dcSSimon Schubert expensive list search to find the element to remove when we are 1918*5796c8dcSSimon Schubert discarding the list afterwards */ 1919*5796c8dcSSimon Schubert if ((remove_from_parent_p) && (var->parent != NULL)) 1920*5796c8dcSSimon Schubert { 1921*5796c8dcSSimon Schubert VEC_replace (varobj_p, var->parent->children, var->index, NULL); 1922*5796c8dcSSimon Schubert } 1923*5796c8dcSSimon Schubert 1924*5796c8dcSSimon Schubert if (var->obj_name != NULL) 1925*5796c8dcSSimon Schubert uninstall_variable (var); 1926*5796c8dcSSimon Schubert 1927*5796c8dcSSimon Schubert /* Free memory associated with this variable */ 1928*5796c8dcSSimon Schubert free_variable (var); 1929*5796c8dcSSimon Schubert } 1930*5796c8dcSSimon Schubert 1931*5796c8dcSSimon Schubert /* Install the given variable VAR with the object name VAR->OBJ_NAME. */ 1932*5796c8dcSSimon Schubert static int 1933*5796c8dcSSimon Schubert install_variable (struct varobj *var) 1934*5796c8dcSSimon Schubert { 1935*5796c8dcSSimon Schubert struct vlist *cv; 1936*5796c8dcSSimon Schubert struct vlist *newvl; 1937*5796c8dcSSimon Schubert const char *chp; 1938*5796c8dcSSimon Schubert unsigned int index = 0; 1939*5796c8dcSSimon Schubert unsigned int i = 1; 1940*5796c8dcSSimon Schubert 1941*5796c8dcSSimon Schubert for (chp = var->obj_name; *chp; chp++) 1942*5796c8dcSSimon Schubert { 1943*5796c8dcSSimon Schubert index = (index + (i++ * (unsigned int) *chp)) % VAROBJ_TABLE_SIZE; 1944*5796c8dcSSimon Schubert } 1945*5796c8dcSSimon Schubert 1946*5796c8dcSSimon Schubert cv = *(varobj_table + index); 1947*5796c8dcSSimon Schubert while ((cv != NULL) && (strcmp (cv->var->obj_name, var->obj_name) != 0)) 1948*5796c8dcSSimon Schubert cv = cv->next; 1949*5796c8dcSSimon Schubert 1950*5796c8dcSSimon Schubert if (cv != NULL) 1951*5796c8dcSSimon Schubert error (_("Duplicate variable object name")); 1952*5796c8dcSSimon Schubert 1953*5796c8dcSSimon Schubert /* Add varobj to hash table */ 1954*5796c8dcSSimon Schubert newvl = xmalloc (sizeof (struct vlist)); 1955*5796c8dcSSimon Schubert newvl->next = *(varobj_table + index); 1956*5796c8dcSSimon Schubert newvl->var = var; 1957*5796c8dcSSimon Schubert *(varobj_table + index) = newvl; 1958*5796c8dcSSimon Schubert 1959*5796c8dcSSimon Schubert /* If root, add varobj to root list */ 1960*5796c8dcSSimon Schubert if (is_root_p (var)) 1961*5796c8dcSSimon Schubert { 1962*5796c8dcSSimon Schubert /* Add to list of root variables */ 1963*5796c8dcSSimon Schubert if (rootlist == NULL) 1964*5796c8dcSSimon Schubert var->root->next = NULL; 1965*5796c8dcSSimon Schubert else 1966*5796c8dcSSimon Schubert var->root->next = rootlist; 1967*5796c8dcSSimon Schubert rootlist = var->root; 1968*5796c8dcSSimon Schubert } 1969*5796c8dcSSimon Schubert 1970*5796c8dcSSimon Schubert return 1; /* OK */ 1971*5796c8dcSSimon Schubert } 1972*5796c8dcSSimon Schubert 1973*5796c8dcSSimon Schubert /* Unistall the object VAR. */ 1974*5796c8dcSSimon Schubert static void 1975*5796c8dcSSimon Schubert uninstall_variable (struct varobj *var) 1976*5796c8dcSSimon Schubert { 1977*5796c8dcSSimon Schubert struct vlist *cv; 1978*5796c8dcSSimon Schubert struct vlist *prev; 1979*5796c8dcSSimon Schubert struct varobj_root *cr; 1980*5796c8dcSSimon Schubert struct varobj_root *prer; 1981*5796c8dcSSimon Schubert const char *chp; 1982*5796c8dcSSimon Schubert unsigned int index = 0; 1983*5796c8dcSSimon Schubert unsigned int i = 1; 1984*5796c8dcSSimon Schubert 1985*5796c8dcSSimon Schubert /* Remove varobj from hash table */ 1986*5796c8dcSSimon Schubert for (chp = var->obj_name; *chp; chp++) 1987*5796c8dcSSimon Schubert { 1988*5796c8dcSSimon Schubert index = (index + (i++ * (unsigned int) *chp)) % VAROBJ_TABLE_SIZE; 1989*5796c8dcSSimon Schubert } 1990*5796c8dcSSimon Schubert 1991*5796c8dcSSimon Schubert cv = *(varobj_table + index); 1992*5796c8dcSSimon Schubert prev = NULL; 1993*5796c8dcSSimon Schubert while ((cv != NULL) && (strcmp (cv->var->obj_name, var->obj_name) != 0)) 1994*5796c8dcSSimon Schubert { 1995*5796c8dcSSimon Schubert prev = cv; 1996*5796c8dcSSimon Schubert cv = cv->next; 1997*5796c8dcSSimon Schubert } 1998*5796c8dcSSimon Schubert 1999*5796c8dcSSimon Schubert if (varobjdebug) 2000*5796c8dcSSimon Schubert fprintf_unfiltered (gdb_stdlog, "Deleting %s\n", var->obj_name); 2001*5796c8dcSSimon Schubert 2002*5796c8dcSSimon Schubert if (cv == NULL) 2003*5796c8dcSSimon Schubert { 2004*5796c8dcSSimon Schubert warning 2005*5796c8dcSSimon Schubert ("Assertion failed: Could not find variable object \"%s\" to delete", 2006*5796c8dcSSimon Schubert var->obj_name); 2007*5796c8dcSSimon Schubert return; 2008*5796c8dcSSimon Schubert } 2009*5796c8dcSSimon Schubert 2010*5796c8dcSSimon Schubert if (prev == NULL) 2011*5796c8dcSSimon Schubert *(varobj_table + index) = cv->next; 2012*5796c8dcSSimon Schubert else 2013*5796c8dcSSimon Schubert prev->next = cv->next; 2014*5796c8dcSSimon Schubert 2015*5796c8dcSSimon Schubert xfree (cv); 2016*5796c8dcSSimon Schubert 2017*5796c8dcSSimon Schubert /* If root, remove varobj from root list */ 2018*5796c8dcSSimon Schubert if (is_root_p (var)) 2019*5796c8dcSSimon Schubert { 2020*5796c8dcSSimon Schubert /* Remove from list of root variables */ 2021*5796c8dcSSimon Schubert if (rootlist == var->root) 2022*5796c8dcSSimon Schubert rootlist = var->root->next; 2023*5796c8dcSSimon Schubert else 2024*5796c8dcSSimon Schubert { 2025*5796c8dcSSimon Schubert prer = NULL; 2026*5796c8dcSSimon Schubert cr = rootlist; 2027*5796c8dcSSimon Schubert while ((cr != NULL) && (cr->rootvar != var)) 2028*5796c8dcSSimon Schubert { 2029*5796c8dcSSimon Schubert prer = cr; 2030*5796c8dcSSimon Schubert cr = cr->next; 2031*5796c8dcSSimon Schubert } 2032*5796c8dcSSimon Schubert if (cr == NULL) 2033*5796c8dcSSimon Schubert { 2034*5796c8dcSSimon Schubert warning 2035*5796c8dcSSimon Schubert ("Assertion failed: Could not find varobj \"%s\" in root list", 2036*5796c8dcSSimon Schubert var->obj_name); 2037*5796c8dcSSimon Schubert return; 2038*5796c8dcSSimon Schubert } 2039*5796c8dcSSimon Schubert if (prer == NULL) 2040*5796c8dcSSimon Schubert rootlist = NULL; 2041*5796c8dcSSimon Schubert else 2042*5796c8dcSSimon Schubert prer->next = cr->next; 2043*5796c8dcSSimon Schubert } 2044*5796c8dcSSimon Schubert } 2045*5796c8dcSSimon Schubert 2046*5796c8dcSSimon Schubert } 2047*5796c8dcSSimon Schubert 2048*5796c8dcSSimon Schubert /* Create and install a child of the parent of the given name */ 2049*5796c8dcSSimon Schubert static struct varobj * 2050*5796c8dcSSimon Schubert create_child (struct varobj *parent, int index, char *name) 2051*5796c8dcSSimon Schubert { 2052*5796c8dcSSimon Schubert return create_child_with_value (parent, index, name, 2053*5796c8dcSSimon Schubert value_of_child (parent, index)); 2054*5796c8dcSSimon Schubert } 2055*5796c8dcSSimon Schubert 2056*5796c8dcSSimon Schubert static struct varobj * 2057*5796c8dcSSimon Schubert create_child_with_value (struct varobj *parent, int index, const char *name, 2058*5796c8dcSSimon Schubert struct value *value) 2059*5796c8dcSSimon Schubert { 2060*5796c8dcSSimon Schubert struct varobj *child; 2061*5796c8dcSSimon Schubert char *childs_name; 2062*5796c8dcSSimon Schubert 2063*5796c8dcSSimon Schubert child = new_variable (); 2064*5796c8dcSSimon Schubert 2065*5796c8dcSSimon Schubert /* name is allocated by name_of_child */ 2066*5796c8dcSSimon Schubert /* FIXME: xstrdup should not be here. */ 2067*5796c8dcSSimon Schubert child->name = xstrdup (name); 2068*5796c8dcSSimon Schubert child->index = index; 2069*5796c8dcSSimon Schubert child->parent = parent; 2070*5796c8dcSSimon Schubert child->root = parent->root; 2071*5796c8dcSSimon Schubert childs_name = xstrprintf ("%s.%s", parent->obj_name, name); 2072*5796c8dcSSimon Schubert child->obj_name = childs_name; 2073*5796c8dcSSimon Schubert install_variable (child); 2074*5796c8dcSSimon Schubert 2075*5796c8dcSSimon Schubert /* Compute the type of the child. Must do this before 2076*5796c8dcSSimon Schubert calling install_new_value. */ 2077*5796c8dcSSimon Schubert if (value != NULL) 2078*5796c8dcSSimon Schubert /* If the child had no evaluation errors, var->value 2079*5796c8dcSSimon Schubert will be non-NULL and contain a valid type. */ 2080*5796c8dcSSimon Schubert child->type = value_type (value); 2081*5796c8dcSSimon Schubert else 2082*5796c8dcSSimon Schubert /* Otherwise, we must compute the type. */ 2083*5796c8dcSSimon Schubert child->type = (*child->root->lang->type_of_child) (child->parent, 2084*5796c8dcSSimon Schubert child->index); 2085*5796c8dcSSimon Schubert install_new_value (child, value, 1); 2086*5796c8dcSSimon Schubert 2087*5796c8dcSSimon Schubert return child; 2088*5796c8dcSSimon Schubert } 2089*5796c8dcSSimon Schubert 2090*5796c8dcSSimon Schubert 2091*5796c8dcSSimon Schubert /* 2092*5796c8dcSSimon Schubert * Miscellaneous utility functions. 2093*5796c8dcSSimon Schubert */ 2094*5796c8dcSSimon Schubert 2095*5796c8dcSSimon Schubert /* Allocate memory and initialize a new variable */ 2096*5796c8dcSSimon Schubert static struct varobj * 2097*5796c8dcSSimon Schubert new_variable (void) 2098*5796c8dcSSimon Schubert { 2099*5796c8dcSSimon Schubert struct varobj *var; 2100*5796c8dcSSimon Schubert 2101*5796c8dcSSimon Schubert var = (struct varobj *) xmalloc (sizeof (struct varobj)); 2102*5796c8dcSSimon Schubert var->name = NULL; 2103*5796c8dcSSimon Schubert var->path_expr = NULL; 2104*5796c8dcSSimon Schubert var->obj_name = NULL; 2105*5796c8dcSSimon Schubert var->index = -1; 2106*5796c8dcSSimon Schubert var->type = NULL; 2107*5796c8dcSSimon Schubert var->value = NULL; 2108*5796c8dcSSimon Schubert var->num_children = -1; 2109*5796c8dcSSimon Schubert var->parent = NULL; 2110*5796c8dcSSimon Schubert var->children = NULL; 2111*5796c8dcSSimon Schubert var->format = 0; 2112*5796c8dcSSimon Schubert var->root = NULL; 2113*5796c8dcSSimon Schubert var->updated = 0; 2114*5796c8dcSSimon Schubert var->print_value = NULL; 2115*5796c8dcSSimon Schubert var->frozen = 0; 2116*5796c8dcSSimon Schubert var->not_fetched = 0; 2117*5796c8dcSSimon Schubert var->children_requested = 0; 2118*5796c8dcSSimon Schubert var->from = -1; 2119*5796c8dcSSimon Schubert var->to = -1; 2120*5796c8dcSSimon Schubert var->constructor = 0; 2121*5796c8dcSSimon Schubert var->pretty_printer = 0; 2122*5796c8dcSSimon Schubert var->child_iter = 0; 2123*5796c8dcSSimon Schubert var->saved_item = 0; 2124*5796c8dcSSimon Schubert 2125*5796c8dcSSimon Schubert return var; 2126*5796c8dcSSimon Schubert } 2127*5796c8dcSSimon Schubert 2128*5796c8dcSSimon Schubert /* Allocate memory and initialize a new root variable */ 2129*5796c8dcSSimon Schubert static struct varobj * 2130*5796c8dcSSimon Schubert new_root_variable (void) 2131*5796c8dcSSimon Schubert { 2132*5796c8dcSSimon Schubert struct varobj *var = new_variable (); 2133*5796c8dcSSimon Schubert var->root = (struct varobj_root *) xmalloc (sizeof (struct varobj_root));; 2134*5796c8dcSSimon Schubert var->root->lang = NULL; 2135*5796c8dcSSimon Schubert var->root->exp = NULL; 2136*5796c8dcSSimon Schubert var->root->valid_block = NULL; 2137*5796c8dcSSimon Schubert var->root->frame = null_frame_id; 2138*5796c8dcSSimon Schubert var->root->floating = 0; 2139*5796c8dcSSimon Schubert var->root->rootvar = NULL; 2140*5796c8dcSSimon Schubert var->root->is_valid = 1; 2141*5796c8dcSSimon Schubert 2142*5796c8dcSSimon Schubert return var; 2143*5796c8dcSSimon Schubert } 2144*5796c8dcSSimon Schubert 2145*5796c8dcSSimon Schubert /* Free any allocated memory associated with VAR. */ 2146*5796c8dcSSimon Schubert static void 2147*5796c8dcSSimon Schubert free_variable (struct varobj *var) 2148*5796c8dcSSimon Schubert { 2149*5796c8dcSSimon Schubert #if HAVE_PYTHON 2150*5796c8dcSSimon Schubert if (var->pretty_printer) 2151*5796c8dcSSimon Schubert { 2152*5796c8dcSSimon Schubert struct cleanup *cleanup = varobj_ensure_python_env (var); 2153*5796c8dcSSimon Schubert Py_XDECREF (var->constructor); 2154*5796c8dcSSimon Schubert Py_XDECREF (var->pretty_printer); 2155*5796c8dcSSimon Schubert Py_XDECREF (var->child_iter); 2156*5796c8dcSSimon Schubert Py_XDECREF (var->saved_item); 2157*5796c8dcSSimon Schubert do_cleanups (cleanup); 2158*5796c8dcSSimon Schubert } 2159*5796c8dcSSimon Schubert #endif 2160*5796c8dcSSimon Schubert 2161*5796c8dcSSimon Schubert value_free (var->value); 2162*5796c8dcSSimon Schubert 2163*5796c8dcSSimon Schubert /* Free the expression if this is a root variable. */ 2164*5796c8dcSSimon Schubert if (is_root_p (var)) 2165*5796c8dcSSimon Schubert { 2166*5796c8dcSSimon Schubert xfree (var->root->exp); 2167*5796c8dcSSimon Schubert xfree (var->root); 2168*5796c8dcSSimon Schubert } 2169*5796c8dcSSimon Schubert 2170*5796c8dcSSimon Schubert xfree (var->name); 2171*5796c8dcSSimon Schubert xfree (var->obj_name); 2172*5796c8dcSSimon Schubert xfree (var->print_value); 2173*5796c8dcSSimon Schubert xfree (var->path_expr); 2174*5796c8dcSSimon Schubert xfree (var); 2175*5796c8dcSSimon Schubert } 2176*5796c8dcSSimon Schubert 2177*5796c8dcSSimon Schubert static void 2178*5796c8dcSSimon Schubert do_free_variable_cleanup (void *var) 2179*5796c8dcSSimon Schubert { 2180*5796c8dcSSimon Schubert free_variable (var); 2181*5796c8dcSSimon Schubert } 2182*5796c8dcSSimon Schubert 2183*5796c8dcSSimon Schubert static struct cleanup * 2184*5796c8dcSSimon Schubert make_cleanup_free_variable (struct varobj *var) 2185*5796c8dcSSimon Schubert { 2186*5796c8dcSSimon Schubert return make_cleanup (do_free_variable_cleanup, var); 2187*5796c8dcSSimon Schubert } 2188*5796c8dcSSimon Schubert 2189*5796c8dcSSimon Schubert /* This returns the type of the variable. It also skips past typedefs 2190*5796c8dcSSimon Schubert to return the real type of the variable. 2191*5796c8dcSSimon Schubert 2192*5796c8dcSSimon Schubert NOTE: TYPE_TARGET_TYPE should NOT be used anywhere in this file 2193*5796c8dcSSimon Schubert except within get_target_type and get_type. */ 2194*5796c8dcSSimon Schubert static struct type * 2195*5796c8dcSSimon Schubert get_type (struct varobj *var) 2196*5796c8dcSSimon Schubert { 2197*5796c8dcSSimon Schubert struct type *type; 2198*5796c8dcSSimon Schubert type = var->type; 2199*5796c8dcSSimon Schubert 2200*5796c8dcSSimon Schubert if (type != NULL) 2201*5796c8dcSSimon Schubert type = check_typedef (type); 2202*5796c8dcSSimon Schubert 2203*5796c8dcSSimon Schubert return type; 2204*5796c8dcSSimon Schubert } 2205*5796c8dcSSimon Schubert 2206*5796c8dcSSimon Schubert /* Return the type of the value that's stored in VAR, 2207*5796c8dcSSimon Schubert or that would have being stored there if the 2208*5796c8dcSSimon Schubert value were accessible. 2209*5796c8dcSSimon Schubert 2210*5796c8dcSSimon Schubert This differs from VAR->type in that VAR->type is always 2211*5796c8dcSSimon Schubert the true type of the expession in the source language. 2212*5796c8dcSSimon Schubert The return value of this function is the type we're 2213*5796c8dcSSimon Schubert actually storing in varobj, and using for displaying 2214*5796c8dcSSimon Schubert the values and for comparing previous and new values. 2215*5796c8dcSSimon Schubert 2216*5796c8dcSSimon Schubert For example, top-level references are always stripped. */ 2217*5796c8dcSSimon Schubert static struct type * 2218*5796c8dcSSimon Schubert get_value_type (struct varobj *var) 2219*5796c8dcSSimon Schubert { 2220*5796c8dcSSimon Schubert struct type *type; 2221*5796c8dcSSimon Schubert 2222*5796c8dcSSimon Schubert if (var->value) 2223*5796c8dcSSimon Schubert type = value_type (var->value); 2224*5796c8dcSSimon Schubert else 2225*5796c8dcSSimon Schubert type = var->type; 2226*5796c8dcSSimon Schubert 2227*5796c8dcSSimon Schubert type = check_typedef (type); 2228*5796c8dcSSimon Schubert 2229*5796c8dcSSimon Schubert if (TYPE_CODE (type) == TYPE_CODE_REF) 2230*5796c8dcSSimon Schubert type = get_target_type (type); 2231*5796c8dcSSimon Schubert 2232*5796c8dcSSimon Schubert type = check_typedef (type); 2233*5796c8dcSSimon Schubert 2234*5796c8dcSSimon Schubert return type; 2235*5796c8dcSSimon Schubert } 2236*5796c8dcSSimon Schubert 2237*5796c8dcSSimon Schubert /* This returns the target type (or NULL) of TYPE, also skipping 2238*5796c8dcSSimon Schubert past typedefs, just like get_type (). 2239*5796c8dcSSimon Schubert 2240*5796c8dcSSimon Schubert NOTE: TYPE_TARGET_TYPE should NOT be used anywhere in this file 2241*5796c8dcSSimon Schubert except within get_target_type and get_type. */ 2242*5796c8dcSSimon Schubert static struct type * 2243*5796c8dcSSimon Schubert get_target_type (struct type *type) 2244*5796c8dcSSimon Schubert { 2245*5796c8dcSSimon Schubert if (type != NULL) 2246*5796c8dcSSimon Schubert { 2247*5796c8dcSSimon Schubert type = TYPE_TARGET_TYPE (type); 2248*5796c8dcSSimon Schubert if (type != NULL) 2249*5796c8dcSSimon Schubert type = check_typedef (type); 2250*5796c8dcSSimon Schubert } 2251*5796c8dcSSimon Schubert 2252*5796c8dcSSimon Schubert return type; 2253*5796c8dcSSimon Schubert } 2254*5796c8dcSSimon Schubert 2255*5796c8dcSSimon Schubert /* What is the default display for this variable? We assume that 2256*5796c8dcSSimon Schubert everything is "natural". Any exceptions? */ 2257*5796c8dcSSimon Schubert static enum varobj_display_formats 2258*5796c8dcSSimon Schubert variable_default_display (struct varobj *var) 2259*5796c8dcSSimon Schubert { 2260*5796c8dcSSimon Schubert return FORMAT_NATURAL; 2261*5796c8dcSSimon Schubert } 2262*5796c8dcSSimon Schubert 2263*5796c8dcSSimon Schubert /* FIXME: The following should be generic for any pointer */ 2264*5796c8dcSSimon Schubert static void 2265*5796c8dcSSimon Schubert cppush (struct cpstack **pstack, char *name) 2266*5796c8dcSSimon Schubert { 2267*5796c8dcSSimon Schubert struct cpstack *s; 2268*5796c8dcSSimon Schubert 2269*5796c8dcSSimon Schubert s = (struct cpstack *) xmalloc (sizeof (struct cpstack)); 2270*5796c8dcSSimon Schubert s->name = name; 2271*5796c8dcSSimon Schubert s->next = *pstack; 2272*5796c8dcSSimon Schubert *pstack = s; 2273*5796c8dcSSimon Schubert } 2274*5796c8dcSSimon Schubert 2275*5796c8dcSSimon Schubert /* FIXME: The following should be generic for any pointer */ 2276*5796c8dcSSimon Schubert static char * 2277*5796c8dcSSimon Schubert cppop (struct cpstack **pstack) 2278*5796c8dcSSimon Schubert { 2279*5796c8dcSSimon Schubert struct cpstack *s; 2280*5796c8dcSSimon Schubert char *v; 2281*5796c8dcSSimon Schubert 2282*5796c8dcSSimon Schubert if ((*pstack)->name == NULL && (*pstack)->next == NULL) 2283*5796c8dcSSimon Schubert return NULL; 2284*5796c8dcSSimon Schubert 2285*5796c8dcSSimon Schubert s = *pstack; 2286*5796c8dcSSimon Schubert v = s->name; 2287*5796c8dcSSimon Schubert *pstack = (*pstack)->next; 2288*5796c8dcSSimon Schubert xfree (s); 2289*5796c8dcSSimon Schubert 2290*5796c8dcSSimon Schubert return v; 2291*5796c8dcSSimon Schubert } 2292*5796c8dcSSimon Schubert 2293*5796c8dcSSimon Schubert /* 2294*5796c8dcSSimon Schubert * Language-dependencies 2295*5796c8dcSSimon Schubert */ 2296*5796c8dcSSimon Schubert 2297*5796c8dcSSimon Schubert /* Common entry points */ 2298*5796c8dcSSimon Schubert 2299*5796c8dcSSimon Schubert /* Get the language of variable VAR. */ 2300*5796c8dcSSimon Schubert static enum varobj_languages 2301*5796c8dcSSimon Schubert variable_language (struct varobj *var) 2302*5796c8dcSSimon Schubert { 2303*5796c8dcSSimon Schubert enum varobj_languages lang; 2304*5796c8dcSSimon Schubert 2305*5796c8dcSSimon Schubert switch (var->root->exp->language_defn->la_language) 2306*5796c8dcSSimon Schubert { 2307*5796c8dcSSimon Schubert default: 2308*5796c8dcSSimon Schubert case language_c: 2309*5796c8dcSSimon Schubert lang = vlang_c; 2310*5796c8dcSSimon Schubert break; 2311*5796c8dcSSimon Schubert case language_cplus: 2312*5796c8dcSSimon Schubert lang = vlang_cplus; 2313*5796c8dcSSimon Schubert break; 2314*5796c8dcSSimon Schubert case language_java: 2315*5796c8dcSSimon Schubert lang = vlang_java; 2316*5796c8dcSSimon Schubert break; 2317*5796c8dcSSimon Schubert } 2318*5796c8dcSSimon Schubert 2319*5796c8dcSSimon Schubert return lang; 2320*5796c8dcSSimon Schubert } 2321*5796c8dcSSimon Schubert 2322*5796c8dcSSimon Schubert /* Return the number of children for a given variable. 2323*5796c8dcSSimon Schubert The result of this function is defined by the language 2324*5796c8dcSSimon Schubert implementation. The number of children returned by this function 2325*5796c8dcSSimon Schubert is the number of children that the user will see in the variable 2326*5796c8dcSSimon Schubert display. */ 2327*5796c8dcSSimon Schubert static int 2328*5796c8dcSSimon Schubert number_of_children (struct varobj *var) 2329*5796c8dcSSimon Schubert { 2330*5796c8dcSSimon Schubert return (*var->root->lang->number_of_children) (var);; 2331*5796c8dcSSimon Schubert } 2332*5796c8dcSSimon Schubert 2333*5796c8dcSSimon Schubert /* What is the expression for the root varobj VAR? Returns a malloc'd string. */ 2334*5796c8dcSSimon Schubert static char * 2335*5796c8dcSSimon Schubert name_of_variable (struct varobj *var) 2336*5796c8dcSSimon Schubert { 2337*5796c8dcSSimon Schubert return (*var->root->lang->name_of_variable) (var); 2338*5796c8dcSSimon Schubert } 2339*5796c8dcSSimon Schubert 2340*5796c8dcSSimon Schubert /* What is the name of the INDEX'th child of VAR? Returns a malloc'd string. */ 2341*5796c8dcSSimon Schubert static char * 2342*5796c8dcSSimon Schubert name_of_child (struct varobj *var, int index) 2343*5796c8dcSSimon Schubert { 2344*5796c8dcSSimon Schubert return (*var->root->lang->name_of_child) (var, index); 2345*5796c8dcSSimon Schubert } 2346*5796c8dcSSimon Schubert 2347*5796c8dcSSimon Schubert /* What is the ``struct value *'' of the root variable VAR? 2348*5796c8dcSSimon Schubert For floating variable object, evaluation can get us a value 2349*5796c8dcSSimon Schubert of different type from what is stored in varobj already. In 2350*5796c8dcSSimon Schubert that case: 2351*5796c8dcSSimon Schubert - *type_changed will be set to 1 2352*5796c8dcSSimon Schubert - old varobj will be freed, and new one will be 2353*5796c8dcSSimon Schubert created, with the same name. 2354*5796c8dcSSimon Schubert - *var_handle will be set to the new varobj 2355*5796c8dcSSimon Schubert Otherwise, *type_changed will be set to 0. */ 2356*5796c8dcSSimon Schubert static struct value * 2357*5796c8dcSSimon Schubert value_of_root (struct varobj **var_handle, int *type_changed) 2358*5796c8dcSSimon Schubert { 2359*5796c8dcSSimon Schubert struct varobj *var; 2360*5796c8dcSSimon Schubert 2361*5796c8dcSSimon Schubert if (var_handle == NULL) 2362*5796c8dcSSimon Schubert return NULL; 2363*5796c8dcSSimon Schubert 2364*5796c8dcSSimon Schubert var = *var_handle; 2365*5796c8dcSSimon Schubert 2366*5796c8dcSSimon Schubert /* This should really be an exception, since this should 2367*5796c8dcSSimon Schubert only get called with a root variable. */ 2368*5796c8dcSSimon Schubert 2369*5796c8dcSSimon Schubert if (!is_root_p (var)) 2370*5796c8dcSSimon Schubert return NULL; 2371*5796c8dcSSimon Schubert 2372*5796c8dcSSimon Schubert if (var->root->floating) 2373*5796c8dcSSimon Schubert { 2374*5796c8dcSSimon Schubert struct varobj *tmp_var; 2375*5796c8dcSSimon Schubert char *old_type, *new_type; 2376*5796c8dcSSimon Schubert 2377*5796c8dcSSimon Schubert tmp_var = varobj_create (NULL, var->name, (CORE_ADDR) 0, 2378*5796c8dcSSimon Schubert USE_SELECTED_FRAME); 2379*5796c8dcSSimon Schubert if (tmp_var == NULL) 2380*5796c8dcSSimon Schubert { 2381*5796c8dcSSimon Schubert return NULL; 2382*5796c8dcSSimon Schubert } 2383*5796c8dcSSimon Schubert old_type = varobj_get_type (var); 2384*5796c8dcSSimon Schubert new_type = varobj_get_type (tmp_var); 2385*5796c8dcSSimon Schubert if (strcmp (old_type, new_type) == 0) 2386*5796c8dcSSimon Schubert { 2387*5796c8dcSSimon Schubert /* The expression presently stored inside var->root->exp 2388*5796c8dcSSimon Schubert remembers the locations of local variables relatively to 2389*5796c8dcSSimon Schubert the frame where the expression was created (in DWARF location 2390*5796c8dcSSimon Schubert button, for example). Naturally, those locations are not 2391*5796c8dcSSimon Schubert correct in other frames, so update the expression. */ 2392*5796c8dcSSimon Schubert 2393*5796c8dcSSimon Schubert struct expression *tmp_exp = var->root->exp; 2394*5796c8dcSSimon Schubert var->root->exp = tmp_var->root->exp; 2395*5796c8dcSSimon Schubert tmp_var->root->exp = tmp_exp; 2396*5796c8dcSSimon Schubert 2397*5796c8dcSSimon Schubert varobj_delete (tmp_var, NULL, 0); 2398*5796c8dcSSimon Schubert *type_changed = 0; 2399*5796c8dcSSimon Schubert } 2400*5796c8dcSSimon Schubert else 2401*5796c8dcSSimon Schubert { 2402*5796c8dcSSimon Schubert tmp_var->obj_name = xstrdup (var->obj_name); 2403*5796c8dcSSimon Schubert tmp_var->from = var->from; 2404*5796c8dcSSimon Schubert tmp_var->to = var->to; 2405*5796c8dcSSimon Schubert varobj_delete (var, NULL, 0); 2406*5796c8dcSSimon Schubert 2407*5796c8dcSSimon Schubert install_variable (tmp_var); 2408*5796c8dcSSimon Schubert *var_handle = tmp_var; 2409*5796c8dcSSimon Schubert var = *var_handle; 2410*5796c8dcSSimon Schubert *type_changed = 1; 2411*5796c8dcSSimon Schubert } 2412*5796c8dcSSimon Schubert xfree (old_type); 2413*5796c8dcSSimon Schubert xfree (new_type); 2414*5796c8dcSSimon Schubert } 2415*5796c8dcSSimon Schubert else 2416*5796c8dcSSimon Schubert { 2417*5796c8dcSSimon Schubert *type_changed = 0; 2418*5796c8dcSSimon Schubert } 2419*5796c8dcSSimon Schubert 2420*5796c8dcSSimon Schubert return (*var->root->lang->value_of_root) (var_handle); 2421*5796c8dcSSimon Schubert } 2422*5796c8dcSSimon Schubert 2423*5796c8dcSSimon Schubert /* What is the ``struct value *'' for the INDEX'th child of PARENT? */ 2424*5796c8dcSSimon Schubert static struct value * 2425*5796c8dcSSimon Schubert value_of_child (struct varobj *parent, int index) 2426*5796c8dcSSimon Schubert { 2427*5796c8dcSSimon Schubert struct value *value; 2428*5796c8dcSSimon Schubert 2429*5796c8dcSSimon Schubert value = (*parent->root->lang->value_of_child) (parent, index); 2430*5796c8dcSSimon Schubert 2431*5796c8dcSSimon Schubert return value; 2432*5796c8dcSSimon Schubert } 2433*5796c8dcSSimon Schubert 2434*5796c8dcSSimon Schubert /* GDB already has a command called "value_of_variable". Sigh. */ 2435*5796c8dcSSimon Schubert static char * 2436*5796c8dcSSimon Schubert my_value_of_variable (struct varobj *var, enum varobj_display_formats format) 2437*5796c8dcSSimon Schubert { 2438*5796c8dcSSimon Schubert if (var->root->is_valid) 2439*5796c8dcSSimon Schubert { 2440*5796c8dcSSimon Schubert if (var->pretty_printer) 2441*5796c8dcSSimon Schubert return value_get_print_value (var->value, var->format, var); 2442*5796c8dcSSimon Schubert return (*var->root->lang->value_of_variable) (var, format); 2443*5796c8dcSSimon Schubert } 2444*5796c8dcSSimon Schubert else 2445*5796c8dcSSimon Schubert return NULL; 2446*5796c8dcSSimon Schubert } 2447*5796c8dcSSimon Schubert 2448*5796c8dcSSimon Schubert static char * 2449*5796c8dcSSimon Schubert value_get_print_value (struct value *value, enum varobj_display_formats format, 2450*5796c8dcSSimon Schubert struct varobj *var) 2451*5796c8dcSSimon Schubert { 2452*5796c8dcSSimon Schubert struct ui_file *stb; 2453*5796c8dcSSimon Schubert struct cleanup *old_chain; 2454*5796c8dcSSimon Schubert gdb_byte *thevalue = NULL; 2455*5796c8dcSSimon Schubert struct value_print_options opts; 2456*5796c8dcSSimon Schubert int len = 0; 2457*5796c8dcSSimon Schubert 2458*5796c8dcSSimon Schubert if (value == NULL) 2459*5796c8dcSSimon Schubert return NULL; 2460*5796c8dcSSimon Schubert 2461*5796c8dcSSimon Schubert #if HAVE_PYTHON 2462*5796c8dcSSimon Schubert { 2463*5796c8dcSSimon Schubert struct cleanup *back_to = varobj_ensure_python_env (var); 2464*5796c8dcSSimon Schubert PyObject *value_formatter = var->pretty_printer; 2465*5796c8dcSSimon Schubert 2466*5796c8dcSSimon Schubert if (value_formatter) 2467*5796c8dcSSimon Schubert { 2468*5796c8dcSSimon Schubert /* First check to see if we have any children at all. If so, 2469*5796c8dcSSimon Schubert we simply return {...}. */ 2470*5796c8dcSSimon Schubert if (dynamic_varobj_has_child_method (var)) 2471*5796c8dcSSimon Schubert return xstrdup ("{...}"); 2472*5796c8dcSSimon Schubert 2473*5796c8dcSSimon Schubert if (PyObject_HasAttr (value_formatter, gdbpy_to_string_cst)) 2474*5796c8dcSSimon Schubert { 2475*5796c8dcSSimon Schubert char *hint; 2476*5796c8dcSSimon Schubert struct value *replacement; 2477*5796c8dcSSimon Schubert int string_print = 0; 2478*5796c8dcSSimon Schubert PyObject *output = NULL; 2479*5796c8dcSSimon Schubert 2480*5796c8dcSSimon Schubert hint = gdbpy_get_display_hint (value_formatter); 2481*5796c8dcSSimon Schubert if (hint) 2482*5796c8dcSSimon Schubert { 2483*5796c8dcSSimon Schubert if (!strcmp (hint, "string")) 2484*5796c8dcSSimon Schubert string_print = 1; 2485*5796c8dcSSimon Schubert xfree (hint); 2486*5796c8dcSSimon Schubert } 2487*5796c8dcSSimon Schubert 2488*5796c8dcSSimon Schubert output = apply_varobj_pretty_printer (value_formatter, 2489*5796c8dcSSimon Schubert &replacement); 2490*5796c8dcSSimon Schubert if (output) 2491*5796c8dcSSimon Schubert { 2492*5796c8dcSSimon Schubert PyObject *py_str 2493*5796c8dcSSimon Schubert = python_string_to_target_python_string (output); 2494*5796c8dcSSimon Schubert if (py_str) 2495*5796c8dcSSimon Schubert { 2496*5796c8dcSSimon Schubert char *s = PyString_AsString (py_str); 2497*5796c8dcSSimon Schubert len = PyString_Size (py_str); 2498*5796c8dcSSimon Schubert thevalue = xmemdup (s, len + 1, len + 1); 2499*5796c8dcSSimon Schubert Py_DECREF (py_str); 2500*5796c8dcSSimon Schubert } 2501*5796c8dcSSimon Schubert Py_DECREF (output); 2502*5796c8dcSSimon Schubert } 2503*5796c8dcSSimon Schubert if (thevalue && !string_print) 2504*5796c8dcSSimon Schubert { 2505*5796c8dcSSimon Schubert do_cleanups (back_to); 2506*5796c8dcSSimon Schubert return thevalue; 2507*5796c8dcSSimon Schubert } 2508*5796c8dcSSimon Schubert if (replacement) 2509*5796c8dcSSimon Schubert value = replacement; 2510*5796c8dcSSimon Schubert } 2511*5796c8dcSSimon Schubert } 2512*5796c8dcSSimon Schubert do_cleanups (back_to); 2513*5796c8dcSSimon Schubert } 2514*5796c8dcSSimon Schubert #endif 2515*5796c8dcSSimon Schubert 2516*5796c8dcSSimon Schubert stb = mem_fileopen (); 2517*5796c8dcSSimon Schubert old_chain = make_cleanup_ui_file_delete (stb); 2518*5796c8dcSSimon Schubert 2519*5796c8dcSSimon Schubert get_formatted_print_options (&opts, format_code[(int) format]); 2520*5796c8dcSSimon Schubert opts.deref_ref = 0; 2521*5796c8dcSSimon Schubert opts.raw = 1; 2522*5796c8dcSSimon Schubert if (thevalue) 2523*5796c8dcSSimon Schubert { 2524*5796c8dcSSimon Schubert struct gdbarch *gdbarch = get_type_arch (value_type (value)); 2525*5796c8dcSSimon Schubert make_cleanup (xfree, thevalue); 2526*5796c8dcSSimon Schubert LA_PRINT_STRING (stb, builtin_type (gdbarch)->builtin_char, 2527*5796c8dcSSimon Schubert thevalue, len, 0, &opts); 2528*5796c8dcSSimon Schubert } 2529*5796c8dcSSimon Schubert else 2530*5796c8dcSSimon Schubert common_val_print (value, stb, 0, &opts, current_language); 2531*5796c8dcSSimon Schubert thevalue = ui_file_xstrdup (stb, NULL); 2532*5796c8dcSSimon Schubert 2533*5796c8dcSSimon Schubert do_cleanups (old_chain); 2534*5796c8dcSSimon Schubert return thevalue; 2535*5796c8dcSSimon Schubert } 2536*5796c8dcSSimon Schubert 2537*5796c8dcSSimon Schubert int 2538*5796c8dcSSimon Schubert varobj_editable_p (struct varobj *var) 2539*5796c8dcSSimon Schubert { 2540*5796c8dcSSimon Schubert struct type *type; 2541*5796c8dcSSimon Schubert struct value *value; 2542*5796c8dcSSimon Schubert 2543*5796c8dcSSimon Schubert if (!(var->root->is_valid && var->value && VALUE_LVAL (var->value))) 2544*5796c8dcSSimon Schubert return 0; 2545*5796c8dcSSimon Schubert 2546*5796c8dcSSimon Schubert type = get_value_type (var); 2547*5796c8dcSSimon Schubert 2548*5796c8dcSSimon Schubert switch (TYPE_CODE (type)) 2549*5796c8dcSSimon Schubert { 2550*5796c8dcSSimon Schubert case TYPE_CODE_STRUCT: 2551*5796c8dcSSimon Schubert case TYPE_CODE_UNION: 2552*5796c8dcSSimon Schubert case TYPE_CODE_ARRAY: 2553*5796c8dcSSimon Schubert case TYPE_CODE_FUNC: 2554*5796c8dcSSimon Schubert case TYPE_CODE_METHOD: 2555*5796c8dcSSimon Schubert return 0; 2556*5796c8dcSSimon Schubert break; 2557*5796c8dcSSimon Schubert 2558*5796c8dcSSimon Schubert default: 2559*5796c8dcSSimon Schubert return 1; 2560*5796c8dcSSimon Schubert break; 2561*5796c8dcSSimon Schubert } 2562*5796c8dcSSimon Schubert } 2563*5796c8dcSSimon Schubert 2564*5796c8dcSSimon Schubert /* Return non-zero if changes in value of VAR 2565*5796c8dcSSimon Schubert must be detected and reported by -var-update. 2566*5796c8dcSSimon Schubert Return zero is -var-update should never report 2567*5796c8dcSSimon Schubert changes of such values. This makes sense for structures 2568*5796c8dcSSimon Schubert (since the changes in children values will be reported separately), 2569*5796c8dcSSimon Schubert or for artifical objects (like 'public' pseudo-field in C++). 2570*5796c8dcSSimon Schubert 2571*5796c8dcSSimon Schubert Return value of 0 means that gdb need not call value_fetch_lazy 2572*5796c8dcSSimon Schubert for the value of this variable object. */ 2573*5796c8dcSSimon Schubert static int 2574*5796c8dcSSimon Schubert varobj_value_is_changeable_p (struct varobj *var) 2575*5796c8dcSSimon Schubert { 2576*5796c8dcSSimon Schubert int r; 2577*5796c8dcSSimon Schubert struct type *type; 2578*5796c8dcSSimon Schubert 2579*5796c8dcSSimon Schubert if (CPLUS_FAKE_CHILD (var)) 2580*5796c8dcSSimon Schubert return 0; 2581*5796c8dcSSimon Schubert 2582*5796c8dcSSimon Schubert type = get_value_type (var); 2583*5796c8dcSSimon Schubert 2584*5796c8dcSSimon Schubert switch (TYPE_CODE (type)) 2585*5796c8dcSSimon Schubert { 2586*5796c8dcSSimon Schubert case TYPE_CODE_STRUCT: 2587*5796c8dcSSimon Schubert case TYPE_CODE_UNION: 2588*5796c8dcSSimon Schubert case TYPE_CODE_ARRAY: 2589*5796c8dcSSimon Schubert r = 0; 2590*5796c8dcSSimon Schubert break; 2591*5796c8dcSSimon Schubert 2592*5796c8dcSSimon Schubert default: 2593*5796c8dcSSimon Schubert r = 1; 2594*5796c8dcSSimon Schubert } 2595*5796c8dcSSimon Schubert 2596*5796c8dcSSimon Schubert return r; 2597*5796c8dcSSimon Schubert } 2598*5796c8dcSSimon Schubert 2599*5796c8dcSSimon Schubert /* Return 1 if that varobj is floating, that is is always evaluated in the 2600*5796c8dcSSimon Schubert selected frame, and not bound to thread/frame. Such variable objects 2601*5796c8dcSSimon Schubert are created using '@' as frame specifier to -var-create. */ 2602*5796c8dcSSimon Schubert int 2603*5796c8dcSSimon Schubert varobj_floating_p (struct varobj *var) 2604*5796c8dcSSimon Schubert { 2605*5796c8dcSSimon Schubert return var->root->floating; 2606*5796c8dcSSimon Schubert } 2607*5796c8dcSSimon Schubert 2608*5796c8dcSSimon Schubert /* Given the value and the type of a variable object, 2609*5796c8dcSSimon Schubert adjust the value and type to those necessary 2610*5796c8dcSSimon Schubert for getting children of the variable object. 2611*5796c8dcSSimon Schubert This includes dereferencing top-level references 2612*5796c8dcSSimon Schubert to all types and dereferencing pointers to 2613*5796c8dcSSimon Schubert structures. 2614*5796c8dcSSimon Schubert 2615*5796c8dcSSimon Schubert Both TYPE and *TYPE should be non-null. VALUE 2616*5796c8dcSSimon Schubert can be null if we want to only translate type. 2617*5796c8dcSSimon Schubert *VALUE can be null as well -- if the parent 2618*5796c8dcSSimon Schubert value is not known. 2619*5796c8dcSSimon Schubert 2620*5796c8dcSSimon Schubert If WAS_PTR is not NULL, set *WAS_PTR to 0 or 1 2621*5796c8dcSSimon Schubert depending on whether pointer was dereferenced 2622*5796c8dcSSimon Schubert in this function. */ 2623*5796c8dcSSimon Schubert static void 2624*5796c8dcSSimon Schubert adjust_value_for_child_access (struct value **value, 2625*5796c8dcSSimon Schubert struct type **type, 2626*5796c8dcSSimon Schubert int *was_ptr) 2627*5796c8dcSSimon Schubert { 2628*5796c8dcSSimon Schubert gdb_assert (type && *type); 2629*5796c8dcSSimon Schubert 2630*5796c8dcSSimon Schubert if (was_ptr) 2631*5796c8dcSSimon Schubert *was_ptr = 0; 2632*5796c8dcSSimon Schubert 2633*5796c8dcSSimon Schubert *type = check_typedef (*type); 2634*5796c8dcSSimon Schubert 2635*5796c8dcSSimon Schubert /* The type of value stored in varobj, that is passed 2636*5796c8dcSSimon Schubert to us, is already supposed to be 2637*5796c8dcSSimon Schubert reference-stripped. */ 2638*5796c8dcSSimon Schubert 2639*5796c8dcSSimon Schubert gdb_assert (TYPE_CODE (*type) != TYPE_CODE_REF); 2640*5796c8dcSSimon Schubert 2641*5796c8dcSSimon Schubert /* Pointers to structures are treated just like 2642*5796c8dcSSimon Schubert structures when accessing children. Don't 2643*5796c8dcSSimon Schubert dererences pointers to other types. */ 2644*5796c8dcSSimon Schubert if (TYPE_CODE (*type) == TYPE_CODE_PTR) 2645*5796c8dcSSimon Schubert { 2646*5796c8dcSSimon Schubert struct type *target_type = get_target_type (*type); 2647*5796c8dcSSimon Schubert if (TYPE_CODE (target_type) == TYPE_CODE_STRUCT 2648*5796c8dcSSimon Schubert || TYPE_CODE (target_type) == TYPE_CODE_UNION) 2649*5796c8dcSSimon Schubert { 2650*5796c8dcSSimon Schubert if (value && *value) 2651*5796c8dcSSimon Schubert { 2652*5796c8dcSSimon Schubert int success = gdb_value_ind (*value, value); 2653*5796c8dcSSimon Schubert if (!success) 2654*5796c8dcSSimon Schubert *value = NULL; 2655*5796c8dcSSimon Schubert } 2656*5796c8dcSSimon Schubert *type = target_type; 2657*5796c8dcSSimon Schubert if (was_ptr) 2658*5796c8dcSSimon Schubert *was_ptr = 1; 2659*5796c8dcSSimon Schubert } 2660*5796c8dcSSimon Schubert } 2661*5796c8dcSSimon Schubert 2662*5796c8dcSSimon Schubert /* The 'get_target_type' function calls check_typedef on 2663*5796c8dcSSimon Schubert result, so we can immediately check type code. No 2664*5796c8dcSSimon Schubert need to call check_typedef here. */ 2665*5796c8dcSSimon Schubert } 2666*5796c8dcSSimon Schubert 2667*5796c8dcSSimon Schubert /* C */ 2668*5796c8dcSSimon Schubert static int 2669*5796c8dcSSimon Schubert c_number_of_children (struct varobj *var) 2670*5796c8dcSSimon Schubert { 2671*5796c8dcSSimon Schubert struct type *type = get_value_type (var); 2672*5796c8dcSSimon Schubert int children = 0; 2673*5796c8dcSSimon Schubert struct type *target; 2674*5796c8dcSSimon Schubert 2675*5796c8dcSSimon Schubert adjust_value_for_child_access (NULL, &type, NULL); 2676*5796c8dcSSimon Schubert target = get_target_type (type); 2677*5796c8dcSSimon Schubert 2678*5796c8dcSSimon Schubert switch (TYPE_CODE (type)) 2679*5796c8dcSSimon Schubert { 2680*5796c8dcSSimon Schubert case TYPE_CODE_ARRAY: 2681*5796c8dcSSimon Schubert if (TYPE_LENGTH (type) > 0 && TYPE_LENGTH (target) > 0 2682*5796c8dcSSimon Schubert && !TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (type)) 2683*5796c8dcSSimon Schubert children = TYPE_LENGTH (type) / TYPE_LENGTH (target); 2684*5796c8dcSSimon Schubert else 2685*5796c8dcSSimon Schubert /* If we don't know how many elements there are, don't display 2686*5796c8dcSSimon Schubert any. */ 2687*5796c8dcSSimon Schubert children = 0; 2688*5796c8dcSSimon Schubert break; 2689*5796c8dcSSimon Schubert 2690*5796c8dcSSimon Schubert case TYPE_CODE_STRUCT: 2691*5796c8dcSSimon Schubert case TYPE_CODE_UNION: 2692*5796c8dcSSimon Schubert children = TYPE_NFIELDS (type); 2693*5796c8dcSSimon Schubert break; 2694*5796c8dcSSimon Schubert 2695*5796c8dcSSimon Schubert case TYPE_CODE_PTR: 2696*5796c8dcSSimon Schubert /* The type here is a pointer to non-struct. Typically, pointers 2697*5796c8dcSSimon Schubert have one child, except for function ptrs, which have no children, 2698*5796c8dcSSimon Schubert and except for void*, as we don't know what to show. 2699*5796c8dcSSimon Schubert 2700*5796c8dcSSimon Schubert We can show char* so we allow it to be dereferenced. If you decide 2701*5796c8dcSSimon Schubert to test for it, please mind that a little magic is necessary to 2702*5796c8dcSSimon Schubert properly identify it: char* has TYPE_CODE == TYPE_CODE_INT and 2703*5796c8dcSSimon Schubert TYPE_NAME == "char" */ 2704*5796c8dcSSimon Schubert if (TYPE_CODE (target) == TYPE_CODE_FUNC 2705*5796c8dcSSimon Schubert || TYPE_CODE (target) == TYPE_CODE_VOID) 2706*5796c8dcSSimon Schubert children = 0; 2707*5796c8dcSSimon Schubert else 2708*5796c8dcSSimon Schubert children = 1; 2709*5796c8dcSSimon Schubert break; 2710*5796c8dcSSimon Schubert 2711*5796c8dcSSimon Schubert default: 2712*5796c8dcSSimon Schubert /* Other types have no children */ 2713*5796c8dcSSimon Schubert break; 2714*5796c8dcSSimon Schubert } 2715*5796c8dcSSimon Schubert 2716*5796c8dcSSimon Schubert return children; 2717*5796c8dcSSimon Schubert } 2718*5796c8dcSSimon Schubert 2719*5796c8dcSSimon Schubert static char * 2720*5796c8dcSSimon Schubert c_name_of_variable (struct varobj *parent) 2721*5796c8dcSSimon Schubert { 2722*5796c8dcSSimon Schubert return xstrdup (parent->name); 2723*5796c8dcSSimon Schubert } 2724*5796c8dcSSimon Schubert 2725*5796c8dcSSimon Schubert /* Return the value of element TYPE_INDEX of a structure 2726*5796c8dcSSimon Schubert value VALUE. VALUE's type should be a structure, 2727*5796c8dcSSimon Schubert or union, or a typedef to struct/union. 2728*5796c8dcSSimon Schubert 2729*5796c8dcSSimon Schubert Returns NULL if getting the value fails. Never throws. */ 2730*5796c8dcSSimon Schubert static struct value * 2731*5796c8dcSSimon Schubert value_struct_element_index (struct value *value, int type_index) 2732*5796c8dcSSimon Schubert { 2733*5796c8dcSSimon Schubert struct value *result = NULL; 2734*5796c8dcSSimon Schubert volatile struct gdb_exception e; 2735*5796c8dcSSimon Schubert 2736*5796c8dcSSimon Schubert struct type *type = value_type (value); 2737*5796c8dcSSimon Schubert type = check_typedef (type); 2738*5796c8dcSSimon Schubert 2739*5796c8dcSSimon Schubert gdb_assert (TYPE_CODE (type) == TYPE_CODE_STRUCT 2740*5796c8dcSSimon Schubert || TYPE_CODE (type) == TYPE_CODE_UNION); 2741*5796c8dcSSimon Schubert 2742*5796c8dcSSimon Schubert TRY_CATCH (e, RETURN_MASK_ERROR) 2743*5796c8dcSSimon Schubert { 2744*5796c8dcSSimon Schubert if (field_is_static (&TYPE_FIELD (type, type_index))) 2745*5796c8dcSSimon Schubert result = value_static_field (type, type_index); 2746*5796c8dcSSimon Schubert else 2747*5796c8dcSSimon Schubert result = value_primitive_field (value, 0, type_index, type); 2748*5796c8dcSSimon Schubert } 2749*5796c8dcSSimon Schubert if (e.reason < 0) 2750*5796c8dcSSimon Schubert { 2751*5796c8dcSSimon Schubert return NULL; 2752*5796c8dcSSimon Schubert } 2753*5796c8dcSSimon Schubert else 2754*5796c8dcSSimon Schubert { 2755*5796c8dcSSimon Schubert return result; 2756*5796c8dcSSimon Schubert } 2757*5796c8dcSSimon Schubert } 2758*5796c8dcSSimon Schubert 2759*5796c8dcSSimon Schubert /* Obtain the information about child INDEX of the variable 2760*5796c8dcSSimon Schubert object PARENT. 2761*5796c8dcSSimon Schubert If CNAME is not null, sets *CNAME to the name of the child relative 2762*5796c8dcSSimon Schubert to the parent. 2763*5796c8dcSSimon Schubert If CVALUE is not null, sets *CVALUE to the value of the child. 2764*5796c8dcSSimon Schubert If CTYPE is not null, sets *CTYPE to the type of the child. 2765*5796c8dcSSimon Schubert 2766*5796c8dcSSimon Schubert If any of CNAME, CVALUE, or CTYPE is not null, but the corresponding 2767*5796c8dcSSimon Schubert information cannot be determined, set *CNAME, *CVALUE, or *CTYPE 2768*5796c8dcSSimon Schubert to NULL. */ 2769*5796c8dcSSimon Schubert static void 2770*5796c8dcSSimon Schubert c_describe_child (struct varobj *parent, int index, 2771*5796c8dcSSimon Schubert char **cname, struct value **cvalue, struct type **ctype, 2772*5796c8dcSSimon Schubert char **cfull_expression) 2773*5796c8dcSSimon Schubert { 2774*5796c8dcSSimon Schubert struct value *value = parent->value; 2775*5796c8dcSSimon Schubert struct type *type = get_value_type (parent); 2776*5796c8dcSSimon Schubert char *parent_expression = NULL; 2777*5796c8dcSSimon Schubert int was_ptr; 2778*5796c8dcSSimon Schubert 2779*5796c8dcSSimon Schubert if (cname) 2780*5796c8dcSSimon Schubert *cname = NULL; 2781*5796c8dcSSimon Schubert if (cvalue) 2782*5796c8dcSSimon Schubert *cvalue = NULL; 2783*5796c8dcSSimon Schubert if (ctype) 2784*5796c8dcSSimon Schubert *ctype = NULL; 2785*5796c8dcSSimon Schubert if (cfull_expression) 2786*5796c8dcSSimon Schubert { 2787*5796c8dcSSimon Schubert *cfull_expression = NULL; 2788*5796c8dcSSimon Schubert parent_expression = varobj_get_path_expr (parent); 2789*5796c8dcSSimon Schubert } 2790*5796c8dcSSimon Schubert adjust_value_for_child_access (&value, &type, &was_ptr); 2791*5796c8dcSSimon Schubert 2792*5796c8dcSSimon Schubert switch (TYPE_CODE (type)) 2793*5796c8dcSSimon Schubert { 2794*5796c8dcSSimon Schubert case TYPE_CODE_ARRAY: 2795*5796c8dcSSimon Schubert if (cname) 2796*5796c8dcSSimon Schubert *cname = xstrprintf ("%d", index 2797*5796c8dcSSimon Schubert + TYPE_LOW_BOUND (TYPE_INDEX_TYPE (type))); 2798*5796c8dcSSimon Schubert 2799*5796c8dcSSimon Schubert if (cvalue && value) 2800*5796c8dcSSimon Schubert { 2801*5796c8dcSSimon Schubert int real_index = index + TYPE_LOW_BOUND (TYPE_INDEX_TYPE (type)); 2802*5796c8dcSSimon Schubert gdb_value_subscript (value, real_index, cvalue); 2803*5796c8dcSSimon Schubert } 2804*5796c8dcSSimon Schubert 2805*5796c8dcSSimon Schubert if (ctype) 2806*5796c8dcSSimon Schubert *ctype = get_target_type (type); 2807*5796c8dcSSimon Schubert 2808*5796c8dcSSimon Schubert if (cfull_expression) 2809*5796c8dcSSimon Schubert *cfull_expression = xstrprintf ("(%s)[%d]", parent_expression, 2810*5796c8dcSSimon Schubert index 2811*5796c8dcSSimon Schubert + TYPE_LOW_BOUND (TYPE_INDEX_TYPE (type))); 2812*5796c8dcSSimon Schubert 2813*5796c8dcSSimon Schubert 2814*5796c8dcSSimon Schubert break; 2815*5796c8dcSSimon Schubert 2816*5796c8dcSSimon Schubert case TYPE_CODE_STRUCT: 2817*5796c8dcSSimon Schubert case TYPE_CODE_UNION: 2818*5796c8dcSSimon Schubert if (cname) 2819*5796c8dcSSimon Schubert *cname = xstrdup (TYPE_FIELD_NAME (type, index)); 2820*5796c8dcSSimon Schubert 2821*5796c8dcSSimon Schubert if (cvalue && value) 2822*5796c8dcSSimon Schubert { 2823*5796c8dcSSimon Schubert /* For C, varobj index is the same as type index. */ 2824*5796c8dcSSimon Schubert *cvalue = value_struct_element_index (value, index); 2825*5796c8dcSSimon Schubert } 2826*5796c8dcSSimon Schubert 2827*5796c8dcSSimon Schubert if (ctype) 2828*5796c8dcSSimon Schubert *ctype = TYPE_FIELD_TYPE (type, index); 2829*5796c8dcSSimon Schubert 2830*5796c8dcSSimon Schubert if (cfull_expression) 2831*5796c8dcSSimon Schubert { 2832*5796c8dcSSimon Schubert char *join = was_ptr ? "->" : "."; 2833*5796c8dcSSimon Schubert *cfull_expression = xstrprintf ("(%s)%s%s", parent_expression, join, 2834*5796c8dcSSimon Schubert TYPE_FIELD_NAME (type, index)); 2835*5796c8dcSSimon Schubert } 2836*5796c8dcSSimon Schubert 2837*5796c8dcSSimon Schubert break; 2838*5796c8dcSSimon Schubert 2839*5796c8dcSSimon Schubert case TYPE_CODE_PTR: 2840*5796c8dcSSimon Schubert if (cname) 2841*5796c8dcSSimon Schubert *cname = xstrprintf ("*%s", parent->name); 2842*5796c8dcSSimon Schubert 2843*5796c8dcSSimon Schubert if (cvalue && value) 2844*5796c8dcSSimon Schubert { 2845*5796c8dcSSimon Schubert int success = gdb_value_ind (value, cvalue); 2846*5796c8dcSSimon Schubert if (!success) 2847*5796c8dcSSimon Schubert *cvalue = NULL; 2848*5796c8dcSSimon Schubert } 2849*5796c8dcSSimon Schubert 2850*5796c8dcSSimon Schubert /* Don't use get_target_type because it calls 2851*5796c8dcSSimon Schubert check_typedef and here, we want to show the true 2852*5796c8dcSSimon Schubert declared type of the variable. */ 2853*5796c8dcSSimon Schubert if (ctype) 2854*5796c8dcSSimon Schubert *ctype = TYPE_TARGET_TYPE (type); 2855*5796c8dcSSimon Schubert 2856*5796c8dcSSimon Schubert if (cfull_expression) 2857*5796c8dcSSimon Schubert *cfull_expression = xstrprintf ("*(%s)", parent_expression); 2858*5796c8dcSSimon Schubert 2859*5796c8dcSSimon Schubert break; 2860*5796c8dcSSimon Schubert 2861*5796c8dcSSimon Schubert default: 2862*5796c8dcSSimon Schubert /* This should not happen */ 2863*5796c8dcSSimon Schubert if (cname) 2864*5796c8dcSSimon Schubert *cname = xstrdup ("???"); 2865*5796c8dcSSimon Schubert if (cfull_expression) 2866*5796c8dcSSimon Schubert *cfull_expression = xstrdup ("???"); 2867*5796c8dcSSimon Schubert /* Don't set value and type, we don't know then. */ 2868*5796c8dcSSimon Schubert } 2869*5796c8dcSSimon Schubert } 2870*5796c8dcSSimon Schubert 2871*5796c8dcSSimon Schubert static char * 2872*5796c8dcSSimon Schubert c_name_of_child (struct varobj *parent, int index) 2873*5796c8dcSSimon Schubert { 2874*5796c8dcSSimon Schubert char *name; 2875*5796c8dcSSimon Schubert c_describe_child (parent, index, &name, NULL, NULL, NULL); 2876*5796c8dcSSimon Schubert return name; 2877*5796c8dcSSimon Schubert } 2878*5796c8dcSSimon Schubert 2879*5796c8dcSSimon Schubert static char * 2880*5796c8dcSSimon Schubert c_path_expr_of_child (struct varobj *child) 2881*5796c8dcSSimon Schubert { 2882*5796c8dcSSimon Schubert c_describe_child (child->parent, child->index, NULL, NULL, NULL, 2883*5796c8dcSSimon Schubert &child->path_expr); 2884*5796c8dcSSimon Schubert return child->path_expr; 2885*5796c8dcSSimon Schubert } 2886*5796c8dcSSimon Schubert 2887*5796c8dcSSimon Schubert /* If frame associated with VAR can be found, switch 2888*5796c8dcSSimon Schubert to it and return 1. Otherwise, return 0. */ 2889*5796c8dcSSimon Schubert static int 2890*5796c8dcSSimon Schubert check_scope (struct varobj *var) 2891*5796c8dcSSimon Schubert { 2892*5796c8dcSSimon Schubert struct frame_info *fi; 2893*5796c8dcSSimon Schubert int scope; 2894*5796c8dcSSimon Schubert 2895*5796c8dcSSimon Schubert fi = frame_find_by_id (var->root->frame); 2896*5796c8dcSSimon Schubert scope = fi != NULL; 2897*5796c8dcSSimon Schubert 2898*5796c8dcSSimon Schubert if (fi) 2899*5796c8dcSSimon Schubert { 2900*5796c8dcSSimon Schubert CORE_ADDR pc = get_frame_pc (fi); 2901*5796c8dcSSimon Schubert if (pc < BLOCK_START (var->root->valid_block) || 2902*5796c8dcSSimon Schubert pc >= BLOCK_END (var->root->valid_block)) 2903*5796c8dcSSimon Schubert scope = 0; 2904*5796c8dcSSimon Schubert else 2905*5796c8dcSSimon Schubert select_frame (fi); 2906*5796c8dcSSimon Schubert } 2907*5796c8dcSSimon Schubert return scope; 2908*5796c8dcSSimon Schubert } 2909*5796c8dcSSimon Schubert 2910*5796c8dcSSimon Schubert static struct value * 2911*5796c8dcSSimon Schubert c_value_of_root (struct varobj **var_handle) 2912*5796c8dcSSimon Schubert { 2913*5796c8dcSSimon Schubert struct value *new_val = NULL; 2914*5796c8dcSSimon Schubert struct varobj *var = *var_handle; 2915*5796c8dcSSimon Schubert struct frame_info *fi; 2916*5796c8dcSSimon Schubert int within_scope = 0; 2917*5796c8dcSSimon Schubert struct cleanup *back_to; 2918*5796c8dcSSimon Schubert 2919*5796c8dcSSimon Schubert /* Only root variables can be updated... */ 2920*5796c8dcSSimon Schubert if (!is_root_p (var)) 2921*5796c8dcSSimon Schubert /* Not a root var */ 2922*5796c8dcSSimon Schubert return NULL; 2923*5796c8dcSSimon Schubert 2924*5796c8dcSSimon Schubert back_to = make_cleanup_restore_current_thread (); 2925*5796c8dcSSimon Schubert 2926*5796c8dcSSimon Schubert /* Determine whether the variable is still around. */ 2927*5796c8dcSSimon Schubert if (var->root->valid_block == NULL || var->root->floating) 2928*5796c8dcSSimon Schubert within_scope = 1; 2929*5796c8dcSSimon Schubert else if (var->root->thread_id == 0) 2930*5796c8dcSSimon Schubert { 2931*5796c8dcSSimon Schubert /* The program was single-threaded when the variable object was 2932*5796c8dcSSimon Schubert created. Technically, it's possible that the program became 2933*5796c8dcSSimon Schubert multi-threaded since then, but we don't support such 2934*5796c8dcSSimon Schubert scenario yet. */ 2935*5796c8dcSSimon Schubert within_scope = check_scope (var); 2936*5796c8dcSSimon Schubert } 2937*5796c8dcSSimon Schubert else 2938*5796c8dcSSimon Schubert { 2939*5796c8dcSSimon Schubert ptid_t ptid = thread_id_to_pid (var->root->thread_id); 2940*5796c8dcSSimon Schubert if (in_thread_list (ptid)) 2941*5796c8dcSSimon Schubert { 2942*5796c8dcSSimon Schubert switch_to_thread (ptid); 2943*5796c8dcSSimon Schubert within_scope = check_scope (var); 2944*5796c8dcSSimon Schubert } 2945*5796c8dcSSimon Schubert } 2946*5796c8dcSSimon Schubert 2947*5796c8dcSSimon Schubert if (within_scope) 2948*5796c8dcSSimon Schubert { 2949*5796c8dcSSimon Schubert /* We need to catch errors here, because if evaluate 2950*5796c8dcSSimon Schubert expression fails we want to just return NULL. */ 2951*5796c8dcSSimon Schubert gdb_evaluate_expression (var->root->exp, &new_val); 2952*5796c8dcSSimon Schubert return new_val; 2953*5796c8dcSSimon Schubert } 2954*5796c8dcSSimon Schubert 2955*5796c8dcSSimon Schubert do_cleanups (back_to); 2956*5796c8dcSSimon Schubert 2957*5796c8dcSSimon Schubert return NULL; 2958*5796c8dcSSimon Schubert } 2959*5796c8dcSSimon Schubert 2960*5796c8dcSSimon Schubert static struct value * 2961*5796c8dcSSimon Schubert c_value_of_child (struct varobj *parent, int index) 2962*5796c8dcSSimon Schubert { 2963*5796c8dcSSimon Schubert struct value *value = NULL; 2964*5796c8dcSSimon Schubert c_describe_child (parent, index, NULL, &value, NULL, NULL); 2965*5796c8dcSSimon Schubert 2966*5796c8dcSSimon Schubert return value; 2967*5796c8dcSSimon Schubert } 2968*5796c8dcSSimon Schubert 2969*5796c8dcSSimon Schubert static struct type * 2970*5796c8dcSSimon Schubert c_type_of_child (struct varobj *parent, int index) 2971*5796c8dcSSimon Schubert { 2972*5796c8dcSSimon Schubert struct type *type = NULL; 2973*5796c8dcSSimon Schubert c_describe_child (parent, index, NULL, NULL, &type, NULL); 2974*5796c8dcSSimon Schubert return type; 2975*5796c8dcSSimon Schubert } 2976*5796c8dcSSimon Schubert 2977*5796c8dcSSimon Schubert static char * 2978*5796c8dcSSimon Schubert c_value_of_variable (struct varobj *var, enum varobj_display_formats format) 2979*5796c8dcSSimon Schubert { 2980*5796c8dcSSimon Schubert /* BOGUS: if val_print sees a struct/class, or a reference to one, 2981*5796c8dcSSimon Schubert it will print out its children instead of "{...}". So we need to 2982*5796c8dcSSimon Schubert catch that case explicitly. */ 2983*5796c8dcSSimon Schubert struct type *type = get_type (var); 2984*5796c8dcSSimon Schubert 2985*5796c8dcSSimon Schubert /* If we have a custom formatter, return whatever string it has 2986*5796c8dcSSimon Schubert produced. */ 2987*5796c8dcSSimon Schubert if (var->pretty_printer && var->print_value) 2988*5796c8dcSSimon Schubert return xstrdup (var->print_value); 2989*5796c8dcSSimon Schubert 2990*5796c8dcSSimon Schubert /* Strip top-level references. */ 2991*5796c8dcSSimon Schubert while (TYPE_CODE (type) == TYPE_CODE_REF) 2992*5796c8dcSSimon Schubert type = check_typedef (TYPE_TARGET_TYPE (type)); 2993*5796c8dcSSimon Schubert 2994*5796c8dcSSimon Schubert switch (TYPE_CODE (type)) 2995*5796c8dcSSimon Schubert { 2996*5796c8dcSSimon Schubert case TYPE_CODE_STRUCT: 2997*5796c8dcSSimon Schubert case TYPE_CODE_UNION: 2998*5796c8dcSSimon Schubert return xstrdup ("{...}"); 2999*5796c8dcSSimon Schubert /* break; */ 3000*5796c8dcSSimon Schubert 3001*5796c8dcSSimon Schubert case TYPE_CODE_ARRAY: 3002*5796c8dcSSimon Schubert { 3003*5796c8dcSSimon Schubert char *number; 3004*5796c8dcSSimon Schubert number = xstrprintf ("[%d]", var->num_children); 3005*5796c8dcSSimon Schubert return (number); 3006*5796c8dcSSimon Schubert } 3007*5796c8dcSSimon Schubert /* break; */ 3008*5796c8dcSSimon Schubert 3009*5796c8dcSSimon Schubert default: 3010*5796c8dcSSimon Schubert { 3011*5796c8dcSSimon Schubert if (var->value == NULL) 3012*5796c8dcSSimon Schubert { 3013*5796c8dcSSimon Schubert /* This can happen if we attempt to get the value of a struct 3014*5796c8dcSSimon Schubert member when the parent is an invalid pointer. This is an 3015*5796c8dcSSimon Schubert error condition, so we should tell the caller. */ 3016*5796c8dcSSimon Schubert return NULL; 3017*5796c8dcSSimon Schubert } 3018*5796c8dcSSimon Schubert else 3019*5796c8dcSSimon Schubert { 3020*5796c8dcSSimon Schubert if (var->not_fetched && value_lazy (var->value)) 3021*5796c8dcSSimon Schubert /* Frozen variable and no value yet. We don't 3022*5796c8dcSSimon Schubert implicitly fetch the value. MI response will 3023*5796c8dcSSimon Schubert use empty string for the value, which is OK. */ 3024*5796c8dcSSimon Schubert return NULL; 3025*5796c8dcSSimon Schubert 3026*5796c8dcSSimon Schubert gdb_assert (varobj_value_is_changeable_p (var)); 3027*5796c8dcSSimon Schubert gdb_assert (!value_lazy (var->value)); 3028*5796c8dcSSimon Schubert 3029*5796c8dcSSimon Schubert /* If the specified format is the current one, 3030*5796c8dcSSimon Schubert we can reuse print_value */ 3031*5796c8dcSSimon Schubert if (format == var->format) 3032*5796c8dcSSimon Schubert return xstrdup (var->print_value); 3033*5796c8dcSSimon Schubert else 3034*5796c8dcSSimon Schubert return value_get_print_value (var->value, format, var); 3035*5796c8dcSSimon Schubert } 3036*5796c8dcSSimon Schubert } 3037*5796c8dcSSimon Schubert } 3038*5796c8dcSSimon Schubert } 3039*5796c8dcSSimon Schubert 3040*5796c8dcSSimon Schubert 3041*5796c8dcSSimon Schubert /* C++ */ 3042*5796c8dcSSimon Schubert 3043*5796c8dcSSimon Schubert static int 3044*5796c8dcSSimon Schubert cplus_number_of_children (struct varobj *var) 3045*5796c8dcSSimon Schubert { 3046*5796c8dcSSimon Schubert struct type *type; 3047*5796c8dcSSimon Schubert int children, dont_know; 3048*5796c8dcSSimon Schubert 3049*5796c8dcSSimon Schubert dont_know = 1; 3050*5796c8dcSSimon Schubert children = 0; 3051*5796c8dcSSimon Schubert 3052*5796c8dcSSimon Schubert if (!CPLUS_FAKE_CHILD (var)) 3053*5796c8dcSSimon Schubert { 3054*5796c8dcSSimon Schubert type = get_value_type (var); 3055*5796c8dcSSimon Schubert adjust_value_for_child_access (NULL, &type, NULL); 3056*5796c8dcSSimon Schubert 3057*5796c8dcSSimon Schubert if (((TYPE_CODE (type)) == TYPE_CODE_STRUCT) || 3058*5796c8dcSSimon Schubert ((TYPE_CODE (type)) == TYPE_CODE_UNION)) 3059*5796c8dcSSimon Schubert { 3060*5796c8dcSSimon Schubert int kids[3]; 3061*5796c8dcSSimon Schubert 3062*5796c8dcSSimon Schubert cplus_class_num_children (type, kids); 3063*5796c8dcSSimon Schubert if (kids[v_public] != 0) 3064*5796c8dcSSimon Schubert children++; 3065*5796c8dcSSimon Schubert if (kids[v_private] != 0) 3066*5796c8dcSSimon Schubert children++; 3067*5796c8dcSSimon Schubert if (kids[v_protected] != 0) 3068*5796c8dcSSimon Schubert children++; 3069*5796c8dcSSimon Schubert 3070*5796c8dcSSimon Schubert /* Add any baseclasses */ 3071*5796c8dcSSimon Schubert children += TYPE_N_BASECLASSES (type); 3072*5796c8dcSSimon Schubert dont_know = 0; 3073*5796c8dcSSimon Schubert 3074*5796c8dcSSimon Schubert /* FIXME: save children in var */ 3075*5796c8dcSSimon Schubert } 3076*5796c8dcSSimon Schubert } 3077*5796c8dcSSimon Schubert else 3078*5796c8dcSSimon Schubert { 3079*5796c8dcSSimon Schubert int kids[3]; 3080*5796c8dcSSimon Schubert 3081*5796c8dcSSimon Schubert type = get_value_type (var->parent); 3082*5796c8dcSSimon Schubert adjust_value_for_child_access (NULL, &type, NULL); 3083*5796c8dcSSimon Schubert 3084*5796c8dcSSimon Schubert cplus_class_num_children (type, kids); 3085*5796c8dcSSimon Schubert if (strcmp (var->name, "public") == 0) 3086*5796c8dcSSimon Schubert children = kids[v_public]; 3087*5796c8dcSSimon Schubert else if (strcmp (var->name, "private") == 0) 3088*5796c8dcSSimon Schubert children = kids[v_private]; 3089*5796c8dcSSimon Schubert else 3090*5796c8dcSSimon Schubert children = kids[v_protected]; 3091*5796c8dcSSimon Schubert dont_know = 0; 3092*5796c8dcSSimon Schubert } 3093*5796c8dcSSimon Schubert 3094*5796c8dcSSimon Schubert if (dont_know) 3095*5796c8dcSSimon Schubert children = c_number_of_children (var); 3096*5796c8dcSSimon Schubert 3097*5796c8dcSSimon Schubert return children; 3098*5796c8dcSSimon Schubert } 3099*5796c8dcSSimon Schubert 3100*5796c8dcSSimon Schubert /* Compute # of public, private, and protected variables in this class. 3101*5796c8dcSSimon Schubert That means we need to descend into all baseclasses and find out 3102*5796c8dcSSimon Schubert how many are there, too. */ 3103*5796c8dcSSimon Schubert static void 3104*5796c8dcSSimon Schubert cplus_class_num_children (struct type *type, int children[3]) 3105*5796c8dcSSimon Schubert { 3106*5796c8dcSSimon Schubert int i; 3107*5796c8dcSSimon Schubert 3108*5796c8dcSSimon Schubert children[v_public] = 0; 3109*5796c8dcSSimon Schubert children[v_private] = 0; 3110*5796c8dcSSimon Schubert children[v_protected] = 0; 3111*5796c8dcSSimon Schubert 3112*5796c8dcSSimon Schubert for (i = TYPE_N_BASECLASSES (type); i < TYPE_NFIELDS (type); i++) 3113*5796c8dcSSimon Schubert { 3114*5796c8dcSSimon Schubert /* If we have a virtual table pointer, omit it. */ 3115*5796c8dcSSimon Schubert if (TYPE_VPTR_BASETYPE (type) == type && TYPE_VPTR_FIELDNO (type) == i) 3116*5796c8dcSSimon Schubert continue; 3117*5796c8dcSSimon Schubert 3118*5796c8dcSSimon Schubert if (TYPE_FIELD_PROTECTED (type, i)) 3119*5796c8dcSSimon Schubert children[v_protected]++; 3120*5796c8dcSSimon Schubert else if (TYPE_FIELD_PRIVATE (type, i)) 3121*5796c8dcSSimon Schubert children[v_private]++; 3122*5796c8dcSSimon Schubert else 3123*5796c8dcSSimon Schubert children[v_public]++; 3124*5796c8dcSSimon Schubert } 3125*5796c8dcSSimon Schubert } 3126*5796c8dcSSimon Schubert 3127*5796c8dcSSimon Schubert static char * 3128*5796c8dcSSimon Schubert cplus_name_of_variable (struct varobj *parent) 3129*5796c8dcSSimon Schubert { 3130*5796c8dcSSimon Schubert return c_name_of_variable (parent); 3131*5796c8dcSSimon Schubert } 3132*5796c8dcSSimon Schubert 3133*5796c8dcSSimon Schubert enum accessibility { private_field, protected_field, public_field }; 3134*5796c8dcSSimon Schubert 3135*5796c8dcSSimon Schubert /* Check if field INDEX of TYPE has the specified accessibility. 3136*5796c8dcSSimon Schubert Return 0 if so and 1 otherwise. */ 3137*5796c8dcSSimon Schubert static int 3138*5796c8dcSSimon Schubert match_accessibility (struct type *type, int index, enum accessibility acc) 3139*5796c8dcSSimon Schubert { 3140*5796c8dcSSimon Schubert if (acc == private_field && TYPE_FIELD_PRIVATE (type, index)) 3141*5796c8dcSSimon Schubert return 1; 3142*5796c8dcSSimon Schubert else if (acc == protected_field && TYPE_FIELD_PROTECTED (type, index)) 3143*5796c8dcSSimon Schubert return 1; 3144*5796c8dcSSimon Schubert else if (acc == public_field && !TYPE_FIELD_PRIVATE (type, index) 3145*5796c8dcSSimon Schubert && !TYPE_FIELD_PROTECTED (type, index)) 3146*5796c8dcSSimon Schubert return 1; 3147*5796c8dcSSimon Schubert else 3148*5796c8dcSSimon Schubert return 0; 3149*5796c8dcSSimon Schubert } 3150*5796c8dcSSimon Schubert 3151*5796c8dcSSimon Schubert static void 3152*5796c8dcSSimon Schubert cplus_describe_child (struct varobj *parent, int index, 3153*5796c8dcSSimon Schubert char **cname, struct value **cvalue, struct type **ctype, 3154*5796c8dcSSimon Schubert char **cfull_expression) 3155*5796c8dcSSimon Schubert { 3156*5796c8dcSSimon Schubert char *name = NULL; 3157*5796c8dcSSimon Schubert struct value *value; 3158*5796c8dcSSimon Schubert struct type *type; 3159*5796c8dcSSimon Schubert int was_ptr; 3160*5796c8dcSSimon Schubert char *parent_expression = NULL; 3161*5796c8dcSSimon Schubert 3162*5796c8dcSSimon Schubert if (cname) 3163*5796c8dcSSimon Schubert *cname = NULL; 3164*5796c8dcSSimon Schubert if (cvalue) 3165*5796c8dcSSimon Schubert *cvalue = NULL; 3166*5796c8dcSSimon Schubert if (ctype) 3167*5796c8dcSSimon Schubert *ctype = NULL; 3168*5796c8dcSSimon Schubert if (cfull_expression) 3169*5796c8dcSSimon Schubert *cfull_expression = NULL; 3170*5796c8dcSSimon Schubert 3171*5796c8dcSSimon Schubert if (CPLUS_FAKE_CHILD (parent)) 3172*5796c8dcSSimon Schubert { 3173*5796c8dcSSimon Schubert value = parent->parent->value; 3174*5796c8dcSSimon Schubert type = get_value_type (parent->parent); 3175*5796c8dcSSimon Schubert if (cfull_expression) 3176*5796c8dcSSimon Schubert parent_expression = varobj_get_path_expr (parent->parent); 3177*5796c8dcSSimon Schubert } 3178*5796c8dcSSimon Schubert else 3179*5796c8dcSSimon Schubert { 3180*5796c8dcSSimon Schubert value = parent->value; 3181*5796c8dcSSimon Schubert type = get_value_type (parent); 3182*5796c8dcSSimon Schubert if (cfull_expression) 3183*5796c8dcSSimon Schubert parent_expression = varobj_get_path_expr (parent); 3184*5796c8dcSSimon Schubert } 3185*5796c8dcSSimon Schubert 3186*5796c8dcSSimon Schubert adjust_value_for_child_access (&value, &type, &was_ptr); 3187*5796c8dcSSimon Schubert 3188*5796c8dcSSimon Schubert if (TYPE_CODE (type) == TYPE_CODE_STRUCT 3189*5796c8dcSSimon Schubert || TYPE_CODE (type) == TYPE_CODE_UNION) 3190*5796c8dcSSimon Schubert { 3191*5796c8dcSSimon Schubert char *join = was_ptr ? "->" : "."; 3192*5796c8dcSSimon Schubert if (CPLUS_FAKE_CHILD (parent)) 3193*5796c8dcSSimon Schubert { 3194*5796c8dcSSimon Schubert /* The fields of the class type are ordered as they 3195*5796c8dcSSimon Schubert appear in the class. We are given an index for a 3196*5796c8dcSSimon Schubert particular access control type ("public","protected", 3197*5796c8dcSSimon Schubert or "private"). We must skip over fields that don't 3198*5796c8dcSSimon Schubert have the access control we are looking for to properly 3199*5796c8dcSSimon Schubert find the indexed field. */ 3200*5796c8dcSSimon Schubert int type_index = TYPE_N_BASECLASSES (type); 3201*5796c8dcSSimon Schubert enum accessibility acc = public_field; 3202*5796c8dcSSimon Schubert if (strcmp (parent->name, "private") == 0) 3203*5796c8dcSSimon Schubert acc = private_field; 3204*5796c8dcSSimon Schubert else if (strcmp (parent->name, "protected") == 0) 3205*5796c8dcSSimon Schubert acc = protected_field; 3206*5796c8dcSSimon Schubert 3207*5796c8dcSSimon Schubert while (index >= 0) 3208*5796c8dcSSimon Schubert { 3209*5796c8dcSSimon Schubert if (TYPE_VPTR_BASETYPE (type) == type 3210*5796c8dcSSimon Schubert && type_index == TYPE_VPTR_FIELDNO (type)) 3211*5796c8dcSSimon Schubert ; /* ignore vptr */ 3212*5796c8dcSSimon Schubert else if (match_accessibility (type, type_index, acc)) 3213*5796c8dcSSimon Schubert --index; 3214*5796c8dcSSimon Schubert ++type_index; 3215*5796c8dcSSimon Schubert } 3216*5796c8dcSSimon Schubert --type_index; 3217*5796c8dcSSimon Schubert 3218*5796c8dcSSimon Schubert if (cname) 3219*5796c8dcSSimon Schubert *cname = xstrdup (TYPE_FIELD_NAME (type, type_index)); 3220*5796c8dcSSimon Schubert 3221*5796c8dcSSimon Schubert if (cvalue && value) 3222*5796c8dcSSimon Schubert *cvalue = value_struct_element_index (value, type_index); 3223*5796c8dcSSimon Schubert 3224*5796c8dcSSimon Schubert if (ctype) 3225*5796c8dcSSimon Schubert *ctype = TYPE_FIELD_TYPE (type, type_index); 3226*5796c8dcSSimon Schubert 3227*5796c8dcSSimon Schubert if (cfull_expression) 3228*5796c8dcSSimon Schubert *cfull_expression = xstrprintf ("((%s)%s%s)", parent_expression, 3229*5796c8dcSSimon Schubert join, 3230*5796c8dcSSimon Schubert TYPE_FIELD_NAME (type, type_index)); 3231*5796c8dcSSimon Schubert } 3232*5796c8dcSSimon Schubert else if (index < TYPE_N_BASECLASSES (type)) 3233*5796c8dcSSimon Schubert { 3234*5796c8dcSSimon Schubert /* This is a baseclass. */ 3235*5796c8dcSSimon Schubert if (cname) 3236*5796c8dcSSimon Schubert *cname = xstrdup (TYPE_FIELD_NAME (type, index)); 3237*5796c8dcSSimon Schubert 3238*5796c8dcSSimon Schubert if (cvalue && value) 3239*5796c8dcSSimon Schubert *cvalue = value_cast (TYPE_FIELD_TYPE (type, index), value); 3240*5796c8dcSSimon Schubert 3241*5796c8dcSSimon Schubert if (ctype) 3242*5796c8dcSSimon Schubert { 3243*5796c8dcSSimon Schubert *ctype = TYPE_FIELD_TYPE (type, index); 3244*5796c8dcSSimon Schubert } 3245*5796c8dcSSimon Schubert 3246*5796c8dcSSimon Schubert if (cfull_expression) 3247*5796c8dcSSimon Schubert { 3248*5796c8dcSSimon Schubert char *ptr = was_ptr ? "*" : ""; 3249*5796c8dcSSimon Schubert /* Cast the parent to the base' type. Note that in gdb, 3250*5796c8dcSSimon Schubert expression like 3251*5796c8dcSSimon Schubert (Base1)d 3252*5796c8dcSSimon Schubert will create an lvalue, for all appearences, so we don't 3253*5796c8dcSSimon Schubert need to use more fancy: 3254*5796c8dcSSimon Schubert *(Base1*)(&d) 3255*5796c8dcSSimon Schubert construct. */ 3256*5796c8dcSSimon Schubert *cfull_expression = xstrprintf ("(%s(%s%s) %s)", 3257*5796c8dcSSimon Schubert ptr, 3258*5796c8dcSSimon Schubert TYPE_FIELD_NAME (type, index), 3259*5796c8dcSSimon Schubert ptr, 3260*5796c8dcSSimon Schubert parent_expression); 3261*5796c8dcSSimon Schubert } 3262*5796c8dcSSimon Schubert } 3263*5796c8dcSSimon Schubert else 3264*5796c8dcSSimon Schubert { 3265*5796c8dcSSimon Schubert char *access = NULL; 3266*5796c8dcSSimon Schubert int children[3]; 3267*5796c8dcSSimon Schubert cplus_class_num_children (type, children); 3268*5796c8dcSSimon Schubert 3269*5796c8dcSSimon Schubert /* Everything beyond the baseclasses can 3270*5796c8dcSSimon Schubert only be "public", "private", or "protected" 3271*5796c8dcSSimon Schubert 3272*5796c8dcSSimon Schubert The special "fake" children are always output by varobj in 3273*5796c8dcSSimon Schubert this order. So if INDEX == 2, it MUST be "protected". */ 3274*5796c8dcSSimon Schubert index -= TYPE_N_BASECLASSES (type); 3275*5796c8dcSSimon Schubert switch (index) 3276*5796c8dcSSimon Schubert { 3277*5796c8dcSSimon Schubert case 0: 3278*5796c8dcSSimon Schubert if (children[v_public] > 0) 3279*5796c8dcSSimon Schubert access = "public"; 3280*5796c8dcSSimon Schubert else if (children[v_private] > 0) 3281*5796c8dcSSimon Schubert access = "private"; 3282*5796c8dcSSimon Schubert else 3283*5796c8dcSSimon Schubert access = "protected"; 3284*5796c8dcSSimon Schubert break; 3285*5796c8dcSSimon Schubert case 1: 3286*5796c8dcSSimon Schubert if (children[v_public] > 0) 3287*5796c8dcSSimon Schubert { 3288*5796c8dcSSimon Schubert if (children[v_private] > 0) 3289*5796c8dcSSimon Schubert access = "private"; 3290*5796c8dcSSimon Schubert else 3291*5796c8dcSSimon Schubert access = "protected"; 3292*5796c8dcSSimon Schubert } 3293*5796c8dcSSimon Schubert else if (children[v_private] > 0) 3294*5796c8dcSSimon Schubert access = "protected"; 3295*5796c8dcSSimon Schubert break; 3296*5796c8dcSSimon Schubert case 2: 3297*5796c8dcSSimon Schubert /* Must be protected */ 3298*5796c8dcSSimon Schubert access = "protected"; 3299*5796c8dcSSimon Schubert break; 3300*5796c8dcSSimon Schubert default: 3301*5796c8dcSSimon Schubert /* error! */ 3302*5796c8dcSSimon Schubert break; 3303*5796c8dcSSimon Schubert } 3304*5796c8dcSSimon Schubert 3305*5796c8dcSSimon Schubert gdb_assert (access); 3306*5796c8dcSSimon Schubert if (cname) 3307*5796c8dcSSimon Schubert *cname = xstrdup (access); 3308*5796c8dcSSimon Schubert 3309*5796c8dcSSimon Schubert /* Value and type and full expression are null here. */ 3310*5796c8dcSSimon Schubert } 3311*5796c8dcSSimon Schubert } 3312*5796c8dcSSimon Schubert else 3313*5796c8dcSSimon Schubert { 3314*5796c8dcSSimon Schubert c_describe_child (parent, index, cname, cvalue, ctype, cfull_expression); 3315*5796c8dcSSimon Schubert } 3316*5796c8dcSSimon Schubert } 3317*5796c8dcSSimon Schubert 3318*5796c8dcSSimon Schubert static char * 3319*5796c8dcSSimon Schubert cplus_name_of_child (struct varobj *parent, int index) 3320*5796c8dcSSimon Schubert { 3321*5796c8dcSSimon Schubert char *name = NULL; 3322*5796c8dcSSimon Schubert cplus_describe_child (parent, index, &name, NULL, NULL, NULL); 3323*5796c8dcSSimon Schubert return name; 3324*5796c8dcSSimon Schubert } 3325*5796c8dcSSimon Schubert 3326*5796c8dcSSimon Schubert static char * 3327*5796c8dcSSimon Schubert cplus_path_expr_of_child (struct varobj *child) 3328*5796c8dcSSimon Schubert { 3329*5796c8dcSSimon Schubert cplus_describe_child (child->parent, child->index, NULL, NULL, NULL, 3330*5796c8dcSSimon Schubert &child->path_expr); 3331*5796c8dcSSimon Schubert return child->path_expr; 3332*5796c8dcSSimon Schubert } 3333*5796c8dcSSimon Schubert 3334*5796c8dcSSimon Schubert static struct value * 3335*5796c8dcSSimon Schubert cplus_value_of_root (struct varobj **var_handle) 3336*5796c8dcSSimon Schubert { 3337*5796c8dcSSimon Schubert return c_value_of_root (var_handle); 3338*5796c8dcSSimon Schubert } 3339*5796c8dcSSimon Schubert 3340*5796c8dcSSimon Schubert static struct value * 3341*5796c8dcSSimon Schubert cplus_value_of_child (struct varobj *parent, int index) 3342*5796c8dcSSimon Schubert { 3343*5796c8dcSSimon Schubert struct value *value = NULL; 3344*5796c8dcSSimon Schubert cplus_describe_child (parent, index, NULL, &value, NULL, NULL); 3345*5796c8dcSSimon Schubert return value; 3346*5796c8dcSSimon Schubert } 3347*5796c8dcSSimon Schubert 3348*5796c8dcSSimon Schubert static struct type * 3349*5796c8dcSSimon Schubert cplus_type_of_child (struct varobj *parent, int index) 3350*5796c8dcSSimon Schubert { 3351*5796c8dcSSimon Schubert struct type *type = NULL; 3352*5796c8dcSSimon Schubert cplus_describe_child (parent, index, NULL, NULL, &type, NULL); 3353*5796c8dcSSimon Schubert return type; 3354*5796c8dcSSimon Schubert } 3355*5796c8dcSSimon Schubert 3356*5796c8dcSSimon Schubert static char * 3357*5796c8dcSSimon Schubert cplus_value_of_variable (struct varobj *var, enum varobj_display_formats format) 3358*5796c8dcSSimon Schubert { 3359*5796c8dcSSimon Schubert 3360*5796c8dcSSimon Schubert /* If we have one of our special types, don't print out 3361*5796c8dcSSimon Schubert any value. */ 3362*5796c8dcSSimon Schubert if (CPLUS_FAKE_CHILD (var)) 3363*5796c8dcSSimon Schubert return xstrdup (""); 3364*5796c8dcSSimon Schubert 3365*5796c8dcSSimon Schubert return c_value_of_variable (var, format); 3366*5796c8dcSSimon Schubert } 3367*5796c8dcSSimon Schubert 3368*5796c8dcSSimon Schubert /* Java */ 3369*5796c8dcSSimon Schubert 3370*5796c8dcSSimon Schubert static int 3371*5796c8dcSSimon Schubert java_number_of_children (struct varobj *var) 3372*5796c8dcSSimon Schubert { 3373*5796c8dcSSimon Schubert return cplus_number_of_children (var); 3374*5796c8dcSSimon Schubert } 3375*5796c8dcSSimon Schubert 3376*5796c8dcSSimon Schubert static char * 3377*5796c8dcSSimon Schubert java_name_of_variable (struct varobj *parent) 3378*5796c8dcSSimon Schubert { 3379*5796c8dcSSimon Schubert char *p, *name; 3380*5796c8dcSSimon Schubert 3381*5796c8dcSSimon Schubert name = cplus_name_of_variable (parent); 3382*5796c8dcSSimon Schubert /* If the name has "-" in it, it is because we 3383*5796c8dcSSimon Schubert needed to escape periods in the name... */ 3384*5796c8dcSSimon Schubert p = name; 3385*5796c8dcSSimon Schubert 3386*5796c8dcSSimon Schubert while (*p != '\000') 3387*5796c8dcSSimon Schubert { 3388*5796c8dcSSimon Schubert if (*p == '-') 3389*5796c8dcSSimon Schubert *p = '.'; 3390*5796c8dcSSimon Schubert p++; 3391*5796c8dcSSimon Schubert } 3392*5796c8dcSSimon Schubert 3393*5796c8dcSSimon Schubert return name; 3394*5796c8dcSSimon Schubert } 3395*5796c8dcSSimon Schubert 3396*5796c8dcSSimon Schubert static char * 3397*5796c8dcSSimon Schubert java_name_of_child (struct varobj *parent, int index) 3398*5796c8dcSSimon Schubert { 3399*5796c8dcSSimon Schubert char *name, *p; 3400*5796c8dcSSimon Schubert 3401*5796c8dcSSimon Schubert name = cplus_name_of_child (parent, index); 3402*5796c8dcSSimon Schubert /* Escape any periods in the name... */ 3403*5796c8dcSSimon Schubert p = name; 3404*5796c8dcSSimon Schubert 3405*5796c8dcSSimon Schubert while (*p != '\000') 3406*5796c8dcSSimon Schubert { 3407*5796c8dcSSimon Schubert if (*p == '.') 3408*5796c8dcSSimon Schubert *p = '-'; 3409*5796c8dcSSimon Schubert p++; 3410*5796c8dcSSimon Schubert } 3411*5796c8dcSSimon Schubert 3412*5796c8dcSSimon Schubert return name; 3413*5796c8dcSSimon Schubert } 3414*5796c8dcSSimon Schubert 3415*5796c8dcSSimon Schubert static char * 3416*5796c8dcSSimon Schubert java_path_expr_of_child (struct varobj *child) 3417*5796c8dcSSimon Schubert { 3418*5796c8dcSSimon Schubert return NULL; 3419*5796c8dcSSimon Schubert } 3420*5796c8dcSSimon Schubert 3421*5796c8dcSSimon Schubert static struct value * 3422*5796c8dcSSimon Schubert java_value_of_root (struct varobj **var_handle) 3423*5796c8dcSSimon Schubert { 3424*5796c8dcSSimon Schubert return cplus_value_of_root (var_handle); 3425*5796c8dcSSimon Schubert } 3426*5796c8dcSSimon Schubert 3427*5796c8dcSSimon Schubert static struct value * 3428*5796c8dcSSimon Schubert java_value_of_child (struct varobj *parent, int index) 3429*5796c8dcSSimon Schubert { 3430*5796c8dcSSimon Schubert return cplus_value_of_child (parent, index); 3431*5796c8dcSSimon Schubert } 3432*5796c8dcSSimon Schubert 3433*5796c8dcSSimon Schubert static struct type * 3434*5796c8dcSSimon Schubert java_type_of_child (struct varobj *parent, int index) 3435*5796c8dcSSimon Schubert { 3436*5796c8dcSSimon Schubert return cplus_type_of_child (parent, index); 3437*5796c8dcSSimon Schubert } 3438*5796c8dcSSimon Schubert 3439*5796c8dcSSimon Schubert static char * 3440*5796c8dcSSimon Schubert java_value_of_variable (struct varobj *var, enum varobj_display_formats format) 3441*5796c8dcSSimon Schubert { 3442*5796c8dcSSimon Schubert return cplus_value_of_variable (var, format); 3443*5796c8dcSSimon Schubert } 3444*5796c8dcSSimon Schubert 3445*5796c8dcSSimon Schubert /* Iterate all the existing _root_ VAROBJs and call the FUNC callback for them 3446*5796c8dcSSimon Schubert with an arbitrary caller supplied DATA pointer. */ 3447*5796c8dcSSimon Schubert 3448*5796c8dcSSimon Schubert void 3449*5796c8dcSSimon Schubert all_root_varobjs (void (*func) (struct varobj *var, void *data), void *data) 3450*5796c8dcSSimon Schubert { 3451*5796c8dcSSimon Schubert struct varobj_root *var_root, *var_root_next; 3452*5796c8dcSSimon Schubert 3453*5796c8dcSSimon Schubert /* Iterate "safely" - handle if the callee deletes its passed VAROBJ. */ 3454*5796c8dcSSimon Schubert 3455*5796c8dcSSimon Schubert for (var_root = rootlist; var_root != NULL; var_root = var_root_next) 3456*5796c8dcSSimon Schubert { 3457*5796c8dcSSimon Schubert var_root_next = var_root->next; 3458*5796c8dcSSimon Schubert 3459*5796c8dcSSimon Schubert (*func) (var_root->rootvar, data); 3460*5796c8dcSSimon Schubert } 3461*5796c8dcSSimon Schubert } 3462*5796c8dcSSimon Schubert 3463*5796c8dcSSimon Schubert extern void _initialize_varobj (void); 3464*5796c8dcSSimon Schubert void 3465*5796c8dcSSimon Schubert _initialize_varobj (void) 3466*5796c8dcSSimon Schubert { 3467*5796c8dcSSimon Schubert int sizeof_table = sizeof (struct vlist *) * VAROBJ_TABLE_SIZE; 3468*5796c8dcSSimon Schubert 3469*5796c8dcSSimon Schubert varobj_table = xmalloc (sizeof_table); 3470*5796c8dcSSimon Schubert memset (varobj_table, 0, sizeof_table); 3471*5796c8dcSSimon Schubert 3472*5796c8dcSSimon Schubert add_setshow_zinteger_cmd ("debugvarobj", class_maintenance, 3473*5796c8dcSSimon Schubert &varobjdebug, _("\ 3474*5796c8dcSSimon Schubert Set varobj debugging."), _("\ 3475*5796c8dcSSimon Schubert Show varobj debugging."), _("\ 3476*5796c8dcSSimon Schubert When non-zero, varobj debugging is enabled."), 3477*5796c8dcSSimon Schubert NULL, 3478*5796c8dcSSimon Schubert show_varobjdebug, 3479*5796c8dcSSimon Schubert &setlist, &showlist); 3480*5796c8dcSSimon Schubert } 3481*5796c8dcSSimon Schubert 3482*5796c8dcSSimon Schubert /* Invalidate varobj VAR if it is tied to locals and re-create it if it is 3483*5796c8dcSSimon Schubert defined on globals. It is a helper for varobj_invalidate. */ 3484*5796c8dcSSimon Schubert 3485*5796c8dcSSimon Schubert static void 3486*5796c8dcSSimon Schubert varobj_invalidate_iter (struct varobj *var, void *unused) 3487*5796c8dcSSimon Schubert { 3488*5796c8dcSSimon Schubert /* Floating varobjs are reparsed on each stop, so we don't care if the 3489*5796c8dcSSimon Schubert presently parsed expression refers to something that's gone. */ 3490*5796c8dcSSimon Schubert if (var->root->floating) 3491*5796c8dcSSimon Schubert return; 3492*5796c8dcSSimon Schubert 3493*5796c8dcSSimon Schubert /* global var must be re-evaluated. */ 3494*5796c8dcSSimon Schubert if (var->root->valid_block == NULL) 3495*5796c8dcSSimon Schubert { 3496*5796c8dcSSimon Schubert struct varobj *tmp_var; 3497*5796c8dcSSimon Schubert 3498*5796c8dcSSimon Schubert /* Try to create a varobj with same expression. If we succeed 3499*5796c8dcSSimon Schubert replace the old varobj, otherwise invalidate it. */ 3500*5796c8dcSSimon Schubert tmp_var = varobj_create (NULL, var->name, (CORE_ADDR) 0, 3501*5796c8dcSSimon Schubert USE_CURRENT_FRAME); 3502*5796c8dcSSimon Schubert if (tmp_var != NULL) 3503*5796c8dcSSimon Schubert { 3504*5796c8dcSSimon Schubert tmp_var->obj_name = xstrdup (var->obj_name); 3505*5796c8dcSSimon Schubert varobj_delete (var, NULL, 0); 3506*5796c8dcSSimon Schubert install_variable (tmp_var); 3507*5796c8dcSSimon Schubert } 3508*5796c8dcSSimon Schubert else 3509*5796c8dcSSimon Schubert var->root->is_valid = 0; 3510*5796c8dcSSimon Schubert } 3511*5796c8dcSSimon Schubert else /* locals must be invalidated. */ 3512*5796c8dcSSimon Schubert var->root->is_valid = 0; 3513*5796c8dcSSimon Schubert } 3514*5796c8dcSSimon Schubert 3515*5796c8dcSSimon Schubert /* Invalidate the varobjs that are tied to locals and re-create the ones that 3516*5796c8dcSSimon Schubert are defined on globals. 3517*5796c8dcSSimon Schubert Invalidated varobjs will be always printed in_scope="invalid". */ 3518*5796c8dcSSimon Schubert 3519*5796c8dcSSimon Schubert void 3520*5796c8dcSSimon Schubert varobj_invalidate (void) 3521*5796c8dcSSimon Schubert { 3522*5796c8dcSSimon Schubert all_root_varobjs (varobj_invalidate_iter, NULL); 3523*5796c8dcSSimon Schubert } 3524