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