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