Sort includes for files gdb/[a-f]*.[chyl].
[external/binutils.git] / gdb / c-varobj.c
1 /* varobj support for C and C++.
2
3    Copyright (C) 1999-2019 Free Software Foundation, Inc.
4
5    This program is free software; you can redistribute it and/or modify
6    it under the terms of the GNU General Public License as published by
7    the Free Software Foundation; either version 3 of the License, or
8    (at your option) any later version.
9
10    This program is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13    GNU General Public License for more details.
14
15    You should have received a copy of the GNU General Public License
16    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
17
18 #include "defs.h"
19
20 /* Local non-gdb includes.  */
21 #include "gdbthread.h"
22 #include "valprint.h"
23 #include "value.h"
24 #include "varobj.h"
25
26 static void cplus_class_num_children (struct type *type, int children[3]);
27
28 /* The names of varobjs representing anonymous structs or unions.  */
29 #define ANONYMOUS_STRUCT_NAME _("<anonymous struct>")
30 #define ANONYMOUS_UNION_NAME _("<anonymous union>")
31
32 /* Does CHILD represent a child with no name?  This happens when
33    the child is an anonmous struct or union and it has no field name
34    in its parent variable.
35
36    This has already been determined by *_describe_child. The easiest
37    thing to do is to compare the child's name with ANONYMOUS_*_NAME.  */
38
39 bool
40 varobj_is_anonymous_child (const struct varobj *child)
41 {
42   return (child->name == ANONYMOUS_STRUCT_NAME
43           || child->name == ANONYMOUS_UNION_NAME);
44 }
45
46 /* Given the value and the type of a variable object,
47    adjust the value and type to those necessary
48    for getting children of the variable object.
49    This includes dereferencing top-level references
50    to all types and dereferencing pointers to
51    structures.
52
53    If LOOKUP_ACTUAL_TYPE is set the enclosing type of the
54    value will be fetched and if it differs from static type
55    the value will be casted to it.
56
57    Both TYPE and *TYPE should be non-null.  VALUE
58    can be null if we want to only translate type.
59    *VALUE can be null as well -- if the parent
60    value is not known.
61
62    If WAS_PTR is not NULL, set *WAS_PTR to 0 or 1
63    depending on whether pointer was dereferenced
64    in this function.  */
65
66 static void
67 adjust_value_for_child_access (struct value **value,
68                                   struct type **type,
69                                   int *was_ptr,
70                                   int lookup_actual_type)
71 {
72   gdb_assert (type && *type);
73
74   if (was_ptr)
75     *was_ptr = 0;
76
77   *type = check_typedef (*type);
78   
79   /* The type of value stored in varobj, that is passed
80      to us, is already supposed to be
81      reference-stripped.  */
82
83   gdb_assert (!TYPE_IS_REFERENCE (*type));
84
85   /* Pointers to structures are treated just like
86      structures when accessing children.  Don't
87      dererences pointers to other types.  */
88   if (TYPE_CODE (*type) == TYPE_CODE_PTR)
89     {
90       struct type *target_type = get_target_type (*type);
91       if (TYPE_CODE (target_type) == TYPE_CODE_STRUCT
92           || TYPE_CODE (target_type) == TYPE_CODE_UNION)
93         {
94           if (value && *value)
95             {
96
97               TRY
98                 {
99                   *value = value_ind (*value);
100                 }
101
102               CATCH (except, RETURN_MASK_ERROR)
103                 {
104                   *value = NULL;
105                 }
106               END_CATCH
107             }
108           *type = target_type;
109           if (was_ptr)
110             *was_ptr = 1;
111         }
112     }
113
114   /* The 'get_target_type' function calls check_typedef on
115      result, so we can immediately check type code.  No
116      need to call check_typedef here.  */
117
118   /* Access a real type of the value (if necessary and possible).  */
119   if (value && *value && lookup_actual_type)
120     {
121       struct type *enclosing_type;
122       int real_type_found = 0;
123
124       enclosing_type = value_actual_type (*value, 1, &real_type_found);
125       if (real_type_found)
126         {
127           *type = enclosing_type;
128           *value = value_cast (enclosing_type, *value);
129         }
130     }
131 }
132
133 /* Is VAR a path expression parent, i.e., can it be used to construct
134    a valid path expression?  */
135
136 static bool
137 c_is_path_expr_parent (const struct varobj *var)
138 {
139   struct type *type;
140
141   /* "Fake" children are not path_expr parents.  */
142   if (CPLUS_FAKE_CHILD (var))
143     return false;
144
145   type = varobj_get_gdb_type (var);
146
147   /* Anonymous unions and structs are also not path_expr parents.  */
148   if ((TYPE_CODE (type) == TYPE_CODE_STRUCT
149        || TYPE_CODE (type) == TYPE_CODE_UNION)
150       && TYPE_NAME (type) == NULL)
151     {
152       const struct varobj *parent = var->parent;
153
154       while (parent != NULL && CPLUS_FAKE_CHILD (parent))
155         parent = parent->parent;
156
157       if (parent != NULL)
158         {
159           struct type *parent_type;
160           int was_ptr;
161
162           parent_type = varobj_get_value_type (parent);
163           adjust_value_for_child_access (NULL, &parent_type, &was_ptr, 0);
164
165           if (TYPE_CODE (parent_type) == TYPE_CODE_STRUCT
166               || TYPE_CODE (parent_type) == TYPE_CODE_UNION)
167             {
168               const char *field_name;
169
170               gdb_assert (var->index < TYPE_NFIELDS (parent_type));
171               field_name = TYPE_FIELD_NAME (parent_type, var->index);
172               return !(field_name == NULL || *field_name == '\0');
173             }
174         }
175
176       return false;
177     }
178
179   return true;
180 }
181
182 /* C */
183
184 static int
185 c_number_of_children (const struct varobj *var)
186 {
187   struct type *type = varobj_get_value_type (var);
188   int children = 0;
189   struct type *target;
190
191   adjust_value_for_child_access (NULL, &type, NULL, 0);
192   target = get_target_type (type);
193
194   switch (TYPE_CODE (type))
195     {
196     case TYPE_CODE_ARRAY:
197       if (TYPE_LENGTH (type) > 0 && TYPE_LENGTH (target) > 0
198           && !TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (type))
199         children = TYPE_LENGTH (type) / TYPE_LENGTH (target);
200       else
201         /* If we don't know how many elements there are, don't display
202            any.  */
203         children = 0;
204       break;
205
206     case TYPE_CODE_STRUCT:
207     case TYPE_CODE_UNION:
208       children = TYPE_NFIELDS (type);
209       break;
210
211     case TYPE_CODE_PTR:
212       /* The type here is a pointer to non-struct.  Typically, pointers
213          have one child, except for function ptrs, which have no children,
214          and except for void*, as we don't know what to show.
215
216          We can show char* so we allow it to be dereferenced.  If you decide
217          to test for it, please mind that a little magic is necessary to
218          properly identify it: char* has TYPE_CODE == TYPE_CODE_INT and 
219          TYPE_NAME == "char".  */
220       if (TYPE_CODE (target) == TYPE_CODE_FUNC
221           || TYPE_CODE (target) == TYPE_CODE_VOID)
222         children = 0;
223       else
224         children = 1;
225       break;
226
227     default:
228       /* Other types have no children.  */
229       break;
230     }
231
232   return children;
233 }
234
235 static std::string
236 c_name_of_variable (const struct varobj *parent)
237 {
238   return parent->name;
239 }
240
241 /* Return the value of element TYPE_INDEX of a structure
242    value VALUE.  VALUE's type should be a structure,
243    or union, or a typedef to struct/union.
244
245    Returns NULL if getting the value fails.  Never throws.  */
246
247 static struct value *
248 value_struct_element_index (struct value *value, int type_index)
249 {
250   struct value *result = NULL;
251   struct type *type = value_type (value);
252
253   type = check_typedef (type);
254
255   gdb_assert (TYPE_CODE (type) == TYPE_CODE_STRUCT
256               || TYPE_CODE (type) == TYPE_CODE_UNION);
257
258   TRY
259     {
260       if (field_is_static (&TYPE_FIELD (type, type_index)))
261         result = value_static_field (type, type_index);
262       else
263         result = value_primitive_field (value, 0, type_index, type);
264     }
265   CATCH (e, RETURN_MASK_ERROR)
266     {
267       return NULL;
268     }
269   END_CATCH
270
271   return result;
272 }
273
274 /* Obtain the information about child INDEX of the variable
275    object PARENT.
276    If CNAME is not null, sets *CNAME to the name of the child relative
277    to the parent.
278    If CVALUE is not null, sets *CVALUE to the value of the child.
279    If CTYPE is not null, sets *CTYPE to the type of the child.
280
281    If any of CNAME, CVALUE, or CTYPE is not null, but the corresponding
282    information cannot be determined, set *CNAME, *CVALUE, or *CTYPE
283    to empty.  */
284
285 static void 
286 c_describe_child (const struct varobj *parent, int index,
287                   std::string *cname, struct value **cvalue,
288                   struct type **ctype, std::string *cfull_expression)
289 {
290   struct value *value = parent->value.get ();
291   struct type *type = varobj_get_value_type (parent);
292   std::string parent_expression;
293   int was_ptr;
294
295   if (cname)
296     *cname = std::string ();
297   if (cvalue)
298     *cvalue = NULL;
299   if (ctype)
300     *ctype = NULL;
301   if (cfull_expression)
302     {
303       *cfull_expression = std::string ();
304       parent_expression
305         = varobj_get_path_expr (varobj_get_path_expr_parent (parent));
306     }
307   adjust_value_for_child_access (&value, &type, &was_ptr, 0);
308
309   switch (TYPE_CODE (type))
310     {
311     case TYPE_CODE_ARRAY:
312       if (cname)
313         *cname = int_string (index
314                              + TYPE_LOW_BOUND (TYPE_INDEX_TYPE (type)),
315                              10, 1, 0, 0);
316
317       if (cvalue && value)
318         {
319           int real_index = index + TYPE_LOW_BOUND (TYPE_INDEX_TYPE (type));
320
321           TRY
322             {
323               *cvalue = value_subscript (value, real_index);
324             }
325           CATCH (except, RETURN_MASK_ERROR)
326             {
327             }
328           END_CATCH
329         }
330
331       if (ctype)
332         *ctype = get_target_type (type);
333
334       if (cfull_expression)
335         *cfull_expression = 
336           string_printf ("(%s)[%s]", parent_expression.c_str (),
337                          int_string (index
338                                      + TYPE_LOW_BOUND (TYPE_INDEX_TYPE (type)),
339                                      10, 1, 0, 0));
340
341
342       break;
343
344     case TYPE_CODE_STRUCT:
345     case TYPE_CODE_UNION:
346       {
347         const char *field_name;
348
349         /* If the type is anonymous and the field has no name,
350            set an appropriate name.  */
351         field_name = TYPE_FIELD_NAME (type, index);
352         if (field_name == NULL || *field_name == '\0')
353           {
354             if (cname)
355               {
356                 if (TYPE_CODE (TYPE_FIELD_TYPE (type, index))
357                     == TYPE_CODE_STRUCT)
358                   *cname = ANONYMOUS_STRUCT_NAME;
359                 else
360                   *cname = ANONYMOUS_UNION_NAME;
361               }
362
363             if (cfull_expression)
364               *cfull_expression = "";
365           }
366         else
367           {
368             if (cname)
369               *cname = field_name;
370
371             if (cfull_expression)
372               {
373                 const char *join = was_ptr ? "->" : ".";
374
375                 *cfull_expression = string_printf ("(%s)%s%s",
376                                                    parent_expression.c_str (),
377                                                    join, field_name);
378               }
379           }
380
381         if (cvalue && value)
382           {
383             /* For C, varobj index is the same as type index.  */
384             *cvalue = value_struct_element_index (value, index);
385           }
386
387         if (ctype)
388           *ctype = TYPE_FIELD_TYPE (type, index);
389       }
390       break;
391
392     case TYPE_CODE_PTR:
393       if (cname)
394         *cname = string_printf ("*%s", parent->name.c_str ());
395
396       if (cvalue && value)
397         {
398           TRY
399             {
400               *cvalue = value_ind (value);
401             }
402
403           CATCH (except, RETURN_MASK_ERROR)
404             {
405               *cvalue = NULL;
406             }
407           END_CATCH
408         }
409
410       /* Don't use get_target_type because it calls
411          check_typedef and here, we want to show the true
412          declared type of the variable.  */
413       if (ctype)
414         *ctype = TYPE_TARGET_TYPE (type);
415
416       if (cfull_expression)
417         *cfull_expression = string_printf ("*(%s)", parent_expression.c_str ());
418       break;
419
420     default:
421       /* This should not happen.  */
422       if (cname)
423         *cname = "???";
424       if (cfull_expression)
425         *cfull_expression = "???";
426       /* Don't set value and type, we don't know then.  */
427     }
428 }
429
430 static std::string
431 c_name_of_child (const struct varobj *parent, int index)
432 {
433   std::string name;
434
435   c_describe_child (parent, index, &name, NULL, NULL, NULL);
436   return name;
437 }
438
439 static std::string
440 c_path_expr_of_child (const struct varobj *child)
441 {
442   std::string path_expr;
443
444   c_describe_child (child->parent, child->index, NULL, NULL, NULL, 
445                     &path_expr);
446   return path_expr;
447 }
448
449 static struct value *
450 c_value_of_child (const struct varobj *parent, int index)
451 {
452   struct value *value = NULL;
453
454   c_describe_child (parent, index, NULL, &value, NULL, NULL);
455   return value;
456 }
457
458 static struct type *
459 c_type_of_child (const struct varobj *parent, int index)
460 {
461   struct type *type = NULL;
462
463   c_describe_child (parent, index, NULL, NULL, &type, NULL);
464   return type;
465 }
466
467 /* This returns the type of the variable.  It also skips past typedefs
468    to return the real type of the variable.  */
469
470 static struct type *
471 get_type (const struct varobj *var)
472 {
473   struct type *type;
474
475   type = var->type;
476   if (type != NULL)
477     type = check_typedef (type);
478
479   return type;
480 }
481
482 static std::string
483 c_value_of_variable (const struct varobj *var,
484                      enum varobj_display_formats format)
485 {
486   /* BOGUS: if val_print sees a struct/class, or a reference to one,
487      it will print out its children instead of "{...}".  So we need to
488      catch that case explicitly.  */
489   struct type *type = get_type (var);
490
491   /* Strip top-level references.  */
492   while (TYPE_IS_REFERENCE (type))
493     type = check_typedef (TYPE_TARGET_TYPE (type));
494
495   switch (TYPE_CODE (type))
496     {
497     case TYPE_CODE_STRUCT:
498     case TYPE_CODE_UNION:
499       return "{...}";
500       /* break; */
501
502     case TYPE_CODE_ARRAY:
503       return string_printf ("[%d]", var->num_children);
504       /* break; */
505
506     default:
507       {
508         if (var->value == NULL)
509           {
510             /* This can happen if we attempt to get the value of a struct
511                member when the parent is an invalid pointer.  This is an
512                error condition, so we should tell the caller.  */
513             return std::string ();
514           }
515         else
516           {
517             if (var->not_fetched && value_lazy (var->value.get ()))
518               /* Frozen variable and no value yet.  We don't
519                  implicitly fetch the value.  MI response will
520                  use empty string for the value, which is OK.  */
521               return std::string ();
522
523             gdb_assert (varobj_value_is_changeable_p (var));
524             gdb_assert (!value_lazy (var->value.get ()));
525             
526             /* If the specified format is the current one,
527                we can reuse print_value.  */
528             if (format == var->format)
529               return var->print_value;
530             else
531               return varobj_value_get_print_value (var->value.get (), format,
532                                                    var);
533           }
534       }
535     }
536 }
537 \f
538
539 /* varobj operations for c.  */
540
541 const struct lang_varobj_ops c_varobj_ops =
542 {
543    c_number_of_children,
544    c_name_of_variable,
545    c_name_of_child,
546    c_path_expr_of_child,
547    c_value_of_child,
548    c_type_of_child,
549    c_value_of_variable,
550    varobj_default_value_is_changeable_p,
551    NULL, /* value_has_mutated */
552    c_is_path_expr_parent  /* is_path_expr_parent */
553 };
554
555 /* A little convenience enum for dealing with C++.  */
556 enum vsections
557 {
558   v_public = 0, v_private, v_protected
559 };
560
561 /* C++ */
562
563 static int
564 cplus_number_of_children (const struct varobj *var)
565 {
566   struct value *value = NULL;
567   struct type *type;
568   int children, dont_know;
569   int lookup_actual_type = 0;
570   struct value_print_options opts;
571
572   dont_know = 1;
573   children = 0;
574
575   get_user_print_options (&opts);
576
577   if (!CPLUS_FAKE_CHILD (var))
578     {
579       type = varobj_get_value_type (var);
580
581       /* It is necessary to access a real type (via RTTI).  */
582       if (opts.objectprint)
583         {
584           value = var->value.get ();
585           lookup_actual_type = (TYPE_IS_REFERENCE (var->type)
586                                 || TYPE_CODE (var->type) == TYPE_CODE_PTR);
587         }
588       adjust_value_for_child_access (&value, &type, NULL, lookup_actual_type);
589
590       if (((TYPE_CODE (type)) == TYPE_CODE_STRUCT)
591           || ((TYPE_CODE (type)) == TYPE_CODE_UNION))
592         {
593           int kids[3];
594
595           cplus_class_num_children (type, kids);
596           if (kids[v_public] != 0)
597             children++;
598           if (kids[v_private] != 0)
599             children++;
600           if (kids[v_protected] != 0)
601             children++;
602
603           /* Add any baseclasses.  */
604           children += TYPE_N_BASECLASSES (type);
605           dont_know = 0;
606
607           /* FIXME: save children in var.  */
608         }
609     }
610   else
611     {
612       int kids[3];
613
614       type = varobj_get_value_type (var->parent);
615
616       /* It is necessary to access a real type (via RTTI).  */
617       if (opts.objectprint)
618         {
619           const struct varobj *parent = var->parent;
620
621           value = parent->value.get ();
622           lookup_actual_type = (TYPE_IS_REFERENCE (parent->type)
623                                 || TYPE_CODE (parent->type) == TYPE_CODE_PTR);
624         }
625       adjust_value_for_child_access (&value, &type, NULL, lookup_actual_type);
626
627       cplus_class_num_children (type, kids);
628       if (var->name == "public")
629         children = kids[v_public];
630       else if (var->name == "private")
631         children = kids[v_private];
632       else
633         children = kids[v_protected];
634       dont_know = 0;
635     }
636
637   if (dont_know)
638     children = c_number_of_children (var);
639
640   return children;
641 }
642
643 /* Compute # of public, private, and protected variables in this class.
644    That means we need to descend into all baseclasses and find out
645    how many are there, too.  */
646
647 static void
648 cplus_class_num_children (struct type *type, int children[3])
649 {
650   int i, vptr_fieldno;
651   struct type *basetype = NULL;
652
653   children[v_public] = 0;
654   children[v_private] = 0;
655   children[v_protected] = 0;
656
657   vptr_fieldno = get_vptr_fieldno (type, &basetype);
658   for (i = TYPE_N_BASECLASSES (type); i < TYPE_NFIELDS (type); i++)
659     {
660       /* If we have a virtual table pointer, omit it.  Even if virtual
661          table pointers are not specifically marked in the debug info,
662          they should be artificial.  */
663       if ((type == basetype && i == vptr_fieldno)
664           || TYPE_FIELD_ARTIFICIAL (type, i))
665         continue;
666
667       if (TYPE_FIELD_PROTECTED (type, i))
668         children[v_protected]++;
669       else if (TYPE_FIELD_PRIVATE (type, i))
670         children[v_private]++;
671       else
672         children[v_public]++;
673     }
674 }
675
676 static std::string
677 cplus_name_of_variable (const struct varobj *parent)
678 {
679   return c_name_of_variable (parent);
680 }
681
682 enum accessibility { private_field, protected_field, public_field };
683
684 /* Check if field INDEX of TYPE has the specified accessibility.
685    Return 0 if so and 1 otherwise.  */
686
687 static int 
688 match_accessibility (struct type *type, int index, enum accessibility acc)
689 {
690   if (acc == private_field && TYPE_FIELD_PRIVATE (type, index))
691     return 1;
692   else if (acc == protected_field && TYPE_FIELD_PROTECTED (type, index))
693     return 1;
694   else if (acc == public_field && !TYPE_FIELD_PRIVATE (type, index)
695            && !TYPE_FIELD_PROTECTED (type, index))
696     return 1;
697   else
698     return 0;
699 }
700
701 static void
702 cplus_describe_child (const struct varobj *parent, int index,
703                       std::string *cname, struct value **cvalue, struct type **ctype,
704                       std::string *cfull_expression)
705 {
706   struct value *value;
707   struct type *type;
708   int was_ptr;
709   int lookup_actual_type = 0;
710   const char *parent_expression = NULL;
711   const struct varobj *var;
712   struct value_print_options opts;
713
714   if (cname)
715     *cname = std::string ();
716   if (cvalue)
717     *cvalue = NULL;
718   if (ctype)
719     *ctype = NULL;
720   if (cfull_expression)
721     *cfull_expression = std::string ();
722
723   get_user_print_options (&opts);
724
725   var = (CPLUS_FAKE_CHILD (parent)) ? parent->parent : parent;
726   if (opts.objectprint)
727     lookup_actual_type = (TYPE_IS_REFERENCE (var->type)
728                           || TYPE_CODE (var->type) == TYPE_CODE_PTR);
729   value = var->value.get ();
730   type = varobj_get_value_type (var);
731   if (cfull_expression)
732     parent_expression
733       = varobj_get_path_expr (varobj_get_path_expr_parent (var));
734
735   adjust_value_for_child_access (&value, &type, &was_ptr, lookup_actual_type);
736
737   if (TYPE_CODE (type) == TYPE_CODE_STRUCT
738       || TYPE_CODE (type) == TYPE_CODE_UNION)
739     {
740       const char *join = was_ptr ? "->" : ".";
741
742       if (CPLUS_FAKE_CHILD (parent))
743         {
744           /* The fields of the class type are ordered as they
745              appear in the class.  We are given an index for a
746              particular access control type ("public","protected",
747              or "private").  We must skip over fields that don't
748              have the access control we are looking for to properly
749              find the indexed field.  */
750           int type_index = TYPE_N_BASECLASSES (type);
751           enum accessibility acc = public_field;
752           int vptr_fieldno;
753           struct type *basetype = NULL;
754           const char *field_name;
755
756           vptr_fieldno = get_vptr_fieldno (type, &basetype);
757           if (parent->name == "private")
758             acc = private_field;
759           else if (parent->name == "protected")
760             acc = protected_field;
761
762           while (index >= 0)
763             {
764               if ((type == basetype && type_index == vptr_fieldno)
765                   || TYPE_FIELD_ARTIFICIAL (type, type_index))
766                 ; /* ignore vptr */
767               else if (match_accessibility (type, type_index, acc))
768                     --index;
769                   ++type_index;
770             }
771           --type_index;
772
773           /* If the type is anonymous and the field has no name,
774              set an appopriate name.  */
775           field_name = TYPE_FIELD_NAME (type, type_index);
776           if (field_name == NULL || *field_name == '\0')
777             {
778               if (cname)
779                 {
780                   if (TYPE_CODE (TYPE_FIELD_TYPE (type, type_index))
781                       == TYPE_CODE_STRUCT)
782                     *cname = ANONYMOUS_STRUCT_NAME;
783                   else if (TYPE_CODE (TYPE_FIELD_TYPE (type, type_index))
784                            == TYPE_CODE_UNION)
785                     *cname = ANONYMOUS_UNION_NAME;
786                 }
787
788               if (cfull_expression)
789                 *cfull_expression = std::string ();
790             }
791           else
792             {
793               if (cname)
794                 *cname = TYPE_FIELD_NAME (type, type_index);
795
796               if (cfull_expression)
797                 *cfull_expression
798                   = string_printf ("((%s)%s%s)", parent_expression, join,
799                                    field_name);
800             }
801
802           if (cvalue && value)
803             *cvalue = value_struct_element_index (value, type_index);
804
805           if (ctype)
806             *ctype = TYPE_FIELD_TYPE (type, type_index);
807         }
808       else if (index < TYPE_N_BASECLASSES (type))
809         {
810           /* This is a baseclass.  */
811           if (cname)
812             *cname = TYPE_FIELD_NAME (type, index);
813
814           if (cvalue && value)
815             *cvalue = value_cast (TYPE_FIELD_TYPE (type, index), value);
816
817           if (ctype)
818             {
819               *ctype = TYPE_FIELD_TYPE (type, index);
820             }
821
822           if (cfull_expression)
823             {
824               const char *ptr = was_ptr ? "*" : "";
825
826               /* Cast the parent to the base' type.  Note that in gdb,
827                  expression like 
828                          (Base1)d
829                  will create an lvalue, for all appearences, so we don't
830                  need to use more fancy:
831                          *(Base1*)(&d)
832                  construct.
833
834                  When we are in the scope of the base class or of one
835                  of its children, the type field name will be interpreted
836                  as a constructor, if it exists.  Therefore, we must
837                  indicate that the name is a class name by using the
838                  'class' keyword.  See PR mi/11912  */
839               *cfull_expression = string_printf ("(%s(class %s%s) %s)",
840                                                  ptr,
841                                                  TYPE_FIELD_NAME (type, index),
842                                                  ptr,
843                                                  parent_expression);
844             }
845         }
846       else
847         {
848           const char *access = NULL;
849           int children[3];
850
851           cplus_class_num_children (type, children);
852
853           /* Everything beyond the baseclasses can
854              only be "public", "private", or "protected"
855
856              The special "fake" children are always output by varobj in
857              this order.  So if INDEX == 2, it MUST be "protected".  */
858           index -= TYPE_N_BASECLASSES (type);
859           switch (index)
860             {
861             case 0:
862               if (children[v_public] > 0)
863                 access = "public";
864               else if (children[v_private] > 0)
865                 access = "private";
866               else 
867                 access = "protected";
868               break;
869             case 1:
870               if (children[v_public] > 0)
871                 {
872                   if (children[v_private] > 0)
873                     access = "private";
874                   else
875                     access = "protected";
876                 }
877               else if (children[v_private] > 0)
878                 access = "protected";
879               break;
880             case 2:
881               /* Must be protected.  */
882               access = "protected";
883               break;
884             default:
885               /* error!  */
886               break;
887             }
888
889           gdb_assert (access);
890           if (cname)
891             *cname = access;
892
893           /* Value and type and full expression are null here.  */
894         }
895     }
896   else
897     {
898       c_describe_child (parent, index, cname, cvalue, ctype, cfull_expression);
899     }  
900 }
901
902 static std::string
903 cplus_name_of_child (const struct varobj *parent, int index)
904 {
905   std::string name;
906
907   cplus_describe_child (parent, index, &name, NULL, NULL, NULL);
908   return name;
909 }
910
911 static std::string
912 cplus_path_expr_of_child (const struct varobj *child)
913 {
914   std::string path_expr;
915
916   cplus_describe_child (child->parent, child->index, NULL, NULL, NULL, 
917                         &path_expr);
918   return path_expr;
919 }
920
921 static struct value *
922 cplus_value_of_child (const struct varobj *parent, int index)
923 {
924   struct value *value = NULL;
925
926   cplus_describe_child (parent, index, NULL, &value, NULL, NULL);
927   return value;
928 }
929
930 static struct type *
931 cplus_type_of_child (const struct varobj *parent, int index)
932 {
933   struct type *type = NULL;
934
935   cplus_describe_child (parent, index, NULL, NULL, &type, NULL);
936   return type;
937 }
938
939 static std::string
940 cplus_value_of_variable (const struct varobj *var,
941                          enum varobj_display_formats format)
942 {
943
944   /* If we have one of our special types, don't print out
945      any value.  */
946   if (CPLUS_FAKE_CHILD (var))
947     return std::string ();
948
949   return c_value_of_variable (var, format);
950 }
951 \f
952
953 /* varobj operations for c++.  */
954
955 const struct lang_varobj_ops cplus_varobj_ops =
956 {
957    cplus_number_of_children,
958    cplus_name_of_variable,
959    cplus_name_of_child,
960    cplus_path_expr_of_child,
961    cplus_value_of_child,
962    cplus_type_of_child,
963    cplus_value_of_variable,
964    varobj_default_value_is_changeable_p,
965    NULL, /* value_has_mutated */
966    c_is_path_expr_parent  /* is_path_expr_parent */
967 };
968
969 \f