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