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