Fri Aug 2 15:53:50 2002 Andrew Cagney <cagney@redhat.com>
[external/binutils.git] / gdb / varobj.c
1 /* Implementation of the GDB variable objects API.
2    Copyright 1999, 2000, 2001 Free Software Foundation, Inc.
3
4    This program is free software; you can redistribute it and/or modify
5    it under the terms of the GNU General Public License as published by
6    the Free Software Foundation; either version 2 of the License, or
7    (at your option) any later version.
8
9    This program is distributed in the hope that it will be useful,
10    but WITHOUT ANY WARRANTY; without even the implied warranty of
11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12    GNU General Public License for more details.
13
14    You should have received a copy of the GNU General Public License
15    along with this program; if not, write to the Free Software
16    Foundation, Inc., 59 Temple Place - Suite 330,
17    Boston, MA 02111-1307, USA.  */
18
19 #include "defs.h"
20 #include "value.h"
21 #include "expression.h"
22 #include "frame.h"
23 #include "language.h"
24 #include "wrapper.h"
25 #include "gdbcmd.h"
26 #include "gdb_string.h"
27 #include <math.h>
28
29 #include "varobj.h"
30
31 /* Non-zero if we want to see trace of varobj level stuff.  */
32
33 int varobjdebug = 0;
34
35 /* String representations of gdb's format codes */
36 char *varobj_format_string[] =
37   { "natural", "binary", "decimal", "hexadecimal", "octal" };
38
39 /* String representations of gdb's known languages */
40 char *varobj_language_string[] = { "unknown", "C", "C++", "Java" };
41
42 /* Data structures */
43
44 /* Every root variable has one of these structures saved in its
45    varobj. Members which must be free'd are noted. */
46 struct varobj_root
47 {
48
49   /* Alloc'd expression for this parent. */
50   struct expression *exp;
51
52   /* Block for which this expression is valid */
53   struct block *valid_block;
54
55   /* The frame for this expression */
56   struct frame_id frame;
57
58   /* If 1, "update" always recomputes the frame & valid block
59      using the currently selected frame. */
60   int use_selected_frame;
61
62   /* Language info for this variable and its children */
63   struct language_specific *lang;
64
65   /* The varobj for this root node. */
66   struct varobj *rootvar;
67
68   /* Next root variable */
69   struct varobj_root *next;
70 };
71
72 /* Every variable in the system has a structure of this type defined
73    for it. This structure holds all information necessary to manipulate
74    a particular object variable. Members which must be freed are noted. */
75 struct varobj
76 {
77
78   /* Alloc'd name of the variable for this object.. If this variable is a
79      child, then this name will be the child's source name.
80      (bar, not foo.bar) */
81   /* NOTE: This is the "expression" */
82   char *name;
83
84   /* The alloc'd name for this variable's object. This is here for
85      convenience when constructing this object's children. */
86   char *obj_name;
87
88   /* Index of this variable in its parent or -1 */
89   int index;
90
91   /* The type of this variable. This may NEVER be NULL. */
92   struct type *type;
93
94   /* The value of this expression or subexpression.  This may be NULL. */
95   struct value *value;
96
97   /* Did an error occur evaluating the expression or getting its value? */
98   int error;
99
100   /* The number of (immediate) children this variable has */
101   int num_children;
102
103   /* If this object is a child, this points to its immediate parent. */
104   struct varobj *parent;
105
106   /* A list of this object's children */
107   struct varobj_child *children;
108
109   /* Description of the root variable. Points to root variable for children. */
110   struct varobj_root *root;
111
112   /* The format of the output for this object */
113   enum varobj_display_formats format;
114 };
115
116 /* Every variable keeps a linked list of its children, described
117    by the following structure. */
118 /* FIXME: Deprecated.  All should use vlist instead */
119
120 struct varobj_child
121 {
122
123   /* Pointer to the child's data */
124   struct varobj *child;
125
126   /* Pointer to the next child */
127   struct varobj_child *next;
128 };
129
130 /* A stack of varobjs */
131 /* FIXME: Deprecated.  All should use vlist instead */
132
133 struct vstack
134 {
135   struct varobj *var;
136   struct vstack *next;
137 };
138
139 struct cpstack
140 {
141   char *name;
142   struct cpstack *next;
143 };
144
145 /* A list of varobjs */
146
147 struct vlist
148 {
149   struct varobj *var;
150   struct vlist *next;
151 };
152
153 /* Private function prototypes */
154
155 /* Helper functions for the above subcommands. */
156
157 static int delete_variable (struct cpstack **, struct varobj *, int);
158
159 static void delete_variable_1 (struct cpstack **, int *,
160                                struct varobj *, int, int);
161
162 static int install_variable (struct varobj *);
163
164 static void uninstall_variable (struct varobj *);
165
166 static struct varobj *child_exists (struct varobj *, char *);
167
168 static struct varobj *create_child (struct varobj *, int, char *);
169
170 static void save_child_in_parent (struct varobj *, struct varobj *);
171
172 static void remove_child_from_parent (struct varobj *, struct varobj *);
173
174 /* Utility routines */
175
176 static struct varobj *new_variable (void);
177
178 static struct varobj *new_root_variable (void);
179
180 static void free_variable (struct varobj *var);
181
182 static struct cleanup *make_cleanup_free_variable (struct varobj *var);
183
184 static struct type *get_type (struct varobj *var);
185
186 static struct type *get_type_deref (struct varobj *var);
187
188 static struct type *get_target_type (struct type *);
189
190 static enum varobj_display_formats variable_default_display (struct varobj *);
191
192 static int my_value_equal (struct value *, struct value *, int *);
193
194 static void vpush (struct vstack **pstack, struct varobj *var);
195
196 static struct varobj *vpop (struct vstack **pstack);
197
198 static void cppush (struct cpstack **pstack, char *name);
199
200 static char *cppop (struct cpstack **pstack);
201
202 /* Language-specific routines. */
203
204 static enum varobj_languages variable_language (struct varobj *var);
205
206 static int number_of_children (struct varobj *);
207
208 static char *name_of_variable (struct varobj *);
209
210 static char *name_of_child (struct varobj *, int);
211
212 static struct value *value_of_root (struct varobj **var_handle, int *);
213
214 static struct value *value_of_child (struct varobj *parent, int index);
215
216 static struct type *type_of_child (struct varobj *var);
217
218 static int variable_editable (struct varobj *var);
219
220 static char *my_value_of_variable (struct varobj *var);
221
222 static int type_changeable (struct varobj *var);
223
224 /* C implementation */
225
226 static int c_number_of_children (struct varobj *var);
227
228 static char *c_name_of_variable (struct varobj *parent);
229
230 static char *c_name_of_child (struct varobj *parent, int index);
231
232 static struct value *c_value_of_root (struct varobj **var_handle);
233
234 static struct value *c_value_of_child (struct varobj *parent, int index);
235
236 static struct type *c_type_of_child (struct varobj *parent, int index);
237
238 static int c_variable_editable (struct varobj *var);
239
240 static char *c_value_of_variable (struct varobj *var);
241
242 /* C++ implementation */
243
244 static int cplus_number_of_children (struct varobj *var);
245
246 static void cplus_class_num_children (struct type *type, int children[3]);
247
248 static char *cplus_name_of_variable (struct varobj *parent);
249
250 static char *cplus_name_of_child (struct varobj *parent, int index);
251
252 static struct value *cplus_value_of_root (struct varobj **var_handle);
253
254 static struct value *cplus_value_of_child (struct varobj *parent, int index);
255
256 static struct type *cplus_type_of_child (struct varobj *parent, int index);
257
258 static int cplus_variable_editable (struct varobj *var);
259
260 static char *cplus_value_of_variable (struct varobj *var);
261
262 /* Java implementation */
263
264 static int java_number_of_children (struct varobj *var);
265
266 static char *java_name_of_variable (struct varobj *parent);
267
268 static char *java_name_of_child (struct varobj *parent, int index);
269
270 static struct value *java_value_of_root (struct varobj **var_handle);
271
272 static struct value *java_value_of_child (struct varobj *parent, int index);
273
274 static struct type *java_type_of_child (struct varobj *parent, int index);
275
276 static int java_variable_editable (struct varobj *var);
277
278 static char *java_value_of_variable (struct varobj *var);
279
280 /* The language specific vector */
281
282 struct language_specific
283 {
284
285   /* The language of this variable */
286   enum varobj_languages language;
287
288   /* The number of children of PARENT. */
289   int (*number_of_children) (struct varobj * parent);
290
291   /* The name (expression) of a root varobj. */
292   char *(*name_of_variable) (struct varobj * parent);
293
294   /* The name of the INDEX'th child of PARENT. */
295   char *(*name_of_child) (struct varobj * parent, int index);
296
297   /* The ``struct value *'' of the root variable ROOT. */
298   struct value *(*value_of_root) (struct varobj ** root_handle);
299
300   /* The ``struct value *'' of the INDEX'th child of PARENT. */
301   struct value *(*value_of_child) (struct varobj * parent, int index);
302
303   /* The type of the INDEX'th child of PARENT. */
304   struct type *(*type_of_child) (struct varobj * parent, int index);
305
306   /* Is VAR editable? */
307   int (*variable_editable) (struct varobj * var);
308
309   /* The current value of VAR. */
310   char *(*value_of_variable) (struct varobj * var);
311 };
312
313 /* Array of known source language routines. */
314 static struct language_specific
315   languages[vlang_end][sizeof (struct language_specific)] = {
316   /* Unknown (try treating as C */
317   {
318    vlang_unknown,
319    c_number_of_children,
320    c_name_of_variable,
321    c_name_of_child,
322    c_value_of_root,
323    c_value_of_child,
324    c_type_of_child,
325    c_variable_editable,
326    c_value_of_variable}
327   ,
328   /* C */
329   {
330    vlang_c,
331    c_number_of_children,
332    c_name_of_variable,
333    c_name_of_child,
334    c_value_of_root,
335    c_value_of_child,
336    c_type_of_child,
337    c_variable_editable,
338    c_value_of_variable}
339   ,
340   /* C++ */
341   {
342    vlang_cplus,
343    cplus_number_of_children,
344    cplus_name_of_variable,
345    cplus_name_of_child,
346    cplus_value_of_root,
347    cplus_value_of_child,
348    cplus_type_of_child,
349    cplus_variable_editable,
350    cplus_value_of_variable}
351   ,
352   /* Java */
353   {
354    vlang_java,
355    java_number_of_children,
356    java_name_of_variable,
357    java_name_of_child,
358    java_value_of_root,
359    java_value_of_child,
360    java_type_of_child,
361    java_variable_editable,
362    java_value_of_variable}
363 };
364
365 /* A little convenience enum for dealing with C++/Java */
366 enum vsections
367 {
368   v_public = 0, v_private, v_protected
369 };
370
371 /* Private data */
372
373 /* Mappings of varobj_display_formats enums to gdb's format codes */
374 static int format_code[] = { 0, 't', 'd', 'x', 'o' };
375
376 /* Header of the list of root variable objects */
377 static struct varobj_root *rootlist;
378 static int rootcount = 0;       /* number of root varobjs in the list */
379
380 /* Prime number indicating the number of buckets in the hash table */
381 /* A prime large enough to avoid too many colisions */
382 #define VAROBJ_TABLE_SIZE 227
383
384 /* Pointer to the varobj hash table (built at run time) */
385 static struct vlist **varobj_table;
386
387 /* Is the variable X one of our "fake" children? */
388 #define CPLUS_FAKE_CHILD(x) \
389 ((x) != NULL && (x)->type == NULL && (x)->value == NULL)
390 \f
391
392 /* API Implementation */
393
394 /* Creates a varobj (not its children) */
395
396 struct varobj *
397 varobj_create (char *objname,
398                char *expression, CORE_ADDR frame, enum varobj_type type)
399 {
400   struct varobj *var;
401   struct frame_info *fi;
402   struct frame_info *old_fi = NULL;
403   struct block *block;
404   struct cleanup *old_chain;
405
406   /* Fill out a varobj structure for the (root) variable being constructed. */
407   var = new_root_variable ();
408   old_chain = make_cleanup_free_variable (var);
409
410   if (expression != NULL)
411     {
412       char *p;
413       enum varobj_languages lang;
414
415       /* Parse and evaluate the expression, filling in as much
416          of the variable's data as possible */
417
418       /* Allow creator to specify context of variable */
419       if ((type == USE_CURRENT_FRAME) || (type == USE_SELECTED_FRAME))
420         fi = selected_frame;
421       else
422         fi = find_frame_addr_in_frame_chain (frame);
423
424       /* frame = -2 means always use selected frame */
425       if (type == USE_SELECTED_FRAME)
426         var->root->use_selected_frame = 1;
427
428       block = NULL;
429       if (fi != NULL)
430         block = get_frame_block (fi, 0);
431
432       p = expression;
433       innermost_block = NULL;
434       /* Wrap the call to parse expression, so we can 
435          return a sensible error. */
436       if (!gdb_parse_exp_1 (&p, block, 0, &var->root->exp))
437         {
438           return NULL;
439         }
440
441       /* Don't allow variables to be created for types. */
442       if (var->root->exp->elts[0].opcode == OP_TYPE)
443         {
444           do_cleanups (old_chain);
445           fprintf_unfiltered (gdb_stderr,
446                               "Attempt to use a type name as an expression.");
447           return NULL;
448         }
449
450       var->format = variable_default_display (var);
451       var->root->valid_block = innermost_block;
452       var->name = savestring (expression, strlen (expression));
453
454       /* When the frame is different from the current frame, 
455          we must select the appropriate frame before parsing
456          the expression, otherwise the value will not be current.
457          Since select_frame is so benign, just call it for all cases. */
458       if (fi != NULL)
459         {
460           get_frame_id (fi, &var->root->frame);
461           old_fi = selected_frame;
462           select_frame (fi);
463         }
464
465       /* We definitively need to catch errors here.
466          If evaluate_expression succeeds we got the value we wanted.
467          But if it fails, we still go on with a call to evaluate_type()  */
468       if (gdb_evaluate_expression (var->root->exp, &var->value))
469         {
470           /* no error */
471           release_value (var->value);
472           if (VALUE_LAZY (var->value))
473             gdb_value_fetch_lazy (var->value);
474         }
475       else
476         var->value = evaluate_type (var->root->exp);
477
478       var->type = VALUE_TYPE (var->value);
479
480       /* Set language info */
481       lang = variable_language (var);
482       var->root->lang = languages[lang];
483
484       /* Set ourselves as our root */
485       var->root->rootvar = var;
486
487       /* Reset the selected frame */
488       if (fi != NULL)
489         select_frame (old_fi);
490     }
491
492   /* If the variable object name is null, that means this
493      is a temporary variable, so don't install it. */
494
495   if ((var != NULL) && (objname != NULL))
496     {
497       var->obj_name = savestring (objname, strlen (objname));
498
499       /* If a varobj name is duplicated, the install will fail so
500          we must clenup */
501       if (!install_variable (var))
502         {
503           do_cleanups (old_chain);
504           return NULL;
505         }
506     }
507
508   discard_cleanups (old_chain);
509   return var;
510 }
511
512 /* Generates an unique name that can be used for a varobj */
513
514 char *
515 varobj_gen_name (void)
516 {
517   static int id = 0;
518   char *obj_name;
519
520   /* generate a name for this object */
521   id++;
522   xasprintf (&obj_name, "var%d", id);
523
524   return obj_name;
525 }
526
527 /* Given an "objname", returns the pointer to the corresponding varobj
528    or NULL if not found */
529
530 struct varobj *
531 varobj_get_handle (char *objname)
532 {
533   struct vlist *cv;
534   const char *chp;
535   unsigned int index = 0;
536   unsigned int i = 1;
537
538   for (chp = objname; *chp; chp++)
539     {
540       index = (index + (i++ * (unsigned int) *chp)) % VAROBJ_TABLE_SIZE;
541     }
542
543   cv = *(varobj_table + index);
544   while ((cv != NULL) && (strcmp (cv->var->obj_name, objname) != 0))
545     cv = cv->next;
546
547   if (cv == NULL)
548     error ("Variable object not found");
549
550   return cv->var;
551 }
552
553 /* Given the handle, return the name of the object */
554
555 char *
556 varobj_get_objname (struct varobj *var)
557 {
558   return var->obj_name;
559 }
560
561 /* Given the handle, return the expression represented by the object */
562
563 char *
564 varobj_get_expression (struct varobj *var)
565 {
566   return name_of_variable (var);
567 }
568
569 /* Deletes a varobj and all its children if only_children == 0,
570    otherwise deletes only the children; returns a malloc'ed list of all the 
571    (malloc'ed) names of the variables that have been deleted (NULL terminated) */
572
573 int
574 varobj_delete (struct varobj *var, char ***dellist, int only_children)
575 {
576   int delcount;
577   int mycount;
578   struct cpstack *result = NULL;
579   char **cp;
580
581   /* Initialize a stack for temporary results */
582   cppush (&result, NULL);
583
584   if (only_children)
585     /* Delete only the variable children */
586     delcount = delete_variable (&result, var, 1 /* only the children */ );
587   else
588     /* Delete the variable and all its children */
589     delcount = delete_variable (&result, var, 0 /* parent+children */ );
590
591   /* We may have been asked to return a list of what has been deleted */
592   if (dellist != NULL)
593     {
594       *dellist = xmalloc ((delcount + 1) * sizeof (char *));
595
596       cp = *dellist;
597       mycount = delcount;
598       *cp = cppop (&result);
599       while ((*cp != NULL) && (mycount > 0))
600         {
601           mycount--;
602           cp++;
603           *cp = cppop (&result);
604         }
605
606       if (mycount || (*cp != NULL))
607         warning ("varobj_delete: assertion failed - mycount(=%d) <> 0",
608                  mycount);
609     }
610
611   return delcount;
612 }
613
614 /* Set/Get variable object display format */
615
616 enum varobj_display_formats
617 varobj_set_display_format (struct varobj *var,
618                            enum varobj_display_formats format)
619 {
620   switch (format)
621     {
622     case FORMAT_NATURAL:
623     case FORMAT_BINARY:
624     case FORMAT_DECIMAL:
625     case FORMAT_HEXADECIMAL:
626     case FORMAT_OCTAL:
627       var->format = format;
628       break;
629
630     default:
631       var->format = variable_default_display (var);
632     }
633
634   return var->format;
635 }
636
637 enum varobj_display_formats
638 varobj_get_display_format (struct varobj *var)
639 {
640   return var->format;
641 }
642
643 int
644 varobj_get_num_children (struct varobj *var)
645 {
646   if (var->num_children == -1)
647     var->num_children = number_of_children (var);
648
649   return var->num_children;
650 }
651
652 /* Creates a list of the immediate children of a variable object;
653    the return code is the number of such children or -1 on error */
654
655 int
656 varobj_list_children (struct varobj *var, struct varobj ***childlist)
657 {
658   struct varobj *child;
659   char *name;
660   int i;
661
662   /* sanity check: have we been passed a pointer? */
663   if (childlist == NULL)
664     return -1;
665
666   *childlist = NULL;
667
668   if (var->num_children == -1)
669     var->num_children = number_of_children (var);
670
671   /* List of children */
672   *childlist = xmalloc ((var->num_children + 1) * sizeof (struct varobj *));
673
674   for (i = 0; i < var->num_children; i++)
675     {
676       /* Mark as the end in case we bail out */
677       *((*childlist) + i) = NULL;
678
679       /* check if child exists, if not create */
680       name = name_of_child (var, i);
681       child = child_exists (var, name);
682       if (child == NULL)
683         child = create_child (var, i, name);
684
685       *((*childlist) + i) = child;
686     }
687
688   /* End of list is marked by a NULL pointer */
689   *((*childlist) + i) = NULL;
690
691   return var->num_children;
692 }
693
694 /* Obtain the type of an object Variable as a string similar to the one gdb
695    prints on the console */
696
697 char *
698 varobj_get_type (struct varobj *var)
699 {
700   struct value *val;
701   struct cleanup *old_chain;
702   struct ui_file *stb;
703   char *thetype;
704   long length;
705
706   /* For the "fake" variables, do not return a type. (It's type is
707      NULL, too.) */
708   if (CPLUS_FAKE_CHILD (var))
709     return NULL;
710
711   stb = mem_fileopen ();
712   old_chain = make_cleanup_ui_file_delete (stb);
713
714   /* To print the type, we simply create a zero ``struct value *'' and
715      cast it to our type. We then typeprint this variable. */
716   val = value_zero (var->type, not_lval);
717   type_print (VALUE_TYPE (val), "", stb, -1);
718
719   thetype = ui_file_xstrdup (stb, &length);
720   do_cleanups (old_chain);
721   return thetype;
722 }
723
724 enum varobj_languages
725 varobj_get_language (struct varobj *var)
726 {
727   return variable_language (var);
728 }
729
730 int
731 varobj_get_attributes (struct varobj *var)
732 {
733   int attributes = 0;
734
735   if (variable_editable (var))
736     /* FIXME: define masks for attributes */
737     attributes |= 0x00000001;   /* Editable */
738
739   return attributes;
740 }
741
742 char *
743 varobj_get_value (struct varobj *var)
744 {
745   return my_value_of_variable (var);
746 }
747
748 /* Set the value of an object variable (if it is editable) to the
749    value of the given expression */
750 /* Note: Invokes functions that can call error() */
751
752 int
753 varobj_set_value (struct varobj *var, char *expression)
754 {
755   struct value *val;
756   int offset = 0;
757
758   /* The argument "expression" contains the variable's new value.
759      We need to first construct a legal expression for this -- ugh! */
760   /* Does this cover all the bases? */
761   struct expression *exp;
762   struct value *value;
763   int saved_input_radix = input_radix;
764
765   if (var->value != NULL && variable_editable (var) && !var->error)
766     {
767       char *s = expression;
768       int i;
769
770       input_radix = 10;         /* ALWAYS reset to decimal temporarily */
771       if (!gdb_parse_exp_1 (&s, 0, 0, &exp))
772         /* We cannot proceed without a well-formed expression. */
773         return 0;
774       if (!gdb_evaluate_expression (exp, &value))
775         {
776           /* We cannot proceed without a valid expression. */
777           xfree (exp);
778           return 0;
779         }
780
781       if (!gdb_value_assign (var->value, value, &val))
782         return 0;
783       value_free (var->value);
784       release_value (val);
785       var->value = val;
786       input_radix = saved_input_radix;
787       return 1;
788     }
789
790   return 0;
791 }
792
793 /* Returns a malloc'ed list with all root variable objects */
794 int
795 varobj_list (struct varobj ***varlist)
796 {
797   struct varobj **cv;
798   struct varobj_root *croot;
799   int mycount = rootcount;
800
801   /* Alloc (rootcount + 1) entries for the result */
802   *varlist = xmalloc ((rootcount + 1) * sizeof (struct varobj *));
803
804   cv = *varlist;
805   croot = rootlist;
806   while ((croot != NULL) && (mycount > 0))
807     {
808       *cv = croot->rootvar;
809       mycount--;
810       cv++;
811       croot = croot->next;
812     }
813   /* Mark the end of the list */
814   *cv = NULL;
815
816   if (mycount || (croot != NULL))
817     warning
818       ("varobj_list: assertion failed - wrong tally of root vars (%d:%d)",
819        rootcount, mycount);
820
821   return rootcount;
822 }
823
824 /* Update the values for a variable and its children.  This is a
825    two-pronged attack.  First, re-parse the value for the root's
826    expression to see if it's changed.  Then go all the way
827    through its children, reconstructing them and noting if they've
828    changed.
829    Return value:
830     -1 if there was an error updating the varobj
831     -2 if the type changed
832     Otherwise it is the number of children + parent changed
833
834    Only root variables can be updated... 
835
836    NOTE: This function may delete the caller's varobj. If it
837    returns -2, then it has done this and VARP will be modified
838    to point to the new varobj. */
839
840 int
841 varobj_update (struct varobj **varp, struct varobj ***changelist)
842 {
843   int changed = 0;
844   int type_changed;
845   int i;
846   int vleft;
847   int error2;
848   struct varobj *v;
849   struct varobj **cv;
850   struct varobj **templist = NULL;
851   struct value *new;
852   struct vstack *stack = NULL;
853   struct vstack *result = NULL;
854   struct frame_id old_fid;
855   struct frame_info *fi;
856
857   /* sanity check: have we been passed a pointer? */
858   if (changelist == NULL)
859     return -1;
860
861   /*  Only root variables can be updated... */
862   if ((*varp)->root->rootvar != *varp)
863     /* Not a root var */
864     return -1;
865
866   /* Save the selected stack frame, since we will need to change it
867      in order to evaluate expressions. */
868   get_frame_id (selected_frame, &old_fid);
869
870   /* Update the root variable. value_of_root can return NULL
871      if the variable is no longer around, i.e. we stepped out of
872      the frame in which a local existed. We are letting the 
873      value_of_root variable dispose of the varobj if the type
874      has changed. */
875   type_changed = 1;
876   new = value_of_root (varp, &type_changed);
877   if (new == NULL)
878     {
879       (*varp)->error = 1;
880       return -1;
881     }
882
883   /* Initialize a stack for temporary results */
884   vpush (&result, NULL);
885
886   /* If this is a "use_selected_frame" varobj, and its type has changed,
887      them note that it's changed. */
888   if (type_changed)
889     {
890       vpush (&result, *varp);
891       changed++;
892     }
893   /* If values are not equal, note that it's changed.
894      There a couple of exceptions here, though.
895      We don't want some types to be reported as "changed". */
896   else if (type_changeable (*varp)
897            && !my_value_equal ((*varp)->value, new, &error2))
898     {
899       vpush (&result, *varp);
900       changed++;
901       /* error2 replaces var->error since this new value
902          WILL replace the old one. */
903       (*varp)->error = error2;
904     }
905
906   /* We must always keep around the new value for this root
907      variable expression, or we lose the updated children! */
908   value_free ((*varp)->value);
909   (*varp)->value = new;
910
911   /* Initialize a stack */
912   vpush (&stack, NULL);
913
914   /* Push the root's children */
915   if ((*varp)->children != NULL)
916     {
917       struct varobj_child *c;
918       for (c = (*varp)->children; c != NULL; c = c->next)
919         vpush (&stack, c->child);
920     }
921
922   /* Walk through the children, reconstructing them all. */
923   v = vpop (&stack);
924   while (v != NULL)
925     {
926       /* Push any children */
927       if (v->children != NULL)
928         {
929           struct varobj_child *c;
930           for (c = v->children; c != NULL; c = c->next)
931             vpush (&stack, c->child);
932         }
933
934       /* Update this variable */
935       new = value_of_child (v->parent, v->index);
936       if (type_changeable (v) && !my_value_equal (v->value, new, &error2))
937         {
938           /* Note that it's changed */
939           vpush (&result, v);
940           changed++;
941         }
942       /* error2 replaces v->error since this new value
943          WILL replace the old one. */
944       v->error = error2;
945
946       /* We must always keep new values, since children depend on it. */
947       if (v->value != NULL)
948         value_free (v->value);
949       v->value = new;
950
951       /* Get next child */
952       v = vpop (&stack);
953     }
954
955   /* Alloc (changed + 1) list entries */
956   /* FIXME: add a cleanup for the allocated list(s)
957      because one day the select_frame called below can longjump */
958   *changelist = xmalloc ((changed + 1) * sizeof (struct varobj *));
959   if (changed > 1)
960     {
961       templist = xmalloc ((changed + 1) * sizeof (struct varobj *));
962       cv = templist;
963     }
964   else
965     cv = *changelist;
966
967   /* Copy from result stack to list */
968   vleft = changed;
969   *cv = vpop (&result);
970   while ((*cv != NULL) && (vleft > 0))
971     {
972       vleft--;
973       cv++;
974       *cv = vpop (&result);
975     }
976   if (vleft)
977     warning ("varobj_update: assertion failed - vleft <> 0");
978
979   if (changed > 1)
980     {
981       /* Now we revert the order. */
982       for (i = 0; i < changed; i++)
983         *(*changelist + i) = *(templist + changed - 1 - i);
984       *(*changelist + changed) = NULL;
985     }
986
987   /* Restore selected frame */
988   fi = frame_find_by_id (old_fid);
989   if (fi)
990     select_frame (fi);
991
992   if (type_changed)
993     return -2;
994   else
995     return changed;
996 }
997 \f
998
999 /* Helper functions */
1000
1001 /*
1002  * Variable object construction/destruction
1003  */
1004
1005 static int
1006 delete_variable (struct cpstack **resultp, struct varobj *var,
1007                  int only_children_p)
1008 {
1009   int delcount = 0;
1010
1011   delete_variable_1 (resultp, &delcount, var,
1012                      only_children_p, 1 /* remove_from_parent_p */ );
1013
1014   return delcount;
1015 }
1016
1017 /* Delete the variable object VAR and its children */
1018 /* IMPORTANT NOTE: If we delete a variable which is a child
1019    and the parent is not removed we dump core.  It must be always
1020    initially called with remove_from_parent_p set */
1021 static void
1022 delete_variable_1 (struct cpstack **resultp, int *delcountp,
1023                    struct varobj *var, int only_children_p,
1024                    int remove_from_parent_p)
1025 {
1026   struct varobj_child *vc;
1027   struct varobj_child *next;
1028
1029   /* Delete any children of this variable, too. */
1030   for (vc = var->children; vc != NULL; vc = next)
1031     {
1032       if (!remove_from_parent_p)
1033         vc->child->parent = NULL;
1034       delete_variable_1 (resultp, delcountp, vc->child, 0, only_children_p);
1035       next = vc->next;
1036       xfree (vc);
1037     }
1038
1039   /* if we were called to delete only the children we are done here */
1040   if (only_children_p)
1041     return;
1042
1043   /* Otherwise, add it to the list of deleted ones and proceed to do so */
1044   /* If the name is null, this is a temporary variable, that has not
1045      yet been installed, don't report it, it belongs to the caller... */
1046   if (var->obj_name != NULL)
1047     {
1048       cppush (resultp, xstrdup (var->obj_name));
1049       *delcountp = *delcountp + 1;
1050     }
1051
1052   /* If this variable has a parent, remove it from its parent's list */
1053   /* OPTIMIZATION: if the parent of this variable is also being deleted, 
1054      (as indicated by remove_from_parent_p) we don't bother doing an
1055      expensive list search to find the element to remove when we are
1056      discarding the list afterwards */
1057   if ((remove_from_parent_p) && (var->parent != NULL))
1058     {
1059       remove_child_from_parent (var->parent, var);
1060     }
1061
1062   if (var->obj_name != NULL)
1063     uninstall_variable (var);
1064
1065   /* Free memory associated with this variable */
1066   free_variable (var);
1067 }
1068
1069 /* Install the given variable VAR with the object name VAR->OBJ_NAME. */
1070 static int
1071 install_variable (struct varobj *var)
1072 {
1073   struct vlist *cv;
1074   struct vlist *newvl;
1075   const char *chp;
1076   unsigned int index = 0;
1077   unsigned int i = 1;
1078
1079   for (chp = var->obj_name; *chp; chp++)
1080     {
1081       index = (index + (i++ * (unsigned int) *chp)) % VAROBJ_TABLE_SIZE;
1082     }
1083
1084   cv = *(varobj_table + index);
1085   while ((cv != NULL) && (strcmp (cv->var->obj_name, var->obj_name) != 0))
1086     cv = cv->next;
1087
1088   if (cv != NULL)
1089     error ("Duplicate variable object name");
1090
1091   /* Add varobj to hash table */
1092   newvl = xmalloc (sizeof (struct vlist));
1093   newvl->next = *(varobj_table + index);
1094   newvl->var = var;
1095   *(varobj_table + index) = newvl;
1096
1097   /* If root, add varobj to root list */
1098   if (var->root->rootvar == var)
1099     {
1100       /* Add to list of root variables */
1101       if (rootlist == NULL)
1102         var->root->next = NULL;
1103       else
1104         var->root->next = rootlist;
1105       rootlist = var->root;
1106       rootcount++;
1107     }
1108
1109   return 1;                     /* OK */
1110 }
1111
1112 /* Unistall the object VAR. */
1113 static void
1114 uninstall_variable (struct varobj *var)
1115 {
1116   struct vlist *cv;
1117   struct vlist *prev;
1118   struct varobj_root *cr;
1119   struct varobj_root *prer;
1120   const char *chp;
1121   unsigned int index = 0;
1122   unsigned int i = 1;
1123
1124   /* Remove varobj from hash table */
1125   for (chp = var->obj_name; *chp; chp++)
1126     {
1127       index = (index + (i++ * (unsigned int) *chp)) % VAROBJ_TABLE_SIZE;
1128     }
1129
1130   cv = *(varobj_table + index);
1131   prev = NULL;
1132   while ((cv != NULL) && (strcmp (cv->var->obj_name, var->obj_name) != 0))
1133     {
1134       prev = cv;
1135       cv = cv->next;
1136     }
1137
1138   if (varobjdebug)
1139     fprintf_unfiltered (gdb_stdlog, "Deleting %s\n", var->obj_name);
1140
1141   if (cv == NULL)
1142     {
1143       warning
1144         ("Assertion failed: Could not find variable object \"%s\" to delete",
1145          var->obj_name);
1146       return;
1147     }
1148
1149   if (prev == NULL)
1150     *(varobj_table + index) = cv->next;
1151   else
1152     prev->next = cv->next;
1153
1154   xfree (cv);
1155
1156   /* If root, remove varobj from root list */
1157   if (var->root->rootvar == var)
1158     {
1159       /* Remove from list of root variables */
1160       if (rootlist == var->root)
1161         rootlist = var->root->next;
1162       else
1163         {
1164           prer = NULL;
1165           cr = rootlist;
1166           while ((cr != NULL) && (cr->rootvar != var))
1167             {
1168               prer = cr;
1169               cr = cr->next;
1170             }
1171           if (cr == NULL)
1172             {
1173               warning
1174                 ("Assertion failed: Could not find varobj \"%s\" in root list",
1175                  var->obj_name);
1176               return;
1177             }
1178           if (prer == NULL)
1179             rootlist = NULL;
1180           else
1181             prer->next = cr->next;
1182         }
1183       rootcount--;
1184     }
1185
1186 }
1187
1188 /* Does a child with the name NAME exist in VAR? If so, return its data.
1189    If not, return NULL. */
1190 static struct varobj *
1191 child_exists (struct varobj *var, char *name)
1192 {
1193   struct varobj_child *vc;
1194
1195   for (vc = var->children; vc != NULL; vc = vc->next)
1196     {
1197       if (STREQ (vc->child->name, name))
1198         return vc->child;
1199     }
1200
1201   return NULL;
1202 }
1203
1204 /* Create and install a child of the parent of the given name */
1205 static struct varobj *
1206 create_child (struct varobj *parent, int index, char *name)
1207 {
1208   struct varobj *child;
1209   char *childs_name;
1210
1211   child = new_variable ();
1212
1213   /* name is allocated by name_of_child */
1214   child->name = name;
1215   child->index = index;
1216   child->value = value_of_child (parent, index);
1217   if ((!CPLUS_FAKE_CHILD (child) && child->value == NULL) || parent->error)
1218     child->error = 1;
1219   child->parent = parent;
1220   child->root = parent->root;
1221   xasprintf (&childs_name, "%s.%s", parent->obj_name, name);
1222   child->obj_name = childs_name;
1223   install_variable (child);
1224
1225   /* Save a pointer to this child in the parent */
1226   save_child_in_parent (parent, child);
1227
1228   /* Note the type of this child */
1229   child->type = type_of_child (child);
1230
1231   return child;
1232 }
1233
1234 /* FIXME: This should be a generic add to list */
1235 /* Save CHILD in the PARENT's data. */
1236 static void
1237 save_child_in_parent (struct varobj *parent, struct varobj *child)
1238 {
1239   struct varobj_child *vc;
1240
1241   /* Insert the child at the top */
1242   vc = parent->children;
1243   parent->children =
1244     (struct varobj_child *) xmalloc (sizeof (struct varobj_child));
1245
1246   parent->children->next = vc;
1247   parent->children->child = child;
1248 }
1249
1250 /* FIXME: This should be a generic remove from list */
1251 /* Remove the CHILD from the PARENT's list of children. */
1252 static void
1253 remove_child_from_parent (struct varobj *parent, struct varobj *child)
1254 {
1255   struct varobj_child *vc, *prev;
1256
1257   /* Find the child in the parent's list */
1258   prev = NULL;
1259   for (vc = parent->children; vc != NULL;)
1260     {
1261       if (vc->child == child)
1262         break;
1263       prev = vc;
1264       vc = vc->next;
1265     }
1266
1267   if (prev == NULL)
1268     parent->children = vc->next;
1269   else
1270     prev->next = vc->next;
1271
1272 }
1273 \f
1274
1275 /*
1276  * Miscellaneous utility functions.
1277  */
1278
1279 /* Allocate memory and initialize a new variable */
1280 static struct varobj *
1281 new_variable (void)
1282 {
1283   struct varobj *var;
1284
1285   var = (struct varobj *) xmalloc (sizeof (struct varobj));
1286   var->name = NULL;
1287   var->obj_name = NULL;
1288   var->index = -1;
1289   var->type = NULL;
1290   var->value = NULL;
1291   var->error = 0;
1292   var->num_children = -1;
1293   var->parent = NULL;
1294   var->children = NULL;
1295   var->format = 0;
1296   var->root = NULL;
1297
1298   return var;
1299 }
1300
1301 /* Allocate memory and initialize a new root variable */
1302 static struct varobj *
1303 new_root_variable (void)
1304 {
1305   struct varobj *var = new_variable ();
1306   var->root = (struct varobj_root *) xmalloc (sizeof (struct varobj_root));;
1307   var->root->lang = NULL;
1308   var->root->exp = NULL;
1309   var->root->valid_block = NULL;
1310   var->root->frame.base = 0;
1311   var->root->frame.pc = 0;
1312   var->root->use_selected_frame = 0;
1313   var->root->rootvar = NULL;
1314
1315   return var;
1316 }
1317
1318 /* Free any allocated memory associated with VAR. */
1319 static void
1320 free_variable (struct varobj *var)
1321 {
1322   /* Free the expression if this is a root variable. */
1323   if (var->root->rootvar == var)
1324     {
1325       free_current_contents ((char **) &var->root->exp);
1326       xfree (var->root);
1327     }
1328
1329   xfree (var->name);
1330   xfree (var->obj_name);
1331   xfree (var);
1332 }
1333
1334 static void
1335 do_free_variable_cleanup (void *var)
1336 {
1337   free_variable (var);
1338 }
1339
1340 static struct cleanup *
1341 make_cleanup_free_variable (struct varobj *var)
1342 {
1343   return make_cleanup (do_free_variable_cleanup, var);
1344 }
1345
1346 /* This returns the type of the variable. This skips past typedefs
1347    and returns the real type of the variable. It also dereferences
1348    pointers and references. */
1349 static struct type *
1350 get_type (struct varobj *var)
1351 {
1352   struct type *type;
1353   type = var->type;
1354
1355   while (type != NULL && TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
1356     type = TYPE_TARGET_TYPE (type);
1357
1358   return type;
1359 }
1360
1361 /* This returns the type of the variable, dereferencing pointers, too. */
1362 static struct type *
1363 get_type_deref (struct varobj *var)
1364 {
1365   struct type *type;
1366
1367   type = get_type (var);
1368
1369   if (type != NULL && (TYPE_CODE (type) == TYPE_CODE_PTR
1370                        || TYPE_CODE (type) == TYPE_CODE_REF))
1371     type = get_target_type (type);
1372
1373   return type;
1374 }
1375
1376 /* This returns the target type (or NULL) of TYPE, also skipping
1377    past typedefs, just like get_type (). */
1378 static struct type *
1379 get_target_type (struct type *type)
1380 {
1381   if (type != NULL)
1382     {
1383       type = TYPE_TARGET_TYPE (type);
1384       while (type != NULL && TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
1385         type = TYPE_TARGET_TYPE (type);
1386     }
1387
1388   return type;
1389 }
1390
1391 /* What is the default display for this variable? We assume that
1392    everything is "natural". Any exceptions? */
1393 static enum varobj_display_formats
1394 variable_default_display (struct varobj *var)
1395 {
1396   return FORMAT_NATURAL;
1397 }
1398
1399 /* This function is similar to gdb's value_equal, except that this
1400    one is "safe" -- it NEVER longjmps. It determines if the VAR's
1401    value is the same as VAL2. */
1402 static int
1403 my_value_equal (struct value *val1, struct value *val2, int *error2)
1404 {
1405   int r, err1, err2;
1406
1407   *error2 = 0;
1408   /* Special case: NULL values. If both are null, say
1409      they're equal. */
1410   if (val1 == NULL && val2 == NULL)
1411     return 1;
1412   else if (val1 == NULL || val2 == NULL)
1413     return 0;
1414
1415   /* This is bogus, but unfortunately necessary. We must know
1416      exactly what caused an error -- reading val1 or val2 --  so
1417      that we can really determine if we think that something has changed. */
1418   err1 = 0;
1419   err2 = 0;
1420   /* We do need to catch errors here because the whole purpose
1421      is to test if value_equal() has errored */
1422   if (!gdb_value_equal (val1, val1, &r))
1423     err1 = 1;
1424
1425   if (!gdb_value_equal (val2, val2, &r))
1426     *error2 = err2 = 1;
1427
1428   if (err1 != err2)
1429     return 0;
1430
1431   if (!gdb_value_equal (val1, val2, &r))
1432     {
1433       /* An error occurred, this could have happened if
1434          either val1 or val2 errored. ERR1 and ERR2 tell
1435          us which of these it is. If both errored, then
1436          we assume nothing has changed. If one of them is
1437          valid, though, then something has changed. */
1438       if (err1 == err2)
1439         {
1440           /* both the old and new values caused errors, so
1441              we say the value did not change */
1442           /* This is indeterminate, though. Perhaps we should
1443              be safe and say, yes, it changed anyway?? */
1444           return 1;
1445         }
1446       else
1447         {
1448           return 0;
1449         }
1450     }
1451
1452   return r;
1453 }
1454
1455 /* FIXME: The following should be generic for any pointer */
1456 static void
1457 vpush (struct vstack **pstack, struct varobj *var)
1458 {
1459   struct vstack *s;
1460
1461   s = (struct vstack *) xmalloc (sizeof (struct vstack));
1462   s->var = var;
1463   s->next = *pstack;
1464   *pstack = s;
1465 }
1466
1467 /* FIXME: The following should be generic for any pointer */
1468 static struct varobj *
1469 vpop (struct vstack **pstack)
1470 {
1471   struct vstack *s;
1472   struct varobj *v;
1473
1474   if ((*pstack)->var == NULL && (*pstack)->next == NULL)
1475     return NULL;
1476
1477   s = *pstack;
1478   v = s->var;
1479   *pstack = (*pstack)->next;
1480   xfree (s);
1481
1482   return v;
1483 }
1484
1485 /* FIXME: The following should be generic for any pointer */
1486 static void
1487 cppush (struct cpstack **pstack, char *name)
1488 {
1489   struct cpstack *s;
1490
1491   s = (struct cpstack *) xmalloc (sizeof (struct cpstack));
1492   s->name = name;
1493   s->next = *pstack;
1494   *pstack = s;
1495 }
1496
1497 /* FIXME: The following should be generic for any pointer */
1498 static char *
1499 cppop (struct cpstack **pstack)
1500 {
1501   struct cpstack *s;
1502   char *v;
1503
1504   if ((*pstack)->name == NULL && (*pstack)->next == NULL)
1505     return NULL;
1506
1507   s = *pstack;
1508   v = s->name;
1509   *pstack = (*pstack)->next;
1510   xfree (s);
1511
1512   return v;
1513 }
1514 \f
1515 /*
1516  * Language-dependencies
1517  */
1518
1519 /* Common entry points */
1520
1521 /* Get the language of variable VAR. */
1522 static enum varobj_languages
1523 variable_language (struct varobj *var)
1524 {
1525   enum varobj_languages lang;
1526
1527   switch (var->root->exp->language_defn->la_language)
1528     {
1529     default:
1530     case language_c:
1531       lang = vlang_c;
1532       break;
1533     case language_cplus:
1534       lang = vlang_cplus;
1535       break;
1536     case language_java:
1537       lang = vlang_java;
1538       break;
1539     }
1540
1541   return lang;
1542 }
1543
1544 /* Return the number of children for a given variable.
1545    The result of this function is defined by the language
1546    implementation. The number of children returned by this function
1547    is the number of children that the user will see in the variable
1548    display. */
1549 static int
1550 number_of_children (struct varobj *var)
1551 {
1552   return (*var->root->lang->number_of_children) (var);;
1553 }
1554
1555 /* What is the expression for the root varobj VAR? Returns a malloc'd string. */
1556 static char *
1557 name_of_variable (struct varobj *var)
1558 {
1559   return (*var->root->lang->name_of_variable) (var);
1560 }
1561
1562 /* What is the name of the INDEX'th child of VAR? Returns a malloc'd string. */
1563 static char *
1564 name_of_child (struct varobj *var, int index)
1565 {
1566   return (*var->root->lang->name_of_child) (var, index);
1567 }
1568
1569 /* What is the ``struct value *'' of the root variable VAR? 
1570    TYPE_CHANGED controls what to do if the type of a
1571    use_selected_frame = 1 variable changes.  On input,
1572    TYPE_CHANGED = 1 means discard the old varobj, and replace
1573    it with this one.  TYPE_CHANGED = 0 means leave it around.
1574    NB: In both cases, var_handle will point to the new varobj,
1575    so if you use TYPE_CHANGED = 0, you will have to stash the
1576    old varobj pointer away somewhere before calling this.
1577    On return, TYPE_CHANGED will be 1 if the type has changed, and 
1578    0 otherwise. */
1579 static struct value *
1580 value_of_root (struct varobj **var_handle, int *type_changed)
1581 {
1582   struct varobj *var;
1583
1584   if (var_handle == NULL)
1585     return NULL;
1586
1587   var = *var_handle;
1588
1589   /* This should really be an exception, since this should
1590      only get called with a root variable. */
1591
1592   if (var->root->rootvar != var)
1593     return NULL;
1594
1595   if (var->root->use_selected_frame)
1596     {
1597       struct varobj *tmp_var;
1598       char *old_type, *new_type;
1599       old_type = varobj_get_type (var);
1600       tmp_var = varobj_create (NULL, var->name, (CORE_ADDR) 0,
1601                                USE_SELECTED_FRAME);
1602       if (tmp_var == NULL)
1603         {
1604           return NULL;
1605         }
1606       new_type = varobj_get_type (tmp_var);
1607       if (strcmp (old_type, new_type) == 0)
1608         {
1609           varobj_delete (tmp_var, NULL, 0);
1610           *type_changed = 0;
1611         }
1612       else
1613         {
1614           if (*type_changed)
1615             {
1616               tmp_var->obj_name =
1617                 savestring (var->obj_name, strlen (var->obj_name));
1618               varobj_delete (var, NULL, 0);
1619             }
1620           else
1621             {
1622               tmp_var->obj_name = varobj_gen_name ();
1623             }
1624           install_variable (tmp_var);
1625           *var_handle = tmp_var;
1626           var = *var_handle;
1627           *type_changed = 1;
1628         }
1629     }
1630   else
1631     {
1632       *type_changed = 0;
1633     }
1634
1635   return (*var->root->lang->value_of_root) (var_handle);
1636 }
1637
1638 /* What is the ``struct value *'' for the INDEX'th child of PARENT? */
1639 static struct value *
1640 value_of_child (struct varobj *parent, int index)
1641 {
1642   struct value *value;
1643
1644   value = (*parent->root->lang->value_of_child) (parent, index);
1645
1646   /* If we're being lazy, fetch the real value of the variable. */
1647   if (value != NULL && VALUE_LAZY (value))
1648     {
1649       /* If we fail to fetch the value of the child, return
1650          NULL so that callers notice that we're leaving an
1651          error message. */
1652       if (!gdb_value_fetch_lazy (value))
1653         value = NULL;
1654     }
1655
1656   return value;
1657 }
1658
1659 /* What is the type of VAR? */
1660 static struct type *
1661 type_of_child (struct varobj *var)
1662 {
1663
1664   /* If the child had no evaluation errors, var->value
1665      will be non-NULL and contain a valid type. */
1666   if (var->value != NULL)
1667     return VALUE_TYPE (var->value);
1668
1669   /* Otherwise, we must compute the type. */
1670   return (*var->root->lang->type_of_child) (var->parent, var->index);
1671 }
1672
1673 /* Is this variable editable? Use the variable's type to make
1674    this determination. */
1675 static int
1676 variable_editable (struct varobj *var)
1677 {
1678   return (*var->root->lang->variable_editable) (var);
1679 }
1680
1681 /* GDB already has a command called "value_of_variable". Sigh. */
1682 static char *
1683 my_value_of_variable (struct varobj *var)
1684 {
1685   return (*var->root->lang->value_of_variable) (var);
1686 }
1687
1688 /* Is VAR something that can change? Depending on language,
1689    some variable's values never change. For example,
1690    struct and unions never change values. */
1691 static int
1692 type_changeable (struct varobj *var)
1693 {
1694   int r;
1695   struct type *type;
1696
1697   if (CPLUS_FAKE_CHILD (var))
1698     return 0;
1699
1700   type = get_type (var);
1701
1702   switch (TYPE_CODE (type))
1703     {
1704     case TYPE_CODE_STRUCT:
1705     case TYPE_CODE_UNION:
1706     case TYPE_CODE_ARRAY:
1707       r = 0;
1708       break;
1709
1710     default:
1711       r = 1;
1712     }
1713
1714   return r;
1715 }
1716
1717 /* C */
1718 static int
1719 c_number_of_children (struct varobj *var)
1720 {
1721   struct type *type;
1722   struct type *target;
1723   int children;
1724
1725   type = get_type (var);
1726   target = get_target_type (type);
1727   children = 0;
1728
1729   switch (TYPE_CODE (type))
1730     {
1731     case TYPE_CODE_ARRAY:
1732       if (TYPE_LENGTH (type) > 0 && TYPE_LENGTH (target) > 0
1733           && TYPE_ARRAY_UPPER_BOUND_TYPE (type) != BOUND_CANNOT_BE_DETERMINED)
1734         children = TYPE_LENGTH (type) / TYPE_LENGTH (target);
1735       else
1736         children = -1;
1737       break;
1738
1739     case TYPE_CODE_STRUCT:
1740     case TYPE_CODE_UNION:
1741       children = TYPE_NFIELDS (type);
1742       break;
1743
1744     case TYPE_CODE_PTR:
1745       /* This is where things get compilcated. All pointers have one child.
1746          Except, of course, for struct and union ptr, which we automagically
1747          dereference for the user and function ptrs, which have no children.
1748          We also don't dereference void* as we don't know what to show.
1749          We can show char* so we allow it to be dereferenced.  If you decide
1750          to test for it, please mind that a little magic is necessary to
1751          properly identify it: char* has TYPE_CODE == TYPE_CODE_INT and 
1752          TYPE_NAME == "char" */
1753
1754       switch (TYPE_CODE (target))
1755         {
1756         case TYPE_CODE_STRUCT:
1757         case TYPE_CODE_UNION:
1758           children = TYPE_NFIELDS (target);
1759           break;
1760
1761         case TYPE_CODE_FUNC:
1762         case TYPE_CODE_VOID:
1763           children = 0;
1764           break;
1765
1766         default:
1767           children = 1;
1768         }
1769       break;
1770
1771     default:
1772       /* Other types have no children */
1773       break;
1774     }
1775
1776   return children;
1777 }
1778
1779 static char *
1780 c_name_of_variable (struct varobj *parent)
1781 {
1782   return savestring (parent->name, strlen (parent->name));
1783 }
1784
1785 static char *
1786 c_name_of_child (struct varobj *parent, int index)
1787 {
1788   struct type *type;
1789   struct type *target;
1790   char *name;
1791   char *string;
1792
1793   type = get_type (parent);
1794   target = get_target_type (type);
1795
1796   switch (TYPE_CODE (type))
1797     {
1798     case TYPE_CODE_ARRAY:
1799       xasprintf (&name, "%d", index);
1800       break;
1801
1802     case TYPE_CODE_STRUCT:
1803     case TYPE_CODE_UNION:
1804       string = TYPE_FIELD_NAME (type, index);
1805       name = savestring (string, strlen (string));
1806       break;
1807
1808     case TYPE_CODE_PTR:
1809       switch (TYPE_CODE (target))
1810         {
1811         case TYPE_CODE_STRUCT:
1812         case TYPE_CODE_UNION:
1813           string = TYPE_FIELD_NAME (target, index);
1814           name = savestring (string, strlen (string));
1815           break;
1816
1817         default:
1818           xasprintf (&name, "*%s", parent->name);
1819           break;
1820         }
1821       break;
1822
1823     default:
1824       /* This should not happen */
1825       name = xstrdup ("???");
1826     }
1827
1828   return name;
1829 }
1830
1831 static struct value *
1832 c_value_of_root (struct varobj **var_handle)
1833 {
1834   struct value *new_val;
1835   struct varobj *var = *var_handle;
1836   struct frame_info *fi;
1837   int within_scope;
1838
1839   /*  Only root variables can be updated... */
1840   if (var->root->rootvar != var)
1841     /* Not a root var */
1842     return NULL;
1843
1844
1845   /* Determine whether the variable is still around. */
1846   if (var->root->valid_block == NULL)
1847     within_scope = 1;
1848   else
1849     {
1850       reinit_frame_cache ();
1851       fi = frame_find_by_id (var->root->frame);
1852       within_scope = fi != NULL;
1853       /* FIXME: select_frame could fail */
1854       if (within_scope)
1855         select_frame (fi);
1856     }
1857
1858   if (within_scope)
1859     {
1860       /* We need to catch errors here, because if evaluate
1861          expression fails we just want to make val->error = 1 and
1862          go on */
1863       if (gdb_evaluate_expression (var->root->exp, &new_val))
1864         {
1865           if (VALUE_LAZY (new_val))
1866             {
1867               /* We need to catch errors because if
1868                  value_fetch_lazy fails we still want to continue
1869                  (after making val->error = 1) */
1870               /* FIXME: Shouldn't be using VALUE_CONTENTS?  The
1871                  comment on value_fetch_lazy() says it is only
1872                  called from the macro... */
1873               if (!gdb_value_fetch_lazy (new_val))
1874                 var->error = 1;
1875               else
1876                 var->error = 0;
1877             }
1878         }
1879       else
1880         var->error = 1;
1881
1882       release_value (new_val);
1883       return new_val;
1884     }
1885
1886   return NULL;
1887 }
1888
1889 static struct value *
1890 c_value_of_child (struct varobj *parent, int index)
1891 {
1892   struct value *value;
1893   struct value *temp;
1894   struct value *indval;
1895   struct type *type, *target;
1896   char *name;
1897
1898   type = get_type (parent);
1899   target = get_target_type (type);
1900   name = name_of_child (parent, index);
1901   temp = parent->value;
1902   value = NULL;
1903
1904   if (temp != NULL)
1905     {
1906       switch (TYPE_CODE (type))
1907         {
1908         case TYPE_CODE_ARRAY:
1909 #if 0
1910           /* This breaks if the array lives in a (vector) register. */
1911           value = value_slice (temp, index, 1);
1912           temp = value_coerce_array (value);
1913           gdb_value_ind (temp, &value);
1914 #else
1915           indval = value_from_longest (builtin_type_int, (LONGEST) index);
1916           gdb_value_subscript (temp, indval, &value);
1917 #endif
1918           break;
1919
1920         case TYPE_CODE_STRUCT:
1921         case TYPE_CODE_UNION:
1922           gdb_value_struct_elt (NULL, &value, &temp, NULL, name, NULL,
1923                                 "vstructure");
1924           break;
1925
1926         case TYPE_CODE_PTR:
1927           switch (TYPE_CODE (target))
1928             {
1929             case TYPE_CODE_STRUCT:
1930             case TYPE_CODE_UNION:
1931               gdb_value_struct_elt (NULL, &value, &temp, NULL, name, NULL,
1932                                     "vstructure");
1933               break;
1934
1935             default:
1936               gdb_value_ind (temp, &value);
1937               break;
1938             }
1939           break;
1940
1941         default:
1942           break;
1943         }
1944     }
1945
1946   if (value != NULL)
1947     release_value (value);
1948
1949   xfree (name);
1950   return value;
1951 }
1952
1953 static struct type *
1954 c_type_of_child (struct varobj *parent, int index)
1955 {
1956   struct type *type;
1957   char *name = name_of_child (parent, index);
1958
1959   switch (TYPE_CODE (parent->type))
1960     {
1961     case TYPE_CODE_ARRAY:
1962       type = TYPE_TARGET_TYPE (parent->type);
1963       break;
1964
1965     case TYPE_CODE_STRUCT:
1966     case TYPE_CODE_UNION:
1967       type = lookup_struct_elt_type (parent->type, name, 0);
1968       break;
1969
1970     case TYPE_CODE_PTR:
1971       switch (TYPE_CODE (TYPE_TARGET_TYPE (parent->type)))
1972         {
1973         case TYPE_CODE_STRUCT:
1974         case TYPE_CODE_UNION:
1975           type = lookup_struct_elt_type (parent->type, name, 0);
1976           break;
1977
1978         default:
1979           type = TYPE_TARGET_TYPE (parent->type);
1980           break;
1981         }
1982       break;
1983
1984     default:
1985       /* This should not happen as only the above types have children */
1986       warning ("Child of parent whose type does not allow children");
1987       /* FIXME: Can we still go on? */
1988       type = NULL;
1989       break;
1990     }
1991
1992   xfree (name);
1993   return type;
1994 }
1995
1996 static int
1997 c_variable_editable (struct varobj *var)
1998 {
1999   switch (TYPE_CODE (get_type (var)))
2000     {
2001     case TYPE_CODE_STRUCT:
2002     case TYPE_CODE_UNION:
2003     case TYPE_CODE_ARRAY:
2004     case TYPE_CODE_FUNC:
2005     case TYPE_CODE_MEMBER:
2006     case TYPE_CODE_METHOD:
2007       return 0;
2008       break;
2009
2010     default:
2011       return 1;
2012       break;
2013     }
2014 }
2015
2016 static char *
2017 c_value_of_variable (struct varobj *var)
2018 {
2019   /* BOGUS: if val_print sees a struct/class, it will print out its
2020      children instead of "{...}" */
2021
2022   switch (TYPE_CODE (get_type (var)))
2023     {
2024     case TYPE_CODE_STRUCT:
2025     case TYPE_CODE_UNION:
2026       return xstrdup ("{...}");
2027       /* break; */
2028
2029     case TYPE_CODE_ARRAY:
2030       {
2031         char *number;
2032         xasprintf (&number, "[%d]", var->num_children);
2033         return (number);
2034       }
2035       /* break; */
2036
2037     default:
2038       {
2039         if (var->value == NULL)
2040           {
2041             /* This can happen if we attempt to get the value of a struct
2042                member when the parent is an invalid pointer. This is an
2043                error condition, so we should tell the caller. */
2044             return NULL;
2045           }
2046         else
2047           {
2048             long dummy;
2049             struct ui_file *stb = mem_fileopen ();
2050             struct cleanup *old_chain = make_cleanup_ui_file_delete (stb);
2051             char *thevalue;
2052
2053             if (VALUE_LAZY (var->value))
2054               gdb_value_fetch_lazy (var->value);
2055             val_print (VALUE_TYPE (var->value),
2056                        VALUE_CONTENTS_RAW (var->value), 0,
2057                        VALUE_ADDRESS (var->value), stb,
2058                        format_code[(int) var->format], 1, 0, 0);
2059             thevalue = ui_file_xstrdup (stb, &dummy);
2060             do_cleanups (old_chain);
2061         return thevalue;
2062       }
2063       }
2064     }
2065 }
2066 \f
2067
2068 /* C++ */
2069
2070 static int
2071 cplus_number_of_children (struct varobj *var)
2072 {
2073   struct type *type;
2074   int children, dont_know;
2075
2076   dont_know = 1;
2077   children = 0;
2078
2079   if (!CPLUS_FAKE_CHILD (var))
2080     {
2081       type = get_type_deref (var);
2082
2083       if (((TYPE_CODE (type)) == TYPE_CODE_STRUCT) ||
2084           ((TYPE_CODE (type)) == TYPE_CODE_UNION))
2085         {
2086           int kids[3];
2087
2088           cplus_class_num_children (type, kids);
2089           if (kids[v_public] != 0)
2090             children++;
2091           if (kids[v_private] != 0)
2092             children++;
2093           if (kids[v_protected] != 0)
2094             children++;
2095
2096           /* Add any baseclasses */
2097           children += TYPE_N_BASECLASSES (type);
2098           dont_know = 0;
2099
2100           /* FIXME: save children in var */
2101         }
2102     }
2103   else
2104     {
2105       int kids[3];
2106
2107       type = get_type_deref (var->parent);
2108
2109       cplus_class_num_children (type, kids);
2110       if (STREQ (var->name, "public"))
2111         children = kids[v_public];
2112       else if (STREQ (var->name, "private"))
2113         children = kids[v_private];
2114       else
2115         children = kids[v_protected];
2116       dont_know = 0;
2117     }
2118
2119   if (dont_know)
2120     children = c_number_of_children (var);
2121
2122   return children;
2123 }
2124
2125 /* Compute # of public, private, and protected variables in this class.
2126    That means we need to descend into all baseclasses and find out
2127    how many are there, too. */
2128 static void
2129 cplus_class_num_children (struct type *type, int children[3])
2130 {
2131   int i;
2132
2133   children[v_public] = 0;
2134   children[v_private] = 0;
2135   children[v_protected] = 0;
2136
2137   for (i = TYPE_N_BASECLASSES (type); i < TYPE_NFIELDS (type); i++)
2138     {
2139       /* If we have a virtual table pointer, omit it. */
2140       if (TYPE_VPTR_BASETYPE (type) == type && TYPE_VPTR_FIELDNO (type) == i)
2141         continue;
2142
2143       if (TYPE_FIELD_PROTECTED (type, i))
2144         children[v_protected]++;
2145       else if (TYPE_FIELD_PRIVATE (type, i))
2146         children[v_private]++;
2147       else
2148         children[v_public]++;
2149     }
2150 }
2151
2152 static char *
2153 cplus_name_of_variable (struct varobj *parent)
2154 {
2155   return c_name_of_variable (parent);
2156 }
2157
2158 static char *
2159 cplus_name_of_child (struct varobj *parent, int index)
2160 {
2161   char *name;
2162   struct type *type;
2163   int children[3];
2164
2165   if (CPLUS_FAKE_CHILD (parent))
2166     {
2167       /* Looking for children of public, private, or protected. */
2168       type = get_type_deref (parent->parent);
2169     }
2170   else
2171     type = get_type_deref (parent);
2172
2173   name = NULL;
2174   switch (TYPE_CODE (type))
2175     {
2176     case TYPE_CODE_STRUCT:
2177     case TYPE_CODE_UNION:
2178       cplus_class_num_children (type, children);
2179
2180       if (CPLUS_FAKE_CHILD (parent))
2181         {
2182           int i;
2183
2184           /* Skip over vptr, if it exists. */
2185           if (TYPE_VPTR_BASETYPE (type) == type
2186               && index >= TYPE_VPTR_FIELDNO (type))
2187             index++;
2188
2189           /* FIXME: This assumes that type orders
2190              inherited, public, private, protected */
2191           i = index + TYPE_N_BASECLASSES (type);
2192           if (STREQ (parent->name, "private")
2193               || STREQ (parent->name, "protected"))
2194             i += children[v_public];
2195           if (STREQ (parent->name, "protected"))
2196             i += children[v_private];
2197
2198           name = TYPE_FIELD_NAME (type, i);
2199         }
2200       else if (index < TYPE_N_BASECLASSES (type))
2201         name = TYPE_FIELD_NAME (type, index);
2202       else
2203         {
2204           /* Everything beyond the baseclasses can
2205              only be "public", "private", or "protected" */
2206           index -= TYPE_N_BASECLASSES (type);
2207           switch (index)
2208             {
2209             case 0:
2210               if (children[v_public] != 0)
2211                 {
2212                   name = "public";
2213                   break;
2214                 }
2215             case 1:
2216               if (children[v_private] != 0)
2217                 {
2218                   name = "private";
2219                   break;
2220                 }
2221             case 2:
2222               if (children[v_protected] != 0)
2223                 {
2224                   name = "protected";
2225                   break;
2226                 }
2227             default:
2228               /* error! */
2229               break;
2230             }
2231         }
2232       break;
2233
2234     default:
2235       break;
2236     }
2237
2238   if (name == NULL)
2239     return c_name_of_child (parent, index);
2240   else
2241     {
2242       if (name != NULL)
2243         name = savestring (name, strlen (name));
2244     }
2245
2246   return name;
2247 }
2248
2249 static struct value *
2250 cplus_value_of_root (struct varobj **var_handle)
2251 {
2252   return c_value_of_root (var_handle);
2253 }
2254
2255 static struct value *
2256 cplus_value_of_child (struct varobj *parent, int index)
2257 {
2258   struct type *type;
2259   struct value *value;
2260
2261   if (CPLUS_FAKE_CHILD (parent))
2262     type = get_type_deref (parent->parent);
2263   else
2264     type = get_type_deref (parent);
2265
2266   value = NULL;
2267
2268   if (((TYPE_CODE (type)) == TYPE_CODE_STRUCT) ||
2269       ((TYPE_CODE (type)) == TYPE_CODE_UNION))
2270     {
2271       if (CPLUS_FAKE_CHILD (parent))
2272         {
2273           char *name;
2274           struct value *temp = parent->parent->value;
2275
2276           if (temp == NULL)
2277             return NULL;
2278
2279           name = name_of_child (parent, index);
2280           gdb_value_struct_elt (NULL, &value, &temp, NULL, name, NULL,
2281                                 "cplus_structure");
2282           if (value != NULL)
2283             release_value (value);
2284
2285           xfree (name);
2286         }
2287       else if (index >= TYPE_N_BASECLASSES (type))
2288         {
2289           /* public, private, or protected */
2290           return NULL;
2291         }
2292       else
2293         {
2294           /* Baseclass */
2295           if (parent->value != NULL)
2296             {
2297               struct value *temp = NULL;
2298
2299               if (TYPE_CODE (VALUE_TYPE (parent->value)) == TYPE_CODE_PTR
2300                   || TYPE_CODE (VALUE_TYPE (parent->value)) == TYPE_CODE_REF)
2301                 {
2302                   if (!gdb_value_ind (parent->value, &temp))
2303                     return NULL;
2304                 }
2305               else
2306                 temp = parent->value;
2307
2308               if (temp != NULL)
2309                 {
2310                   value = value_cast (TYPE_FIELD_TYPE (type, index), temp);
2311                   release_value (value);
2312                 }
2313               else
2314                 {
2315                   /* We failed to evaluate the parent's value, so don't even
2316                      bother trying to evaluate this child. */
2317                   return NULL;
2318                 }
2319             }
2320         }
2321     }
2322
2323   if (value == NULL)
2324     return c_value_of_child (parent, index);
2325
2326   return value;
2327 }
2328
2329 static struct type *
2330 cplus_type_of_child (struct varobj *parent, int index)
2331 {
2332   struct type *type, *t;
2333
2334   if (CPLUS_FAKE_CHILD (parent))
2335     {
2336       /* Looking for the type of a child of public, private, or protected. */
2337       t = get_type_deref (parent->parent);
2338     }
2339   else
2340     t = get_type_deref (parent);
2341
2342   type = NULL;
2343   switch (TYPE_CODE (t))
2344     {
2345     case TYPE_CODE_STRUCT:
2346     case TYPE_CODE_UNION:
2347       if (CPLUS_FAKE_CHILD (parent))
2348         {
2349           char *name = cplus_name_of_child (parent, index);
2350           type = lookup_struct_elt_type (t, name, 0);
2351           xfree (name);
2352         }
2353       else if (index < TYPE_N_BASECLASSES (t))
2354         type = TYPE_FIELD_TYPE (t, index);
2355       else
2356         {
2357           /* special */
2358           return NULL;
2359         }
2360       break;
2361
2362     default:
2363       break;
2364     }
2365
2366   if (type == NULL)
2367     return c_type_of_child (parent, index);
2368
2369   return type;
2370 }
2371
2372 static int
2373 cplus_variable_editable (struct varobj *var)
2374 {
2375   if (CPLUS_FAKE_CHILD (var))
2376     return 0;
2377
2378   return c_variable_editable (var);
2379 }
2380
2381 static char *
2382 cplus_value_of_variable (struct varobj *var)
2383 {
2384
2385   /* If we have one of our special types, don't print out
2386      any value. */
2387   if (CPLUS_FAKE_CHILD (var))
2388     return xstrdup ("");
2389
2390   return c_value_of_variable (var);
2391 }
2392 \f
2393 /* Java */
2394
2395 static int
2396 java_number_of_children (struct varobj *var)
2397 {
2398   return cplus_number_of_children (var);
2399 }
2400
2401 static char *
2402 java_name_of_variable (struct varobj *parent)
2403 {
2404   char *p, *name;
2405
2406   name = cplus_name_of_variable (parent);
2407   /* If  the name has "-" in it, it is because we
2408      needed to escape periods in the name... */
2409   p = name;
2410
2411   while (*p != '\000')
2412     {
2413       if (*p == '-')
2414         *p = '.';
2415       p++;
2416     }
2417
2418   return name;
2419 }
2420
2421 static char *
2422 java_name_of_child (struct varobj *parent, int index)
2423 {
2424   char *name, *p;
2425
2426   name = cplus_name_of_child (parent, index);
2427   /* Escape any periods in the name... */
2428   p = name;
2429
2430   while (*p != '\000')
2431     {
2432       if (*p == '.')
2433         *p = '-';
2434       p++;
2435     }
2436
2437   return name;
2438 }
2439
2440 static struct value *
2441 java_value_of_root (struct varobj **var_handle)
2442 {
2443   return cplus_value_of_root (var_handle);
2444 }
2445
2446 static struct value *
2447 java_value_of_child (struct varobj *parent, int index)
2448 {
2449   return cplus_value_of_child (parent, index);
2450 }
2451
2452 static struct type *
2453 java_type_of_child (struct varobj *parent, int index)
2454 {
2455   return cplus_type_of_child (parent, index);
2456 }
2457
2458 static int
2459 java_variable_editable (struct varobj *var)
2460 {
2461   return cplus_variable_editable (var);
2462 }
2463
2464 static char *
2465 java_value_of_variable (struct varobj *var)
2466 {
2467   return cplus_value_of_variable (var);
2468 }
2469 \f
2470 extern void _initialize_varobj (void);
2471 void
2472 _initialize_varobj (void)
2473 {
2474   int sizeof_table = sizeof (struct vlist *) * VAROBJ_TABLE_SIZE;
2475
2476   varobj_table = xmalloc (sizeof_table);
2477   memset (varobj_table, 0, sizeof_table);
2478
2479   add_show_from_set (add_set_cmd ("debugvarobj", class_maintenance, var_zinteger, (char *) &varobjdebug, "Set varobj debugging.\n\
2480 When non-zero, varobj debugging is enabled.", &setlist),
2481                      &showlist);
2482 }