Upgrade GDB from 7.4.1 to 7.6.1 on the vendor branch
[dragonfly.git] / contrib / gdb-7 / gdb / cp-support.c
1 /* Helper routines for C++ support in GDB.
2    Copyright (C) 2002-2013 Free Software Foundation, Inc.
3
4    Contributed by MontaVista Software.
5
6    This file is part of GDB.
7
8    This program is free software; you can redistribute it and/or modify
9    it under the terms of the GNU General Public License as published by
10    the Free Software Foundation; either version 3 of the License, or
11    (at your option) any later version.
12
13    This program is distributed in the hope that it will be useful,
14    but WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16    GNU General Public License for more details.
17
18    You should have received a copy of the GNU General Public License
19    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
20
21 #include "defs.h"
22 #include "cp-support.h"
23 #include "gdb_string.h"
24 #include "demangle.h"
25 #include "gdb_assert.h"
26 #include "gdbcmd.h"
27 #include "dictionary.h"
28 #include "objfiles.h"
29 #include "frame.h"
30 #include "symtab.h"
31 #include "block.h"
32 #include "complaints.h"
33 #include "gdbtypes.h"
34 #include "exceptions.h"
35 #include "expression.h"
36 #include "value.h"
37 #include "cp-abi.h"
38
39 #include "safe-ctype.h"
40
41 #include "psymtab.h"
42
43 #define d_left(dc) (dc)->u.s_binary.left
44 #define d_right(dc) (dc)->u.s_binary.right
45
46 /* Functions related to demangled name parsing.  */
47
48 static unsigned int cp_find_first_component_aux (const char *name,
49                                                  int permissive);
50
51 static void demangled_name_complaint (const char *name);
52
53 /* Functions/variables related to overload resolution.  */
54
55 static int sym_return_val_size = -1;
56 static int sym_return_val_index;
57 static struct symbol **sym_return_val;
58
59 static void overload_list_add_symbol (struct symbol *sym,
60                                       const char *oload_name);
61
62 static void make_symbol_overload_list_using (const char *func_name,
63                                              const char *namespace);
64
65 static void make_symbol_overload_list_qualified (const char *func_name);
66
67 /* The list of "maint cplus" commands.  */
68
69 struct cmd_list_element *maint_cplus_cmd_list = NULL;
70
71 /* The actual commands.  */
72
73 static void maint_cplus_command (char *arg, int from_tty);
74 static void first_component_command (char *arg, int from_tty);
75
76 /* A list of typedefs which should not be substituted by replace_typedefs.  */
77 static const char * const ignore_typedefs[] =
78   {
79     "std::istream", "std::iostream", "std::ostream", "std::string"
80   };
81
82 static void
83   replace_typedefs (struct demangle_parse_info *info,
84                     struct demangle_component *ret_comp,
85                     canonicalization_ftype *finder,
86                     void *data);
87
88 /* A convenience function to copy STRING into OBSTACK, returning a pointer
89    to the newly allocated string and saving the number of bytes saved in LEN.
90
91    It does not copy the terminating '\0' byte!  */
92
93 static char *
94 copy_string_to_obstack (struct obstack *obstack, const char *string,
95                         long *len)
96 {
97   *len = strlen (string);
98   return obstack_copy (obstack, string, *len);
99 }
100
101 /* A cleanup wrapper for cp_demangled_name_parse_free.  */
102
103 static void
104 do_demangled_name_parse_free_cleanup (void *data)
105 {
106   struct demangle_parse_info *info = (struct demangle_parse_info *) data;
107
108   cp_demangled_name_parse_free (info);
109 }
110
111 /* Create a cleanup for C++ name parsing.  */
112
113 struct cleanup *
114 make_cleanup_cp_demangled_name_parse_free (struct demangle_parse_info *info)
115 {
116   return make_cleanup (do_demangled_name_parse_free_cleanup, info);
117 }
118
119 /* Return 1 if STRING is clearly already in canonical form.  This
120    function is conservative; things which it does not recognize are
121    assumed to be non-canonical, and the parser will sort them out
122    afterwards.  This speeds up the critical path for alphanumeric
123    identifiers.  */
124
125 static int
126 cp_already_canonical (const char *string)
127 {
128   /* Identifier start character [a-zA-Z_].  */
129   if (!ISIDST (string[0]))
130     return 0;
131
132   /* These are the only two identifiers which canonicalize to other
133      than themselves or an error: unsigned -> unsigned int and
134      signed -> int.  */
135   if (string[0] == 'u' && strcmp (&string[1], "nsigned") == 0)
136     return 0;
137   else if (string[0] == 's' && strcmp (&string[1], "igned") == 0)
138     return 0;
139
140   /* Identifier character [a-zA-Z0-9_].  */
141   while (ISIDNUM (string[1]))
142     string++;
143
144   if (string[1] == '\0')
145     return 1;
146   else
147     return 0;
148 }
149
150 /* Inspect the given RET_COMP for its type.  If it is a typedef,
151    replace the node with the typedef's tree.
152
153    Returns 1 if any typedef substitutions were made, 0 otherwise.  */
154
155 static int
156 inspect_type (struct demangle_parse_info *info,
157               struct demangle_component *ret_comp,
158               canonicalization_ftype *finder,
159               void *data)
160 {
161   int i;
162   char *name;
163   struct symbol *sym;
164   volatile struct gdb_exception except;
165
166   /* Copy the symbol's name from RET_COMP and look it up
167      in the symbol table.  */
168   name = (char *) alloca (ret_comp->u.s_name.len + 1);
169   memcpy (name, ret_comp->u.s_name.s, ret_comp->u.s_name.len);
170   name[ret_comp->u.s_name.len] = '\0';
171
172   /* Ignore any typedefs that should not be substituted.  */
173   for (i = 0; i < ARRAY_SIZE (ignore_typedefs); ++i)
174     {
175       if (strcmp (name, ignore_typedefs[i]) == 0)
176         return 0;
177     }
178
179   sym = NULL;
180   TRY_CATCH (except, RETURN_MASK_ALL)
181   {
182     sym = lookup_symbol (name, 0, VAR_DOMAIN, 0);
183   }
184
185   if (except.reason >= 0 && sym != NULL)
186     {
187       struct type *otype = SYMBOL_TYPE (sym);
188
189       if (finder != NULL)
190         {
191           const char *new_name = (*finder) (otype, data);
192
193           if (new_name != NULL)
194             {
195               ret_comp->u.s_name.s = new_name;
196               ret_comp->u.s_name.len = strlen (new_name);
197               return 1;
198             }
199
200           return 0;
201         }
202
203       /* If the type is a typedef, replace it.  */
204       if (TYPE_CODE (otype) == TYPE_CODE_TYPEDEF)
205         {
206           long len;
207           int is_anon;
208           struct type *type;
209           struct demangle_parse_info *i;
210           struct ui_file *buf;
211
212           /* Get the real type of the typedef.  */
213           type = check_typedef (otype);
214
215           is_anon = (TYPE_TAG_NAME (type) == NULL
216                      && (TYPE_CODE (type) == TYPE_CODE_ENUM
217                          || TYPE_CODE (type) == TYPE_CODE_STRUCT
218                          || TYPE_CODE (type) == TYPE_CODE_UNION));
219           if (is_anon)
220             {
221               struct type *last = otype;
222
223               /* Find the last typedef for the type.  */
224               while (TYPE_TARGET_TYPE (last) != NULL
225                      && (TYPE_CODE (TYPE_TARGET_TYPE (last))
226                          == TYPE_CODE_TYPEDEF))
227                 last = TYPE_TARGET_TYPE (last);
228
229               /* If there is only one typedef for this anonymous type,
230                  do not substitute it.  */
231               if (type == otype)
232                 return 0;
233               else
234                 /* Use the last typedef seen as the type for this
235                    anonymous type.  */
236                 type = last;
237             }
238
239           buf = mem_fileopen ();
240           TRY_CATCH (except, RETURN_MASK_ERROR)
241           {
242             type_print (type, "", buf, -1);
243           }
244
245           /* If type_print threw an exception, there is little point
246              in continuing, so just bow out gracefully.  */
247           if (except.reason < 0)
248             {
249               ui_file_delete (buf);
250               return 0;
251             }
252
253           name = ui_file_obsavestring (buf, &info->obstack, &len);
254           ui_file_delete (buf);
255
256           /* Turn the result into a new tree.  Note that this
257              tree will contain pointers into NAME, so NAME cannot
258              be free'd until all typedef conversion is done and
259              the final result is converted into a string.  */
260           i = cp_demangled_name_to_comp (name, NULL);
261           if (i != NULL)
262             {
263               /* Merge the two trees.  */
264               cp_merge_demangle_parse_infos (info, ret_comp, i);
265
266               /* Replace any newly introduced typedefs -- but not
267                  if the type is anonymous (that would lead to infinite
268                  looping).  */
269               if (!is_anon)
270                 replace_typedefs (info, ret_comp, finder, data);
271             }
272           else
273             {
274               /* This shouldn't happen unless the type printer has
275                  output something that the name parser cannot grok.
276                  Nonetheless, an ounce of prevention...
277
278                  Canonicalize the name again, and store it in the
279                  current node (RET_COMP).  */
280               char *canon = cp_canonicalize_string_no_typedefs (name);
281
282               if (canon != NULL)
283                 {
284                   /* Copy the canonicalization into the obstack and
285                      free CANON.  */
286                   name = copy_string_to_obstack (&info->obstack, canon, &len);
287                   xfree (canon);
288                 }
289
290               ret_comp->u.s_name.s = name;
291               ret_comp->u.s_name.len = len;
292             }
293
294           return 1;
295         }
296     }
297
298   return 0;
299 }
300
301 /* Replace any typedefs appearing in the qualified name
302    (DEMANGLE_COMPONENT_QUAL_NAME) represented in RET_COMP for the name parse
303    given in INFO.  */
304
305 static void
306 replace_typedefs_qualified_name (struct demangle_parse_info *info,
307                                  struct demangle_component *ret_comp,
308                                  canonicalization_ftype *finder,
309                                  void *data)
310 {
311   long len;
312   char *name;
313   struct ui_file *buf = mem_fileopen ();
314   struct demangle_component *comp = ret_comp;
315
316   /* Walk each node of the qualified name, reconstructing the name of
317      this element.  With every node, check for any typedef substitutions.
318      If a substitution has occurred, replace the qualified name node
319      with a DEMANGLE_COMPONENT_NAME node representing the new, typedef-
320      substituted name.  */
321   while (comp->type == DEMANGLE_COMPONENT_QUAL_NAME)
322     {
323       if (d_left (comp)->type == DEMANGLE_COMPONENT_NAME)
324         {
325           struct demangle_component new;
326
327           ui_file_write (buf, d_left (comp)->u.s_name.s,
328                          d_left (comp)->u.s_name.len);
329           name = ui_file_obsavestring (buf, &info->obstack, &len);
330           new.type = DEMANGLE_COMPONENT_NAME;
331           new.u.s_name.s = name;
332           new.u.s_name.len = len;
333           if (inspect_type (info, &new, finder, data))
334             {
335               char *n, *s;
336               long slen;
337
338               /* A typedef was substituted in NEW.  Convert it to a
339                  string and replace the top DEMANGLE_COMPONENT_QUAL_NAME
340                  node.  */
341
342               ui_file_rewind (buf);
343               n = cp_comp_to_string (&new, 100);
344               if (n == NULL)
345                 {
346                   /* If something went astray, abort typedef substitutions.  */
347                   ui_file_delete (buf);
348                   return;
349                 }
350
351               s = copy_string_to_obstack (&info->obstack, n, &slen);
352               xfree (n);
353
354               d_left (ret_comp)->type = DEMANGLE_COMPONENT_NAME;
355               d_left (ret_comp)->u.s_name.s = s;
356               d_left (ret_comp)->u.s_name.len = slen;
357               d_right (ret_comp) = d_right (comp);
358               comp = ret_comp;
359               continue;
360             }
361         }
362       else
363         {
364           /* The current node is not a name, so simply replace any
365              typedefs in it.  Then print it to the stream to continue
366              checking for more typedefs in the tree.  */
367           replace_typedefs (info, d_left (comp), finder, data);
368           name = cp_comp_to_string (d_left (comp), 100);
369           if (name == NULL)
370             {
371               /* If something went astray, abort typedef substitutions.  */
372               ui_file_delete (buf);
373               return;
374             }
375           fputs_unfiltered (name, buf);
376           xfree (name);
377         }
378
379       ui_file_write (buf, "::", 2);
380       comp = d_right (comp);
381     }
382
383   /* If the next component is DEMANGLE_COMPONENT_NAME, save the qualified
384      name assembled above and append the name given by COMP.  Then use this
385      reassembled name to check for a typedef.  */
386
387   if (comp->type == DEMANGLE_COMPONENT_NAME)
388     {
389       ui_file_write (buf, comp->u.s_name.s, comp->u.s_name.len);
390       name = ui_file_obsavestring (buf, &info->obstack, &len);
391
392       /* Replace the top (DEMANGLE_COMPONENT_QUAL_NAME) node
393          with a DEMANGLE_COMPONENT_NAME node containing the whole
394          name.  */
395       ret_comp->type = DEMANGLE_COMPONENT_NAME;
396       ret_comp->u.s_name.s = name;
397       ret_comp->u.s_name.len = len;
398       inspect_type (info, ret_comp, finder, data);
399     }
400   else
401     replace_typedefs (info, comp, finder, data);
402
403   ui_file_delete (buf);
404 }
405
406
407 /* A function to check const and volatile qualifiers for argument types.
408
409    "Parameter declarations that differ only in the presence
410    or absence of `const' and/or `volatile' are equivalent."
411    C++ Standard N3290, clause 13.1.3 #4.  */
412
413 static void
414 check_cv_qualifiers (struct demangle_component *ret_comp)
415 {
416   while (d_left (ret_comp) != NULL
417          && (d_left (ret_comp)->type == DEMANGLE_COMPONENT_CONST
418              || d_left (ret_comp)->type == DEMANGLE_COMPONENT_VOLATILE))
419     {
420       d_left (ret_comp) = d_left (d_left (ret_comp));
421     }
422 }
423
424 /* Walk the parse tree given by RET_COMP, replacing any typedefs with
425    their basic types.  */
426
427 static void
428 replace_typedefs (struct demangle_parse_info *info,
429                   struct demangle_component *ret_comp,
430                   canonicalization_ftype *finder,
431                   void *data)
432 {
433   if (ret_comp)
434     {
435       if (finder != NULL
436           && (ret_comp->type == DEMANGLE_COMPONENT_NAME
437               || ret_comp->type == DEMANGLE_COMPONENT_QUAL_NAME
438               || ret_comp->type == DEMANGLE_COMPONENT_TEMPLATE
439               || ret_comp->type == DEMANGLE_COMPONENT_BUILTIN_TYPE))
440         {
441           char *local_name = cp_comp_to_string (ret_comp, 10);
442
443           if (local_name != NULL)
444             {
445               struct symbol *sym;
446               volatile struct gdb_exception except;
447
448               sym = NULL;
449               TRY_CATCH (except, RETURN_MASK_ALL)
450                 {
451                   sym = lookup_symbol (local_name, 0, VAR_DOMAIN, 0);
452                 }
453               xfree (local_name);
454
455               if (except.reason >= 0 && sym != NULL)
456                 {
457                   struct type *otype = SYMBOL_TYPE (sym);
458                   const char *new_name = (*finder) (otype, data);
459
460                   if (new_name != NULL)
461                     {
462                       ret_comp->type = DEMANGLE_COMPONENT_NAME;
463                       ret_comp->u.s_name.s = new_name;
464                       ret_comp->u.s_name.len = strlen (new_name);
465                       return;
466                     }
467                 }
468             }
469         }
470
471       switch (ret_comp->type)
472         {
473         case DEMANGLE_COMPONENT_ARGLIST:
474           check_cv_qualifiers (ret_comp);
475           /* Fall through */
476
477         case DEMANGLE_COMPONENT_FUNCTION_TYPE:
478         case DEMANGLE_COMPONENT_TEMPLATE:
479         case DEMANGLE_COMPONENT_TEMPLATE_ARGLIST:
480         case DEMANGLE_COMPONENT_TYPED_NAME:
481           replace_typedefs (info, d_left (ret_comp), finder, data);
482           replace_typedefs (info, d_right (ret_comp), finder, data);
483           break;
484
485         case DEMANGLE_COMPONENT_NAME:
486           inspect_type (info, ret_comp, finder, data);
487           break;
488
489         case DEMANGLE_COMPONENT_QUAL_NAME:
490           replace_typedefs_qualified_name (info, ret_comp, finder, data);
491           break;
492
493         case DEMANGLE_COMPONENT_LOCAL_NAME:
494         case DEMANGLE_COMPONENT_CTOR:
495         case DEMANGLE_COMPONENT_ARRAY_TYPE:
496         case DEMANGLE_COMPONENT_PTRMEM_TYPE:
497           replace_typedefs (info, d_right (ret_comp), finder, data);
498           break;
499
500         case DEMANGLE_COMPONENT_CONST:
501         case DEMANGLE_COMPONENT_RESTRICT:
502         case DEMANGLE_COMPONENT_VOLATILE:
503         case DEMANGLE_COMPONENT_VOLATILE_THIS:
504         case DEMANGLE_COMPONENT_CONST_THIS:
505         case DEMANGLE_COMPONENT_RESTRICT_THIS:
506         case DEMANGLE_COMPONENT_POINTER:
507         case DEMANGLE_COMPONENT_REFERENCE:
508           replace_typedefs (info, d_left (ret_comp), finder, data);
509           break;
510
511         default:
512           break;
513         }
514     }
515 }
516
517 /* Parse STRING and convert it to canonical form, resolving any typedefs.
518    If parsing fails, or if STRING is already canonical, return NULL.
519    Otherwise return the canonical form.  The return value is allocated via
520    xmalloc.  If FINDER is not NULL, then type components are passed to
521    FINDER to be looked up.  DATA is passed verbatim to FINDER.  */
522
523 char *
524 cp_canonicalize_string_full (const char *string,
525                              canonicalization_ftype *finder,
526                              void *data)
527 {
528   char *ret;
529   unsigned int estimated_len;
530   struct demangle_parse_info *info;
531
532   ret = NULL;
533   estimated_len = strlen (string) * 2;
534   info = cp_demangled_name_to_comp (string, NULL);
535   if (info != NULL)
536     {
537       /* Replace all the typedefs in the tree.  */
538       replace_typedefs (info, info->tree, finder, data);
539
540       /* Convert the tree back into a string.  */
541       ret = cp_comp_to_string (info->tree, estimated_len);
542       gdb_assert (ret != NULL);
543
544       /* Free the parse information.  */
545       cp_demangled_name_parse_free (info);
546
547       /* Finally, compare the original string with the computed
548          name, returning NULL if they are the same.  */
549       if (strcmp (string, ret) == 0)
550         {
551           xfree (ret);
552           return NULL;
553         }
554     }
555
556   return ret;
557 }
558
559 /* Like cp_canonicalize_string_full, but always passes NULL for
560    FINDER.  */
561
562 char *
563 cp_canonicalize_string_no_typedefs (const char *string)
564 {
565   return cp_canonicalize_string_full (string, NULL, NULL);
566 }
567
568 /* Parse STRING and convert it to canonical form.  If parsing fails,
569    or if STRING is already canonical, return NULL.  Otherwise return
570    the canonical form.  The return value is allocated via xmalloc.  */
571
572 char *
573 cp_canonicalize_string (const char *string)
574 {
575   struct demangle_parse_info *info;
576   unsigned int estimated_len;
577   char *ret;
578
579   if (cp_already_canonical (string))
580     return NULL;
581
582   info = cp_demangled_name_to_comp (string, NULL);
583   if (info == NULL)
584     return NULL;
585
586   estimated_len = strlen (string) * 2;
587   ret = cp_comp_to_string (info->tree, estimated_len);
588   cp_demangled_name_parse_free (info);
589
590   if (ret == NULL)
591     {
592       warning (_("internal error: string \"%s\" failed to be canonicalized"),
593                string);
594       return NULL;
595     }
596
597   if (strcmp (string, ret) == 0)
598     {
599       xfree (ret);
600       return NULL;
601     }
602
603   return ret;
604 }
605
606 /* Convert a mangled name to a demangle_component tree.  *MEMORY is
607    set to the block of used memory that should be freed when finished
608    with the tree.  DEMANGLED_P is set to the char * that should be
609    freed when finished with the tree, or NULL if none was needed.
610    OPTIONS will be passed to the demangler.  */
611
612 static struct demangle_parse_info *
613 mangled_name_to_comp (const char *mangled_name, int options,
614                       void **memory, char **demangled_p)
615 {
616   char *demangled_name;
617   struct demangle_parse_info *info;
618
619   /* If it looks like a v3 mangled name, then try to go directly
620      to trees.  */
621   if (mangled_name[0] == '_' && mangled_name[1] == 'Z')
622     {
623       struct demangle_component *ret;
624
625       ret = cplus_demangle_v3_components (mangled_name,
626                                           options, memory);
627       if (ret)
628         {
629           info = cp_new_demangle_parse_info ();
630           info->tree = ret;
631           *demangled_p = NULL;
632           return info;
633         }
634     }
635
636   /* If it doesn't, or if that failed, then try to demangle the
637      name.  */
638   demangled_name = cplus_demangle (mangled_name, options);
639   if (demangled_name == NULL)
640    return NULL;
641   
642   /* If we could demangle the name, parse it to build the component
643      tree.  */
644   info = cp_demangled_name_to_comp (demangled_name, NULL);
645
646   if (info == NULL)
647     {
648       xfree (demangled_name);
649       return NULL;
650     }
651
652   *demangled_p = demangled_name;
653   return info;
654 }
655
656 /* Return the name of the class containing method PHYSNAME.  */
657
658 char *
659 cp_class_name_from_physname (const char *physname)
660 {
661   void *storage = NULL;
662   char *demangled_name = NULL, *ret;
663   struct demangle_component *ret_comp, *prev_comp, *cur_comp;
664   struct demangle_parse_info *info;
665   int done;
666
667   info = mangled_name_to_comp (physname, DMGL_ANSI,
668                                &storage, &demangled_name);
669   if (info == NULL)
670     return NULL;
671
672   done = 0;
673   ret_comp = info->tree;
674
675   /* First strip off any qualifiers, if we have a function or
676      method.  */
677   while (!done)
678     switch (ret_comp->type)
679       {
680       case DEMANGLE_COMPONENT_CONST:
681       case DEMANGLE_COMPONENT_RESTRICT:
682       case DEMANGLE_COMPONENT_VOLATILE:
683       case DEMANGLE_COMPONENT_CONST_THIS:
684       case DEMANGLE_COMPONENT_RESTRICT_THIS:
685       case DEMANGLE_COMPONENT_VOLATILE_THIS:
686       case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL:
687         ret_comp = d_left (ret_comp);
688         break;
689       default:
690         done = 1;
691         break;
692       }
693
694   /* If what we have now is a function, discard the argument list.  */
695   if (ret_comp->type == DEMANGLE_COMPONENT_TYPED_NAME)
696     ret_comp = d_left (ret_comp);
697
698   /* If what we have now is a template, strip off the template
699      arguments.  The left subtree may be a qualified name.  */
700   if (ret_comp->type == DEMANGLE_COMPONENT_TEMPLATE)
701     ret_comp = d_left (ret_comp);
702
703   /* What we have now should be a name, possibly qualified.
704      Additional qualifiers could live in the left subtree or the right
705      subtree.  Find the last piece.  */
706   done = 0;
707   prev_comp = NULL;
708   cur_comp = ret_comp;
709   while (!done)
710     switch (cur_comp->type)
711       {
712       case DEMANGLE_COMPONENT_QUAL_NAME:
713       case DEMANGLE_COMPONENT_LOCAL_NAME:
714         prev_comp = cur_comp;
715         cur_comp = d_right (cur_comp);
716         break;
717       case DEMANGLE_COMPONENT_TEMPLATE:
718       case DEMANGLE_COMPONENT_NAME:
719       case DEMANGLE_COMPONENT_CTOR:
720       case DEMANGLE_COMPONENT_DTOR:
721       case DEMANGLE_COMPONENT_OPERATOR:
722       case DEMANGLE_COMPONENT_EXTENDED_OPERATOR:
723         done = 1;
724         break;
725       default:
726         done = 1;
727         cur_comp = NULL;
728         break;
729       }
730
731   ret = NULL;
732   if (cur_comp != NULL && prev_comp != NULL)
733     {
734       /* We want to discard the rightmost child of PREV_COMP.  */
735       *prev_comp = *d_left (prev_comp);
736       /* The ten is completely arbitrary; we don't have a good
737          estimate.  */
738       ret = cp_comp_to_string (ret_comp, 10);
739     }
740
741   xfree (storage);
742   xfree (demangled_name);
743   cp_demangled_name_parse_free (info);
744   return ret;
745 }
746
747 /* Return the child of COMP which is the basename of a method,
748    variable, et cetera.  All scope qualifiers are discarded, but
749    template arguments will be included.  The component tree may be
750    modified.  */
751
752 static struct demangle_component *
753 unqualified_name_from_comp (struct demangle_component *comp)
754 {
755   struct demangle_component *ret_comp = comp, *last_template;
756   int done;
757
758   done = 0;
759   last_template = NULL;
760   while (!done)
761     switch (ret_comp->type)
762       {
763       case DEMANGLE_COMPONENT_QUAL_NAME:
764       case DEMANGLE_COMPONENT_LOCAL_NAME:
765         ret_comp = d_right (ret_comp);
766         break;
767       case DEMANGLE_COMPONENT_TYPED_NAME:
768         ret_comp = d_left (ret_comp);
769         break;
770       case DEMANGLE_COMPONENT_TEMPLATE:
771         gdb_assert (last_template == NULL);
772         last_template = ret_comp;
773         ret_comp = d_left (ret_comp);
774         break;
775       case DEMANGLE_COMPONENT_CONST:
776       case DEMANGLE_COMPONENT_RESTRICT:
777       case DEMANGLE_COMPONENT_VOLATILE:
778       case DEMANGLE_COMPONENT_CONST_THIS:
779       case DEMANGLE_COMPONENT_RESTRICT_THIS:
780       case DEMANGLE_COMPONENT_VOLATILE_THIS:
781       case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL:
782         ret_comp = d_left (ret_comp);
783         break;
784       case DEMANGLE_COMPONENT_NAME:
785       case DEMANGLE_COMPONENT_CTOR:
786       case DEMANGLE_COMPONENT_DTOR:
787       case DEMANGLE_COMPONENT_OPERATOR:
788       case DEMANGLE_COMPONENT_EXTENDED_OPERATOR:
789         done = 1;
790         break;
791       default:
792         return NULL;
793         break;
794       }
795
796   if (last_template)
797     {
798       d_left (last_template) = ret_comp;
799       return last_template;
800     }
801
802   return ret_comp;
803 }
804
805 /* Return the name of the method whose linkage name is PHYSNAME.  */
806
807 char *
808 method_name_from_physname (const char *physname)
809 {
810   void *storage = NULL;
811   char *demangled_name = NULL, *ret;
812   struct demangle_component *ret_comp;
813   struct demangle_parse_info *info;
814
815   info = mangled_name_to_comp (physname, DMGL_ANSI,
816                                &storage, &demangled_name);
817   if (info == NULL)
818     return NULL;
819
820   ret_comp = unqualified_name_from_comp (info->tree);
821
822   ret = NULL;
823   if (ret_comp != NULL)
824     /* The ten is completely arbitrary; we don't have a good
825        estimate.  */
826     ret = cp_comp_to_string (ret_comp, 10);
827
828   xfree (storage);
829   xfree (demangled_name);
830   cp_demangled_name_parse_free (info);
831   return ret;
832 }
833
834 /* If FULL_NAME is the demangled name of a C++ function (including an
835    arg list, possibly including namespace/class qualifications),
836    return a new string containing only the function name (without the
837    arg list/class qualifications).  Otherwise, return NULL.  The
838    caller is responsible for freeing the memory in question.  */
839
840 char *
841 cp_func_name (const char *full_name)
842 {
843   char *ret;
844   struct demangle_component *ret_comp;
845   struct demangle_parse_info *info;
846
847   info = cp_demangled_name_to_comp (full_name, NULL);
848   if (!info)
849     return NULL;
850
851   ret_comp = unqualified_name_from_comp (info->tree);
852
853   ret = NULL;
854   if (ret_comp != NULL)
855     ret = cp_comp_to_string (ret_comp, 10);
856
857   cp_demangled_name_parse_free (info);
858   return ret;
859 }
860
861 /* DEMANGLED_NAME is the name of a function, including parameters and
862    (optionally) a return type.  Return the name of the function without
863    parameters or return type, or NULL if we can not parse the name.  */
864
865 char *
866 cp_remove_params (const char *demangled_name)
867 {
868   int done = 0;
869   struct demangle_component *ret_comp;
870   struct demangle_parse_info *info;
871   char *ret = NULL;
872
873   if (demangled_name == NULL)
874     return NULL;
875
876   info = cp_demangled_name_to_comp (demangled_name, NULL);
877   if (info == NULL)
878     return NULL;
879
880   /* First strip off any qualifiers, if we have a function or method.  */
881   ret_comp = info->tree;
882   while (!done)
883     switch (ret_comp->type)
884       {
885       case DEMANGLE_COMPONENT_CONST:
886       case DEMANGLE_COMPONENT_RESTRICT:
887       case DEMANGLE_COMPONENT_VOLATILE:
888       case DEMANGLE_COMPONENT_CONST_THIS:
889       case DEMANGLE_COMPONENT_RESTRICT_THIS:
890       case DEMANGLE_COMPONENT_VOLATILE_THIS:
891       case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL:
892         ret_comp = d_left (ret_comp);
893         break;
894       default:
895         done = 1;
896         break;
897       }
898
899   /* What we have now should be a function.  Return its name.  */
900   if (ret_comp->type == DEMANGLE_COMPONENT_TYPED_NAME)
901     ret = cp_comp_to_string (d_left (ret_comp), 10);
902
903   cp_demangled_name_parse_free (info);
904   return ret;
905 }
906
907 /* Here are some random pieces of trivia to keep in mind while trying
908    to take apart demangled names:
909
910    - Names can contain function arguments or templates, so the process
911      has to be, to some extent recursive: maybe keep track of your
912      depth based on encountering <> and ().
913
914    - Parentheses don't just have to happen at the end of a name: they
915      can occur even if the name in question isn't a function, because
916      a template argument might be a type that's a function.
917
918    - Conversely, even if you're trying to deal with a function, its
919      demangled name might not end with ')': it could be a const or
920      volatile class method, in which case it ends with "const" or
921      "volatile".
922
923    - Parentheses are also used in anonymous namespaces: a variable
924      'foo' in an anonymous namespace gets demangled as "(anonymous
925      namespace)::foo".
926
927    - And operator names can contain parentheses or angle brackets.  */
928
929 /* FIXME: carlton/2003-03-13: We have several functions here with
930    overlapping functionality; can we combine them?  Also, do they
931    handle all the above considerations correctly?  */
932
933
934 /* This returns the length of first component of NAME, which should be
935    the demangled name of a C++ variable/function/method/etc.
936    Specifically, it returns the index of the first colon forming the
937    boundary of the first component: so, given 'A::foo' or 'A::B::foo'
938    it returns the 1, and given 'foo', it returns 0.  */
939
940 /* The character in NAME indexed by the return value is guaranteed to
941    always be either ':' or '\0'.  */
942
943 /* NOTE: carlton/2003-03-13: This function is currently only intended
944    for internal use: it's probably not entirely safe when called on
945    user-generated input, because some of the 'index += 2' lines in
946    cp_find_first_component_aux might go past the end of malformed
947    input.  */
948
949 unsigned int
950 cp_find_first_component (const char *name)
951 {
952   return cp_find_first_component_aux (name, 0);
953 }
954
955 /* Helper function for cp_find_first_component.  Like that function,
956    it returns the length of the first component of NAME, but to make
957    the recursion easier, it also stops if it reaches an unexpected ')'
958    or '>' if the value of PERMISSIVE is nonzero.  */
959
960 /* Let's optimize away calls to strlen("operator").  */
961
962 #define LENGTH_OF_OPERATOR 8
963
964 static unsigned int
965 cp_find_first_component_aux (const char *name, int permissive)
966 {
967   unsigned int index = 0;
968   /* Operator names can show up in unexpected places.  Since these can
969      contain parentheses or angle brackets, they can screw up the
970      recursion.  But not every string 'operator' is part of an
971      operater name: e.g. you could have a variable 'cooperator'.  So
972      this variable tells us whether or not we should treat the string
973      'operator' as starting an operator.  */
974   int operator_possible = 1;
975
976   for (;; ++index)
977     {
978       switch (name[index])
979         {
980         case '<':
981           /* Template; eat it up.  The calls to cp_first_component
982              should only return (I hope!) when they reach the '>'
983              terminating the component or a '::' between two
984              components.  (Hence the '+ 2'.)  */
985           index += 1;
986           for (index += cp_find_first_component_aux (name + index, 1);
987                name[index] != '>';
988                index += cp_find_first_component_aux (name + index, 1))
989             {
990               if (name[index] != ':')
991                 {
992                   demangled_name_complaint (name);
993                   return strlen (name);
994                 }
995               index += 2;
996             }
997           operator_possible = 1;
998           break;
999         case '(':
1000           /* Similar comment as to '<'.  */
1001           index += 1;
1002           for (index += cp_find_first_component_aux (name + index, 1);
1003                name[index] != ')';
1004                index += cp_find_first_component_aux (name + index, 1))
1005             {
1006               if (name[index] != ':')
1007                 {
1008                   demangled_name_complaint (name);
1009                   return strlen (name);
1010                 }
1011               index += 2;
1012             }
1013           operator_possible = 1;
1014           break;
1015         case '>':
1016         case ')':
1017           if (permissive)
1018             return index;
1019           else
1020             {
1021               demangled_name_complaint (name);
1022               return strlen (name);
1023             }
1024         case '\0':
1025         case ':':
1026           return index;
1027         case 'o':
1028           /* Operator names can screw up the recursion.  */
1029           if (operator_possible
1030               && strncmp (name + index, "operator",
1031                           LENGTH_OF_OPERATOR) == 0)
1032             {
1033               index += LENGTH_OF_OPERATOR;
1034               while (ISSPACE(name[index]))
1035                 ++index;
1036               switch (name[index])
1037                 {
1038                   /* Skip over one less than the appropriate number of
1039                      characters: the for loop will skip over the last
1040                      one.  */
1041                 case '<':
1042                   if (name[index + 1] == '<')
1043                     index += 1;
1044                   else
1045                     index += 0;
1046                   break;
1047                 case '>':
1048                 case '-':
1049                   if (name[index + 1] == '>')
1050                     index += 1;
1051                   else
1052                     index += 0;
1053                   break;
1054                 case '(':
1055                   index += 1;
1056                   break;
1057                 default:
1058                   index += 0;
1059                   break;
1060                 }
1061             }
1062           operator_possible = 0;
1063           break;
1064         case ' ':
1065         case ',':
1066         case '.':
1067         case '&':
1068         case '*':
1069           /* NOTE: carlton/2003-04-18: I'm not sure what the precise
1070              set of relevant characters are here: it's necessary to
1071              include any character that can show up before 'operator'
1072              in a demangled name, and it's safe to include any
1073              character that can't be part of an identifier's name.  */
1074           operator_possible = 1;
1075           break;
1076         default:
1077           operator_possible = 0;
1078           break;
1079         }
1080     }
1081 }
1082
1083 /* Complain about a demangled name that we don't know how to parse.
1084    NAME is the demangled name in question.  */
1085
1086 static void
1087 demangled_name_complaint (const char *name)
1088 {
1089   complaint (&symfile_complaints,
1090              "unexpected demangled name '%s'", name);
1091 }
1092
1093 /* If NAME is the fully-qualified name of a C++
1094    function/variable/method/etc., this returns the length of its
1095    entire prefix: all of the namespaces and classes that make up its
1096    name.  Given 'A::foo', it returns 1, given 'A::B::foo', it returns
1097    4, given 'foo', it returns 0.  */
1098
1099 unsigned int
1100 cp_entire_prefix_len (const char *name)
1101 {
1102   unsigned int current_len = cp_find_first_component (name);
1103   unsigned int previous_len = 0;
1104
1105   while (name[current_len] != '\0')
1106     {
1107       gdb_assert (name[current_len] == ':');
1108       previous_len = current_len;
1109       /* Skip the '::'.  */
1110       current_len += 2;
1111       current_len += cp_find_first_component (name + current_len);
1112     }
1113
1114   return previous_len;
1115 }
1116
1117 /* Overload resolution functions.  */
1118
1119 /* Test to see if SYM is a symbol that we haven't seen corresponding
1120    to a function named OLOAD_NAME.  If so, add it to the current
1121    completion list.  */
1122
1123 static void
1124 overload_list_add_symbol (struct symbol *sym,
1125                           const char *oload_name)
1126 {
1127   int newsize;
1128   int i;
1129   char *sym_name;
1130
1131   /* If there is no type information, we can't do anything, so
1132      skip.  */
1133   if (SYMBOL_TYPE (sym) == NULL)
1134     return;
1135
1136   /* skip any symbols that we've already considered.  */
1137   for (i = 0; i < sym_return_val_index; ++i)
1138     if (strcmp (SYMBOL_LINKAGE_NAME (sym),
1139                 SYMBOL_LINKAGE_NAME (sym_return_val[i])) == 0)
1140       return;
1141
1142   /* Get the demangled name without parameters */
1143   sym_name = cp_remove_params (SYMBOL_NATURAL_NAME (sym));
1144   if (!sym_name)
1145     return;
1146
1147   /* skip symbols that cannot match */
1148   if (strcmp (sym_name, oload_name) != 0)
1149     {
1150       xfree (sym_name);
1151       return;
1152     }
1153
1154   xfree (sym_name);
1155
1156   /* We have a match for an overload instance, so add SYM to the
1157      current list of overload instances */
1158   if (sym_return_val_index + 3 > sym_return_val_size)
1159     {
1160       newsize = (sym_return_val_size *= 2) * sizeof (struct symbol *);
1161       sym_return_val = (struct symbol **)
1162         xrealloc ((char *) sym_return_val, newsize);
1163     }
1164   sym_return_val[sym_return_val_index++] = sym;
1165   sym_return_val[sym_return_val_index] = NULL;
1166 }
1167
1168 /* Return a null-terminated list of pointers to function symbols that
1169    are named FUNC_NAME and are visible within NAMESPACE.  */
1170
1171 struct symbol **
1172 make_symbol_overload_list (const char *func_name,
1173                            const char *namespace)
1174 {
1175   struct cleanup *old_cleanups;
1176   const char *name;
1177
1178   sym_return_val_size = 100;
1179   sym_return_val_index = 0;
1180   sym_return_val = xmalloc ((sym_return_val_size + 1) *
1181                             sizeof (struct symbol *));
1182   sym_return_val[0] = NULL;
1183
1184   old_cleanups = make_cleanup (xfree, sym_return_val);
1185
1186   make_symbol_overload_list_using (func_name, namespace);
1187
1188   if (namespace[0] == '\0')
1189     name = func_name;
1190   else
1191     {
1192       char *concatenated_name
1193         = alloca (strlen (namespace) + 2 + strlen (func_name) + 1);
1194       strcpy (concatenated_name, namespace);
1195       strcat (concatenated_name, "::");
1196       strcat (concatenated_name, func_name);
1197       name = concatenated_name;
1198     }
1199
1200   make_symbol_overload_list_qualified (name);
1201
1202   discard_cleanups (old_cleanups);
1203
1204   return sym_return_val;
1205 }
1206
1207 /* Add all symbols with a name matching NAME in BLOCK to the overload
1208    list.  */
1209
1210 static void
1211 make_symbol_overload_list_block (const char *name,
1212                                  const struct block *block)
1213 {
1214   struct block_iterator iter;
1215   struct symbol *sym;
1216
1217   for (sym = block_iter_name_first (block, name, &iter);
1218        sym != NULL;
1219        sym = block_iter_name_next (name, &iter))
1220     overload_list_add_symbol (sym, name);
1221 }
1222
1223 /* Adds the function FUNC_NAME from NAMESPACE to the overload set.  */
1224
1225 static void
1226 make_symbol_overload_list_namespace (const char *func_name,
1227                                      const char *namespace)
1228 {
1229   const char *name;
1230   const struct block *block = NULL;
1231
1232   if (namespace[0] == '\0')
1233     name = func_name;
1234   else
1235     {
1236       char *concatenated_name
1237         = alloca (strlen (namespace) + 2 + strlen (func_name) + 1);
1238
1239       strcpy (concatenated_name, namespace);
1240       strcat (concatenated_name, "::");
1241       strcat (concatenated_name, func_name);
1242       name = concatenated_name;
1243     }
1244
1245   /* Look in the static block.  */
1246   block = block_static_block (get_selected_block (0));
1247   if (block)
1248     make_symbol_overload_list_block (name, block);
1249
1250   /* Look in the global block.  */
1251   block = block_global_block (block);
1252   if (block)
1253     make_symbol_overload_list_block (name, block);
1254
1255 }
1256
1257 /* Search the namespace of the given type and namespace of and public
1258    base types.  */
1259
1260 static void
1261 make_symbol_overload_list_adl_namespace (struct type *type,
1262                                          const char *func_name)
1263 {
1264   char *namespace;
1265   const char *type_name;
1266   int i, prefix_len;
1267
1268   while (TYPE_CODE (type) == TYPE_CODE_PTR
1269          || TYPE_CODE (type) == TYPE_CODE_REF
1270          || TYPE_CODE (type) == TYPE_CODE_ARRAY
1271          || TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
1272     {
1273       if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
1274         type = check_typedef(type);
1275       else
1276         type = TYPE_TARGET_TYPE (type);
1277     }
1278
1279   type_name = TYPE_NAME (type);
1280
1281   if (type_name == NULL)
1282     return;
1283
1284   prefix_len = cp_entire_prefix_len (type_name);
1285
1286   if (prefix_len != 0)
1287     {
1288       namespace = alloca (prefix_len + 1);
1289       strncpy (namespace, type_name, prefix_len);
1290       namespace[prefix_len] = '\0';
1291
1292       make_symbol_overload_list_namespace (func_name, namespace);
1293     }
1294
1295   /* Check public base type */
1296   if (TYPE_CODE (type) == TYPE_CODE_CLASS)
1297     for (i = 0; i < TYPE_N_BASECLASSES (type); i++)
1298       {
1299         if (BASETYPE_VIA_PUBLIC (type, i))
1300           make_symbol_overload_list_adl_namespace (TYPE_BASECLASS (type,
1301                                                                    i),
1302                                                    func_name);
1303       }
1304 }
1305
1306 /* Adds the overload list overload candidates for FUNC_NAME found
1307    through argument dependent lookup.  */
1308
1309 struct symbol **
1310 make_symbol_overload_list_adl (struct type **arg_types, int nargs,
1311                                const char *func_name)
1312 {
1313   int i;
1314
1315   gdb_assert (sym_return_val_size != -1);
1316
1317   for (i = 1; i <= nargs; i++)
1318     make_symbol_overload_list_adl_namespace (arg_types[i - 1],
1319                                              func_name);
1320
1321   return sym_return_val;
1322 }
1323
1324 /* Used for cleanups to reset the "searched" flag in case of an
1325    error.  */
1326
1327 static void
1328 reset_directive_searched (void *data)
1329 {
1330   struct using_direct *direct = data;
1331   direct->searched = 0;
1332 }
1333
1334 /* This applies the using directives to add namespaces to search in,
1335    and then searches for overloads in all of those namespaces.  It
1336    adds the symbols found to sym_return_val.  Arguments are as in
1337    make_symbol_overload_list.  */
1338
1339 static void
1340 make_symbol_overload_list_using (const char *func_name,
1341                                  const char *namespace)
1342 {
1343   struct using_direct *current;
1344   const struct block *block;
1345
1346   /* First, go through the using directives.  If any of them apply,
1347      look in the appropriate namespaces for new functions to match
1348      on.  */
1349
1350   for (block = get_selected_block (0);
1351        block != NULL;
1352        block = BLOCK_SUPERBLOCK (block))
1353     for (current = block_using (block);
1354         current != NULL;
1355         current = current->next)
1356       {
1357         /* Prevent recursive calls.  */
1358         if (current->searched)
1359           continue;
1360
1361         /* If this is a namespace alias or imported declaration ignore
1362            it.  */
1363         if (current->alias != NULL || current->declaration != NULL)
1364           continue;
1365
1366         if (strcmp (namespace, current->import_dest) == 0)
1367           {
1368             /* Mark this import as searched so that the recursive call
1369                does not search it again.  */
1370             struct cleanup *old_chain;
1371             current->searched = 1;
1372             old_chain = make_cleanup (reset_directive_searched,
1373                                       current);
1374
1375             make_symbol_overload_list_using (func_name,
1376                                              current->import_src);
1377
1378             current->searched = 0;
1379             discard_cleanups (old_chain);
1380           }
1381       }
1382
1383   /* Now, add names for this namespace.  */
1384   make_symbol_overload_list_namespace (func_name, namespace);
1385 }
1386
1387 /* This does the bulk of the work of finding overloaded symbols.
1388    FUNC_NAME is the name of the overloaded function we're looking for
1389    (possibly including namespace info).  */
1390
1391 static void
1392 make_symbol_overload_list_qualified (const char *func_name)
1393 {
1394   struct symtab *s;
1395   struct objfile *objfile;
1396   const struct block *b, *surrounding_static_block = 0;
1397
1398   /* Look through the partial symtabs for all symbols which begin by
1399      matching FUNC_NAME.  Make sure we read that symbol table in.  */
1400
1401   ALL_OBJFILES (objfile)
1402   {
1403     if (objfile->sf)
1404       objfile->sf->qf->expand_symtabs_for_function (objfile, func_name);
1405   }
1406
1407   /* Search upwards from currently selected frame (so that we can
1408      complete on local vars.  */
1409
1410   for (b = get_selected_block (0); b != NULL; b = BLOCK_SUPERBLOCK (b))
1411     make_symbol_overload_list_block (func_name, b);
1412
1413   surrounding_static_block = block_static_block (get_selected_block (0));
1414
1415   /* Go through the symtabs and check the externs and statics for
1416      symbols which match.  */
1417
1418   ALL_PRIMARY_SYMTABS (objfile, s)
1419   {
1420     QUIT;
1421     b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK);
1422     make_symbol_overload_list_block (func_name, b);
1423   }
1424
1425   ALL_PRIMARY_SYMTABS (objfile, s)
1426   {
1427     QUIT;
1428     b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK);
1429     /* Don't do this block twice.  */
1430     if (b == surrounding_static_block)
1431       continue;
1432     make_symbol_overload_list_block (func_name, b);
1433   }
1434 }
1435
1436 /* Lookup the rtti type for a class name.  */
1437
1438 struct type *
1439 cp_lookup_rtti_type (const char *name, struct block *block)
1440 {
1441   struct symbol * rtti_sym;
1442   struct type * rtti_type;
1443
1444   rtti_sym = lookup_symbol (name, block, STRUCT_DOMAIN, NULL);
1445
1446   if (rtti_sym == NULL)
1447     {
1448       warning (_("RTTI symbol not found for class '%s'"), name);
1449       return NULL;
1450     }
1451
1452   if (SYMBOL_CLASS (rtti_sym) != LOC_TYPEDEF)
1453     {
1454       warning (_("RTTI symbol for class '%s' is not a type"), name);
1455       return NULL;
1456     }
1457
1458   rtti_type = SYMBOL_TYPE (rtti_sym);
1459
1460   switch (TYPE_CODE (rtti_type))
1461     {
1462     case TYPE_CODE_CLASS:
1463       break;
1464     case TYPE_CODE_NAMESPACE:
1465       /* chastain/2003-11-26: the symbol tables often contain fake
1466          symbols for namespaces with the same name as the struct.
1467          This warning is an indication of a bug in the lookup order
1468          or a bug in the way that the symbol tables are populated.  */
1469       warning (_("RTTI symbol for class '%s' is a namespace"), name);
1470       return NULL;
1471     default:
1472       warning (_("RTTI symbol for class '%s' has bad type"), name);
1473       return NULL;
1474     }
1475
1476   return rtti_type;
1477 }
1478
1479 /* Don't allow just "maintenance cplus".  */
1480
1481 static  void
1482 maint_cplus_command (char *arg, int from_tty)
1483 {
1484   printf_unfiltered (_("\"maintenance cplus\" must be followed "
1485                        "by the name of a command.\n"));
1486   help_list (maint_cplus_cmd_list,
1487              "maintenance cplus ",
1488              -1, gdb_stdout);
1489 }
1490
1491 /* This is a front end for cp_find_first_component, for unit testing.
1492    Be careful when using it: see the NOTE above
1493    cp_find_first_component.  */
1494
1495 static void
1496 first_component_command (char *arg, int from_tty)
1497 {
1498   int len;  
1499   char *prefix; 
1500
1501   if (!arg)
1502     return;
1503
1504   len = cp_find_first_component (arg);
1505   prefix = alloca (len + 1);
1506
1507   memcpy (prefix, arg, len);
1508   prefix[len] = '\0';
1509
1510   printf_unfiltered ("%s\n", prefix);
1511 }
1512
1513 extern initialize_file_ftype _initialize_cp_support; /* -Wmissing-prototypes */
1514
1515
1516 /* Implement "info vtbl".  */
1517
1518 static void
1519 info_vtbl_command (char *arg, int from_tty)
1520 {
1521   struct value *value;
1522
1523   value = parse_and_eval (arg);
1524   cplus_print_vtable (value);
1525 }
1526
1527 void
1528 _initialize_cp_support (void)
1529 {
1530   add_prefix_cmd ("cplus", class_maintenance,
1531                   maint_cplus_command,
1532                   _("C++ maintenance commands."),
1533                   &maint_cplus_cmd_list,
1534                   "maintenance cplus ",
1535                   0, &maintenancelist);
1536   add_alias_cmd ("cp", "cplus",
1537                  class_maintenance, 1,
1538                  &maintenancelist);
1539
1540   add_cmd ("first_component",
1541            class_maintenance,
1542            first_component_command,
1543            _("Print the first class/namespace component of NAME."),
1544            &maint_cplus_cmd_list);
1545
1546   add_info ("vtbl", info_vtbl_command,
1547             _("Show the virtual function table for a C++ object.\n\
1548 Usage: info vtbl EXPRESSION\n\
1549 Evaluate EXPRESSION and display the virtual function table for the\n\
1550 resulting object."));
1551 }