xref: /openbsd-src/gnu/usr.bin/binutils/gdb/cp-support.h (revision 11efff7f3ac2b3cfeff0c0cddc14294d9b3aca4f)
1b725ae77Skettenis /* Helper routines for C++ support in GDB.
2b725ae77Skettenis    Copyright 2002, 2003, 2004 Free Software Foundation, Inc.
3b725ae77Skettenis 
4b725ae77Skettenis    Contributed by MontaVista Software.
5b725ae77Skettenis    Namespace support contributed by David Carlton.
6b725ae77Skettenis 
7b725ae77Skettenis    This file is part of GDB.
8b725ae77Skettenis 
9b725ae77Skettenis    This program is free software; you can redistribute it and/or modify
10b725ae77Skettenis    it under the terms of the GNU General Public License as published by
11b725ae77Skettenis    the Free Software Foundation; either version 2 of the License, or
12b725ae77Skettenis    (at your option) any later version.
13b725ae77Skettenis 
14b725ae77Skettenis    This program is distributed in the hope that it will be useful,
15b725ae77Skettenis    but WITHOUT ANY WARRANTY; without even the implied warranty of
16b725ae77Skettenis    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17b725ae77Skettenis    GNU General Public License for more details.
18b725ae77Skettenis 
19b725ae77Skettenis    You should have received a copy of the GNU General Public License
20b725ae77Skettenis    along with this program; if not, write to the Free Software
21b725ae77Skettenis    Foundation, Inc., 59 Temple Place - Suite 330,
22b725ae77Skettenis    Boston, MA 02111-1307, USA.  */
23b725ae77Skettenis 
24b725ae77Skettenis #ifndef CP_SUPPORT_H
25b725ae77Skettenis #define CP_SUPPORT_H
26b725ae77Skettenis 
27b725ae77Skettenis /* We need this for 'domain_enum', alas...  */
28b725ae77Skettenis 
29b725ae77Skettenis #include "symtab.h"
30b725ae77Skettenis 
31b725ae77Skettenis /* Opaque declarations.  */
32b725ae77Skettenis 
33b725ae77Skettenis struct symbol;
34b725ae77Skettenis struct obstack;
35b725ae77Skettenis struct block;
36b725ae77Skettenis struct objfile;
37b725ae77Skettenis struct type;
38b725ae77Skettenis 
39b725ae77Skettenis /* This struct is designed to store data from using directives.  It
40b725ae77Skettenis    says that names from namespace INNER should be visible within
41b725ae77Skettenis    namespace OUTER.  OUTER should always be a strict initial substring
42b725ae77Skettenis    of INNER.  These form a linked list; NEXT is the next element of
43b725ae77Skettenis    the list.  */
44b725ae77Skettenis 
45b725ae77Skettenis struct using_direct
46b725ae77Skettenis {
47b725ae77Skettenis   char *inner;
48b725ae77Skettenis   char *outer;
49b725ae77Skettenis   struct using_direct *next;
50b725ae77Skettenis };
51b725ae77Skettenis 
52b725ae77Skettenis 
53b725ae77Skettenis /* Functions from cp-support.c.  */
54b725ae77Skettenis 
55*11efff7fSkettenis extern char *cp_class_name_from_physname (const char *physname);
56b725ae77Skettenis 
57b725ae77Skettenis extern char *method_name_from_physname (const char *physname);
58b725ae77Skettenis 
59b725ae77Skettenis extern unsigned int cp_find_first_component (const char *name);
60b725ae77Skettenis 
61b725ae77Skettenis extern unsigned int cp_entire_prefix_len (const char *name);
62b725ae77Skettenis 
63b725ae77Skettenis extern char *cp_func_name (const char *full_name);
64b725ae77Skettenis 
65b725ae77Skettenis extern struct symbol **make_symbol_overload_list (const char *,
66b725ae77Skettenis 						  const char *);
67b725ae77Skettenis 
68b725ae77Skettenis extern struct type *cp_lookup_rtti_type (const char *name,
69b725ae77Skettenis 					 struct block *block);
70b725ae77Skettenis 
71b725ae77Skettenis /* Functions/variables from cp-namespace.c.  */
72b725ae77Skettenis 
73b725ae77Skettenis extern unsigned char processing_has_namespace_info;
74b725ae77Skettenis 
75b725ae77Skettenis extern const char *processing_current_prefix;
76b725ae77Skettenis 
77b725ae77Skettenis extern int cp_is_anonymous (const char *namespace);
78b725ae77Skettenis 
79b725ae77Skettenis extern void cp_add_using_directive (const char *name,
80b725ae77Skettenis 				    unsigned int outer_length,
81b725ae77Skettenis 				    unsigned int inner_length);
82b725ae77Skettenis 
83b725ae77Skettenis extern void cp_initialize_namespace (void);
84b725ae77Skettenis 
85b725ae77Skettenis extern void cp_finalize_namespace (struct block *static_block,
86b725ae77Skettenis 				   struct obstack *obstack);
87b725ae77Skettenis 
88b725ae77Skettenis extern void cp_set_block_scope (const struct symbol *symbol,
89b725ae77Skettenis 				struct block *block,
90b725ae77Skettenis 				struct obstack *obstack);
91b725ae77Skettenis 
92b725ae77Skettenis extern void cp_scan_for_anonymous_namespaces (const struct symbol *symbol);
93b725ae77Skettenis 
94b725ae77Skettenis extern struct symbol *cp_lookup_symbol_nonlocal (const char *name,
95b725ae77Skettenis 						 const char *linkage_name,
96b725ae77Skettenis 						 const struct block *block,
97b725ae77Skettenis 						 const domain_enum domain,
98b725ae77Skettenis 						 struct symtab **symtab);
99b725ae77Skettenis 
100b725ae77Skettenis extern struct symbol *cp_lookup_symbol_namespace (const char *namespace,
101b725ae77Skettenis 						  const char *name,
102b725ae77Skettenis 						  const char *linkage_name,
103b725ae77Skettenis 						  const struct block *block,
104b725ae77Skettenis 						  const domain_enum domain,
105b725ae77Skettenis 						  struct symtab **symtab);
106b725ae77Skettenis 
107b725ae77Skettenis extern struct type *cp_lookup_nested_type (struct type *parent_type,
108b725ae77Skettenis 					   const char *nested_name,
109b725ae77Skettenis 					   const struct block *block);
110b725ae77Skettenis 
111b725ae77Skettenis extern void cp_check_possible_namespace_symbols (const char *name,
112b725ae77Skettenis 						 struct objfile *objfile);
113b725ae77Skettenis 
114b725ae77Skettenis struct type *cp_lookup_transparent_type (const char *name);
115b725ae77Skettenis 
116b725ae77Skettenis /* The list of "maint cplus" commands.  */
117b725ae77Skettenis 
118b725ae77Skettenis extern struct cmd_list_element *maint_cplus_cmd_list;
119b725ae77Skettenis 
120b725ae77Skettenis #endif /* CP_SUPPORT_H */
121