OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [gdb-5.3/] [gdb/] [varobj.c] - Blame information for rev 1181

Go to most recent revision | Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.