1 /* Implementation of the GDB variable objects API.
3 Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
4 Free Software Foundation, Inc.
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 51 Franklin Street, Fifth Floor,
19 Boston, MA 02110-1301, USA. */
22 #include "exceptions.h"
24 #include "expression.h"
30 #include "gdb_assert.h"
31 #include "gdb_string.h"
35 /* Non-zero if we want to see trace of varobj level stuff. */
39 show_varobjdebug (struct ui_file *file, int from_tty,
40 struct cmd_list_element *c, const char *value)
42 fprintf_filtered (file, _("Varobj debugging is %s.\n"), value);
45 /* String representations of gdb's format codes */
46 char *varobj_format_string[] =
47 { "natural", "binary", "decimal", "hexadecimal", "octal" };
49 /* String representations of gdb's known languages */
50 char *varobj_language_string[] = { "unknown", "C", "C++", "Java" };
54 /* Every root variable has one of these structures saved in its
55 varobj. Members which must be free'd are noted. */
59 /* Alloc'd expression for this parent. */
60 struct expression *exp;
62 /* Block for which this expression is valid */
63 struct block *valid_block;
65 /* The frame for this expression */
66 struct frame_id frame;
68 /* If 1, "update" always recomputes the frame & valid block
69 using the currently selected frame. */
70 int use_selected_frame;
72 /* Language info for this variable and its children */
73 struct language_specific *lang;
75 /* The varobj for this root node. */
76 struct varobj *rootvar;
78 /* Next root variable */
79 struct varobj_root *next;
82 /* Every variable in the system has a structure of this type defined
83 for it. This structure holds all information necessary to manipulate
84 a particular object variable. Members which must be freed are noted. */
88 /* Alloc'd name of the variable for this object.. If this variable is a
89 child, then this name will be the child's source name.
91 /* NOTE: This is the "expression" */
94 /* The alloc'd name for this variable's object. This is here for
95 convenience when constructing this object's children. */
98 /* Index of this variable in its parent or -1 */
101 /* The type of this variable. This may NEVER be NULL. */
104 /* The value of this expression or subexpression. This may be NULL. */
107 /* Did an error occur evaluating the expression or getting its value? */
110 /* The number of (immediate) children this variable has */
113 /* If this object is a child, this points to its immediate parent. */
114 struct varobj *parent;
116 /* A list of this object's children */
117 struct varobj_child *children;
119 /* Description of the root variable. Points to root variable for children. */
120 struct varobj_root *root;
122 /* The format of the output for this object */
123 enum varobj_display_formats format;
125 /* Was this variable updated via a varobj_set_value operation */
129 /* Every variable keeps a linked list of its children, described
130 by the following structure. */
131 /* FIXME: Deprecated. All should use vlist instead */
136 /* Pointer to the child's data */
137 struct varobj *child;
139 /* Pointer to the next child */
140 struct varobj_child *next;
143 /* A stack of varobjs */
144 /* FIXME: Deprecated. All should use vlist instead */
155 struct cpstack *next;
158 /* A list of varobjs */
166 /* Private function prototypes */
168 /* Helper functions for the above subcommands. */
170 static int delete_variable (struct cpstack **, struct varobj *, int);
172 static void delete_variable_1 (struct cpstack **, int *,
173 struct varobj *, int, int);
175 static int install_variable (struct varobj *);
177 static void uninstall_variable (struct varobj *);
179 static struct varobj *child_exists (struct varobj *, char *);
181 static struct varobj *create_child (struct varobj *, int, char *);
183 static void save_child_in_parent (struct varobj *, struct varobj *);
185 static void remove_child_from_parent (struct varobj *, struct varobj *);
187 /* Utility routines */
189 static struct varobj *new_variable (void);
191 static struct varobj *new_root_variable (void);
193 static void free_variable (struct varobj *var);
195 static struct cleanup *make_cleanup_free_variable (struct varobj *var);
197 static struct type *get_type (struct varobj *var);
199 static struct type *get_type_deref (struct varobj *var);
201 static struct type *get_target_type (struct type *);
203 static enum varobj_display_formats variable_default_display (struct varobj *);
205 static int my_value_equal (struct value *, struct value *, int *);
207 static void vpush (struct vstack **pstack, struct varobj *var);
209 static struct varobj *vpop (struct vstack **pstack);
211 static void cppush (struct cpstack **pstack, char *name);
213 static char *cppop (struct cpstack **pstack);
215 /* Language-specific routines. */
217 static enum varobj_languages variable_language (struct varobj *var);
219 static int number_of_children (struct varobj *);
221 static char *name_of_variable (struct varobj *);
223 static char *name_of_child (struct varobj *, int);
225 static struct value *value_of_root (struct varobj **var_handle, int *);
227 static struct value *value_of_child (struct varobj *parent, int index);
229 static struct type *type_of_child (struct varobj *var);
231 static int variable_editable (struct varobj *var);
233 static char *my_value_of_variable (struct varobj *var);
235 static int type_changeable (struct varobj *var);
237 /* C implementation */
239 static int c_number_of_children (struct varobj *var);
241 static char *c_name_of_variable (struct varobj *parent);
243 static char *c_name_of_child (struct varobj *parent, int index);
245 static struct value *c_value_of_root (struct varobj **var_handle);
247 static struct value *c_value_of_child (struct varobj *parent, int index);
249 static struct type *c_type_of_child (struct varobj *parent, int index);
251 static int c_variable_editable (struct varobj *var);
253 static char *c_value_of_variable (struct varobj *var);
255 /* C++ implementation */
257 static int cplus_number_of_children (struct varobj *var);
259 static void cplus_class_num_children (struct type *type, int children[3]);
261 static char *cplus_name_of_variable (struct varobj *parent);
263 static char *cplus_name_of_child (struct varobj *parent, int index);
265 static struct value *cplus_value_of_root (struct varobj **var_handle);
267 static struct value *cplus_value_of_child (struct varobj *parent, int index);
269 static struct type *cplus_type_of_child (struct varobj *parent, int index);
271 static int cplus_variable_editable (struct varobj *var);
273 static char *cplus_value_of_variable (struct varobj *var);
275 /* Java implementation */
277 static int java_number_of_children (struct varobj *var);
279 static char *java_name_of_variable (struct varobj *parent);
281 static char *java_name_of_child (struct varobj *parent, int index);
283 static struct value *java_value_of_root (struct varobj **var_handle);
285 static struct value *java_value_of_child (struct varobj *parent, int index);
287 static struct type *java_type_of_child (struct varobj *parent, int index);
289 static int java_variable_editable (struct varobj *var);
291 static char *java_value_of_variable (struct varobj *var);
293 /* The language specific vector */
295 struct language_specific
298 /* The language of this variable */
299 enum varobj_languages language;
301 /* The number of children of PARENT. */
302 int (*number_of_children) (struct varobj * parent);
304 /* The name (expression) of a root varobj. */
305 char *(*name_of_variable) (struct varobj * parent);
307 /* The name of the INDEX'th child of PARENT. */
308 char *(*name_of_child) (struct varobj * parent, int index);
310 /* The ``struct value *'' of the root variable ROOT. */
311 struct value *(*value_of_root) (struct varobj ** root_handle);
313 /* The ``struct value *'' of the INDEX'th child of PARENT. */
314 struct value *(*value_of_child) (struct varobj * parent, int index);
316 /* The type of the INDEX'th child of PARENT. */
317 struct type *(*type_of_child) (struct varobj * parent, int index);
319 /* Is VAR editable? */
320 int (*variable_editable) (struct varobj * var);
322 /* The current value of VAR. */
323 char *(*value_of_variable) (struct varobj * var);
326 /* Array of known source language routines. */
327 static struct language_specific
328 languages[vlang_end][sizeof (struct language_specific)] = {
329 /* Unknown (try treating as C */
332 c_number_of_children,
344 c_number_of_children,
356 cplus_number_of_children,
357 cplus_name_of_variable,
360 cplus_value_of_child,
362 cplus_variable_editable,
363 cplus_value_of_variable}
368 java_number_of_children,
369 java_name_of_variable,
374 java_variable_editable,
375 java_value_of_variable}
378 /* A little convenience enum for dealing with C++/Java */
381 v_public = 0, v_private, v_protected
386 /* Mappings of varobj_display_formats enums to gdb's format codes */
387 static int format_code[] = { 0, 't', 'd', 'x', 'o' };
389 /* Header of the list of root variable objects */
390 static struct varobj_root *rootlist;
391 static int rootcount = 0; /* number of root varobjs in the list */
393 /* Prime number indicating the number of buckets in the hash table */
394 /* A prime large enough to avoid too many colisions */
395 #define VAROBJ_TABLE_SIZE 227
397 /* Pointer to the varobj hash table (built at run time) */
398 static struct vlist **varobj_table;
400 /* Is the variable X one of our "fake" children? */
401 #define CPLUS_FAKE_CHILD(x) \
402 ((x) != NULL && (x)->type == NULL && (x)->value == NULL)
405 /* API Implementation */
407 /* Creates a varobj (not its children) */
409 /* Return the full FRAME which corresponds to the given CORE_ADDR
410 or NULL if no FRAME on the chain corresponds to CORE_ADDR. */
412 static struct frame_info *
413 find_frame_addr_in_frame_chain (CORE_ADDR frame_addr)
415 struct frame_info *frame = NULL;
417 if (frame_addr == (CORE_ADDR) 0)
422 frame = get_prev_frame (frame);
425 if (get_frame_base_address (frame) == frame_addr)
431 varobj_create (char *objname,
432 char *expression, CORE_ADDR frame, enum varobj_type type)
435 struct frame_info *fi;
436 struct frame_info *old_fi = NULL;
438 struct cleanup *old_chain;
440 /* Fill out a varobj structure for the (root) variable being constructed. */
441 var = new_root_variable ();
442 old_chain = make_cleanup_free_variable (var);
444 if (expression != NULL)
447 enum varobj_languages lang;
449 /* Parse and evaluate the expression, filling in as much
450 of the variable's data as possible */
452 /* Allow creator to specify context of variable */
453 if ((type == USE_CURRENT_FRAME) || (type == USE_SELECTED_FRAME))
454 fi = deprecated_selected_frame;
456 /* FIXME: cagney/2002-11-23: This code should be doing a
457 lookup using the frame ID and not just the frame's
458 ``address''. This, of course, means an interface change.
459 However, with out that interface change ISAs, such as the
460 ia64 with its two stacks, won't work. Similar goes for the
461 case where there is a frameless function. */
462 fi = find_frame_addr_in_frame_chain (frame);
464 /* frame = -2 means always use selected frame */
465 if (type == USE_SELECTED_FRAME)
466 var->root->use_selected_frame = 1;
470 block = get_frame_block (fi, 0);
473 innermost_block = NULL;
474 /* Wrap the call to parse expression, so we can
475 return a sensible error. */
476 if (!gdb_parse_exp_1 (&p, block, 0, &var->root->exp))
481 /* Don't allow variables to be created for types. */
482 if (var->root->exp->elts[0].opcode == OP_TYPE)
484 do_cleanups (old_chain);
485 fprintf_unfiltered (gdb_stderr, "Attempt to use a type name"
486 " as an expression.\n");
490 var->format = variable_default_display (var);
491 var->root->valid_block = innermost_block;
492 var->name = savestring (expression, strlen (expression));
494 /* When the frame is different from the current frame,
495 we must select the appropriate frame before parsing
496 the expression, otherwise the value will not be current.
497 Since select_frame is so benign, just call it for all cases. */
500 var->root->frame = get_frame_id (fi);
501 old_fi = deprecated_selected_frame;
505 /* We definitively need to catch errors here.
506 If evaluate_expression succeeds we got the value we wanted.
507 But if it fails, we still go on with a call to evaluate_type() */
508 if (gdb_evaluate_expression (var->root->exp, &var->value))
511 release_value (var->value);
512 if (value_lazy (var->value))
513 gdb_value_fetch_lazy (var->value);
516 var->value = evaluate_type (var->root->exp);
518 var->type = value_type (var->value);
520 /* Set language info */
521 lang = variable_language (var);
522 var->root->lang = languages[lang];
524 /* Set ourselves as our root */
525 var->root->rootvar = var;
527 /* Reset the selected frame */
529 select_frame (old_fi);
532 /* If the variable object name is null, that means this
533 is a temporary variable, so don't install it. */
535 if ((var != NULL) && (objname != NULL))
537 var->obj_name = savestring (objname, strlen (objname));
539 /* If a varobj name is duplicated, the install will fail so
541 if (!install_variable (var))
543 do_cleanups (old_chain);
548 discard_cleanups (old_chain);
552 /* Generates an unique name that can be used for a varobj */
555 varobj_gen_name (void)
560 /* generate a name for this object */
562 obj_name = xstrprintf ("var%d", id);
567 /* Given an "objname", returns the pointer to the corresponding varobj
568 or NULL if not found */
571 varobj_get_handle (char *objname)
575 unsigned int index = 0;
578 for (chp = objname; *chp; chp++)
580 index = (index + (i++ * (unsigned int) *chp)) % VAROBJ_TABLE_SIZE;
583 cv = *(varobj_table + index);
584 while ((cv != NULL) && (strcmp (cv->var->obj_name, objname) != 0))
588 error (_("Variable object not found"));
593 /* Given the handle, return the name of the object */
596 varobj_get_objname (struct varobj *var)
598 return var->obj_name;
601 /* Given the handle, return the expression represented by the object */
604 varobj_get_expression (struct varobj *var)
606 return name_of_variable (var);
609 /* Deletes a varobj and all its children if only_children == 0,
610 otherwise deletes only the children; returns a malloc'ed list of all the
611 (malloc'ed) names of the variables that have been deleted (NULL terminated) */
614 varobj_delete (struct varobj *var, char ***dellist, int only_children)
618 struct cpstack *result = NULL;
621 /* Initialize a stack for temporary results */
622 cppush (&result, NULL);
625 /* Delete only the variable children */
626 delcount = delete_variable (&result, var, 1 /* only the children */ );
628 /* Delete the variable and all its children */
629 delcount = delete_variable (&result, var, 0 /* parent+children */ );
631 /* We may have been asked to return a list of what has been deleted */
634 *dellist = xmalloc ((delcount + 1) * sizeof (char *));
638 *cp = cppop (&result);
639 while ((*cp != NULL) && (mycount > 0))
643 *cp = cppop (&result);
646 if (mycount || (*cp != NULL))
647 warning (_("varobj_delete: assertion failed - mycount(=%d) <> 0"),
654 /* Set/Get variable object display format */
656 enum varobj_display_formats
657 varobj_set_display_format (struct varobj *var,
658 enum varobj_display_formats format)
665 case FORMAT_HEXADECIMAL:
667 var->format = format;
671 var->format = variable_default_display (var);
677 enum varobj_display_formats
678 varobj_get_display_format (struct varobj *var)
684 varobj_get_num_children (struct varobj *var)
686 if (var->num_children == -1)
687 var->num_children = number_of_children (var);
689 return var->num_children;
692 /* Creates a list of the immediate children of a variable object;
693 the return code is the number of such children or -1 on error */
696 varobj_list_children (struct varobj *var, struct varobj ***childlist)
698 struct varobj *child;
702 /* sanity check: have we been passed a pointer? */
703 if (childlist == NULL)
708 if (var->num_children == -1)
709 var->num_children = number_of_children (var);
711 /* List of children */
712 *childlist = xmalloc ((var->num_children + 1) * sizeof (struct varobj *));
714 for (i = 0; i < var->num_children; i++)
716 /* Mark as the end in case we bail out */
717 *((*childlist) + i) = NULL;
719 /* check if child exists, if not create */
720 name = name_of_child (var, i);
721 child = child_exists (var, name);
723 child = create_child (var, i, name);
725 *((*childlist) + i) = child;
728 /* End of list is marked by a NULL pointer */
729 *((*childlist) + i) = NULL;
731 return var->num_children;
734 /* Obtain the type of an object Variable as a string similar to the one gdb
735 prints on the console */
738 varobj_get_type (struct varobj *var)
741 struct cleanup *old_chain;
746 /* For the "fake" variables, do not return a type. (It's type is
748 if (CPLUS_FAKE_CHILD (var))
751 stb = mem_fileopen ();
752 old_chain = make_cleanup_ui_file_delete (stb);
754 /* To print the type, we simply create a zero ``struct value *'' and
755 cast it to our type. We then typeprint this variable. */
756 val = value_zero (var->type, not_lval);
757 type_print (value_type (val), "", stb, -1);
759 thetype = ui_file_xstrdup (stb, &length);
760 do_cleanups (old_chain);
764 /* Obtain the type of an object variable. */
767 varobj_get_gdb_type (struct varobj *var)
772 enum varobj_languages
773 varobj_get_language (struct varobj *var)
775 return variable_language (var);
779 varobj_get_attributes (struct varobj *var)
783 if (variable_editable (var))
784 /* FIXME: define masks for attributes */
785 attributes |= 0x00000001; /* Editable */
791 varobj_get_value (struct varobj *var)
793 return my_value_of_variable (var);
796 /* Set the value of an object variable (if it is editable) to the
797 value of the given expression */
798 /* Note: Invokes functions that can call error() */
801 varobj_set_value (struct varobj *var, char *expression)
807 /* The argument "expression" contains the variable's new value.
808 We need to first construct a legal expression for this -- ugh! */
809 /* Does this cover all the bases? */
810 struct expression *exp;
812 int saved_input_radix = input_radix;
814 if (var->value != NULL && variable_editable (var) && !var->error)
816 char *s = expression;
819 input_radix = 10; /* ALWAYS reset to decimal temporarily */
820 if (!gdb_parse_exp_1 (&s, 0, 0, &exp))
821 /* We cannot proceed without a well-formed expression. */
823 if (!gdb_evaluate_expression (exp, &value))
825 /* We cannot proceed without a valid expression. */
830 if (!my_value_equal (var->value, value, &error))
832 if (!gdb_value_assign (var->value, value, &val))
834 value_free (var->value);
837 input_radix = saved_input_radix;
844 /* Returns a malloc'ed list with all root variable objects */
846 varobj_list (struct varobj ***varlist)
849 struct varobj_root *croot;
850 int mycount = rootcount;
852 /* Alloc (rootcount + 1) entries for the result */
853 *varlist = xmalloc ((rootcount + 1) * sizeof (struct varobj *));
857 while ((croot != NULL) && (mycount > 0))
859 *cv = croot->rootvar;
864 /* Mark the end of the list */
867 if (mycount || (croot != NULL))
869 ("varobj_list: assertion failed - wrong tally of root vars (%d:%d)",
875 /* Update the values for a variable and its children. This is a
876 two-pronged attack. First, re-parse the value for the root's
877 expression to see if it's changed. Then go all the way
878 through its children, reconstructing them and noting if they've
881 -1 if there was an error updating the varobj
882 -2 if the type changed
883 Otherwise it is the number of children + parent changed
885 Only root variables can be updated...
887 NOTE: This function may delete the caller's varobj. If it
888 returns -2, then it has done this and VARP will be modified
889 to point to the new varobj. */
892 varobj_update (struct varobj **varp, struct varobj ***changelist)
901 struct varobj **templist = NULL;
903 struct vstack *stack = NULL;
904 struct vstack *result = NULL;
905 struct frame_id old_fid;
906 struct frame_info *fi;
908 /* sanity check: have we been passed a pointer? */
909 if (changelist == NULL)
912 /* Only root variables can be updated... */
913 if ((*varp)->root->rootvar != *varp)
917 /* Save the selected stack frame, since we will need to change it
918 in order to evaluate expressions. */
919 old_fid = get_frame_id (deprecated_selected_frame);
921 /* Update the root variable. value_of_root can return NULL
922 if the variable is no longer around, i.e. we stepped out of
923 the frame in which a local existed. We are letting the
924 value_of_root variable dispose of the varobj if the type
927 new = value_of_root (varp, &type_changed);
934 /* Initialize a stack for temporary results */
935 vpush (&result, NULL);
937 /* If this is a "use_selected_frame" varobj, and its type has changed,
938 them note that it's changed. */
941 vpush (&result, *varp);
944 /* If values are not equal, note that it's changed.
945 There a couple of exceptions here, though.
946 We don't want some types to be reported as "changed". */
947 else if (type_changeable (*varp) &&
948 ((*varp)->updated || !my_value_equal ((*varp)->value, new, &error)))
950 vpush (&result, *varp);
951 (*varp)->updated = 0;
953 /* Its value is going to be updated to NEW. */
954 (*varp)->error = error;
957 /* We must always keep around the new value for this root
958 variable expression, or we lose the updated children! */
959 value_free ((*varp)->value);
960 (*varp)->value = new;
962 /* Initialize a stack */
963 vpush (&stack, NULL);
965 /* Push the root's children */
966 if ((*varp)->children != NULL)
968 struct varobj_child *c;
969 for (c = (*varp)->children; c != NULL; c = c->next)
970 vpush (&stack, c->child);
973 /* Walk through the children, reconstructing them all. */
977 /* Push any children */
978 if (v->children != NULL)
980 struct varobj_child *c;
981 for (c = v->children; c != NULL; c = c->next)
982 vpush (&stack, c->child);
985 /* Update this variable */
986 new = value_of_child (v->parent, v->index);
987 if (type_changeable (v) &&
988 (v->updated || !my_value_equal (v->value, new, &error)))
990 /* Note that it's changed */
995 /* Its value is going to be updated to NEW. */
998 /* We must always keep new values, since children depend on it. */
999 if (v->value != NULL)
1000 value_free (v->value);
1003 /* Get next child */
1007 /* Alloc (changed + 1) list entries */
1008 /* FIXME: add a cleanup for the allocated list(s)
1009 because one day the select_frame called below can longjump */
1010 *changelist = xmalloc ((changed + 1) * sizeof (struct varobj *));
1013 templist = xmalloc ((changed + 1) * sizeof (struct varobj *));
1019 /* Copy from result stack to list */
1021 *cv = vpop (&result);
1022 while ((*cv != NULL) && (vleft > 0))
1026 *cv = vpop (&result);
1029 warning (_("varobj_update: assertion failed - vleft <> 0"));
1033 /* Now we revert the order. */
1034 for (i = 0; i < changed; i++)
1035 *(*changelist + i) = *(templist + changed - 1 - i);
1036 *(*changelist + changed) = NULL;
1039 /* Restore selected frame */
1040 fi = frame_find_by_id (old_fid);
1051 /* Helper functions */
1054 * Variable object construction/destruction
1058 delete_variable (struct cpstack **resultp, struct varobj *var,
1059 int only_children_p)
1063 delete_variable_1 (resultp, &delcount, var,
1064 only_children_p, 1 /* remove_from_parent_p */ );
1069 /* Delete the variable object VAR and its children */
1070 /* IMPORTANT NOTE: If we delete a variable which is a child
1071 and the parent is not removed we dump core. It must be always
1072 initially called with remove_from_parent_p set */
1074 delete_variable_1 (struct cpstack **resultp, int *delcountp,
1075 struct varobj *var, int only_children_p,
1076 int remove_from_parent_p)
1078 struct varobj_child *vc;
1079 struct varobj_child *next;
1081 /* Delete any children of this variable, too. */
1082 for (vc = var->children; vc != NULL; vc = next)
1084 if (!remove_from_parent_p)
1085 vc->child->parent = NULL;
1086 delete_variable_1 (resultp, delcountp, vc->child, 0, only_children_p);
1091 /* if we were called to delete only the children we are done here */
1092 if (only_children_p)
1095 /* Otherwise, add it to the list of deleted ones and proceed to do so */
1096 /* If the name is null, this is a temporary variable, that has not
1097 yet been installed, don't report it, it belongs to the caller... */
1098 if (var->obj_name != NULL)
1100 cppush (resultp, xstrdup (var->obj_name));
1101 *delcountp = *delcountp + 1;
1104 /* If this variable has a parent, remove it from its parent's list */
1105 /* OPTIMIZATION: if the parent of this variable is also being deleted,
1106 (as indicated by remove_from_parent_p) we don't bother doing an
1107 expensive list search to find the element to remove when we are
1108 discarding the list afterwards */
1109 if ((remove_from_parent_p) && (var->parent != NULL))
1111 remove_child_from_parent (var->parent, var);
1114 if (var->obj_name != NULL)
1115 uninstall_variable (var);
1117 /* Free memory associated with this variable */
1118 free_variable (var);
1121 /* Install the given variable VAR with the object name VAR->OBJ_NAME. */
1123 install_variable (struct varobj *var)
1126 struct vlist *newvl;
1128 unsigned int index = 0;
1131 for (chp = var->obj_name; *chp; chp++)
1133 index = (index + (i++ * (unsigned int) *chp)) % VAROBJ_TABLE_SIZE;
1136 cv = *(varobj_table + index);
1137 while ((cv != NULL) && (strcmp (cv->var->obj_name, var->obj_name) != 0))
1141 error (_("Duplicate variable object name"));
1143 /* Add varobj to hash table */
1144 newvl = xmalloc (sizeof (struct vlist));
1145 newvl->next = *(varobj_table + index);
1147 *(varobj_table + index) = newvl;
1149 /* If root, add varobj to root list */
1150 if (var->root->rootvar == var)
1152 /* Add to list of root variables */
1153 if (rootlist == NULL)
1154 var->root->next = NULL;
1156 var->root->next = rootlist;
1157 rootlist = var->root;
1164 /* Unistall the object VAR. */
1166 uninstall_variable (struct varobj *var)
1170 struct varobj_root *cr;
1171 struct varobj_root *prer;
1173 unsigned int index = 0;
1176 /* Remove varobj from hash table */
1177 for (chp = var->obj_name; *chp; chp++)
1179 index = (index + (i++ * (unsigned int) *chp)) % VAROBJ_TABLE_SIZE;
1182 cv = *(varobj_table + index);
1184 while ((cv != NULL) && (strcmp (cv->var->obj_name, var->obj_name) != 0))
1191 fprintf_unfiltered (gdb_stdlog, "Deleting %s\n", var->obj_name);
1196 ("Assertion failed: Could not find variable object \"%s\" to delete",
1202 *(varobj_table + index) = cv->next;
1204 prev->next = cv->next;
1208 /* If root, remove varobj from root list */
1209 if (var->root->rootvar == var)
1211 /* Remove from list of root variables */
1212 if (rootlist == var->root)
1213 rootlist = var->root->next;
1218 while ((cr != NULL) && (cr->rootvar != var))
1226 ("Assertion failed: Could not find varobj \"%s\" in root list",
1233 prer->next = cr->next;
1240 /* Does a child with the name NAME exist in VAR? If so, return its data.
1241 If not, return NULL. */
1242 static struct varobj *
1243 child_exists (struct varobj *var, char *name)
1245 struct varobj_child *vc;
1247 for (vc = var->children; vc != NULL; vc = vc->next)
1249 if (strcmp (vc->child->name, name) == 0)
1256 /* Create and install a child of the parent of the given name */
1257 static struct varobj *
1258 create_child (struct varobj *parent, int index, char *name)
1260 struct varobj *child;
1263 child = new_variable ();
1265 /* name is allocated by name_of_child */
1267 child->index = index;
1268 child->value = value_of_child (parent, index);
1269 if ((!CPLUS_FAKE_CHILD (child) && child->value == NULL) || parent->error)
1271 child->parent = parent;
1272 child->root = parent->root;
1273 childs_name = xstrprintf ("%s.%s", parent->obj_name, name);
1274 child->obj_name = childs_name;
1275 install_variable (child);
1277 /* Save a pointer to this child in the parent */
1278 save_child_in_parent (parent, child);
1280 /* Note the type of this child */
1281 child->type = type_of_child (child);
1286 /* FIXME: This should be a generic add to list */
1287 /* Save CHILD in the PARENT's data. */
1289 save_child_in_parent (struct varobj *parent, struct varobj *child)
1291 struct varobj_child *vc;
1293 /* Insert the child at the top */
1294 vc = parent->children;
1296 (struct varobj_child *) xmalloc (sizeof (struct varobj_child));
1298 parent->children->next = vc;
1299 parent->children->child = child;
1302 /* FIXME: This should be a generic remove from list */
1303 /* Remove the CHILD from the PARENT's list of children. */
1305 remove_child_from_parent (struct varobj *parent, struct varobj *child)
1307 struct varobj_child *vc, *prev;
1309 /* Find the child in the parent's list */
1311 for (vc = parent->children; vc != NULL;)
1313 if (vc->child == child)
1320 parent->children = vc->next;
1322 prev->next = vc->next;
1328 * Miscellaneous utility functions.
1331 /* Allocate memory and initialize a new variable */
1332 static struct varobj *
1337 var = (struct varobj *) xmalloc (sizeof (struct varobj));
1339 var->obj_name = NULL;
1344 var->num_children = -1;
1346 var->children = NULL;
1354 /* Allocate memory and initialize a new root variable */
1355 static struct varobj *
1356 new_root_variable (void)
1358 struct varobj *var = new_variable ();
1359 var->root = (struct varobj_root *) xmalloc (sizeof (struct varobj_root));;
1360 var->root->lang = NULL;
1361 var->root->exp = NULL;
1362 var->root->valid_block = NULL;
1363 var->root->frame = null_frame_id;
1364 var->root->use_selected_frame = 0;
1365 var->root->rootvar = NULL;
1370 /* Free any allocated memory associated with VAR. */
1372 free_variable (struct varobj *var)
1374 /* Free the expression if this is a root variable. */
1375 if (var->root->rootvar == var)
1377 free_current_contents ((char **) &var->root->exp);
1382 xfree (var->obj_name);
1387 do_free_variable_cleanup (void *var)
1389 free_variable (var);
1392 static struct cleanup *
1393 make_cleanup_free_variable (struct varobj *var)
1395 return make_cleanup (do_free_variable_cleanup, var);
1398 /* This returns the type of the variable. It also skips past typedefs
1399 to return the real type of the variable.
1401 NOTE: TYPE_TARGET_TYPE should NOT be used anywhere in this file
1402 except within get_target_type and get_type. */
1403 static struct type *
1404 get_type (struct varobj *var)
1410 type = check_typedef (type);
1415 /* This returns the type of the variable, dereferencing pointers, too. */
1416 static struct type *
1417 get_type_deref (struct varobj *var)
1421 type = get_type (var);
1423 if (type != NULL && (TYPE_CODE (type) == TYPE_CODE_PTR
1424 || TYPE_CODE (type) == TYPE_CODE_REF))
1425 type = get_target_type (type);
1430 /* This returns the target type (or NULL) of TYPE, also skipping
1431 past typedefs, just like get_type ().
1433 NOTE: TYPE_TARGET_TYPE should NOT be used anywhere in this file
1434 except within get_target_type and get_type. */
1435 static struct type *
1436 get_target_type (struct type *type)
1440 type = TYPE_TARGET_TYPE (type);
1442 type = check_typedef (type);
1448 /* What is the default display for this variable? We assume that
1449 everything is "natural". Any exceptions? */
1450 static enum varobj_display_formats
1451 variable_default_display (struct varobj *var)
1453 return FORMAT_NATURAL;
1456 /* This function is similar to GDB's value_contents_equal, except that
1457 this one is "safe"; it never longjmps. It determines if the VAL1's
1458 value is the same as VAL2. If for some reason the value of VAR2
1459 can't be established, *ERROR2 is set to non-zero. */
1462 my_value_equal (struct value *val1, struct value *volatile val2, int *error2)
1464 volatile struct gdb_exception except;
1466 /* As a special case, if both are null, we say they're equal. */
1467 if (val1 == NULL && val2 == NULL)
1469 else if (val1 == NULL || val2 == NULL)
1472 /* The contents of VAL1 are supposed to be known. */
1473 gdb_assert (!value_lazy (val1));
1475 /* Make sure we also know the contents of VAL2. */
1476 val2 = coerce_array (val2);
1477 TRY_CATCH (except, RETURN_MASK_ERROR)
1479 if (value_lazy (val2))
1480 value_fetch_lazy (val2);
1482 if (except.reason < 0)
1487 gdb_assert (!value_lazy (val2));
1489 return value_contents_equal (val1, val2);
1492 /* FIXME: The following should be generic for any pointer */
1494 vpush (struct vstack **pstack, struct varobj *var)
1498 s = (struct vstack *) xmalloc (sizeof (struct vstack));
1504 /* FIXME: The following should be generic for any pointer */
1505 static struct varobj *
1506 vpop (struct vstack **pstack)
1511 if ((*pstack)->var == NULL && (*pstack)->next == NULL)
1516 *pstack = (*pstack)->next;
1522 /* FIXME: The following should be generic for any pointer */
1524 cppush (struct cpstack **pstack, char *name)
1528 s = (struct cpstack *) xmalloc (sizeof (struct cpstack));
1534 /* FIXME: The following should be generic for any pointer */
1536 cppop (struct cpstack **pstack)
1541 if ((*pstack)->name == NULL && (*pstack)->next == NULL)
1546 *pstack = (*pstack)->next;
1553 * Language-dependencies
1556 /* Common entry points */
1558 /* Get the language of variable VAR. */
1559 static enum varobj_languages
1560 variable_language (struct varobj *var)
1562 enum varobj_languages lang;
1564 switch (var->root->exp->language_defn->la_language)
1570 case language_cplus:
1581 /* Return the number of children for a given variable.
1582 The result of this function is defined by the language
1583 implementation. The number of children returned by this function
1584 is the number of children that the user will see in the variable
1587 number_of_children (struct varobj *var)
1589 return (*var->root->lang->number_of_children) (var);;
1592 /* What is the expression for the root varobj VAR? Returns a malloc'd string. */
1594 name_of_variable (struct varobj *var)
1596 return (*var->root->lang->name_of_variable) (var);
1599 /* What is the name of the INDEX'th child of VAR? Returns a malloc'd string. */
1601 name_of_child (struct varobj *var, int index)
1603 return (*var->root->lang->name_of_child) (var, index);
1606 /* What is the ``struct value *'' of the root variable VAR?
1607 TYPE_CHANGED controls what to do if the type of a
1608 use_selected_frame = 1 variable changes. On input,
1609 TYPE_CHANGED = 1 means discard the old varobj, and replace
1610 it with this one. TYPE_CHANGED = 0 means leave it around.
1611 NB: In both cases, var_handle will point to the new varobj,
1612 so if you use TYPE_CHANGED = 0, you will have to stash the
1613 old varobj pointer away somewhere before calling this.
1614 On return, TYPE_CHANGED will be 1 if the type has changed, and
1616 static struct value *
1617 value_of_root (struct varobj **var_handle, int *type_changed)
1621 if (var_handle == NULL)
1626 /* This should really be an exception, since this should
1627 only get called with a root variable. */
1629 if (var->root->rootvar != var)
1632 if (var->root->use_selected_frame)
1634 struct varobj *tmp_var;
1635 char *old_type, *new_type;
1636 old_type = varobj_get_type (var);
1637 tmp_var = varobj_create (NULL, var->name, (CORE_ADDR) 0,
1638 USE_SELECTED_FRAME);
1639 if (tmp_var == NULL)
1643 new_type = varobj_get_type (tmp_var);
1644 if (strcmp (old_type, new_type) == 0)
1646 varobj_delete (tmp_var, NULL, 0);
1654 savestring (var->obj_name, strlen (var->obj_name));
1655 varobj_delete (var, NULL, 0);
1659 tmp_var->obj_name = varobj_gen_name ();
1661 install_variable (tmp_var);
1662 *var_handle = tmp_var;
1672 return (*var->root->lang->value_of_root) (var_handle);
1675 /* What is the ``struct value *'' for the INDEX'th child of PARENT? */
1676 static struct value *
1677 value_of_child (struct varobj *parent, int index)
1679 struct value *value;
1681 value = (*parent->root->lang->value_of_child) (parent, index);
1683 /* If we're being lazy, fetch the real value of the variable. */
1684 if (value != NULL && value_lazy (value))
1686 /* If we fail to fetch the value of the child, return
1687 NULL so that callers notice that we're leaving an
1689 if (!gdb_value_fetch_lazy (value))
1696 /* What is the type of VAR? */
1697 static struct type *
1698 type_of_child (struct varobj *var)
1701 /* If the child had no evaluation errors, var->value
1702 will be non-NULL and contain a valid type. */
1703 if (var->value != NULL)
1704 return value_type (var->value);
1706 /* Otherwise, we must compute the type. */
1707 return (*var->root->lang->type_of_child) (var->parent, var->index);
1710 /* Is this variable editable? Use the variable's type to make
1711 this determination. */
1713 variable_editable (struct varobj *var)
1715 return (*var->root->lang->variable_editable) (var);
1718 /* GDB already has a command called "value_of_variable". Sigh. */
1720 my_value_of_variable (struct varobj *var)
1722 return (*var->root->lang->value_of_variable) (var);
1725 /* Is VAR something that can change? Depending on language,
1726 some variable's values never change. For example,
1727 struct and unions never change values. */
1729 type_changeable (struct varobj *var)
1734 if (CPLUS_FAKE_CHILD (var))
1737 type = get_type (var);
1739 switch (TYPE_CODE (type))
1741 case TYPE_CODE_STRUCT:
1742 case TYPE_CODE_UNION:
1743 case TYPE_CODE_ARRAY:
1756 c_number_of_children (struct varobj *var)
1759 struct type *target;
1762 type = get_type (var);
1763 target = get_target_type (type);
1766 switch (TYPE_CODE (type))
1768 case TYPE_CODE_ARRAY:
1769 if (TYPE_LENGTH (type) > 0 && TYPE_LENGTH (target) > 0
1770 && TYPE_ARRAY_UPPER_BOUND_TYPE (type) != BOUND_CANNOT_BE_DETERMINED)
1771 children = TYPE_LENGTH (type) / TYPE_LENGTH (target);
1776 case TYPE_CODE_STRUCT:
1777 case TYPE_CODE_UNION:
1778 children = TYPE_NFIELDS (type);
1782 /* This is where things get compilcated. All pointers have one child.
1783 Except, of course, for struct and union ptr, which we automagically
1784 dereference for the user and function ptrs, which have no children.
1785 We also don't dereference void* as we don't know what to show.
1786 We can show char* so we allow it to be dereferenced. If you decide
1787 to test for it, please mind that a little magic is necessary to
1788 properly identify it: char* has TYPE_CODE == TYPE_CODE_INT and
1789 TYPE_NAME == "char" */
1791 switch (TYPE_CODE (target))
1793 case TYPE_CODE_STRUCT:
1794 case TYPE_CODE_UNION:
1795 children = TYPE_NFIELDS (target);
1798 case TYPE_CODE_FUNC:
1799 case TYPE_CODE_VOID:
1809 /* Other types have no children */
1817 c_name_of_variable (struct varobj *parent)
1819 return savestring (parent->name, strlen (parent->name));
1823 c_name_of_child (struct varobj *parent, int index)
1826 struct type *target;
1830 type = get_type (parent);
1831 target = get_target_type (type);
1833 switch (TYPE_CODE (type))
1835 case TYPE_CODE_ARRAY:
1836 name = xstrprintf ("%d", index);
1839 case TYPE_CODE_STRUCT:
1840 case TYPE_CODE_UNION:
1841 string = TYPE_FIELD_NAME (type, index);
1842 name = savestring (string, strlen (string));
1846 switch (TYPE_CODE (target))
1848 case TYPE_CODE_STRUCT:
1849 case TYPE_CODE_UNION:
1850 string = TYPE_FIELD_NAME (target, index);
1851 name = savestring (string, strlen (string));
1855 name = xstrprintf ("*%s", parent->name);
1861 /* This should not happen */
1862 name = xstrdup ("???");
1868 static struct value *
1869 c_value_of_root (struct varobj **var_handle)
1871 struct value *new_val;
1872 struct varobj *var = *var_handle;
1873 struct frame_info *fi;
1876 /* Only root variables can be updated... */
1877 if (var->root->rootvar != var)
1878 /* Not a root var */
1882 /* Determine whether the variable is still around. */
1883 if (var->root->valid_block == NULL)
1887 reinit_frame_cache ();
1888 fi = frame_find_by_id (var->root->frame);
1889 within_scope = fi != NULL;
1890 /* FIXME: select_frame could fail */
1897 /* We need to catch errors here, because if evaluate
1898 expression fails we just want to make val->error = 1 and
1900 if (gdb_evaluate_expression (var->root->exp, &new_val))
1902 if (value_lazy (new_val))
1904 /* We need to catch errors because if
1905 value_fetch_lazy fails we still want to continue
1906 (after making val->error = 1) */
1907 /* FIXME: Shouldn't be using value_contents()? The
1908 comment on value_fetch_lazy() says it is only called
1909 from the macro... */
1910 if (!gdb_value_fetch_lazy (new_val))
1919 release_value (new_val);
1926 static struct value *
1927 c_value_of_child (struct varobj *parent, int index)
1929 struct value *value;
1931 struct value *indval;
1932 struct type *type, *target;
1935 type = get_type (parent);
1936 target = get_target_type (type);
1937 name = name_of_child (parent, index);
1938 temp = parent->value;
1943 switch (TYPE_CODE (type))
1945 case TYPE_CODE_ARRAY:
1947 /* This breaks if the array lives in a (vector) register. */
1948 value = value_slice (temp, index, 1);
1949 temp = value_coerce_array (value);
1950 gdb_value_ind (temp, &value);
1952 indval = value_from_longest (builtin_type_int, (LONGEST) index);
1953 gdb_value_subscript (temp, indval, &value);
1957 case TYPE_CODE_STRUCT:
1958 case TYPE_CODE_UNION:
1959 gdb_value_struct_elt (NULL, &value, &temp, NULL, name, NULL,
1964 switch (TYPE_CODE (target))
1966 case TYPE_CODE_STRUCT:
1967 case TYPE_CODE_UNION:
1968 gdb_value_struct_elt (NULL, &value, &temp, NULL, name, NULL,
1973 gdb_value_ind (temp, &value);
1984 release_value (value);
1990 static struct type *
1991 c_type_of_child (struct varobj *parent, int index)
1994 char *name = name_of_child (parent, index);
1996 switch (TYPE_CODE (parent->type))
1998 case TYPE_CODE_ARRAY:
1999 type = get_target_type (parent->type);
2002 case TYPE_CODE_STRUCT:
2003 case TYPE_CODE_UNION:
2004 type = lookup_struct_elt_type (parent->type, name, 0);
2008 switch (TYPE_CODE (get_target_type (parent->type)))
2010 case TYPE_CODE_STRUCT:
2011 case TYPE_CODE_UNION:
2012 type = lookup_struct_elt_type (parent->type, name, 0);
2016 type = get_target_type (parent->type);
2022 /* This should not happen as only the above types have children */
2023 warning (_("Child of parent whose type does not allow children"));
2024 /* FIXME: Can we still go on? */
2034 c_variable_editable (struct varobj *var)
2036 switch (TYPE_CODE (get_type (var)))
2038 case TYPE_CODE_STRUCT:
2039 case TYPE_CODE_UNION:
2040 case TYPE_CODE_ARRAY:
2041 case TYPE_CODE_FUNC:
2042 case TYPE_CODE_MEMBER:
2043 case TYPE_CODE_METHOD:
2054 c_value_of_variable (struct varobj *var)
2056 /* BOGUS: if val_print sees a struct/class, it will print out its
2057 children instead of "{...}" */
2059 switch (TYPE_CODE (get_type (var)))
2061 case TYPE_CODE_STRUCT:
2062 case TYPE_CODE_UNION:
2063 return xstrdup ("{...}");
2066 case TYPE_CODE_ARRAY:
2069 number = xstrprintf ("[%d]", var->num_children);
2076 if (var->value == NULL)
2078 /* This can happen if we attempt to get the value of a struct
2079 member when the parent is an invalid pointer. This is an
2080 error condition, so we should tell the caller. */
2086 struct ui_file *stb = mem_fileopen ();
2087 struct cleanup *old_chain = make_cleanup_ui_file_delete (stb);
2090 if (value_lazy (var->value))
2091 gdb_value_fetch_lazy (var->value);
2092 common_val_print (var->value, stb,
2093 format_code[(int) var->format], 1, 0, 0);
2094 thevalue = ui_file_xstrdup (stb, &dummy);
2095 do_cleanups (old_chain);
2106 cplus_number_of_children (struct varobj *var)
2109 int children, dont_know;
2114 if (!CPLUS_FAKE_CHILD (var))
2116 type = get_type_deref (var);
2118 if (((TYPE_CODE (type)) == TYPE_CODE_STRUCT) ||
2119 ((TYPE_CODE (type)) == TYPE_CODE_UNION))
2123 cplus_class_num_children (type, kids);
2124 if (kids[v_public] != 0)
2126 if (kids[v_private] != 0)
2128 if (kids[v_protected] != 0)
2131 /* Add any baseclasses */
2132 children += TYPE_N_BASECLASSES (type);
2135 /* FIXME: save children in var */
2142 type = get_type_deref (var->parent);
2144 cplus_class_num_children (type, kids);
2145 if (strcmp (var->name, "public") == 0)
2146 children = kids[v_public];
2147 else if (strcmp (var->name, "private") == 0)
2148 children = kids[v_private];
2150 children = kids[v_protected];
2155 children = c_number_of_children (var);
2160 /* Compute # of public, private, and protected variables in this class.
2161 That means we need to descend into all baseclasses and find out
2162 how many are there, too. */
2164 cplus_class_num_children (struct type *type, int children[3])
2168 children[v_public] = 0;
2169 children[v_private] = 0;
2170 children[v_protected] = 0;
2172 for (i = TYPE_N_BASECLASSES (type); i < TYPE_NFIELDS (type); i++)
2174 /* If we have a virtual table pointer, omit it. */
2175 if (TYPE_VPTR_BASETYPE (type) == type && TYPE_VPTR_FIELDNO (type) == i)
2178 if (TYPE_FIELD_PROTECTED (type, i))
2179 children[v_protected]++;
2180 else if (TYPE_FIELD_PRIVATE (type, i))
2181 children[v_private]++;
2183 children[v_public]++;
2188 cplus_name_of_variable (struct varobj *parent)
2190 return c_name_of_variable (parent);
2194 cplus_name_of_child (struct varobj *parent, int index)
2199 if (CPLUS_FAKE_CHILD (parent))
2201 /* Looking for children of public, private, or protected. */
2202 type = get_type_deref (parent->parent);
2205 type = get_type_deref (parent);
2208 switch (TYPE_CODE (type))
2210 case TYPE_CODE_STRUCT:
2211 case TYPE_CODE_UNION:
2212 if (CPLUS_FAKE_CHILD (parent))
2214 /* The fields of the class type are ordered as they
2215 appear in the class. We are given an index for a
2216 particular access control type ("public","protected",
2217 or "private"). We must skip over fields that don't
2218 have the access control we are looking for to properly
2219 find the indexed field. */
2220 int type_index = TYPE_N_BASECLASSES (type);
2221 if (strcmp (parent->name, "private") == 0)
2225 if (TYPE_VPTR_BASETYPE (type) == type
2226 && type_index == TYPE_VPTR_FIELDNO (type))
2228 else if (TYPE_FIELD_PRIVATE (type, type_index))
2234 else if (strcmp (parent->name, "protected") == 0)
2238 if (TYPE_VPTR_BASETYPE (type) == type
2239 && type_index == TYPE_VPTR_FIELDNO (type))
2241 else if (TYPE_FIELD_PROTECTED (type, type_index))
2251 if (TYPE_VPTR_BASETYPE (type) == type
2252 && type_index == TYPE_VPTR_FIELDNO (type))
2254 else if (!TYPE_FIELD_PRIVATE (type, type_index) &&
2255 !TYPE_FIELD_PROTECTED (type, type_index))
2262 name = TYPE_FIELD_NAME (type, type_index);
2264 else if (index < TYPE_N_BASECLASSES (type))
2265 /* We are looking up the name of a base class */
2266 name = TYPE_FIELD_NAME (type, index);
2270 cplus_class_num_children(type, children);
2272 /* Everything beyond the baseclasses can
2273 only be "public", "private", or "protected"
2275 The special "fake" children are always output by varobj in
2276 this order. So if INDEX == 2, it MUST be "protected". */
2277 index -= TYPE_N_BASECLASSES (type);
2281 if (children[v_public] > 0)
2283 else if (children[v_private] > 0)
2289 if (children[v_public] > 0)
2291 if (children[v_private] > 0)
2296 else if (children[v_private] > 0)
2300 /* Must be protected */
2315 return c_name_of_child (parent, index);
2319 name = savestring (name, strlen (name));
2325 static struct value *
2326 cplus_value_of_root (struct varobj **var_handle)
2328 return c_value_of_root (var_handle);
2331 static struct value *
2332 cplus_value_of_child (struct varobj *parent, int index)
2335 struct value *value;
2337 if (CPLUS_FAKE_CHILD (parent))
2338 type = get_type_deref (parent->parent);
2340 type = get_type_deref (parent);
2344 if (((TYPE_CODE (type)) == TYPE_CODE_STRUCT) ||
2345 ((TYPE_CODE (type)) == TYPE_CODE_UNION))
2347 if (CPLUS_FAKE_CHILD (parent))
2350 struct value *temp = parent->parent->value;
2355 name = name_of_child (parent, index);
2356 gdb_value_struct_elt (NULL, &value, &temp, NULL, name, NULL,
2359 release_value (value);
2363 else if (index >= TYPE_N_BASECLASSES (type))
2365 /* public, private, or protected */
2371 if (parent->value != NULL)
2373 struct value *temp = NULL;
2375 if (TYPE_CODE (value_type (parent->value)) == TYPE_CODE_PTR
2376 || TYPE_CODE (value_type (parent->value)) == TYPE_CODE_REF)
2378 if (!gdb_value_ind (parent->value, &temp))
2382 temp = parent->value;
2386 value = value_cast (TYPE_FIELD_TYPE (type, index), temp);
2387 release_value (value);
2391 /* We failed to evaluate the parent's value, so don't even
2392 bother trying to evaluate this child. */
2400 return c_value_of_child (parent, index);
2405 static struct type *
2406 cplus_type_of_child (struct varobj *parent, int index)
2408 struct type *type, *t;
2410 if (CPLUS_FAKE_CHILD (parent))
2412 /* Looking for the type of a child of public, private, or protected. */
2413 t = get_type_deref (parent->parent);
2416 t = get_type_deref (parent);
2419 switch (TYPE_CODE (t))
2421 case TYPE_CODE_STRUCT:
2422 case TYPE_CODE_UNION:
2423 if (CPLUS_FAKE_CHILD (parent))
2425 char *name = cplus_name_of_child (parent, index);
2426 type = lookup_struct_elt_type (t, name, 0);
2429 else if (index < TYPE_N_BASECLASSES (t))
2430 type = TYPE_FIELD_TYPE (t, index);
2443 return c_type_of_child (parent, index);
2449 cplus_variable_editable (struct varobj *var)
2451 if (CPLUS_FAKE_CHILD (var))
2454 return c_variable_editable (var);
2458 cplus_value_of_variable (struct varobj *var)
2461 /* If we have one of our special types, don't print out
2463 if (CPLUS_FAKE_CHILD (var))
2464 return xstrdup ("");
2466 return c_value_of_variable (var);
2472 java_number_of_children (struct varobj *var)
2474 return cplus_number_of_children (var);
2478 java_name_of_variable (struct varobj *parent)
2482 name = cplus_name_of_variable (parent);
2483 /* If the name has "-" in it, it is because we
2484 needed to escape periods in the name... */
2487 while (*p != '\000')
2498 java_name_of_child (struct varobj *parent, int index)
2502 name = cplus_name_of_child (parent, index);
2503 /* Escape any periods in the name... */
2506 while (*p != '\000')
2516 static struct value *
2517 java_value_of_root (struct varobj **var_handle)
2519 return cplus_value_of_root (var_handle);
2522 static struct value *
2523 java_value_of_child (struct varobj *parent, int index)
2525 return cplus_value_of_child (parent, index);
2528 static struct type *
2529 java_type_of_child (struct varobj *parent, int index)
2531 return cplus_type_of_child (parent, index);
2535 java_variable_editable (struct varobj *var)
2537 return cplus_variable_editable (var);
2541 java_value_of_variable (struct varobj *var)
2543 return cplus_value_of_variable (var);
2546 extern void _initialize_varobj (void);
2548 _initialize_varobj (void)
2550 int sizeof_table = sizeof (struct vlist *) * VAROBJ_TABLE_SIZE;
2552 varobj_table = xmalloc (sizeof_table);
2553 memset (varobj_table, 0, sizeof_table);
2555 add_setshow_zinteger_cmd ("debugvarobj", class_maintenance,
2557 Set varobj debugging."), _("\
2558 Show varobj debugging."), _("\
2559 When non-zero, varobj debugging is enabled."),
2562 &setlist, &showlist);