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