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