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