2002-09-14 10:09:39 +08:00
|
|
|
/* Helper routines for C++ support in GDB.
|
2011-01-01 23:34:07 +08:00
|
|
|
Copyright (C) 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011
|
2008-01-02 06:53:26 +08:00
|
|
|
Free Software Foundation, Inc.
|
2002-09-14 10:09:39 +08:00
|
|
|
|
|
|
|
Contributed by MontaVista Software.
|
|
|
|
|
|
|
|
This file is part of GDB.
|
|
|
|
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
|
|
it under the terms of the GNU General Public License as published by
|
2007-08-24 02:08:50 +08:00
|
|
|
the Free Software Foundation; either version 3 of the License, or
|
2002-09-14 10:09:39 +08:00
|
|
|
(at your option) any later version.
|
|
|
|
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
GNU General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License
|
2007-08-24 02:08:50 +08:00
|
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
2002-09-14 10:09:39 +08:00
|
|
|
|
|
|
|
#include "defs.h"
|
|
|
|
#include "cp-support.h"
|
|
|
|
#include "gdb_string.h"
|
|
|
|
#include "demangle.h"
|
2003-04-15 David Carlton <carlton@math.stanford.edu>
* Makefile.in (SFILES): Add cp-namespace.c.
(COMMON_OBS): Add cp-namespace.o.
(block.o): Depend on gdb_obstack_h and cp_support_h.
(buildsym.o): Depend on cp_support_h.
(cp-namespace.o): New.
(cp-support.o): Depend on gdb_string_h, demangle_h, gdb_assert_h,
gdb_obstack_h, symtab_h, symfile_h, and gdbcmd_h.
(dwarf2read.o): Depend on cp_support_h.
* jv-lang.c (get_java_class_symtab): Set BLOCK_NAMESPACE.
* dwarf2read.c (process_die): Set processing_has_namespace_info,
processing_current_namespace.
(read_namespace): Update processing_current_namespace; check for
anonymous namespaces.
(dwarf2_name): New function.
(dwarf2_extension): Ditto.
* cp-support.h: Update copyright, contributors.
Add inclusion guards.
Add opaque declaration for structs obstack, block, symbol.
(struct using_direct): New struct.
Add declarations for cp_find_first_component,
cp_entire_prefix_len, processing_has_namespace_info,
processing_current_namespace, cp_is_anonymous,
cp_add_using_directive, cp_initialize_namespace,
cp_finalize_namespace, cp_set_block_scope,
cp_scan_for_anonymous_namespaces.
* cp-namespace.c: New file.
* cp-support.c: Update copyright.
Include ctype.h, gdb_assert.h, gdbcmd.h.
New variable maint_cplus_cmd_list.
(cp_find_first_component): New function.
(cp_entire_prefix_len, maint_cplus_command)
(first_component_command, _initialize_cp_support): Ditto.
* buildsym.c: Include cp-support.h.
New variable using_list.
(add_symbol_to_list): Check for anonymous namespaces.
(finish_block): Set block's scope.
(start_symtab): Initialize C++ namespace support.
(end_symtab): Finalize C++ namespace support.
* block.h: Add opaque declarations for structs
block_namespace_info, using_direct, and obstack.
Add declarations for block_set_scope and block_set_using.
(struct block): Add 'language_specific' member.
(BLOCK_NAMESPACE): New macro.
* block.c: Include gdb_obstack.h and cp-support.h.
(struct block_namespace_info): New struct.
(block_set_scope): New function.
(block_set_using, block_initialize_namespace): Ditto.
2003-04-15 David Carlton <carlton@math.stanford.edu>
* gdb.c++/maint.exp: New file.
2003-04-16 07:07:11 +08:00
|
|
|
#include "gdb_assert.h"
|
|
|
|
#include "gdbcmd.h"
|
2003-06-12 David Carlton <carlton@bactrian.org>
* symtab.h: Delete declaration of make_symbol_overload_list.
Add declaration of lookup_partial_symbol.
* symtab.c (remove_params): Move to cp-support.c.
(overload_list_add_symbol, make_symbol_overload_list)
(sym_return_val_size, sym_return_val_index): Ditto.
(lookup_partial_symbol): Make extern.
* cp-support.h: Add declaration of make_symbol_overload_list.
* cp-support.c: Include dictionary.h, objfiles.h, frame.h,
symtab.h, and block.h.
(remove_params): Move here from symtab.c.
(overload_list_add_symbol, make_symbol_overload_list)
(sym_return_val_size, sym_return_val_index): Ditto.
* valops.c: Include cp-support.h.
* Makefile.in (cp-support.o): Depend on dictionary_h, objfiles_h,
frame_h, and block_h.
(valops.o): Depend on cp_support_h.
2003-06-12 23:33:45 +08:00
|
|
|
#include "dictionary.h"
|
|
|
|
#include "objfiles.h"
|
|
|
|
#include "frame.h"
|
|
|
|
#include "symtab.h"
|
|
|
|
#include "block.h"
|
2003-07-01 00:21:16 +08:00
|
|
|
#include "complaints.h"
|
2003-12-05 12:25:09 +08:00
|
|
|
#include "gdbtypes.h"
|
2009-09-22 03:46:43 +08:00
|
|
|
#include "exceptions.h"
|
|
|
|
#include "expression.h"
|
|
|
|
#include "value.h"
|
2003-07-01 00:21:16 +08:00
|
|
|
|
2007-10-22 22:37:36 +08:00
|
|
|
#include "safe-ctype.h"
|
|
|
|
|
gdb
* xcoffread.c: Include psymtab.h.
(xcoff_sym_fns): Update.
* symtab.h (struct partial_symbol): Remove.
(PSYMBOL_DOMAIN, PSYMBOL_CLASS): Remove.
(struct partial_symtab): Remove.
(PSYMTAB_TO_SYMTAB): Remove.
(lookup_partial_symbol, lookup_partial_symtab, find_pc_psymtab)
(find_pc_sect_psymtab): Remove.
(find_pc_sect_symtab_via_partial): Declare.
(find_pc_psymtab, find_pc_sect_psymbol, psymtab_to_symtab)
(find_main_psymtab): Remove.
(find_main_filename): Declare.
(fixup_psymbol_section): Remove.
(fixup_section): Declare.
* symtab.c: Include psymtab.h.
(lookup_symtab): Use lookup_symtab method.
(lookup_partial_symtab): Remove.
(find_pc_sect_psymtab_closer): Remove.
(find_pc_sect_psymtab): Remove.
(find_pc_sect_symtab_via_partial): New function.
(find_pc_psymtab, find_pc_sect_psymbol, find_pc_psymbol): Remove.
(fixup_section): No longer static.
(fixup_psymbol_section): Remove.
(lookup_symbol_aux): Use lookup_symbol_aux_quick.
(lookup_global_symbol_from_objfile): Likewise.
(lookup_symbol_aux_psymtabs): Remove.
(lookup_symbol_aux_quick): New function.
(lookup_symbol_global): Use lookup_symbol_aux_quick.
(lookup_partial_symbol): Remove.
(basic_lookup_transparent_type_quick): New function.
(basic_lookup_transparent_type): Use it.
(find_main_psymtab): Remove.
(find_main_filename): New function.
(find_pc_sect_symtab): Use find_pc_sect_symtab method.
(find_line_symtab): Use expand_symtabs_with_filename method.
(output_partial_symbol_filename): New function.
(sources_info): Use map_partial_symbol_filenames.
(struct search_symbols_data): New type.
(search_symbols_file_matches): New function.
(search_symbols_name_matches): Likewise.
(search_symbols): Use expand_symtabs_matching method.
(struct add_name_data): Rename from add_macro_name_data.
(add_macro_name): Update.
(add_partial_symbol_name): New function.
(default_make_symbol_completion_list): Use
map_partial_symbol_names.
(struct add_partial_symbol_name): New type.
(maybe_add_partial_symtab_filename): New function.
(make_source_files_completion_list): Use
map_partial_symbol_filenames.
(expand_line_sal): Use expand_symtabs_with_filename method.
* symmisc.c: Include psymtab.h.
(print_objfile_statistics): Use print_stats method.
(dump_objfile): Use dump method.
(dump_psymtab, maintenance_print_psymbols)
(maintenance_info_psymtabs, maintenance_check_symtabs)
(extend_psymbol_list): Remove.
* symfile.h (struct quick_symbol_functions): New struct.
(struct sym_fns) <qf>: New field.
(sort_pst_symbols): Remove.
(increment_reading_symtab): Declare.
* symfile.c: Include psymtab.h.
(compare_psymbols, sort_pst_symbols): Remove.
(psymtab_to_symtab): Remove.
(increment_reading_symtab): New function.
(symbol_file_add_with_addrs_or_offsets): Use expand_all_symtabs
method.
(set_initial_language): Use find_main_filename.
(allocate_psymtab, discard_psymtab, cashier_psymtab): Remove.
(free_named_symtabs): Remove unused code.
(start_psymtab_common, add_psymbol_to_bcache)
(append_psymbol_to_list, add_psymbol_to_list, init_psymbol_list):
Remove.
* stack.c: Include psymtab.h, symfile.h.
(backtrace_command_1): Use find_pc_sect_symtab_via_partial.
* source.h (psymtab_to_fullname): Don't declare.
* source.c: Include psymtab.h.
(select_source_symtab): Use find_last_source_symtab method.
(forget_cached_source_info): Use forget_cached_source_info
method.
(find_and_open_source): No longer static.
(psymtab_to_fullname): Remove.
* somread.c: Include psymtab.h.
(som_sym_fns): Update.
* psympriv.h: New file.
* psymtab.h: New file.
* psymtab.c: New file.
* objfiles.h: (ALL_OBJFILE_PSYMTABS): Remove.
(ALL_PSYMTABS, ALL_PSPACE_PSYMTABS): Likewise.
* objfiles.c: Include psymtab.h.
(objfile_relocate1): Use relocate method.
(objfile_has_partial_symbols): Use has_symbols method.
* mipsread.c: Include psymtab.h.
(ecoff_sym_fns): Update.
* mi/mi-cmd-file.c: Include psymtab.h.
(print_partial_file_name): New function.
(mi_cmd_file_list_exec_source_files): Use
map_partial_symbol_filenames.
* mdebugread.c: Include psympriv.h.
* machoread.c: Include psympriv.h.
(macho_sym_fns): Update.
* m2-exp.y (yylex): Use lookup_symtab.
* elfread.c: Include psympriv.h.
(elf_sym_fns): Update.
* dwarf2read.c: Include psympriv.h.
* dbxread.c: Include psympriv.h.
(aout_sym_fns): Update.
* cp-support.c: Include psymtab.h.
(read_in_psymtabs): Remove.
(make_symbol_overload_list_qualified): Use
expand_symtabs_for_function method.
* coffread.c: Include psympriv.h.
(coff_sym_fns): Update.
* blockframe.c: Include psymtab.h.
(find_pc_partial_function): Use find_pc_sect_symtab method.
* ada-lang.h (ada_update_initial_language): Update.
* ada-lang.c: Include psymtab.h.
(ada_update_initial_language): Remove 'main_pst' argument.
(ada_lookup_partial_symbol): Remove.
(struct ada_psym_data): New type.
(ada_add_psyms): New function.
(ada_add_non_local_symbols): Use map_ada_symtabs method.
(struct add_partial_datum): New type.
(ada_add_partial_symbol_completions): New function.
(ada_make_symbol_completion_list): Use map_partial_symbol_names.
(ada_exception_support_info_sniffer): Update.
* Makefile.in (SFILES): Add psymtab.c.
(COMMON_OBS): Add psymtab.o.
(HFILES_NO_SRCDIR): Add psymtab.h, psympriv.h.
gdb/doc
* gdbint.texinfo (Symbol Handling): Update.
2010-03-11 02:20:08 +08:00
|
|
|
#include "psymtab.h"
|
|
|
|
|
2005-03-11 10:24:23 +08:00
|
|
|
#define d_left(dc) (dc)->u.s_binary.left
|
|
|
|
#define d_right(dc) (dc)->u.s_binary.right
|
2003-07-01 00:21:16 +08:00
|
|
|
|
2005-03-11 10:24:23 +08:00
|
|
|
/* Functions related to demangled name parsing. */
|
2003-07-01 00:21:16 +08:00
|
|
|
|
|
|
|
static unsigned int cp_find_first_component_aux (const char *name,
|
|
|
|
int permissive);
|
|
|
|
|
|
|
|
static void demangled_name_complaint (const char *name);
|
2003-06-12 David Carlton <carlton@bactrian.org>
* symtab.h: Delete declaration of make_symbol_overload_list.
Add declaration of lookup_partial_symbol.
* symtab.c (remove_params): Move to cp-support.c.
(overload_list_add_symbol, make_symbol_overload_list)
(sym_return_val_size, sym_return_val_index): Ditto.
(lookup_partial_symbol): Make extern.
* cp-support.h: Add declaration of make_symbol_overload_list.
* cp-support.c: Include dictionary.h, objfiles.h, frame.h,
symtab.h, and block.h.
(remove_params): Move here from symtab.c.
(overload_list_add_symbol, make_symbol_overload_list)
(sym_return_val_size, sym_return_val_index): Ditto.
* valops.c: Include cp-support.h.
* Makefile.in (cp-support.o): Depend on dictionary_h, objfiles_h,
frame_h, and block_h.
(valops.o): Depend on cp_support_h.
2003-06-12 23:33:45 +08:00
|
|
|
|
|
|
|
/* Functions/variables related to overload resolution. */
|
|
|
|
|
2010-05-07 22:46:28 +08:00
|
|
|
static int sym_return_val_size = -1;
|
2003-06-12 David Carlton <carlton@bactrian.org>
* symtab.h: Delete declaration of make_symbol_overload_list.
Add declaration of lookup_partial_symbol.
* symtab.c (remove_params): Move to cp-support.c.
(overload_list_add_symbol, make_symbol_overload_list)
(sym_return_val_size, sym_return_val_index): Ditto.
(lookup_partial_symbol): Make extern.
* cp-support.h: Add declaration of make_symbol_overload_list.
* cp-support.c: Include dictionary.h, objfiles.h, frame.h,
symtab.h, and block.h.
(remove_params): Move here from symtab.c.
(overload_list_add_symbol, make_symbol_overload_list)
(sym_return_val_size, sym_return_val_index): Ditto.
* valops.c: Include cp-support.h.
* Makefile.in (cp-support.o): Depend on dictionary_h, objfiles_h,
frame_h, and block_h.
(valops.o): Depend on cp_support_h.
2003-06-12 23:33:45 +08:00
|
|
|
static int sym_return_val_index;
|
|
|
|
static struct symbol **sym_return_val;
|
|
|
|
|
2004-02-03 04:44:53 +08:00
|
|
|
static void overload_list_add_symbol (struct symbol *sym,
|
|
|
|
const char *oload_name);
|
|
|
|
|
|
|
|
static void make_symbol_overload_list_using (const char *func_name,
|
|
|
|
const char *namespace);
|
|
|
|
|
|
|
|
static void make_symbol_overload_list_qualified (const char *func_name);
|
|
|
|
|
2003-04-15 David Carlton <carlton@math.stanford.edu>
* Makefile.in (SFILES): Add cp-namespace.c.
(COMMON_OBS): Add cp-namespace.o.
(block.o): Depend on gdb_obstack_h and cp_support_h.
(buildsym.o): Depend on cp_support_h.
(cp-namespace.o): New.
(cp-support.o): Depend on gdb_string_h, demangle_h, gdb_assert_h,
gdb_obstack_h, symtab_h, symfile_h, and gdbcmd_h.
(dwarf2read.o): Depend on cp_support_h.
* jv-lang.c (get_java_class_symtab): Set BLOCK_NAMESPACE.
* dwarf2read.c (process_die): Set processing_has_namespace_info,
processing_current_namespace.
(read_namespace): Update processing_current_namespace; check for
anonymous namespaces.
(dwarf2_name): New function.
(dwarf2_extension): Ditto.
* cp-support.h: Update copyright, contributors.
Add inclusion guards.
Add opaque declaration for structs obstack, block, symbol.
(struct using_direct): New struct.
Add declarations for cp_find_first_component,
cp_entire_prefix_len, processing_has_namespace_info,
processing_current_namespace, cp_is_anonymous,
cp_add_using_directive, cp_initialize_namespace,
cp_finalize_namespace, cp_set_block_scope,
cp_scan_for_anonymous_namespaces.
* cp-namespace.c: New file.
* cp-support.c: Update copyright.
Include ctype.h, gdb_assert.h, gdbcmd.h.
New variable maint_cplus_cmd_list.
(cp_find_first_component): New function.
(cp_entire_prefix_len, maint_cplus_command)
(first_component_command, _initialize_cp_support): Ditto.
* buildsym.c: Include cp-support.h.
New variable using_list.
(add_symbol_to_list): Check for anonymous namespaces.
(finish_block): Set block's scope.
(start_symtab): Initialize C++ namespace support.
(end_symtab): Finalize C++ namespace support.
* block.h: Add opaque declarations for structs
block_namespace_info, using_direct, and obstack.
Add declarations for block_set_scope and block_set_using.
(struct block): Add 'language_specific' member.
(BLOCK_NAMESPACE): New macro.
* block.c: Include gdb_obstack.h and cp-support.h.
(struct block_namespace_info): New struct.
(block_set_scope): New function.
(block_set_using, block_initialize_namespace): Ditto.
2003-04-15 David Carlton <carlton@math.stanford.edu>
* gdb.c++/maint.exp: New file.
2003-04-16 07:07:11 +08:00
|
|
|
/* The list of "maint cplus" commands. */
|
|
|
|
|
2003-09-11 David Carlton <carlton@kealia.com>
* gdbtypes.h: Add TYPE_CODE_NAMESPACE.
* gdbtypes.c (init_type): Handle TYPE_CODE_NAMESPACE.
(recursive_dump_type): Ditto.
* printcmd.c (print_formatted): Ditto.
* typeprint.c (print_type_scalar): Ditto.
* c-typeprint.c (c_type_print_varspec_prefix): Ditto.
(c_type_print_varspec_suffix, c_type_print_base): Ditto.
* cp-support.h: Declare cp_check_possible_namespace_symbols,
maint_cplus_cmd_list.
* cp-support.c: Make maint_cplus_cmd_list extern.
* cp-namespace.c: Include objfiles.h, gdbtypes.h, dictionary.h,
command.h.
(lookup_symbol_file): Look in possible namespace blocks when
appropriate.
(initialize_namespace_symtab): New.
(get_possible_namespace_block, free_namespace_block)
(check_possible_namespace_symbols)
(check_possible_namespace_symbols_loop)
(check_one_possible_namespace_symbol)
(lookup_possible_namespace_symbol, maintenance_cplus_namespace)
(_initialize_cp_namespace): Ditto.
* block.h: Declare allocate_block.
* block.c (allocate_block): New.
* jv-lang.c (get_java_class_symtab): Allocate blocks via
allocate_block.
* symfile.h: Update declaration of add_psymbol_to_list.
* symfile.c (add_psymbol_to_list): Return the partial symbol in
question.
* dwarf2read.c (dwarf2_build_psymtabs_hard): Add argument to
scan_partial_symbols_call.
(scan_partial_symbols): Add NAMESPACE argument; update calls to
helper functions.
(add_partial_symbol): If necessary, scan mangled names for names
of namespaces.
(add_partial_namespace): Add NAMESPACE argument; generate partial
symbols associated to namespaces.
(add_partial_enumeration): Add NAMESPACE argument.
(new_symbol): Allow namespace syms.
(read_namespace): Generate namespace syms.
* objfiles.h: Add opaque declaration of struct symtab.
(struct objfile): Add cp_namespace_symtab member.
* objfiles.c (allocate_objfile): Set
objfile->cp_namespace_symtab.
* Makefile.in (cp-namespace.o): Depend on objfiles_h, gdbtypes_h,
dictionary_h, command_h.
2003-09-11 David Carlton <carlton@kealia.com>
* gdb.c++/namespace.exp: Add tests for namespace types.
* gdb.c++/maint.exp (test_help): Test 'help maint cp namespace'.
(test_namespace): New.
2003-09-12 03:49:20 +08:00
|
|
|
struct cmd_list_element *maint_cplus_cmd_list = NULL;
|
2003-04-15 David Carlton <carlton@math.stanford.edu>
* Makefile.in (SFILES): Add cp-namespace.c.
(COMMON_OBS): Add cp-namespace.o.
(block.o): Depend on gdb_obstack_h and cp_support_h.
(buildsym.o): Depend on cp_support_h.
(cp-namespace.o): New.
(cp-support.o): Depend on gdb_string_h, demangle_h, gdb_assert_h,
gdb_obstack_h, symtab_h, symfile_h, and gdbcmd_h.
(dwarf2read.o): Depend on cp_support_h.
* jv-lang.c (get_java_class_symtab): Set BLOCK_NAMESPACE.
* dwarf2read.c (process_die): Set processing_has_namespace_info,
processing_current_namespace.
(read_namespace): Update processing_current_namespace; check for
anonymous namespaces.
(dwarf2_name): New function.
(dwarf2_extension): Ditto.
* cp-support.h: Update copyright, contributors.
Add inclusion guards.
Add opaque declaration for structs obstack, block, symbol.
(struct using_direct): New struct.
Add declarations for cp_find_first_component,
cp_entire_prefix_len, processing_has_namespace_info,
processing_current_namespace, cp_is_anonymous,
cp_add_using_directive, cp_initialize_namespace,
cp_finalize_namespace, cp_set_block_scope,
cp_scan_for_anonymous_namespaces.
* cp-namespace.c: New file.
* cp-support.c: Update copyright.
Include ctype.h, gdb_assert.h, gdbcmd.h.
New variable maint_cplus_cmd_list.
(cp_find_first_component): New function.
(cp_entire_prefix_len, maint_cplus_command)
(first_component_command, _initialize_cp_support): Ditto.
* buildsym.c: Include cp-support.h.
New variable using_list.
(add_symbol_to_list): Check for anonymous namespaces.
(finish_block): Set block's scope.
(start_symtab): Initialize C++ namespace support.
(end_symtab): Finalize C++ namespace support.
* block.h: Add opaque declarations for structs
block_namespace_info, using_direct, and obstack.
Add declarations for block_set_scope and block_set_using.
(struct block): Add 'language_specific' member.
(BLOCK_NAMESPACE): New macro.
* block.c: Include gdb_obstack.h and cp-support.h.
(struct block_namespace_info): New struct.
(block_set_scope): New function.
(block_set_using, block_initialize_namespace): Ditto.
2003-04-15 David Carlton <carlton@math.stanford.edu>
* gdb.c++/maint.exp: New file.
2003-04-16 07:07:11 +08:00
|
|
|
|
|
|
|
/* The actual commands. */
|
|
|
|
|
|
|
|
static void maint_cplus_command (char *arg, int from_tty);
|
|
|
|
static void first_component_command (char *arg, int from_tty);
|
|
|
|
|
2009-09-22 03:46:43 +08:00
|
|
|
/* Operator validation.
|
2011-01-01 06:59:52 +08:00
|
|
|
NOTE: Multi-byte operators (usually the assignment variety
|
|
|
|
operator) must appear before the single byte version, i.e., "+="
|
|
|
|
before "+". */
|
2009-09-22 03:46:43 +08:00
|
|
|
static const char *operator_tokens[] =
|
|
|
|
{
|
2011-01-01 06:59:52 +08:00
|
|
|
"++", "+=", "+", "->*", "->", "--", "-=", "-", "*=", "*",
|
|
|
|
"/=", "/", "%=", "%", "!=", "==", "!", "&&", "<<=", "<<",
|
|
|
|
">>=", ">>", "<=", "<", ">=", ">", "~", "&=", "&", "|=",
|
|
|
|
"||", "|", "^=", "^", "=", "()", "[]", ",", "new", "delete"
|
2009-09-22 03:46:43 +08:00
|
|
|
/* new[] and delete[] require special whitespace handling */
|
|
|
|
};
|
|
|
|
|
2011-08-19 00:17:39 +08:00
|
|
|
/* A list of typedefs which should not be substituted by replace_typedefs. */
|
|
|
|
static const char * const ignore_typedefs[] =
|
|
|
|
{
|
|
|
|
"std::istream", "std::iostream", "std::ostream", "std::string"
|
|
|
|
};
|
|
|
|
|
|
|
|
static void
|
|
|
|
replace_typedefs (struct demangle_parse_info *info,
|
|
|
|
struct demangle_component *ret_comp);
|
|
|
|
|
|
|
|
/* A convenience function to copy STRING into OBSTACK, returning a pointer
|
|
|
|
to the newly allocated string and saving the number of bytes saved in LEN.
|
|
|
|
|
|
|
|
It does not copy the terminating '\0' byte! */
|
|
|
|
|
|
|
|
static char *
|
|
|
|
copy_string_to_obstack (struct obstack *obstack, const char *string,
|
|
|
|
long *len)
|
|
|
|
{
|
|
|
|
*len = strlen (string);
|
|
|
|
return obstack_copy (obstack, string, *len);
|
|
|
|
}
|
|
|
|
|
|
|
|
/* A cleanup wrapper for cp_demangled_name_parse_free. */
|
|
|
|
|
|
|
|
static void
|
|
|
|
do_demangled_name_parse_free_cleanup (void *data)
|
|
|
|
{
|
|
|
|
struct demangle_parse_info *info = (struct demangle_parse_info *) data;
|
|
|
|
|
|
|
|
cp_demangled_name_parse_free (info);
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Create a cleanup for C++ name parsing. */
|
|
|
|
|
|
|
|
struct cleanup *
|
|
|
|
make_cleanup_cp_demangled_name_parse_free (struct demangle_parse_info *info)
|
|
|
|
{
|
|
|
|
return make_cleanup (do_demangled_name_parse_free_cleanup, info);
|
|
|
|
}
|
|
|
|
|
2007-10-22 22:37:36 +08:00
|
|
|
/* Return 1 if STRING is clearly already in canonical form. This
|
|
|
|
function is conservative; things which it does not recognize are
|
|
|
|
assumed to be non-canonical, and the parser will sort them out
|
|
|
|
afterwards. This speeds up the critical path for alphanumeric
|
|
|
|
identifiers. */
|
|
|
|
|
|
|
|
static int
|
|
|
|
cp_already_canonical (const char *string)
|
|
|
|
{
|
|
|
|
/* Identifier start character [a-zA-Z_]. */
|
|
|
|
if (!ISIDST (string[0]))
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
/* These are the only two identifiers which canonicalize to other
|
|
|
|
than themselves or an error: unsigned -> unsigned int and
|
|
|
|
signed -> int. */
|
|
|
|
if (string[0] == 'u' && strcmp (&string[1], "nsigned") == 0)
|
|
|
|
return 0;
|
|
|
|
else if (string[0] == 's' && strcmp (&string[1], "igned") == 0)
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
/* Identifier character [a-zA-Z0-9_]. */
|
|
|
|
while (ISIDNUM (string[1]))
|
|
|
|
string++;
|
|
|
|
|
|
|
|
if (string[1] == '\0')
|
|
|
|
return 1;
|
|
|
|
else
|
|
|
|
return 0;
|
|
|
|
}
|
2003-04-15 David Carlton <carlton@math.stanford.edu>
* Makefile.in (SFILES): Add cp-namespace.c.
(COMMON_OBS): Add cp-namespace.o.
(block.o): Depend on gdb_obstack_h and cp_support_h.
(buildsym.o): Depend on cp_support_h.
(cp-namespace.o): New.
(cp-support.o): Depend on gdb_string_h, demangle_h, gdb_assert_h,
gdb_obstack_h, symtab_h, symfile_h, and gdbcmd_h.
(dwarf2read.o): Depend on cp_support_h.
* jv-lang.c (get_java_class_symtab): Set BLOCK_NAMESPACE.
* dwarf2read.c (process_die): Set processing_has_namespace_info,
processing_current_namespace.
(read_namespace): Update processing_current_namespace; check for
anonymous namespaces.
(dwarf2_name): New function.
(dwarf2_extension): Ditto.
* cp-support.h: Update copyright, contributors.
Add inclusion guards.
Add opaque declaration for structs obstack, block, symbol.
(struct using_direct): New struct.
Add declarations for cp_find_first_component,
cp_entire_prefix_len, processing_has_namespace_info,
processing_current_namespace, cp_is_anonymous,
cp_add_using_directive, cp_initialize_namespace,
cp_finalize_namespace, cp_set_block_scope,
cp_scan_for_anonymous_namespaces.
* cp-namespace.c: New file.
* cp-support.c: Update copyright.
Include ctype.h, gdb_assert.h, gdbcmd.h.
New variable maint_cplus_cmd_list.
(cp_find_first_component): New function.
(cp_entire_prefix_len, maint_cplus_command)
(first_component_command, _initialize_cp_support): Ditto.
* buildsym.c: Include cp-support.h.
New variable using_list.
(add_symbol_to_list): Check for anonymous namespaces.
(finish_block): Set block's scope.
(start_symtab): Initialize C++ namespace support.
(end_symtab): Finalize C++ namespace support.
* block.h: Add opaque declarations for structs
block_namespace_info, using_direct, and obstack.
Add declarations for block_set_scope and block_set_using.
(struct block): Add 'language_specific' member.
(BLOCK_NAMESPACE): New macro.
* block.c: Include gdb_obstack.h and cp-support.h.
(struct block_namespace_info): New struct.
(block_set_scope): New function.
(block_set_using, block_initialize_namespace): Ditto.
2003-04-15 David Carlton <carlton@math.stanford.edu>
* gdb.c++/maint.exp: New file.
2003-04-16 07:07:11 +08:00
|
|
|
|
2011-08-19 00:17:39 +08:00
|
|
|
/* Inspect the given RET_COMP for its type. If it is a typedef,
|
|
|
|
replace the node with the typedef's tree.
|
|
|
|
|
|
|
|
Returns 1 if any typedef substitutions were made, 0 otherwise. */
|
|
|
|
|
|
|
|
static int
|
|
|
|
inspect_type (struct demangle_parse_info *info,
|
|
|
|
struct demangle_component *ret_comp)
|
|
|
|
{
|
|
|
|
int i;
|
|
|
|
char *name;
|
|
|
|
struct symbol *sym;
|
|
|
|
volatile struct gdb_exception except;
|
|
|
|
|
|
|
|
/* Copy the symbol's name from RET_COMP and look it up
|
|
|
|
in the symbol table. */
|
|
|
|
name = (char *) alloca (ret_comp->u.s_name.len + 1);
|
|
|
|
memcpy (name, ret_comp->u.s_name.s, ret_comp->u.s_name.len);
|
|
|
|
name[ret_comp->u.s_name.len] = '\0';
|
|
|
|
|
|
|
|
/* Ignore any typedefs that should not be substituted. */
|
|
|
|
for (i = 0; i < ARRAY_SIZE (ignore_typedefs); ++i)
|
|
|
|
{
|
|
|
|
if (strcmp (name, ignore_typedefs[i]) == 0)
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
sym = NULL;
|
|
|
|
TRY_CATCH (except, RETURN_MASK_ALL)
|
|
|
|
{
|
|
|
|
sym = lookup_symbol (name, 0, VAR_DOMAIN, 0);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (except.reason >= 0 && sym != NULL)
|
|
|
|
{
|
|
|
|
struct type *otype = SYMBOL_TYPE (sym);
|
|
|
|
|
|
|
|
/* If the type is a typedef, replace it. */
|
|
|
|
if (TYPE_CODE (otype) == TYPE_CODE_TYPEDEF)
|
|
|
|
{
|
|
|
|
long len;
|
|
|
|
int is_anon;
|
|
|
|
struct type *type;
|
|
|
|
struct demangle_parse_info *i;
|
|
|
|
struct ui_file *buf;
|
|
|
|
|
|
|
|
/* Get the real type of the typedef. */
|
|
|
|
type = check_typedef (otype);
|
|
|
|
|
|
|
|
is_anon = (TYPE_TAG_NAME (type) == NULL
|
|
|
|
&& (TYPE_CODE (type) == TYPE_CODE_ENUM
|
|
|
|
|| TYPE_CODE (type) == TYPE_CODE_STRUCT
|
|
|
|
|| TYPE_CODE (type) == TYPE_CODE_UNION));
|
|
|
|
if (is_anon)
|
|
|
|
{
|
|
|
|
struct type *last = otype;
|
|
|
|
|
|
|
|
/* Find the last typedef for the type. */
|
|
|
|
while (TYPE_TARGET_TYPE (last) != NULL
|
|
|
|
&& (TYPE_CODE (TYPE_TARGET_TYPE (last))
|
|
|
|
== TYPE_CODE_TYPEDEF))
|
|
|
|
last = TYPE_TARGET_TYPE (last);
|
|
|
|
|
|
|
|
/* If there is only one typedef for this anonymous type,
|
|
|
|
do not substitute it. */
|
|
|
|
if (type == otype)
|
|
|
|
return 0;
|
|
|
|
else
|
|
|
|
/* Use the last typedef seen as the type for this
|
|
|
|
anonymous type. */
|
|
|
|
type = last;
|
|
|
|
}
|
|
|
|
|
|
|
|
buf = mem_fileopen ();
|
|
|
|
TRY_CATCH (except, RETURN_MASK_ERROR)
|
|
|
|
{
|
|
|
|
type_print (type, "", buf, -1);
|
|
|
|
}
|
|
|
|
|
|
|
|
/* If type_print threw an exception, there is little point
|
|
|
|
in continuing, so just bow out gracefully. */
|
|
|
|
if (except.reason < 0)
|
|
|
|
{
|
|
|
|
ui_file_delete (buf);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
name = ui_file_obsavestring (buf, &info->obstack, &len);
|
|
|
|
ui_file_delete (buf);
|
|
|
|
|
|
|
|
/* Turn the result into a new tree. Note that this
|
|
|
|
tree will contain pointers into NAME, so NAME cannot
|
|
|
|
be free'd until all typedef conversion is done and
|
|
|
|
the final result is converted into a string. */
|
|
|
|
i = cp_demangled_name_to_comp (name, NULL);
|
|
|
|
if (i != NULL)
|
|
|
|
{
|
|
|
|
/* Merge the two trees. */
|
|
|
|
cp_merge_demangle_parse_infos (info, ret_comp, i);
|
|
|
|
|
|
|
|
/* Replace any newly introduced typedefs -- but not
|
|
|
|
if the type is anonymous (that would lead to infinite
|
|
|
|
looping). */
|
|
|
|
if (!is_anon)
|
|
|
|
replace_typedefs (info, ret_comp);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
/* This shouldn't happen unless the type printer has
|
|
|
|
output something that the name parser cannot grok.
|
|
|
|
Nonetheless, an ounce of prevention...
|
|
|
|
|
|
|
|
Canonicalize the name again, and store it in the
|
|
|
|
current node (RET_COMP). */
|
|
|
|
char *canon = cp_canonicalize_string_no_typedefs (name);
|
|
|
|
|
|
|
|
if (canon != NULL)
|
|
|
|
{
|
|
|
|
/* Copy the canonicalization into the obstack and
|
|
|
|
free CANON. */
|
|
|
|
name = copy_string_to_obstack (&info->obstack, canon, &len);
|
|
|
|
xfree (canon);
|
|
|
|
}
|
|
|
|
|
|
|
|
ret_comp->u.s_name.s = name;
|
|
|
|
ret_comp->u.s_name.len = len;
|
|
|
|
}
|
|
|
|
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Replace any typedefs appearing in the qualified name
|
|
|
|
(DEMANGLE_COMPONENT_QUAL_NAME) represented in RET_COMP for the name parse
|
|
|
|
given in INFO. */
|
|
|
|
|
|
|
|
static void
|
|
|
|
replace_typedefs_qualified_name (struct demangle_parse_info *info,
|
|
|
|
struct demangle_component *ret_comp)
|
|
|
|
{
|
|
|
|
long len;
|
|
|
|
char *name;
|
|
|
|
struct ui_file *buf = mem_fileopen ();
|
|
|
|
struct demangle_component *comp = ret_comp;
|
|
|
|
|
|
|
|
/* Walk each node of the qualified name, reconstructing the name of
|
|
|
|
this element. With every node, check for any typedef substitutions.
|
|
|
|
If a substitution has occurred, replace the qualified name node
|
|
|
|
with a DEMANGLE_COMPONENT_NAME node representing the new, typedef-
|
|
|
|
substituted name. */
|
|
|
|
while (comp->type == DEMANGLE_COMPONENT_QUAL_NAME)
|
|
|
|
{
|
|
|
|
if (d_left (comp)->type == DEMANGLE_COMPONENT_NAME)
|
|
|
|
{
|
|
|
|
struct demangle_component new;
|
|
|
|
|
|
|
|
ui_file_write (buf, d_left (comp)->u.s_name.s,
|
|
|
|
d_left (comp)->u.s_name.len);
|
|
|
|
name = ui_file_obsavestring (buf, &info->obstack, &len);
|
|
|
|
new.type = DEMANGLE_COMPONENT_NAME;
|
|
|
|
new.u.s_name.s = name;
|
|
|
|
new.u.s_name.len = len;
|
|
|
|
if (inspect_type (info, &new))
|
|
|
|
{
|
|
|
|
char *n, *s;
|
|
|
|
long slen;
|
|
|
|
|
|
|
|
/* A typedef was substituted in NEW. Convert it to a
|
|
|
|
string and replace the top DEMANGLE_COMPONENT_QUAL_NAME
|
|
|
|
node. */
|
|
|
|
|
|
|
|
ui_file_rewind (buf);
|
|
|
|
n = cp_comp_to_string (&new, 100);
|
|
|
|
if (n == NULL)
|
|
|
|
{
|
|
|
|
/* If something went astray, abort typedef substitutions. */
|
|
|
|
ui_file_delete (buf);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
s = copy_string_to_obstack (&info->obstack, n, &slen);
|
|
|
|
xfree (n);
|
|
|
|
|
|
|
|
d_left (ret_comp)->type = DEMANGLE_COMPONENT_NAME;
|
|
|
|
d_left (ret_comp)->u.s_name.s = s;
|
|
|
|
d_left (ret_comp)->u.s_name.len = slen;
|
|
|
|
d_right (ret_comp) = d_right (comp);
|
|
|
|
comp = ret_comp;
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
/* The current node is not a name, so simply replace any
|
|
|
|
typedefs in it. Then print it to the stream to continue
|
|
|
|
checking for more typedefs in the tree. */
|
|
|
|
replace_typedefs (info, d_left (comp));
|
|
|
|
name = cp_comp_to_string (d_left (comp), 100);
|
|
|
|
if (name == NULL)
|
|
|
|
{
|
|
|
|
/* If something went astray, abort typedef substitutions. */
|
|
|
|
ui_file_delete (buf);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
fputs_unfiltered (name, buf);
|
|
|
|
xfree (name);
|
|
|
|
}
|
|
|
|
ui_file_write (buf, "::", 2);
|
|
|
|
comp = d_right (comp);
|
|
|
|
}
|
|
|
|
|
|
|
|
/* If the next component is DEMANGLE_COMPONENT_NAME, save the qualified
|
|
|
|
name assembled above and append the name given by COMP. Then use this
|
|
|
|
reassembled name to check for a typedef. */
|
|
|
|
|
|
|
|
if (comp->type == DEMANGLE_COMPONENT_NAME)
|
|
|
|
{
|
|
|
|
ui_file_write (buf, comp->u.s_name.s, comp->u.s_name.len);
|
|
|
|
name = ui_file_obsavestring (buf, &info->obstack, &len);
|
|
|
|
|
|
|
|
/* Replace the top (DEMANGLE_COMPONENT_QUAL_NAME) node
|
|
|
|
with a DEMANGLE_COMPONENT_NAME node containing the whole
|
|
|
|
name. */
|
|
|
|
ret_comp->type = DEMANGLE_COMPONENT_NAME;
|
|
|
|
ret_comp->u.s_name.s = name;
|
|
|
|
ret_comp->u.s_name.len = len;
|
|
|
|
inspect_type (info, ret_comp);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
replace_typedefs (info, comp);
|
|
|
|
|
|
|
|
ui_file_delete (buf);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/* A function to check const and volatile qualifiers for argument types.
|
|
|
|
|
|
|
|
"Parameter declarations that differ only in the presence
|
|
|
|
or absence of `const' and/or `volatile' are equivalent."
|
|
|
|
C++ Standard N3290, clause 13.1.3 #4. */
|
|
|
|
|
|
|
|
static void
|
|
|
|
check_cv_qualifiers (struct demangle_component *ret_comp)
|
|
|
|
{
|
|
|
|
while (d_left (ret_comp) != NULL
|
|
|
|
&& (d_left (ret_comp)->type == DEMANGLE_COMPONENT_CONST
|
|
|
|
|| d_left (ret_comp)->type == DEMANGLE_COMPONENT_VOLATILE))
|
|
|
|
{
|
|
|
|
d_left (ret_comp) = d_left (d_left (ret_comp));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Walk the parse tree given by RET_COMP, replacing any typedefs with
|
|
|
|
their basic types. */
|
|
|
|
|
|
|
|
static void
|
|
|
|
replace_typedefs (struct demangle_parse_info *info,
|
|
|
|
struct demangle_component *ret_comp)
|
|
|
|
{
|
|
|
|
if (ret_comp)
|
|
|
|
{
|
|
|
|
switch (ret_comp->type)
|
|
|
|
{
|
|
|
|
case DEMANGLE_COMPONENT_ARGLIST:
|
|
|
|
check_cv_qualifiers (ret_comp);
|
|
|
|
/* Fall through */
|
|
|
|
|
|
|
|
case DEMANGLE_COMPONENT_FUNCTION_TYPE:
|
|
|
|
case DEMANGLE_COMPONENT_TEMPLATE:
|
|
|
|
case DEMANGLE_COMPONENT_TEMPLATE_ARGLIST:
|
|
|
|
case DEMANGLE_COMPONENT_TYPED_NAME:
|
|
|
|
replace_typedefs (info, d_left (ret_comp));
|
|
|
|
replace_typedefs (info, d_right (ret_comp));
|
|
|
|
break;
|
|
|
|
|
|
|
|
case DEMANGLE_COMPONENT_NAME:
|
|
|
|
inspect_type (info, ret_comp);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case DEMANGLE_COMPONENT_QUAL_NAME:
|
|
|
|
replace_typedefs_qualified_name (info, ret_comp);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case DEMANGLE_COMPONENT_LOCAL_NAME:
|
|
|
|
case DEMANGLE_COMPONENT_CTOR:
|
|
|
|
case DEMANGLE_COMPONENT_ARRAY_TYPE:
|
|
|
|
case DEMANGLE_COMPONENT_PTRMEM_TYPE:
|
|
|
|
replace_typedefs (info, d_right (ret_comp));
|
|
|
|
break;
|
|
|
|
|
|
|
|
case DEMANGLE_COMPONENT_CONST:
|
|
|
|
case DEMANGLE_COMPONENT_RESTRICT:
|
|
|
|
case DEMANGLE_COMPONENT_VOLATILE:
|
|
|
|
case DEMANGLE_COMPONENT_VOLATILE_THIS:
|
|
|
|
case DEMANGLE_COMPONENT_CONST_THIS:
|
|
|
|
case DEMANGLE_COMPONENT_RESTRICT_THIS:
|
|
|
|
case DEMANGLE_COMPONENT_POINTER:
|
|
|
|
case DEMANGLE_COMPONENT_REFERENCE:
|
|
|
|
replace_typedefs (info, d_left (ret_comp));
|
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Parse STRING and convert it to canonical form, resolving any typedefs.
|
|
|
|
If parsing fails, or if STRING is already canonical, return NULL.
|
|
|
|
Otherwise return the canonical form. The return value is allocated via
|
|
|
|
xmalloc. */
|
|
|
|
|
|
|
|
char *
|
|
|
|
cp_canonicalize_string_no_typedefs (const char *string)
|
|
|
|
{
|
|
|
|
char *ret;
|
|
|
|
unsigned int estimated_len;
|
|
|
|
struct demangle_parse_info *info;
|
|
|
|
|
|
|
|
ret = NULL;
|
|
|
|
estimated_len = strlen (string) * 2;
|
|
|
|
info = cp_demangled_name_to_comp (string, NULL);
|
|
|
|
if (info != NULL)
|
|
|
|
{
|
|
|
|
/* Replace all the typedefs in the tree. */
|
|
|
|
replace_typedefs (info, info->tree);
|
|
|
|
|
|
|
|
/* Convert the tree back into a string. */
|
|
|
|
ret = cp_comp_to_string (info->tree, estimated_len);
|
|
|
|
gdb_assert (ret != NULL);
|
|
|
|
|
|
|
|
/* Free the parse information. */
|
|
|
|
cp_demangled_name_parse_free (info);
|
|
|
|
|
|
|
|
/* Finally, compare the original string with the computed
|
|
|
|
name, returning NULL if they are the same. */
|
|
|
|
if (strcmp (string, ret) == 0)
|
|
|
|
{
|
|
|
|
xfree (ret);
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
2007-10-22 22:37:36 +08:00
|
|
|
/* Parse STRING and convert it to canonical form. If parsing fails,
|
|
|
|
or if STRING is already canonical, return NULL. Otherwise return
|
|
|
|
the canonical form. The return value is allocated via xmalloc. */
|
2003-04-15 David Carlton <carlton@math.stanford.edu>
* Makefile.in (SFILES): Add cp-namespace.c.
(COMMON_OBS): Add cp-namespace.o.
(block.o): Depend on gdb_obstack_h and cp_support_h.
(buildsym.o): Depend on cp_support_h.
(cp-namespace.o): New.
(cp-support.o): Depend on gdb_string_h, demangle_h, gdb_assert_h,
gdb_obstack_h, symtab_h, symfile_h, and gdbcmd_h.
(dwarf2read.o): Depend on cp_support_h.
* jv-lang.c (get_java_class_symtab): Set BLOCK_NAMESPACE.
* dwarf2read.c (process_die): Set processing_has_namespace_info,
processing_current_namespace.
(read_namespace): Update processing_current_namespace; check for
anonymous namespaces.
(dwarf2_name): New function.
(dwarf2_extension): Ditto.
* cp-support.h: Update copyright, contributors.
Add inclusion guards.
Add opaque declaration for structs obstack, block, symbol.
(struct using_direct): New struct.
Add declarations for cp_find_first_component,
cp_entire_prefix_len, processing_has_namespace_info,
processing_current_namespace, cp_is_anonymous,
cp_add_using_directive, cp_initialize_namespace,
cp_finalize_namespace, cp_set_block_scope,
cp_scan_for_anonymous_namespaces.
* cp-namespace.c: New file.
* cp-support.c: Update copyright.
Include ctype.h, gdb_assert.h, gdbcmd.h.
New variable maint_cplus_cmd_list.
(cp_find_first_component): New function.
(cp_entire_prefix_len, maint_cplus_command)
(first_component_command, _initialize_cp_support): Ditto.
* buildsym.c: Include cp-support.h.
New variable using_list.
(add_symbol_to_list): Check for anonymous namespaces.
(finish_block): Set block's scope.
(start_symtab): Initialize C++ namespace support.
(end_symtab): Finalize C++ namespace support.
* block.h: Add opaque declarations for structs
block_namespace_info, using_direct, and obstack.
Add declarations for block_set_scope and block_set_using.
(struct block): Add 'language_specific' member.
(BLOCK_NAMESPACE): New macro.
* block.c: Include gdb_obstack.h and cp-support.h.
(struct block_namespace_info): New struct.
(block_set_scope): New function.
(block_set_using, block_initialize_namespace): Ditto.
2003-04-15 David Carlton <carlton@math.stanford.edu>
* gdb.c++/maint.exp: New file.
2003-04-16 07:07:11 +08:00
|
|
|
|
2005-03-11 10:24:23 +08:00
|
|
|
char *
|
|
|
|
cp_canonicalize_string (const char *string)
|
|
|
|
{
|
2011-08-19 00:17:39 +08:00
|
|
|
struct demangle_parse_info *info;
|
2007-10-22 22:37:36 +08:00
|
|
|
unsigned int estimated_len;
|
2005-03-11 10:24:23 +08:00
|
|
|
char *ret;
|
2003-04-15 David Carlton <carlton@math.stanford.edu>
* Makefile.in (SFILES): Add cp-namespace.c.
(COMMON_OBS): Add cp-namespace.o.
(block.o): Depend on gdb_obstack_h and cp_support_h.
(buildsym.o): Depend on cp_support_h.
(cp-namespace.o): New.
(cp-support.o): Depend on gdb_string_h, demangle_h, gdb_assert_h,
gdb_obstack_h, symtab_h, symfile_h, and gdbcmd_h.
(dwarf2read.o): Depend on cp_support_h.
* jv-lang.c (get_java_class_symtab): Set BLOCK_NAMESPACE.
* dwarf2read.c (process_die): Set processing_has_namespace_info,
processing_current_namespace.
(read_namespace): Update processing_current_namespace; check for
anonymous namespaces.
(dwarf2_name): New function.
(dwarf2_extension): Ditto.
* cp-support.h: Update copyright, contributors.
Add inclusion guards.
Add opaque declaration for structs obstack, block, symbol.
(struct using_direct): New struct.
Add declarations for cp_find_first_component,
cp_entire_prefix_len, processing_has_namespace_info,
processing_current_namespace, cp_is_anonymous,
cp_add_using_directive, cp_initialize_namespace,
cp_finalize_namespace, cp_set_block_scope,
cp_scan_for_anonymous_namespaces.
* cp-namespace.c: New file.
* cp-support.c: Update copyright.
Include ctype.h, gdb_assert.h, gdbcmd.h.
New variable maint_cplus_cmd_list.
(cp_find_first_component): New function.
(cp_entire_prefix_len, maint_cplus_command)
(first_component_command, _initialize_cp_support): Ditto.
* buildsym.c: Include cp-support.h.
New variable using_list.
(add_symbol_to_list): Check for anonymous namespaces.
(finish_block): Set block's scope.
(start_symtab): Initialize C++ namespace support.
(end_symtab): Finalize C++ namespace support.
* block.h: Add opaque declarations for structs
block_namespace_info, using_direct, and obstack.
Add declarations for block_set_scope and block_set_using.
(struct block): Add 'language_specific' member.
(BLOCK_NAMESPACE): New macro.
* block.c: Include gdb_obstack.h and cp-support.h.
(struct block_namespace_info): New struct.
(block_set_scope): New function.
(block_set_using, block_initialize_namespace): Ditto.
2003-04-15 David Carlton <carlton@math.stanford.edu>
* gdb.c++/maint.exp: New file.
2003-04-16 07:07:11 +08:00
|
|
|
|
2007-10-22 22:37:36 +08:00
|
|
|
if (cp_already_canonical (string))
|
|
|
|
return NULL;
|
2003-04-15 David Carlton <carlton@math.stanford.edu>
* Makefile.in (SFILES): Add cp-namespace.c.
(COMMON_OBS): Add cp-namespace.o.
(block.o): Depend on gdb_obstack_h and cp_support_h.
(buildsym.o): Depend on cp_support_h.
(cp-namespace.o): New.
(cp-support.o): Depend on gdb_string_h, demangle_h, gdb_assert_h,
gdb_obstack_h, symtab_h, symfile_h, and gdbcmd_h.
(dwarf2read.o): Depend on cp_support_h.
* jv-lang.c (get_java_class_symtab): Set BLOCK_NAMESPACE.
* dwarf2read.c (process_die): Set processing_has_namespace_info,
processing_current_namespace.
(read_namespace): Update processing_current_namespace; check for
anonymous namespaces.
(dwarf2_name): New function.
(dwarf2_extension): Ditto.
* cp-support.h: Update copyright, contributors.
Add inclusion guards.
Add opaque declaration for structs obstack, block, symbol.
(struct using_direct): New struct.
Add declarations for cp_find_first_component,
cp_entire_prefix_len, processing_has_namespace_info,
processing_current_namespace, cp_is_anonymous,
cp_add_using_directive, cp_initialize_namespace,
cp_finalize_namespace, cp_set_block_scope,
cp_scan_for_anonymous_namespaces.
* cp-namespace.c: New file.
* cp-support.c: Update copyright.
Include ctype.h, gdb_assert.h, gdbcmd.h.
New variable maint_cplus_cmd_list.
(cp_find_first_component): New function.
(cp_entire_prefix_len, maint_cplus_command)
(first_component_command, _initialize_cp_support): Ditto.
* buildsym.c: Include cp-support.h.
New variable using_list.
(add_symbol_to_list): Check for anonymous namespaces.
(finish_block): Set block's scope.
(start_symtab): Initialize C++ namespace support.
(end_symtab): Finalize C++ namespace support.
* block.h: Add opaque declarations for structs
block_namespace_info, using_direct, and obstack.
Add declarations for block_set_scope and block_set_using.
(struct block): Add 'language_specific' member.
(BLOCK_NAMESPACE): New macro.
* block.c: Include gdb_obstack.h and cp-support.h.
(struct block_namespace_info): New struct.
(block_set_scope): New function.
(block_set_using, block_initialize_namespace): Ditto.
2003-04-15 David Carlton <carlton@math.stanford.edu>
* gdb.c++/maint.exp: New file.
2003-04-16 07:07:11 +08:00
|
|
|
|
2011-08-19 00:17:39 +08:00
|
|
|
info = cp_demangled_name_to_comp (string, NULL);
|
|
|
|
if (info == NULL)
|
2005-03-11 10:24:23 +08:00
|
|
|
return NULL;
|
2003-04-15 David Carlton <carlton@math.stanford.edu>
* Makefile.in (SFILES): Add cp-namespace.c.
(COMMON_OBS): Add cp-namespace.o.
(block.o): Depend on gdb_obstack_h and cp_support_h.
(buildsym.o): Depend on cp_support_h.
(cp-namespace.o): New.
(cp-support.o): Depend on gdb_string_h, demangle_h, gdb_assert_h,
gdb_obstack_h, symtab_h, symfile_h, and gdbcmd_h.
(dwarf2read.o): Depend on cp_support_h.
* jv-lang.c (get_java_class_symtab): Set BLOCK_NAMESPACE.
* dwarf2read.c (process_die): Set processing_has_namespace_info,
processing_current_namespace.
(read_namespace): Update processing_current_namespace; check for
anonymous namespaces.
(dwarf2_name): New function.
(dwarf2_extension): Ditto.
* cp-support.h: Update copyright, contributors.
Add inclusion guards.
Add opaque declaration for structs obstack, block, symbol.
(struct using_direct): New struct.
Add declarations for cp_find_first_component,
cp_entire_prefix_len, processing_has_namespace_info,
processing_current_namespace, cp_is_anonymous,
cp_add_using_directive, cp_initialize_namespace,
cp_finalize_namespace, cp_set_block_scope,
cp_scan_for_anonymous_namespaces.
* cp-namespace.c: New file.
* cp-support.c: Update copyright.
Include ctype.h, gdb_assert.h, gdbcmd.h.
New variable maint_cplus_cmd_list.
(cp_find_first_component): New function.
(cp_entire_prefix_len, maint_cplus_command)
(first_component_command, _initialize_cp_support): Ditto.
* buildsym.c: Include cp-support.h.
New variable using_list.
(add_symbol_to_list): Check for anonymous namespaces.
(finish_block): Set block's scope.
(start_symtab): Initialize C++ namespace support.
(end_symtab): Finalize C++ namespace support.
* block.h: Add opaque declarations for structs
block_namespace_info, using_direct, and obstack.
Add declarations for block_set_scope and block_set_using.
(struct block): Add 'language_specific' member.
(BLOCK_NAMESPACE): New macro.
* block.c: Include gdb_obstack.h and cp-support.h.
(struct block_namespace_info): New struct.
(block_set_scope): New function.
(block_set_using, block_initialize_namespace): Ditto.
2003-04-15 David Carlton <carlton@math.stanford.edu>
* gdb.c++/maint.exp: New file.
2003-04-16 07:07:11 +08:00
|
|
|
|
2007-10-22 22:37:36 +08:00
|
|
|
estimated_len = strlen (string) * 2;
|
2011-08-19 00:17:39 +08:00
|
|
|
ret = cp_comp_to_string (info->tree, estimated_len);
|
|
|
|
cp_demangled_name_parse_free (info);
|
2003-04-15 David Carlton <carlton@math.stanford.edu>
* Makefile.in (SFILES): Add cp-namespace.c.
(COMMON_OBS): Add cp-namespace.o.
(block.o): Depend on gdb_obstack_h and cp_support_h.
(buildsym.o): Depend on cp_support_h.
(cp-namespace.o): New.
(cp-support.o): Depend on gdb_string_h, demangle_h, gdb_assert_h,
gdb_obstack_h, symtab_h, symfile_h, and gdbcmd_h.
(dwarf2read.o): Depend on cp_support_h.
* jv-lang.c (get_java_class_symtab): Set BLOCK_NAMESPACE.
* dwarf2read.c (process_die): Set processing_has_namespace_info,
processing_current_namespace.
(read_namespace): Update processing_current_namespace; check for
anonymous namespaces.
(dwarf2_name): New function.
(dwarf2_extension): Ditto.
* cp-support.h: Update copyright, contributors.
Add inclusion guards.
Add opaque declaration for structs obstack, block, symbol.
(struct using_direct): New struct.
Add declarations for cp_find_first_component,
cp_entire_prefix_len, processing_has_namespace_info,
processing_current_namespace, cp_is_anonymous,
cp_add_using_directive, cp_initialize_namespace,
cp_finalize_namespace, cp_set_block_scope,
cp_scan_for_anonymous_namespaces.
* cp-namespace.c: New file.
* cp-support.c: Update copyright.
Include ctype.h, gdb_assert.h, gdbcmd.h.
New variable maint_cplus_cmd_list.
(cp_find_first_component): New function.
(cp_entire_prefix_len, maint_cplus_command)
(first_component_command, _initialize_cp_support): Ditto.
* buildsym.c: Include cp-support.h.
New variable using_list.
(add_symbol_to_list): Check for anonymous namespaces.
(finish_block): Set block's scope.
(start_symtab): Initialize C++ namespace support.
(end_symtab): Finalize C++ namespace support.
* block.h: Add opaque declarations for structs
block_namespace_info, using_direct, and obstack.
Add declarations for block_set_scope and block_set_using.
(struct block): Add 'language_specific' member.
(BLOCK_NAMESPACE): New macro.
* block.c: Include gdb_obstack.h and cp-support.h.
(struct block_namespace_info): New struct.
(block_set_scope): New function.
(block_set_using, block_initialize_namespace): Ditto.
2003-04-15 David Carlton <carlton@math.stanford.edu>
* gdb.c++/maint.exp: New file.
2003-04-16 07:07:11 +08:00
|
|
|
|
2007-10-22 22:37:36 +08:00
|
|
|
if (strcmp (string, ret) == 0)
|
|
|
|
{
|
|
|
|
xfree (ret);
|
|
|
|
return NULL;
|
|
|
|
}
|
2002-09-14 10:09:39 +08:00
|
|
|
|
2005-03-11 10:24:23 +08:00
|
|
|
return ret;
|
|
|
|
}
|
2002-09-14 10:09:39 +08:00
|
|
|
|
2011-01-01 06:59:52 +08:00
|
|
|
/* Convert a mangled name to a demangle_component tree. *MEMORY is
|
|
|
|
set to the block of used memory that should be freed when finished
|
|
|
|
with the tree. DEMANGLED_P is set to the char * that should be
|
|
|
|
freed when finished with the tree, or NULL if none was needed.
|
|
|
|
OPTIONS will be passed to the demangler. */
|
2002-09-14 10:09:39 +08:00
|
|
|
|
2011-08-19 00:17:39 +08:00
|
|
|
static struct demangle_parse_info *
|
2005-03-11 10:24:23 +08:00
|
|
|
mangled_name_to_comp (const char *mangled_name, int options,
|
|
|
|
void **memory, char **demangled_p)
|
2002-09-14 10:09:39 +08:00
|
|
|
{
|
2005-03-11 10:24:23 +08:00
|
|
|
char *demangled_name;
|
2011-08-19 00:17:39 +08:00
|
|
|
struct demangle_parse_info *info;
|
2002-09-14 10:09:39 +08:00
|
|
|
|
2005-03-11 10:24:23 +08:00
|
|
|
/* If it looks like a v3 mangled name, then try to go directly
|
|
|
|
to trees. */
|
|
|
|
if (mangled_name[0] == '_' && mangled_name[1] == 'Z')
|
2002-09-14 10:09:39 +08:00
|
|
|
{
|
2011-08-19 00:17:39 +08:00
|
|
|
struct demangle_component *ret;
|
|
|
|
|
2011-01-01 06:59:52 +08:00
|
|
|
ret = cplus_demangle_v3_components (mangled_name,
|
|
|
|
options, memory);
|
2005-03-11 10:24:23 +08:00
|
|
|
if (ret)
|
|
|
|
{
|
2011-08-19 00:17:39 +08:00
|
|
|
info = cp_new_demangle_parse_info ();
|
|
|
|
info->tree = ret;
|
2005-03-11 10:24:23 +08:00
|
|
|
*demangled_p = NULL;
|
2011-08-19 00:17:39 +08:00
|
|
|
return info;
|
2005-03-11 10:24:23 +08:00
|
|
|
}
|
2002-09-14 10:09:39 +08:00
|
|
|
}
|
|
|
|
|
2011-01-01 06:59:52 +08:00
|
|
|
/* If it doesn't, or if that failed, then try to demangle the
|
|
|
|
name. */
|
2005-03-11 10:24:23 +08:00
|
|
|
demangled_name = cplus_demangle (mangled_name, options);
|
|
|
|
if (demangled_name == NULL)
|
|
|
|
return NULL;
|
|
|
|
|
2011-01-01 06:59:52 +08:00
|
|
|
/* If we could demangle the name, parse it to build the component
|
|
|
|
tree. */
|
2011-08-19 00:17:39 +08:00
|
|
|
info = cp_demangled_name_to_comp (demangled_name, NULL);
|
2002-09-14 10:09:39 +08:00
|
|
|
|
2011-08-19 00:17:39 +08:00
|
|
|
if (info == NULL)
|
2005-03-11 10:24:23 +08:00
|
|
|
{
|
2008-09-14 07:37:05 +08:00
|
|
|
xfree (demangled_name);
|
2005-03-11 10:24:23 +08:00
|
|
|
return NULL;
|
|
|
|
}
|
2002-09-14 10:09:39 +08:00
|
|
|
|
2005-03-11 10:24:23 +08:00
|
|
|
*demangled_p = demangled_name;
|
2011-08-19 00:17:39 +08:00
|
|
|
return info;
|
2002-09-14 10:09:39 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
/* Return the name of the class containing method PHYSNAME. */
|
|
|
|
|
|
|
|
char *
|
2004-07-07 03:29:31 +08:00
|
|
|
cp_class_name_from_physname (const char *physname)
|
2002-09-14 10:09:39 +08:00
|
|
|
{
|
2008-05-07 20:43:54 +08:00
|
|
|
void *storage = NULL;
|
2005-03-11 10:24:23 +08:00
|
|
|
char *demangled_name = NULL, *ret;
|
2005-03-27 05:56:46 +08:00
|
|
|
struct demangle_component *ret_comp, *prev_comp, *cur_comp;
|
2011-08-19 00:17:39 +08:00
|
|
|
struct demangle_parse_info *info;
|
2005-03-11 10:24:23 +08:00
|
|
|
int done;
|
|
|
|
|
2011-08-19 00:17:39 +08:00
|
|
|
info = mangled_name_to_comp (physname, DMGL_ANSI,
|
|
|
|
&storage, &demangled_name);
|
|
|
|
if (info == NULL)
|
2002-09-14 10:09:39 +08:00
|
|
|
return NULL;
|
|
|
|
|
2005-03-11 10:24:23 +08:00
|
|
|
done = 0;
|
2011-08-19 00:17:39 +08:00
|
|
|
ret_comp = info->tree;
|
2005-03-27 05:56:46 +08:00
|
|
|
|
2011-01-01 06:59:52 +08:00
|
|
|
/* First strip off any qualifiers, if we have a function or
|
|
|
|
method. */
|
2005-03-11 10:24:23 +08:00
|
|
|
while (!done)
|
|
|
|
switch (ret_comp->type)
|
|
|
|
{
|
|
|
|
case DEMANGLE_COMPONENT_CONST:
|
|
|
|
case DEMANGLE_COMPONENT_RESTRICT:
|
|
|
|
case DEMANGLE_COMPONENT_VOLATILE:
|
|
|
|
case DEMANGLE_COMPONENT_CONST_THIS:
|
|
|
|
case DEMANGLE_COMPONENT_RESTRICT_THIS:
|
|
|
|
case DEMANGLE_COMPONENT_VOLATILE_THIS:
|
|
|
|
case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL:
|
|
|
|
ret_comp = d_left (ret_comp);
|
|
|
|
break;
|
2005-03-27 05:56:46 +08:00
|
|
|
default:
|
|
|
|
done = 1;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* If what we have now is a function, discard the argument list. */
|
|
|
|
if (ret_comp->type == DEMANGLE_COMPONENT_TYPED_NAME)
|
|
|
|
ret_comp = d_left (ret_comp);
|
|
|
|
|
|
|
|
/* If what we have now is a template, strip off the template
|
|
|
|
arguments. The left subtree may be a qualified name. */
|
|
|
|
if (ret_comp->type == DEMANGLE_COMPONENT_TEMPLATE)
|
|
|
|
ret_comp = d_left (ret_comp);
|
|
|
|
|
2011-01-01 06:59:52 +08:00
|
|
|
/* What we have now should be a name, possibly qualified.
|
|
|
|
Additional qualifiers could live in the left subtree or the right
|
|
|
|
subtree. Find the last piece. */
|
2005-03-27 05:56:46 +08:00
|
|
|
done = 0;
|
|
|
|
prev_comp = NULL;
|
|
|
|
cur_comp = ret_comp;
|
|
|
|
while (!done)
|
|
|
|
switch (cur_comp->type)
|
|
|
|
{
|
|
|
|
case DEMANGLE_COMPONENT_QUAL_NAME:
|
|
|
|
case DEMANGLE_COMPONENT_LOCAL_NAME:
|
|
|
|
prev_comp = cur_comp;
|
|
|
|
cur_comp = d_right (cur_comp);
|
|
|
|
break;
|
2005-03-11 10:24:23 +08:00
|
|
|
case DEMANGLE_COMPONENT_TEMPLATE:
|
2005-03-27 05:56:46 +08:00
|
|
|
case DEMANGLE_COMPONENT_NAME:
|
2005-03-11 10:24:23 +08:00
|
|
|
case DEMANGLE_COMPONENT_CTOR:
|
|
|
|
case DEMANGLE_COMPONENT_DTOR:
|
|
|
|
case DEMANGLE_COMPONENT_OPERATOR:
|
|
|
|
case DEMANGLE_COMPONENT_EXTENDED_OPERATOR:
|
|
|
|
done = 1;
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
done = 1;
|
2005-03-27 05:56:46 +08:00
|
|
|
cur_comp = NULL;
|
2005-03-11 10:24:23 +08:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
ret = NULL;
|
2005-03-27 05:56:46 +08:00
|
|
|
if (cur_comp != NULL && prev_comp != NULL)
|
2002-09-14 10:09:39 +08:00
|
|
|
{
|
2005-03-27 05:56:46 +08:00
|
|
|
/* We want to discard the rightmost child of PREV_COMP. */
|
2005-03-11 10:24:23 +08:00
|
|
|
*prev_comp = *d_left (prev_comp);
|
2011-01-01 06:59:52 +08:00
|
|
|
/* The ten is completely arbitrary; we don't have a good
|
|
|
|
estimate. */
|
2005-03-27 05:56:46 +08:00
|
|
|
ret = cp_comp_to_string (ret_comp, 10);
|
2002-09-14 10:09:39 +08:00
|
|
|
}
|
|
|
|
|
2005-03-11 10:24:23 +08:00
|
|
|
xfree (storage);
|
2011-08-19 00:17:39 +08:00
|
|
|
xfree (demangled_name);
|
|
|
|
cp_demangled_name_parse_free (info);
|
2002-09-14 10:09:39 +08:00
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
2011-01-01 06:59:52 +08:00
|
|
|
/* Return the child of COMP which is the basename of a method,
|
|
|
|
variable, et cetera. All scope qualifiers are discarded, but
|
|
|
|
template arguments will be included. The component tree may be
|
|
|
|
modified. */
|
2002-09-14 10:09:39 +08:00
|
|
|
|
2005-03-27 05:56:46 +08:00
|
|
|
static struct demangle_component *
|
|
|
|
unqualified_name_from_comp (struct demangle_component *comp)
|
2002-09-14 10:09:39 +08:00
|
|
|
{
|
2005-03-27 05:56:46 +08:00
|
|
|
struct demangle_component *ret_comp = comp, *last_template;
|
2005-03-11 10:24:23 +08:00
|
|
|
int done;
|
|
|
|
|
|
|
|
done = 0;
|
2005-03-27 05:56:46 +08:00
|
|
|
last_template = NULL;
|
2005-03-11 10:24:23 +08:00
|
|
|
while (!done)
|
|
|
|
switch (ret_comp->type)
|
|
|
|
{
|
|
|
|
case DEMANGLE_COMPONENT_QUAL_NAME:
|
|
|
|
case DEMANGLE_COMPONENT_LOCAL_NAME:
|
|
|
|
ret_comp = d_right (ret_comp);
|
|
|
|
break;
|
2005-03-27 05:56:46 +08:00
|
|
|
case DEMANGLE_COMPONENT_TYPED_NAME:
|
|
|
|
ret_comp = d_left (ret_comp);
|
|
|
|
break;
|
|
|
|
case DEMANGLE_COMPONENT_TEMPLATE:
|
|
|
|
gdb_assert (last_template == NULL);
|
|
|
|
last_template = ret_comp;
|
|
|
|
ret_comp = d_left (ret_comp);
|
|
|
|
break;
|
2005-03-11 10:24:23 +08:00
|
|
|
case DEMANGLE_COMPONENT_CONST:
|
|
|
|
case DEMANGLE_COMPONENT_RESTRICT:
|
|
|
|
case DEMANGLE_COMPONENT_VOLATILE:
|
|
|
|
case DEMANGLE_COMPONENT_CONST_THIS:
|
|
|
|
case DEMANGLE_COMPONENT_RESTRICT_THIS:
|
|
|
|
case DEMANGLE_COMPONENT_VOLATILE_THIS:
|
|
|
|
case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL:
|
|
|
|
ret_comp = d_left (ret_comp);
|
|
|
|
break;
|
|
|
|
case DEMANGLE_COMPONENT_NAME:
|
|
|
|
case DEMANGLE_COMPONENT_CTOR:
|
|
|
|
case DEMANGLE_COMPONENT_DTOR:
|
|
|
|
case DEMANGLE_COMPONENT_OPERATOR:
|
|
|
|
case DEMANGLE_COMPONENT_EXTENDED_OPERATOR:
|
|
|
|
done = 1;
|
|
|
|
break;
|
|
|
|
default:
|
2005-03-27 05:56:46 +08:00
|
|
|
return NULL;
|
2005-03-11 10:24:23 +08:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
2005-03-27 05:56:46 +08:00
|
|
|
if (last_template)
|
|
|
|
{
|
|
|
|
d_left (last_template) = ret_comp;
|
|
|
|
return last_template;
|
|
|
|
}
|
|
|
|
|
|
|
|
return ret_comp;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Return the name of the method whose linkage name is PHYSNAME. */
|
|
|
|
|
|
|
|
char *
|
|
|
|
method_name_from_physname (const char *physname)
|
|
|
|
{
|
2008-05-07 20:43:54 +08:00
|
|
|
void *storage = NULL;
|
2005-03-27 05:56:46 +08:00
|
|
|
char *demangled_name = NULL, *ret;
|
|
|
|
struct demangle_component *ret_comp;
|
2011-08-19 00:17:39 +08:00
|
|
|
struct demangle_parse_info *info;
|
2005-03-27 05:56:46 +08:00
|
|
|
|
2011-08-19 00:17:39 +08:00
|
|
|
info = mangled_name_to_comp (physname, DMGL_ANSI,
|
|
|
|
&storage, &demangled_name);
|
|
|
|
if (info == NULL)
|
2005-03-27 05:56:46 +08:00
|
|
|
return NULL;
|
|
|
|
|
2011-08-19 00:17:39 +08:00
|
|
|
ret_comp = unqualified_name_from_comp (info->tree);
|
2005-03-27 05:56:46 +08:00
|
|
|
|
2005-03-11 10:24:23 +08:00
|
|
|
ret = NULL;
|
|
|
|
if (ret_comp != NULL)
|
2011-01-01 06:59:52 +08:00
|
|
|
/* The ten is completely arbitrary; we don't have a good
|
|
|
|
estimate. */
|
2005-03-11 10:24:23 +08:00
|
|
|
ret = cp_comp_to_string (ret_comp, 10);
|
|
|
|
|
|
|
|
xfree (storage);
|
2011-08-19 00:17:39 +08:00
|
|
|
xfree (demangled_name);
|
|
|
|
cp_demangled_name_parse_free (info);
|
2005-03-11 10:24:23 +08:00
|
|
|
return ret;
|
|
|
|
}
|
2002-09-14 10:09:39 +08:00
|
|
|
|
2005-03-27 05:56:46 +08:00
|
|
|
/* If FULL_NAME is the demangled name of a C++ function (including an
|
|
|
|
arg list, possibly including namespace/class qualifications),
|
|
|
|
return a new string containing only the function name (without the
|
|
|
|
arg list/class qualifications). Otherwise, return NULL. The
|
|
|
|
caller is responsible for freeing the memory in question. */
|
|
|
|
|
|
|
|
char *
|
|
|
|
cp_func_name (const char *full_name)
|
|
|
|
{
|
|
|
|
char *ret;
|
|
|
|
struct demangle_component *ret_comp;
|
2011-08-19 00:17:39 +08:00
|
|
|
struct demangle_parse_info *info;
|
2005-03-27 05:56:46 +08:00
|
|
|
|
2011-08-19 00:17:39 +08:00
|
|
|
info = cp_demangled_name_to_comp (full_name, NULL);
|
|
|
|
if (!info)
|
2005-03-27 05:56:46 +08:00
|
|
|
return NULL;
|
|
|
|
|
2011-08-19 00:17:39 +08:00
|
|
|
ret_comp = unqualified_name_from_comp (info->tree);
|
2005-03-27 05:56:46 +08:00
|
|
|
|
|
|
|
ret = NULL;
|
|
|
|
if (ret_comp != NULL)
|
|
|
|
ret = cp_comp_to_string (ret_comp, 10);
|
|
|
|
|
2011-08-19 00:17:39 +08:00
|
|
|
cp_demangled_name_parse_free (info);
|
2005-03-27 05:56:46 +08:00
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* DEMANGLED_NAME is the name of a function, including parameters and
|
|
|
|
(optionally) a return type. Return the name of the function without
|
|
|
|
parameters or return type, or NULL if we can not parse the name. */
|
|
|
|
|
* ax-gdb.c (gen_var_ref): Use SYMBOL_LINKAGE_NAME.
* blockframe.c (find_pc_partial_function): Likewise.
* buildsym.c (find_symbol_in_list): Likewise.
* c-valprint.c (c_val_print): Likewise.
* coffread.c (patch_opaque_types, process_coff_symbol): Likewise.
(coff_read_enum_type): Likewise. Use SYMBOL_SET_LINKAGE_NAME.
* cp-support.c (cp_remove_params): Renamed from remove_params and
made global.
(overload_list_add_symbol): Update call to remove_params.
* cp-support.h (cp_remove_params): Declare.
* dwarf2read.c (process_enumeration_scope): Use SYMBOL_LINKAGE_NAME.
(dwarf2_const_value): Use SYMBOL_PRINT_NAME.
* expprint.c (dump_subexp_body_standard): Likewise.
* f-valprint.c (info_common_command, there_is_a_visible_common_named):
Use SYMBOL_LINKAGE_NAME to find symbols and SYMBOL_PRINT_NAME
for messages.
* findvar.c (read_var_value): Use SYMBOL_LINKAGE_NAME.
* gnu-v2-abi.c (gnuv2_value_rtti_type): Likewise.
* hppa-hpux-tdep.c (hppa32_hpux_in_solib_call_trampoline)
(hppa_hpux_skip_trampoline_code): Use SYMBOL_LINKAGE_NAME to find
symbols and SYMBOL_PRINT_NAME for messages.
* jv-lang.c (add_class_symbol): Use SYMBOL_SET_LINKAGE_NAME.
* linespec.c (decode_line_2): Use SYMBOL_LINKAGE_NAME.
* mdebugread.c (parse_symbol): Use SYMBOL_LINKAGE_NAME and
SYMBOL_SET_LINKAGE_NAME.
(mylookup_symbol): Use SYMBOL_LINKAGE_NAME.
* minsyms.c (add_minsym_to_demangled_hash_table): Use
SYMBOL_SEARCH_NAME.
(lookup_minimal_symbol): Use SYMBOL_LINKAGE_NAME or
SYMBOL_MATCHES_SEARCH_NAME, depending on the pass.
* objfiles.h (ALL_OBJFILE_MSYMBOLS): Use SYMBOL_LINKAGE_NAME.
* printcmd.c (build_address_symbolic): Use SYMBOL_LINKAGE_NAME.
(address_info): Use SYMBOL_PRINT_NAME for messages and
SYMBOL_LINKAGE_NAME for lookups.
* sol-thread.c (info_cb): Use SYMBOL_PRINT_NAME for messages.
* stabsread.c (patch_block_stabs, define_symbol)
(read_type, read_enum_type, common_block_end)
(cleanup_undefined_types_1, scan_file_globals): Use
SYMBOL_LINKAGE_NAME, SYMBOL_SET_LINKAGE_NAME, ALL_OBJFILE_MSYMBOLS,
and SYMBOL_PRINT_NAME.
* stack.c (print_frame_args): Use SYMBOL_LINKAGE_NAME.
(print_frame, frame_info): Use SYMBOL_PRINT_NAME for output. Use
cp_remove_params instead of cplus_demangle.
(print_block_frame_labels, print_frame_arg_vars): Use
SYMBOL_LINKAGE_NAME.
* symmisc.c (dump_msymbols): Use ALL_OBJFILE_MSYMBOLS and
SYMBOL_LINKAGE_NAME.
(dump_symtab_1, print_symbol, print_partial_symbols)
(maintenance_check_symtabs): Use SYMBOL_LINKAGE_NAME.
* symtab.h (DEPRECATED_SYMBOL_NAME): Delete.
(SYMBOL_SET_LINKAGE_NAME): New.
(SYMBOL_SET_NAMES): Add a comment.
* tracepoint.c (set_traceframe_context, validate_actionline)
(collect_symbol, scope_info): Use SYMBOL_LINKAGE_NAME for
lookups and SYMBOL_PRINT_NAME for output.
* typeprint.c (typedef_print): Use SYMBOL_LINKAGE_NAME.
* xcoffread.c (process_xcoff_symbol): Use SYMBOL_SET_LINKAGE_NAME.
2008-08-22 02:14:39 +08:00
|
|
|
char *
|
|
|
|
cp_remove_params (const char *demangled_name)
|
2005-03-27 05:56:46 +08:00
|
|
|
{
|
|
|
|
int done = 0;
|
|
|
|
struct demangle_component *ret_comp;
|
2011-08-19 00:17:39 +08:00
|
|
|
struct demangle_parse_info *info;
|
2005-03-27 05:56:46 +08:00
|
|
|
char *ret = NULL;
|
|
|
|
|
|
|
|
if (demangled_name == NULL)
|
|
|
|
return NULL;
|
|
|
|
|
2011-08-19 00:17:39 +08:00
|
|
|
info = cp_demangled_name_to_comp (demangled_name, NULL);
|
|
|
|
if (info == NULL)
|
2005-03-27 05:56:46 +08:00
|
|
|
return NULL;
|
|
|
|
|
|
|
|
/* First strip off any qualifiers, if we have a function or method. */
|
2011-08-19 00:17:39 +08:00
|
|
|
ret_comp = info->tree;
|
2005-03-27 05:56:46 +08:00
|
|
|
while (!done)
|
|
|
|
switch (ret_comp->type)
|
|
|
|
{
|
|
|
|
case DEMANGLE_COMPONENT_CONST:
|
|
|
|
case DEMANGLE_COMPONENT_RESTRICT:
|
|
|
|
case DEMANGLE_COMPONENT_VOLATILE:
|
|
|
|
case DEMANGLE_COMPONENT_CONST_THIS:
|
|
|
|
case DEMANGLE_COMPONENT_RESTRICT_THIS:
|
|
|
|
case DEMANGLE_COMPONENT_VOLATILE_THIS:
|
|
|
|
case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL:
|
|
|
|
ret_comp = d_left (ret_comp);
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
done = 1;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* What we have now should be a function. Return its name. */
|
|
|
|
if (ret_comp->type == DEMANGLE_COMPONENT_TYPED_NAME)
|
|
|
|
ret = cp_comp_to_string (d_left (ret_comp), 10);
|
|
|
|
|
2011-08-19 00:17:39 +08:00
|
|
|
cp_demangled_name_parse_free (info);
|
2005-03-27 05:56:46 +08:00
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
2005-03-11 10:24:23 +08:00
|
|
|
/* Here are some random pieces of trivia to keep in mind while trying
|
|
|
|
to take apart demangled names:
|
2002-09-14 10:09:39 +08:00
|
|
|
|
2005-03-11 10:24:23 +08:00
|
|
|
- Names can contain function arguments or templates, so the process
|
|
|
|
has to be, to some extent recursive: maybe keep track of your
|
|
|
|
depth based on encountering <> and ().
|
|
|
|
|
|
|
|
- Parentheses don't just have to happen at the end of a name: they
|
|
|
|
can occur even if the name in question isn't a function, because
|
|
|
|
a template argument might be a type that's a function.
|
|
|
|
|
|
|
|
- Conversely, even if you're trying to deal with a function, its
|
|
|
|
demangled name might not end with ')': it could be a const or
|
|
|
|
volatile class method, in which case it ends with "const" or
|
|
|
|
"volatile".
|
|
|
|
|
|
|
|
- Parentheses are also used in anonymous namespaces: a variable
|
|
|
|
'foo' in an anonymous namespace gets demangled as "(anonymous
|
|
|
|
namespace)::foo".
|
|
|
|
|
|
|
|
- And operator names can contain parentheses or angle brackets. */
|
|
|
|
|
|
|
|
/* FIXME: carlton/2003-03-13: We have several functions here with
|
|
|
|
overlapping functionality; can we combine them? Also, do they
|
|
|
|
handle all the above considerations correctly? */
|
2002-09-14 10:09:39 +08:00
|
|
|
|
2003-04-15 David Carlton <carlton@math.stanford.edu>
* Makefile.in (SFILES): Add cp-namespace.c.
(COMMON_OBS): Add cp-namespace.o.
(block.o): Depend on gdb_obstack_h and cp_support_h.
(buildsym.o): Depend on cp_support_h.
(cp-namespace.o): New.
(cp-support.o): Depend on gdb_string_h, demangle_h, gdb_assert_h,
gdb_obstack_h, symtab_h, symfile_h, and gdbcmd_h.
(dwarf2read.o): Depend on cp_support_h.
* jv-lang.c (get_java_class_symtab): Set BLOCK_NAMESPACE.
* dwarf2read.c (process_die): Set processing_has_namespace_info,
processing_current_namespace.
(read_namespace): Update processing_current_namespace; check for
anonymous namespaces.
(dwarf2_name): New function.
(dwarf2_extension): Ditto.
* cp-support.h: Update copyright, contributors.
Add inclusion guards.
Add opaque declaration for structs obstack, block, symbol.
(struct using_direct): New struct.
Add declarations for cp_find_first_component,
cp_entire_prefix_len, processing_has_namespace_info,
processing_current_namespace, cp_is_anonymous,
cp_add_using_directive, cp_initialize_namespace,
cp_finalize_namespace, cp_set_block_scope,
cp_scan_for_anonymous_namespaces.
* cp-namespace.c: New file.
* cp-support.c: Update copyright.
Include ctype.h, gdb_assert.h, gdbcmd.h.
New variable maint_cplus_cmd_list.
(cp_find_first_component): New function.
(cp_entire_prefix_len, maint_cplus_command)
(first_component_command, _initialize_cp_support): Ditto.
* buildsym.c: Include cp-support.h.
New variable using_list.
(add_symbol_to_list): Check for anonymous namespaces.
(finish_block): Set block's scope.
(start_symtab): Initialize C++ namespace support.
(end_symtab): Finalize C++ namespace support.
* block.h: Add opaque declarations for structs
block_namespace_info, using_direct, and obstack.
Add declarations for block_set_scope and block_set_using.
(struct block): Add 'language_specific' member.
(BLOCK_NAMESPACE): New macro.
* block.c: Include gdb_obstack.h and cp-support.h.
(struct block_namespace_info): New struct.
(block_set_scope): New function.
(block_set_using, block_initialize_namespace): Ditto.
2003-04-15 David Carlton <carlton@math.stanford.edu>
* gdb.c++/maint.exp: New file.
2003-04-16 07:07:11 +08:00
|
|
|
|
|
|
|
/* This returns the length of first component of NAME, which should be
|
|
|
|
the demangled name of a C++ variable/function/method/etc.
|
|
|
|
Specifically, it returns the index of the first colon forming the
|
|
|
|
boundary of the first component: so, given 'A::foo' or 'A::B::foo'
|
|
|
|
it returns the 1, and given 'foo', it returns 0. */
|
|
|
|
|
2003-07-01 00:21:16 +08:00
|
|
|
/* The character in NAME indexed by the return value is guaranteed to
|
|
|
|
always be either ':' or '\0'. */
|
2003-04-15 David Carlton <carlton@math.stanford.edu>
* Makefile.in (SFILES): Add cp-namespace.c.
(COMMON_OBS): Add cp-namespace.o.
(block.o): Depend on gdb_obstack_h and cp_support_h.
(buildsym.o): Depend on cp_support_h.
(cp-namespace.o): New.
(cp-support.o): Depend on gdb_string_h, demangle_h, gdb_assert_h,
gdb_obstack_h, symtab_h, symfile_h, and gdbcmd_h.
(dwarf2read.o): Depend on cp_support_h.
* jv-lang.c (get_java_class_symtab): Set BLOCK_NAMESPACE.
* dwarf2read.c (process_die): Set processing_has_namespace_info,
processing_current_namespace.
(read_namespace): Update processing_current_namespace; check for
anonymous namespaces.
(dwarf2_name): New function.
(dwarf2_extension): Ditto.
* cp-support.h: Update copyright, contributors.
Add inclusion guards.
Add opaque declaration for structs obstack, block, symbol.
(struct using_direct): New struct.
Add declarations for cp_find_first_component,
cp_entire_prefix_len, processing_has_namespace_info,
processing_current_namespace, cp_is_anonymous,
cp_add_using_directive, cp_initialize_namespace,
cp_finalize_namespace, cp_set_block_scope,
cp_scan_for_anonymous_namespaces.
* cp-namespace.c: New file.
* cp-support.c: Update copyright.
Include ctype.h, gdb_assert.h, gdbcmd.h.
New variable maint_cplus_cmd_list.
(cp_find_first_component): New function.
(cp_entire_prefix_len, maint_cplus_command)
(first_component_command, _initialize_cp_support): Ditto.
* buildsym.c: Include cp-support.h.
New variable using_list.
(add_symbol_to_list): Check for anonymous namespaces.
(finish_block): Set block's scope.
(start_symtab): Initialize C++ namespace support.
(end_symtab): Finalize C++ namespace support.
* block.h: Add opaque declarations for structs
block_namespace_info, using_direct, and obstack.
Add declarations for block_set_scope and block_set_using.
(struct block): Add 'language_specific' member.
(BLOCK_NAMESPACE): New macro.
* block.c: Include gdb_obstack.h and cp-support.h.
(struct block_namespace_info): New struct.
(block_set_scope): New function.
(block_set_using, block_initialize_namespace): Ditto.
2003-04-15 David Carlton <carlton@math.stanford.edu>
* gdb.c++/maint.exp: New file.
2003-04-16 07:07:11 +08:00
|
|
|
|
|
|
|
/* NOTE: carlton/2003-03-13: This function is currently only intended
|
|
|
|
for internal use: it's probably not entirely safe when called on
|
2003-07-01 00:21:16 +08:00
|
|
|
user-generated input, because some of the 'index += 2' lines in
|
|
|
|
cp_find_first_component_aux might go past the end of malformed
|
|
|
|
input. */
|
|
|
|
|
|
|
|
unsigned int
|
|
|
|
cp_find_first_component (const char *name)
|
|
|
|
{
|
|
|
|
return cp_find_first_component_aux (name, 0);
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Helper function for cp_find_first_component. Like that function,
|
|
|
|
it returns the length of the first component of NAME, but to make
|
|
|
|
the recursion easier, it also stops if it reaches an unexpected ')'
|
|
|
|
or '>' if the value of PERMISSIVE is nonzero. */
|
2003-04-15 David Carlton <carlton@math.stanford.edu>
* Makefile.in (SFILES): Add cp-namespace.c.
(COMMON_OBS): Add cp-namespace.o.
(block.o): Depend on gdb_obstack_h and cp_support_h.
(buildsym.o): Depend on cp_support_h.
(cp-namespace.o): New.
(cp-support.o): Depend on gdb_string_h, demangle_h, gdb_assert_h,
gdb_obstack_h, symtab_h, symfile_h, and gdbcmd_h.
(dwarf2read.o): Depend on cp_support_h.
* jv-lang.c (get_java_class_symtab): Set BLOCK_NAMESPACE.
* dwarf2read.c (process_die): Set processing_has_namespace_info,
processing_current_namespace.
(read_namespace): Update processing_current_namespace; check for
anonymous namespaces.
(dwarf2_name): New function.
(dwarf2_extension): Ditto.
* cp-support.h: Update copyright, contributors.
Add inclusion guards.
Add opaque declaration for structs obstack, block, symbol.
(struct using_direct): New struct.
Add declarations for cp_find_first_component,
cp_entire_prefix_len, processing_has_namespace_info,
processing_current_namespace, cp_is_anonymous,
cp_add_using_directive, cp_initialize_namespace,
cp_finalize_namespace, cp_set_block_scope,
cp_scan_for_anonymous_namespaces.
* cp-namespace.c: New file.
* cp-support.c: Update copyright.
Include ctype.h, gdb_assert.h, gdbcmd.h.
New variable maint_cplus_cmd_list.
(cp_find_first_component): New function.
(cp_entire_prefix_len, maint_cplus_command)
(first_component_command, _initialize_cp_support): Ditto.
* buildsym.c: Include cp-support.h.
New variable using_list.
(add_symbol_to_list): Check for anonymous namespaces.
(finish_block): Set block's scope.
(start_symtab): Initialize C++ namespace support.
(end_symtab): Finalize C++ namespace support.
* block.h: Add opaque declarations for structs
block_namespace_info, using_direct, and obstack.
Add declarations for block_set_scope and block_set_using.
(struct block): Add 'language_specific' member.
(BLOCK_NAMESPACE): New macro.
* block.c: Include gdb_obstack.h and cp-support.h.
(struct block_namespace_info): New struct.
(block_set_scope): New function.
(block_set_using, block_initialize_namespace): Ditto.
2003-04-15 David Carlton <carlton@math.stanford.edu>
* gdb.c++/maint.exp: New file.
2003-04-16 07:07:11 +08:00
|
|
|
|
|
|
|
/* Let's optimize away calls to strlen("operator"). */
|
|
|
|
|
|
|
|
#define LENGTH_OF_OPERATOR 8
|
|
|
|
|
2003-07-01 00:21:16 +08:00
|
|
|
static unsigned int
|
|
|
|
cp_find_first_component_aux (const char *name, int permissive)
|
2003-04-15 David Carlton <carlton@math.stanford.edu>
* Makefile.in (SFILES): Add cp-namespace.c.
(COMMON_OBS): Add cp-namespace.o.
(block.o): Depend on gdb_obstack_h and cp_support_h.
(buildsym.o): Depend on cp_support_h.
(cp-namespace.o): New.
(cp-support.o): Depend on gdb_string_h, demangle_h, gdb_assert_h,
gdb_obstack_h, symtab_h, symfile_h, and gdbcmd_h.
(dwarf2read.o): Depend on cp_support_h.
* jv-lang.c (get_java_class_symtab): Set BLOCK_NAMESPACE.
* dwarf2read.c (process_die): Set processing_has_namespace_info,
processing_current_namespace.
(read_namespace): Update processing_current_namespace; check for
anonymous namespaces.
(dwarf2_name): New function.
(dwarf2_extension): Ditto.
* cp-support.h: Update copyright, contributors.
Add inclusion guards.
Add opaque declaration for structs obstack, block, symbol.
(struct using_direct): New struct.
Add declarations for cp_find_first_component,
cp_entire_prefix_len, processing_has_namespace_info,
processing_current_namespace, cp_is_anonymous,
cp_add_using_directive, cp_initialize_namespace,
cp_finalize_namespace, cp_set_block_scope,
cp_scan_for_anonymous_namespaces.
* cp-namespace.c: New file.
* cp-support.c: Update copyright.
Include ctype.h, gdb_assert.h, gdbcmd.h.
New variable maint_cplus_cmd_list.
(cp_find_first_component): New function.
(cp_entire_prefix_len, maint_cplus_command)
(first_component_command, _initialize_cp_support): Ditto.
* buildsym.c: Include cp-support.h.
New variable using_list.
(add_symbol_to_list): Check for anonymous namespaces.
(finish_block): Set block's scope.
(start_symtab): Initialize C++ namespace support.
(end_symtab): Finalize C++ namespace support.
* block.h: Add opaque declarations for structs
block_namespace_info, using_direct, and obstack.
Add declarations for block_set_scope and block_set_using.
(struct block): Add 'language_specific' member.
(BLOCK_NAMESPACE): New macro.
* block.c: Include gdb_obstack.h and cp-support.h.
(struct block_namespace_info): New struct.
(block_set_scope): New function.
(block_set_using, block_initialize_namespace): Ditto.
2003-04-15 David Carlton <carlton@math.stanford.edu>
* gdb.c++/maint.exp: New file.
2003-04-16 07:07:11 +08:00
|
|
|
{
|
|
|
|
unsigned int index = 0;
|
2003-04-24 07:45:24 +08:00
|
|
|
/* Operator names can show up in unexpected places. Since these can
|
|
|
|
contain parentheses or angle brackets, they can screw up the
|
|
|
|
recursion. But not every string 'operator' is part of an
|
|
|
|
operater name: e.g. you could have a variable 'cooperator'. So
|
|
|
|
this variable tells us whether or not we should treat the string
|
|
|
|
'operator' as starting an operator. */
|
|
|
|
int operator_possible = 1;
|
2003-04-15 David Carlton <carlton@math.stanford.edu>
* Makefile.in (SFILES): Add cp-namespace.c.
(COMMON_OBS): Add cp-namespace.o.
(block.o): Depend on gdb_obstack_h and cp_support_h.
(buildsym.o): Depend on cp_support_h.
(cp-namespace.o): New.
(cp-support.o): Depend on gdb_string_h, demangle_h, gdb_assert_h,
gdb_obstack_h, symtab_h, symfile_h, and gdbcmd_h.
(dwarf2read.o): Depend on cp_support_h.
* jv-lang.c (get_java_class_symtab): Set BLOCK_NAMESPACE.
* dwarf2read.c (process_die): Set processing_has_namespace_info,
processing_current_namespace.
(read_namespace): Update processing_current_namespace; check for
anonymous namespaces.
(dwarf2_name): New function.
(dwarf2_extension): Ditto.
* cp-support.h: Update copyright, contributors.
Add inclusion guards.
Add opaque declaration for structs obstack, block, symbol.
(struct using_direct): New struct.
Add declarations for cp_find_first_component,
cp_entire_prefix_len, processing_has_namespace_info,
processing_current_namespace, cp_is_anonymous,
cp_add_using_directive, cp_initialize_namespace,
cp_finalize_namespace, cp_set_block_scope,
cp_scan_for_anonymous_namespaces.
* cp-namespace.c: New file.
* cp-support.c: Update copyright.
Include ctype.h, gdb_assert.h, gdbcmd.h.
New variable maint_cplus_cmd_list.
(cp_find_first_component): New function.
(cp_entire_prefix_len, maint_cplus_command)
(first_component_command, _initialize_cp_support): Ditto.
* buildsym.c: Include cp-support.h.
New variable using_list.
(add_symbol_to_list): Check for anonymous namespaces.
(finish_block): Set block's scope.
(start_symtab): Initialize C++ namespace support.
(end_symtab): Finalize C++ namespace support.
* block.h: Add opaque declarations for structs
block_namespace_info, using_direct, and obstack.
Add declarations for block_set_scope and block_set_using.
(struct block): Add 'language_specific' member.
(BLOCK_NAMESPACE): New macro.
* block.c: Include gdb_obstack.h and cp-support.h.
(struct block_namespace_info): New struct.
(block_set_scope): New function.
(block_set_using, block_initialize_namespace): Ditto.
2003-04-15 David Carlton <carlton@math.stanford.edu>
* gdb.c++/maint.exp: New file.
2003-04-16 07:07:11 +08:00
|
|
|
|
|
|
|
for (;; ++index)
|
|
|
|
{
|
|
|
|
switch (name[index])
|
|
|
|
{
|
|
|
|
case '<':
|
|
|
|
/* Template; eat it up. The calls to cp_first_component
|
|
|
|
should only return (I hope!) when they reach the '>'
|
|
|
|
terminating the component or a '::' between two
|
|
|
|
components. (Hence the '+ 2'.) */
|
|
|
|
index += 1;
|
2003-07-01 00:21:16 +08:00
|
|
|
for (index += cp_find_first_component_aux (name + index, 1);
|
2003-04-15 David Carlton <carlton@math.stanford.edu>
* Makefile.in (SFILES): Add cp-namespace.c.
(COMMON_OBS): Add cp-namespace.o.
(block.o): Depend on gdb_obstack_h and cp_support_h.
(buildsym.o): Depend on cp_support_h.
(cp-namespace.o): New.
(cp-support.o): Depend on gdb_string_h, demangle_h, gdb_assert_h,
gdb_obstack_h, symtab_h, symfile_h, and gdbcmd_h.
(dwarf2read.o): Depend on cp_support_h.
* jv-lang.c (get_java_class_symtab): Set BLOCK_NAMESPACE.
* dwarf2read.c (process_die): Set processing_has_namespace_info,
processing_current_namespace.
(read_namespace): Update processing_current_namespace; check for
anonymous namespaces.
(dwarf2_name): New function.
(dwarf2_extension): Ditto.
* cp-support.h: Update copyright, contributors.
Add inclusion guards.
Add opaque declaration for structs obstack, block, symbol.
(struct using_direct): New struct.
Add declarations for cp_find_first_component,
cp_entire_prefix_len, processing_has_namespace_info,
processing_current_namespace, cp_is_anonymous,
cp_add_using_directive, cp_initialize_namespace,
cp_finalize_namespace, cp_set_block_scope,
cp_scan_for_anonymous_namespaces.
* cp-namespace.c: New file.
* cp-support.c: Update copyright.
Include ctype.h, gdb_assert.h, gdbcmd.h.
New variable maint_cplus_cmd_list.
(cp_find_first_component): New function.
(cp_entire_prefix_len, maint_cplus_command)
(first_component_command, _initialize_cp_support): Ditto.
* buildsym.c: Include cp-support.h.
New variable using_list.
(add_symbol_to_list): Check for anonymous namespaces.
(finish_block): Set block's scope.
(start_symtab): Initialize C++ namespace support.
(end_symtab): Finalize C++ namespace support.
* block.h: Add opaque declarations for structs
block_namespace_info, using_direct, and obstack.
Add declarations for block_set_scope and block_set_using.
(struct block): Add 'language_specific' member.
(BLOCK_NAMESPACE): New macro.
* block.c: Include gdb_obstack.h and cp-support.h.
(struct block_namespace_info): New struct.
(block_set_scope): New function.
(block_set_using, block_initialize_namespace): Ditto.
2003-04-15 David Carlton <carlton@math.stanford.edu>
* gdb.c++/maint.exp: New file.
2003-04-16 07:07:11 +08:00
|
|
|
name[index] != '>';
|
2003-07-01 00:21:16 +08:00
|
|
|
index += cp_find_first_component_aux (name + index, 1))
|
2003-04-15 David Carlton <carlton@math.stanford.edu>
* Makefile.in (SFILES): Add cp-namespace.c.
(COMMON_OBS): Add cp-namespace.o.
(block.o): Depend on gdb_obstack_h and cp_support_h.
(buildsym.o): Depend on cp_support_h.
(cp-namespace.o): New.
(cp-support.o): Depend on gdb_string_h, demangle_h, gdb_assert_h,
gdb_obstack_h, symtab_h, symfile_h, and gdbcmd_h.
(dwarf2read.o): Depend on cp_support_h.
* jv-lang.c (get_java_class_symtab): Set BLOCK_NAMESPACE.
* dwarf2read.c (process_die): Set processing_has_namespace_info,
processing_current_namespace.
(read_namespace): Update processing_current_namespace; check for
anonymous namespaces.
(dwarf2_name): New function.
(dwarf2_extension): Ditto.
* cp-support.h: Update copyright, contributors.
Add inclusion guards.
Add opaque declaration for structs obstack, block, symbol.
(struct using_direct): New struct.
Add declarations for cp_find_first_component,
cp_entire_prefix_len, processing_has_namespace_info,
processing_current_namespace, cp_is_anonymous,
cp_add_using_directive, cp_initialize_namespace,
cp_finalize_namespace, cp_set_block_scope,
cp_scan_for_anonymous_namespaces.
* cp-namespace.c: New file.
* cp-support.c: Update copyright.
Include ctype.h, gdb_assert.h, gdbcmd.h.
New variable maint_cplus_cmd_list.
(cp_find_first_component): New function.
(cp_entire_prefix_len, maint_cplus_command)
(first_component_command, _initialize_cp_support): Ditto.
* buildsym.c: Include cp-support.h.
New variable using_list.
(add_symbol_to_list): Check for anonymous namespaces.
(finish_block): Set block's scope.
(start_symtab): Initialize C++ namespace support.
(end_symtab): Finalize C++ namespace support.
* block.h: Add opaque declarations for structs
block_namespace_info, using_direct, and obstack.
Add declarations for block_set_scope and block_set_using.
(struct block): Add 'language_specific' member.
(BLOCK_NAMESPACE): New macro.
* block.c: Include gdb_obstack.h and cp-support.h.
(struct block_namespace_info): New struct.
(block_set_scope): New function.
(block_set_using, block_initialize_namespace): Ditto.
2003-04-15 David Carlton <carlton@math.stanford.edu>
* gdb.c++/maint.exp: New file.
2003-04-16 07:07:11 +08:00
|
|
|
{
|
2003-07-01 00:21:16 +08:00
|
|
|
if (name[index] != ':')
|
|
|
|
{
|
|
|
|
demangled_name_complaint (name);
|
|
|
|
return strlen (name);
|
|
|
|
}
|
2003-04-15 David Carlton <carlton@math.stanford.edu>
* Makefile.in (SFILES): Add cp-namespace.c.
(COMMON_OBS): Add cp-namespace.o.
(block.o): Depend on gdb_obstack_h and cp_support_h.
(buildsym.o): Depend on cp_support_h.
(cp-namespace.o): New.
(cp-support.o): Depend on gdb_string_h, demangle_h, gdb_assert_h,
gdb_obstack_h, symtab_h, symfile_h, and gdbcmd_h.
(dwarf2read.o): Depend on cp_support_h.
* jv-lang.c (get_java_class_symtab): Set BLOCK_NAMESPACE.
* dwarf2read.c (process_die): Set processing_has_namespace_info,
processing_current_namespace.
(read_namespace): Update processing_current_namespace; check for
anonymous namespaces.
(dwarf2_name): New function.
(dwarf2_extension): Ditto.
* cp-support.h: Update copyright, contributors.
Add inclusion guards.
Add opaque declaration for structs obstack, block, symbol.
(struct using_direct): New struct.
Add declarations for cp_find_first_component,
cp_entire_prefix_len, processing_has_namespace_info,
processing_current_namespace, cp_is_anonymous,
cp_add_using_directive, cp_initialize_namespace,
cp_finalize_namespace, cp_set_block_scope,
cp_scan_for_anonymous_namespaces.
* cp-namespace.c: New file.
* cp-support.c: Update copyright.
Include ctype.h, gdb_assert.h, gdbcmd.h.
New variable maint_cplus_cmd_list.
(cp_find_first_component): New function.
(cp_entire_prefix_len, maint_cplus_command)
(first_component_command, _initialize_cp_support): Ditto.
* buildsym.c: Include cp-support.h.
New variable using_list.
(add_symbol_to_list): Check for anonymous namespaces.
(finish_block): Set block's scope.
(start_symtab): Initialize C++ namespace support.
(end_symtab): Finalize C++ namespace support.
* block.h: Add opaque declarations for structs
block_namespace_info, using_direct, and obstack.
Add declarations for block_set_scope and block_set_using.
(struct block): Add 'language_specific' member.
(BLOCK_NAMESPACE): New macro.
* block.c: Include gdb_obstack.h and cp-support.h.
(struct block_namespace_info): New struct.
(block_set_scope): New function.
(block_set_using, block_initialize_namespace): Ditto.
2003-04-15 David Carlton <carlton@math.stanford.edu>
* gdb.c++/maint.exp: New file.
2003-04-16 07:07:11 +08:00
|
|
|
index += 2;
|
|
|
|
}
|
2003-04-24 07:45:24 +08:00
|
|
|
operator_possible = 1;
|
2003-04-15 David Carlton <carlton@math.stanford.edu>
* Makefile.in (SFILES): Add cp-namespace.c.
(COMMON_OBS): Add cp-namespace.o.
(block.o): Depend on gdb_obstack_h and cp_support_h.
(buildsym.o): Depend on cp_support_h.
(cp-namespace.o): New.
(cp-support.o): Depend on gdb_string_h, demangle_h, gdb_assert_h,
gdb_obstack_h, symtab_h, symfile_h, and gdbcmd_h.
(dwarf2read.o): Depend on cp_support_h.
* jv-lang.c (get_java_class_symtab): Set BLOCK_NAMESPACE.
* dwarf2read.c (process_die): Set processing_has_namespace_info,
processing_current_namespace.
(read_namespace): Update processing_current_namespace; check for
anonymous namespaces.
(dwarf2_name): New function.
(dwarf2_extension): Ditto.
* cp-support.h: Update copyright, contributors.
Add inclusion guards.
Add opaque declaration for structs obstack, block, symbol.
(struct using_direct): New struct.
Add declarations for cp_find_first_component,
cp_entire_prefix_len, processing_has_namespace_info,
processing_current_namespace, cp_is_anonymous,
cp_add_using_directive, cp_initialize_namespace,
cp_finalize_namespace, cp_set_block_scope,
cp_scan_for_anonymous_namespaces.
* cp-namespace.c: New file.
* cp-support.c: Update copyright.
Include ctype.h, gdb_assert.h, gdbcmd.h.
New variable maint_cplus_cmd_list.
(cp_find_first_component): New function.
(cp_entire_prefix_len, maint_cplus_command)
(first_component_command, _initialize_cp_support): Ditto.
* buildsym.c: Include cp-support.h.
New variable using_list.
(add_symbol_to_list): Check for anonymous namespaces.
(finish_block): Set block's scope.
(start_symtab): Initialize C++ namespace support.
(end_symtab): Finalize C++ namespace support.
* block.h: Add opaque declarations for structs
block_namespace_info, using_direct, and obstack.
Add declarations for block_set_scope and block_set_using.
(struct block): Add 'language_specific' member.
(BLOCK_NAMESPACE): New macro.
* block.c: Include gdb_obstack.h and cp-support.h.
(struct block_namespace_info): New struct.
(block_set_scope): New function.
(block_set_using, block_initialize_namespace): Ditto.
2003-04-15 David Carlton <carlton@math.stanford.edu>
* gdb.c++/maint.exp: New file.
2003-04-16 07:07:11 +08:00
|
|
|
break;
|
|
|
|
case '(':
|
|
|
|
/* Similar comment as to '<'. */
|
|
|
|
index += 1;
|
2003-07-01 00:21:16 +08:00
|
|
|
for (index += cp_find_first_component_aux (name + index, 1);
|
2003-04-15 David Carlton <carlton@math.stanford.edu>
* Makefile.in (SFILES): Add cp-namespace.c.
(COMMON_OBS): Add cp-namespace.o.
(block.o): Depend on gdb_obstack_h and cp_support_h.
(buildsym.o): Depend on cp_support_h.
(cp-namespace.o): New.
(cp-support.o): Depend on gdb_string_h, demangle_h, gdb_assert_h,
gdb_obstack_h, symtab_h, symfile_h, and gdbcmd_h.
(dwarf2read.o): Depend on cp_support_h.
* jv-lang.c (get_java_class_symtab): Set BLOCK_NAMESPACE.
* dwarf2read.c (process_die): Set processing_has_namespace_info,
processing_current_namespace.
(read_namespace): Update processing_current_namespace; check for
anonymous namespaces.
(dwarf2_name): New function.
(dwarf2_extension): Ditto.
* cp-support.h: Update copyright, contributors.
Add inclusion guards.
Add opaque declaration for structs obstack, block, symbol.
(struct using_direct): New struct.
Add declarations for cp_find_first_component,
cp_entire_prefix_len, processing_has_namespace_info,
processing_current_namespace, cp_is_anonymous,
cp_add_using_directive, cp_initialize_namespace,
cp_finalize_namespace, cp_set_block_scope,
cp_scan_for_anonymous_namespaces.
* cp-namespace.c: New file.
* cp-support.c: Update copyright.
Include ctype.h, gdb_assert.h, gdbcmd.h.
New variable maint_cplus_cmd_list.
(cp_find_first_component): New function.
(cp_entire_prefix_len, maint_cplus_command)
(first_component_command, _initialize_cp_support): Ditto.
* buildsym.c: Include cp-support.h.
New variable using_list.
(add_symbol_to_list): Check for anonymous namespaces.
(finish_block): Set block's scope.
(start_symtab): Initialize C++ namespace support.
(end_symtab): Finalize C++ namespace support.
* block.h: Add opaque declarations for structs
block_namespace_info, using_direct, and obstack.
Add declarations for block_set_scope and block_set_using.
(struct block): Add 'language_specific' member.
(BLOCK_NAMESPACE): New macro.
* block.c: Include gdb_obstack.h and cp-support.h.
(struct block_namespace_info): New struct.
(block_set_scope): New function.
(block_set_using, block_initialize_namespace): Ditto.
2003-04-15 David Carlton <carlton@math.stanford.edu>
* gdb.c++/maint.exp: New file.
2003-04-16 07:07:11 +08:00
|
|
|
name[index] != ')';
|
2003-07-01 00:21:16 +08:00
|
|
|
index += cp_find_first_component_aux (name + index, 1))
|
2003-04-15 David Carlton <carlton@math.stanford.edu>
* Makefile.in (SFILES): Add cp-namespace.c.
(COMMON_OBS): Add cp-namespace.o.
(block.o): Depend on gdb_obstack_h and cp_support_h.
(buildsym.o): Depend on cp_support_h.
(cp-namespace.o): New.
(cp-support.o): Depend on gdb_string_h, demangle_h, gdb_assert_h,
gdb_obstack_h, symtab_h, symfile_h, and gdbcmd_h.
(dwarf2read.o): Depend on cp_support_h.
* jv-lang.c (get_java_class_symtab): Set BLOCK_NAMESPACE.
* dwarf2read.c (process_die): Set processing_has_namespace_info,
processing_current_namespace.
(read_namespace): Update processing_current_namespace; check for
anonymous namespaces.
(dwarf2_name): New function.
(dwarf2_extension): Ditto.
* cp-support.h: Update copyright, contributors.
Add inclusion guards.
Add opaque declaration for structs obstack, block, symbol.
(struct using_direct): New struct.
Add declarations for cp_find_first_component,
cp_entire_prefix_len, processing_has_namespace_info,
processing_current_namespace, cp_is_anonymous,
cp_add_using_directive, cp_initialize_namespace,
cp_finalize_namespace, cp_set_block_scope,
cp_scan_for_anonymous_namespaces.
* cp-namespace.c: New file.
* cp-support.c: Update copyright.
Include ctype.h, gdb_assert.h, gdbcmd.h.
New variable maint_cplus_cmd_list.
(cp_find_first_component): New function.
(cp_entire_prefix_len, maint_cplus_command)
(first_component_command, _initialize_cp_support): Ditto.
* buildsym.c: Include cp-support.h.
New variable using_list.
(add_symbol_to_list): Check for anonymous namespaces.
(finish_block): Set block's scope.
(start_symtab): Initialize C++ namespace support.
(end_symtab): Finalize C++ namespace support.
* block.h: Add opaque declarations for structs
block_namespace_info, using_direct, and obstack.
Add declarations for block_set_scope and block_set_using.
(struct block): Add 'language_specific' member.
(BLOCK_NAMESPACE): New macro.
* block.c: Include gdb_obstack.h and cp-support.h.
(struct block_namespace_info): New struct.
(block_set_scope): New function.
(block_set_using, block_initialize_namespace): Ditto.
2003-04-15 David Carlton <carlton@math.stanford.edu>
* gdb.c++/maint.exp: New file.
2003-04-16 07:07:11 +08:00
|
|
|
{
|
2003-07-01 00:21:16 +08:00
|
|
|
if (name[index] != ':')
|
|
|
|
{
|
|
|
|
demangled_name_complaint (name);
|
|
|
|
return strlen (name);
|
|
|
|
}
|
2003-04-15 David Carlton <carlton@math.stanford.edu>
* Makefile.in (SFILES): Add cp-namespace.c.
(COMMON_OBS): Add cp-namespace.o.
(block.o): Depend on gdb_obstack_h and cp_support_h.
(buildsym.o): Depend on cp_support_h.
(cp-namespace.o): New.
(cp-support.o): Depend on gdb_string_h, demangle_h, gdb_assert_h,
gdb_obstack_h, symtab_h, symfile_h, and gdbcmd_h.
(dwarf2read.o): Depend on cp_support_h.
* jv-lang.c (get_java_class_symtab): Set BLOCK_NAMESPACE.
* dwarf2read.c (process_die): Set processing_has_namespace_info,
processing_current_namespace.
(read_namespace): Update processing_current_namespace; check for
anonymous namespaces.
(dwarf2_name): New function.
(dwarf2_extension): Ditto.
* cp-support.h: Update copyright, contributors.
Add inclusion guards.
Add opaque declaration for structs obstack, block, symbol.
(struct using_direct): New struct.
Add declarations for cp_find_first_component,
cp_entire_prefix_len, processing_has_namespace_info,
processing_current_namespace, cp_is_anonymous,
cp_add_using_directive, cp_initialize_namespace,
cp_finalize_namespace, cp_set_block_scope,
cp_scan_for_anonymous_namespaces.
* cp-namespace.c: New file.
* cp-support.c: Update copyright.
Include ctype.h, gdb_assert.h, gdbcmd.h.
New variable maint_cplus_cmd_list.
(cp_find_first_component): New function.
(cp_entire_prefix_len, maint_cplus_command)
(first_component_command, _initialize_cp_support): Ditto.
* buildsym.c: Include cp-support.h.
New variable using_list.
(add_symbol_to_list): Check for anonymous namespaces.
(finish_block): Set block's scope.
(start_symtab): Initialize C++ namespace support.
(end_symtab): Finalize C++ namespace support.
* block.h: Add opaque declarations for structs
block_namespace_info, using_direct, and obstack.
Add declarations for block_set_scope and block_set_using.
(struct block): Add 'language_specific' member.
(BLOCK_NAMESPACE): New macro.
* block.c: Include gdb_obstack.h and cp-support.h.
(struct block_namespace_info): New struct.
(block_set_scope): New function.
(block_set_using, block_initialize_namespace): Ditto.
2003-04-15 David Carlton <carlton@math.stanford.edu>
* gdb.c++/maint.exp: New file.
2003-04-16 07:07:11 +08:00
|
|
|
index += 2;
|
|
|
|
}
|
2003-04-24 07:45:24 +08:00
|
|
|
operator_possible = 1;
|
2003-04-15 David Carlton <carlton@math.stanford.edu>
* Makefile.in (SFILES): Add cp-namespace.c.
(COMMON_OBS): Add cp-namespace.o.
(block.o): Depend on gdb_obstack_h and cp_support_h.
(buildsym.o): Depend on cp_support_h.
(cp-namespace.o): New.
(cp-support.o): Depend on gdb_string_h, demangle_h, gdb_assert_h,
gdb_obstack_h, symtab_h, symfile_h, and gdbcmd_h.
(dwarf2read.o): Depend on cp_support_h.
* jv-lang.c (get_java_class_symtab): Set BLOCK_NAMESPACE.
* dwarf2read.c (process_die): Set processing_has_namespace_info,
processing_current_namespace.
(read_namespace): Update processing_current_namespace; check for
anonymous namespaces.
(dwarf2_name): New function.
(dwarf2_extension): Ditto.
* cp-support.h: Update copyright, contributors.
Add inclusion guards.
Add opaque declaration for structs obstack, block, symbol.
(struct using_direct): New struct.
Add declarations for cp_find_first_component,
cp_entire_prefix_len, processing_has_namespace_info,
processing_current_namespace, cp_is_anonymous,
cp_add_using_directive, cp_initialize_namespace,
cp_finalize_namespace, cp_set_block_scope,
cp_scan_for_anonymous_namespaces.
* cp-namespace.c: New file.
* cp-support.c: Update copyright.
Include ctype.h, gdb_assert.h, gdbcmd.h.
New variable maint_cplus_cmd_list.
(cp_find_first_component): New function.
(cp_entire_prefix_len, maint_cplus_command)
(first_component_command, _initialize_cp_support): Ditto.
* buildsym.c: Include cp-support.h.
New variable using_list.
(add_symbol_to_list): Check for anonymous namespaces.
(finish_block): Set block's scope.
(start_symtab): Initialize C++ namespace support.
(end_symtab): Finalize C++ namespace support.
* block.h: Add opaque declarations for structs
block_namespace_info, using_direct, and obstack.
Add declarations for block_set_scope and block_set_using.
(struct block): Add 'language_specific' member.
(BLOCK_NAMESPACE): New macro.
* block.c: Include gdb_obstack.h and cp-support.h.
(struct block_namespace_info): New struct.
(block_set_scope): New function.
(block_set_using, block_initialize_namespace): Ditto.
2003-04-15 David Carlton <carlton@math.stanford.edu>
* gdb.c++/maint.exp: New file.
2003-04-16 07:07:11 +08:00
|
|
|
break;
|
|
|
|
case '>':
|
|
|
|
case ')':
|
2003-07-01 00:21:16 +08:00
|
|
|
if (permissive)
|
2003-07-01 00:23:29 +08:00
|
|
|
return index;
|
2003-07-01 00:21:16 +08:00
|
|
|
else
|
|
|
|
{
|
|
|
|
demangled_name_complaint (name);
|
|
|
|
return strlen (name);
|
|
|
|
}
|
2003-04-15 David Carlton <carlton@math.stanford.edu>
* Makefile.in (SFILES): Add cp-namespace.c.
(COMMON_OBS): Add cp-namespace.o.
(block.o): Depend on gdb_obstack_h and cp_support_h.
(buildsym.o): Depend on cp_support_h.
(cp-namespace.o): New.
(cp-support.o): Depend on gdb_string_h, demangle_h, gdb_assert_h,
gdb_obstack_h, symtab_h, symfile_h, and gdbcmd_h.
(dwarf2read.o): Depend on cp_support_h.
* jv-lang.c (get_java_class_symtab): Set BLOCK_NAMESPACE.
* dwarf2read.c (process_die): Set processing_has_namespace_info,
processing_current_namespace.
(read_namespace): Update processing_current_namespace; check for
anonymous namespaces.
(dwarf2_name): New function.
(dwarf2_extension): Ditto.
* cp-support.h: Update copyright, contributors.
Add inclusion guards.
Add opaque declaration for structs obstack, block, symbol.
(struct using_direct): New struct.
Add declarations for cp_find_first_component,
cp_entire_prefix_len, processing_has_namespace_info,
processing_current_namespace, cp_is_anonymous,
cp_add_using_directive, cp_initialize_namespace,
cp_finalize_namespace, cp_set_block_scope,
cp_scan_for_anonymous_namespaces.
* cp-namespace.c: New file.
* cp-support.c: Update copyright.
Include ctype.h, gdb_assert.h, gdbcmd.h.
New variable maint_cplus_cmd_list.
(cp_find_first_component): New function.
(cp_entire_prefix_len, maint_cplus_command)
(first_component_command, _initialize_cp_support): Ditto.
* buildsym.c: Include cp-support.h.
New variable using_list.
(add_symbol_to_list): Check for anonymous namespaces.
(finish_block): Set block's scope.
(start_symtab): Initialize C++ namespace support.
(end_symtab): Finalize C++ namespace support.
* block.h: Add opaque declarations for structs
block_namespace_info, using_direct, and obstack.
Add declarations for block_set_scope and block_set_using.
(struct block): Add 'language_specific' member.
(BLOCK_NAMESPACE): New macro.
* block.c: Include gdb_obstack.h and cp-support.h.
(struct block_namespace_info): New struct.
(block_set_scope): New function.
(block_set_using, block_initialize_namespace): Ditto.
2003-04-15 David Carlton <carlton@math.stanford.edu>
* gdb.c++/maint.exp: New file.
2003-04-16 07:07:11 +08:00
|
|
|
case '\0':
|
|
|
|
case ':':
|
|
|
|
return index;
|
2003-04-24 07:45:24 +08:00
|
|
|
case 'o':
|
|
|
|
/* Operator names can screw up the recursion. */
|
|
|
|
if (operator_possible
|
2011-01-01 06:59:52 +08:00
|
|
|
&& strncmp (name + index, "operator",
|
|
|
|
LENGTH_OF_OPERATOR) == 0)
|
2003-04-24 07:45:24 +08:00
|
|
|
{
|
|
|
|
index += LENGTH_OF_OPERATOR;
|
2007-10-22 22:37:36 +08:00
|
|
|
while (ISSPACE(name[index]))
|
2003-04-24 07:45:24 +08:00
|
|
|
++index;
|
|
|
|
switch (name[index])
|
|
|
|
{
|
|
|
|
/* Skip over one less than the appropriate number of
|
|
|
|
characters: the for loop will skip over the last
|
|
|
|
one. */
|
|
|
|
case '<':
|
|
|
|
if (name[index + 1] == '<')
|
|
|
|
index += 1;
|
|
|
|
else
|
|
|
|
index += 0;
|
|
|
|
break;
|
|
|
|
case '>':
|
|
|
|
case '-':
|
|
|
|
if (name[index + 1] == '>')
|
|
|
|
index += 1;
|
|
|
|
else
|
|
|
|
index += 0;
|
|
|
|
break;
|
|
|
|
case '(':
|
|
|
|
index += 1;
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
index += 0;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
operator_possible = 0;
|
|
|
|
break;
|
|
|
|
case ' ':
|
|
|
|
case ',':
|
|
|
|
case '.':
|
|
|
|
case '&':
|
|
|
|
case '*':
|
|
|
|
/* NOTE: carlton/2003-04-18: I'm not sure what the precise
|
|
|
|
set of relevant characters are here: it's necessary to
|
|
|
|
include any character that can show up before 'operator'
|
|
|
|
in a demangled name, and it's safe to include any
|
|
|
|
character that can't be part of an identifier's name. */
|
|
|
|
operator_possible = 1;
|
|
|
|
break;
|
2003-04-15 David Carlton <carlton@math.stanford.edu>
* Makefile.in (SFILES): Add cp-namespace.c.
(COMMON_OBS): Add cp-namespace.o.
(block.o): Depend on gdb_obstack_h and cp_support_h.
(buildsym.o): Depend on cp_support_h.
(cp-namespace.o): New.
(cp-support.o): Depend on gdb_string_h, demangle_h, gdb_assert_h,
gdb_obstack_h, symtab_h, symfile_h, and gdbcmd_h.
(dwarf2read.o): Depend on cp_support_h.
* jv-lang.c (get_java_class_symtab): Set BLOCK_NAMESPACE.
* dwarf2read.c (process_die): Set processing_has_namespace_info,
processing_current_namespace.
(read_namespace): Update processing_current_namespace; check for
anonymous namespaces.
(dwarf2_name): New function.
(dwarf2_extension): Ditto.
* cp-support.h: Update copyright, contributors.
Add inclusion guards.
Add opaque declaration for structs obstack, block, symbol.
(struct using_direct): New struct.
Add declarations for cp_find_first_component,
cp_entire_prefix_len, processing_has_namespace_info,
processing_current_namespace, cp_is_anonymous,
cp_add_using_directive, cp_initialize_namespace,
cp_finalize_namespace, cp_set_block_scope,
cp_scan_for_anonymous_namespaces.
* cp-namespace.c: New file.
* cp-support.c: Update copyright.
Include ctype.h, gdb_assert.h, gdbcmd.h.
New variable maint_cplus_cmd_list.
(cp_find_first_component): New function.
(cp_entire_prefix_len, maint_cplus_command)
(first_component_command, _initialize_cp_support): Ditto.
* buildsym.c: Include cp-support.h.
New variable using_list.
(add_symbol_to_list): Check for anonymous namespaces.
(finish_block): Set block's scope.
(start_symtab): Initialize C++ namespace support.
(end_symtab): Finalize C++ namespace support.
* block.h: Add opaque declarations for structs
block_namespace_info, using_direct, and obstack.
Add declarations for block_set_scope and block_set_using.
(struct block): Add 'language_specific' member.
(BLOCK_NAMESPACE): New macro.
* block.c: Include gdb_obstack.h and cp-support.h.
(struct block_namespace_info): New struct.
(block_set_scope): New function.
(block_set_using, block_initialize_namespace): Ditto.
2003-04-15 David Carlton <carlton@math.stanford.edu>
* gdb.c++/maint.exp: New file.
2003-04-16 07:07:11 +08:00
|
|
|
default:
|
2003-04-24 07:45:24 +08:00
|
|
|
operator_possible = 0;
|
2003-04-15 David Carlton <carlton@math.stanford.edu>
* Makefile.in (SFILES): Add cp-namespace.c.
(COMMON_OBS): Add cp-namespace.o.
(block.o): Depend on gdb_obstack_h and cp_support_h.
(buildsym.o): Depend on cp_support_h.
(cp-namespace.o): New.
(cp-support.o): Depend on gdb_string_h, demangle_h, gdb_assert_h,
gdb_obstack_h, symtab_h, symfile_h, and gdbcmd_h.
(dwarf2read.o): Depend on cp_support_h.
* jv-lang.c (get_java_class_symtab): Set BLOCK_NAMESPACE.
* dwarf2read.c (process_die): Set processing_has_namespace_info,
processing_current_namespace.
(read_namespace): Update processing_current_namespace; check for
anonymous namespaces.
(dwarf2_name): New function.
(dwarf2_extension): Ditto.
* cp-support.h: Update copyright, contributors.
Add inclusion guards.
Add opaque declaration for structs obstack, block, symbol.
(struct using_direct): New struct.
Add declarations for cp_find_first_component,
cp_entire_prefix_len, processing_has_namespace_info,
processing_current_namespace, cp_is_anonymous,
cp_add_using_directive, cp_initialize_namespace,
cp_finalize_namespace, cp_set_block_scope,
cp_scan_for_anonymous_namespaces.
* cp-namespace.c: New file.
* cp-support.c: Update copyright.
Include ctype.h, gdb_assert.h, gdbcmd.h.
New variable maint_cplus_cmd_list.
(cp_find_first_component): New function.
(cp_entire_prefix_len, maint_cplus_command)
(first_component_command, _initialize_cp_support): Ditto.
* buildsym.c: Include cp-support.h.
New variable using_list.
(add_symbol_to_list): Check for anonymous namespaces.
(finish_block): Set block's scope.
(start_symtab): Initialize C++ namespace support.
(end_symtab): Finalize C++ namespace support.
* block.h: Add opaque declarations for structs
block_namespace_info, using_direct, and obstack.
Add declarations for block_set_scope and block_set_using.
(struct block): Add 'language_specific' member.
(BLOCK_NAMESPACE): New macro.
* block.c: Include gdb_obstack.h and cp-support.h.
(struct block_namespace_info): New struct.
(block_set_scope): New function.
(block_set_using, block_initialize_namespace): Ditto.
2003-04-15 David Carlton <carlton@math.stanford.edu>
* gdb.c++/maint.exp: New file.
2003-04-16 07:07:11 +08:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2003-07-01 00:21:16 +08:00
|
|
|
/* Complain about a demangled name that we don't know how to parse.
|
|
|
|
NAME is the demangled name in question. */
|
|
|
|
|
|
|
|
static void
|
|
|
|
demangled_name_complaint (const char *name)
|
|
|
|
{
|
|
|
|
complaint (&symfile_complaints,
|
|
|
|
"unexpected demangled name '%s'", name);
|
|
|
|
}
|
|
|
|
|
2003-04-15 David Carlton <carlton@math.stanford.edu>
* Makefile.in (SFILES): Add cp-namespace.c.
(COMMON_OBS): Add cp-namespace.o.
(block.o): Depend on gdb_obstack_h and cp_support_h.
(buildsym.o): Depend on cp_support_h.
(cp-namespace.o): New.
(cp-support.o): Depend on gdb_string_h, demangle_h, gdb_assert_h,
gdb_obstack_h, symtab_h, symfile_h, and gdbcmd_h.
(dwarf2read.o): Depend on cp_support_h.
* jv-lang.c (get_java_class_symtab): Set BLOCK_NAMESPACE.
* dwarf2read.c (process_die): Set processing_has_namespace_info,
processing_current_namespace.
(read_namespace): Update processing_current_namespace; check for
anonymous namespaces.
(dwarf2_name): New function.
(dwarf2_extension): Ditto.
* cp-support.h: Update copyright, contributors.
Add inclusion guards.
Add opaque declaration for structs obstack, block, symbol.
(struct using_direct): New struct.
Add declarations for cp_find_first_component,
cp_entire_prefix_len, processing_has_namespace_info,
processing_current_namespace, cp_is_anonymous,
cp_add_using_directive, cp_initialize_namespace,
cp_finalize_namespace, cp_set_block_scope,
cp_scan_for_anonymous_namespaces.
* cp-namespace.c: New file.
* cp-support.c: Update copyright.
Include ctype.h, gdb_assert.h, gdbcmd.h.
New variable maint_cplus_cmd_list.
(cp_find_first_component): New function.
(cp_entire_prefix_len, maint_cplus_command)
(first_component_command, _initialize_cp_support): Ditto.
* buildsym.c: Include cp-support.h.
New variable using_list.
(add_symbol_to_list): Check for anonymous namespaces.
(finish_block): Set block's scope.
(start_symtab): Initialize C++ namespace support.
(end_symtab): Finalize C++ namespace support.
* block.h: Add opaque declarations for structs
block_namespace_info, using_direct, and obstack.
Add declarations for block_set_scope and block_set_using.
(struct block): Add 'language_specific' member.
(BLOCK_NAMESPACE): New macro.
* block.c: Include gdb_obstack.h and cp-support.h.
(struct block_namespace_info): New struct.
(block_set_scope): New function.
(block_set_using, block_initialize_namespace): Ditto.
2003-04-15 David Carlton <carlton@math.stanford.edu>
* gdb.c++/maint.exp: New file.
2003-04-16 07:07:11 +08:00
|
|
|
/* If NAME is the fully-qualified name of a C++
|
|
|
|
function/variable/method/etc., this returns the length of its
|
|
|
|
entire prefix: all of the namespaces and classes that make up its
|
|
|
|
name. Given 'A::foo', it returns 1, given 'A::B::foo', it returns
|
|
|
|
4, given 'foo', it returns 0. */
|
|
|
|
|
|
|
|
unsigned int
|
|
|
|
cp_entire_prefix_len (const char *name)
|
|
|
|
{
|
|
|
|
unsigned int current_len = cp_find_first_component (name);
|
|
|
|
unsigned int previous_len = 0;
|
|
|
|
|
|
|
|
while (name[current_len] != '\0')
|
|
|
|
{
|
|
|
|
gdb_assert (name[current_len] == ':');
|
|
|
|
previous_len = current_len;
|
|
|
|
/* Skip the '::'. */
|
|
|
|
current_len += 2;
|
|
|
|
current_len += cp_find_first_component (name + current_len);
|
|
|
|
}
|
|
|
|
|
|
|
|
return previous_len;
|
|
|
|
}
|
|
|
|
|
2003-06-12 David Carlton <carlton@bactrian.org>
* symtab.h: Delete declaration of make_symbol_overload_list.
Add declaration of lookup_partial_symbol.
* symtab.c (remove_params): Move to cp-support.c.
(overload_list_add_symbol, make_symbol_overload_list)
(sym_return_val_size, sym_return_val_index): Ditto.
(lookup_partial_symbol): Make extern.
* cp-support.h: Add declaration of make_symbol_overload_list.
* cp-support.c: Include dictionary.h, objfiles.h, frame.h,
symtab.h, and block.h.
(remove_params): Move here from symtab.c.
(overload_list_add_symbol, make_symbol_overload_list)
(sym_return_val_size, sym_return_val_index): Ditto.
* valops.c: Include cp-support.h.
* Makefile.in (cp-support.o): Depend on dictionary_h, objfiles_h,
frame_h, and block_h.
(valops.o): Depend on cp_support_h.
2003-06-12 23:33:45 +08:00
|
|
|
/* Overload resolution functions. */
|
|
|
|
|
2004-02-03 04:44:53 +08:00
|
|
|
/* Test to see if SYM is a symbol that we haven't seen corresponding
|
|
|
|
to a function named OLOAD_NAME. If so, add it to the current
|
2011-01-01 06:59:52 +08:00
|
|
|
completion list. */
|
2003-06-12 David Carlton <carlton@bactrian.org>
* symtab.h: Delete declaration of make_symbol_overload_list.
Add declaration of lookup_partial_symbol.
* symtab.c (remove_params): Move to cp-support.c.
(overload_list_add_symbol, make_symbol_overload_list)
(sym_return_val_size, sym_return_val_index): Ditto.
(lookup_partial_symbol): Make extern.
* cp-support.h: Add declaration of make_symbol_overload_list.
* cp-support.c: Include dictionary.h, objfiles.h, frame.h,
symtab.h, and block.h.
(remove_params): Move here from symtab.c.
(overload_list_add_symbol, make_symbol_overload_list)
(sym_return_val_size, sym_return_val_index): Ditto.
* valops.c: Include cp-support.h.
* Makefile.in (cp-support.o): Depend on dictionary_h, objfiles_h,
frame_h, and block_h.
(valops.o): Depend on cp_support_h.
2003-06-12 23:33:45 +08:00
|
|
|
|
|
|
|
static void
|
2011-01-01 06:59:52 +08:00
|
|
|
overload_list_add_symbol (struct symbol *sym,
|
|
|
|
const char *oload_name)
|
2003-06-12 David Carlton <carlton@bactrian.org>
* symtab.h: Delete declaration of make_symbol_overload_list.
Add declaration of lookup_partial_symbol.
* symtab.c (remove_params): Move to cp-support.c.
(overload_list_add_symbol, make_symbol_overload_list)
(sym_return_val_size, sym_return_val_index): Ditto.
(lookup_partial_symbol): Make extern.
* cp-support.h: Add declaration of make_symbol_overload_list.
* cp-support.c: Include dictionary.h, objfiles.h, frame.h,
symtab.h, and block.h.
(remove_params): Move here from symtab.c.
(overload_list_add_symbol, make_symbol_overload_list)
(sym_return_val_size, sym_return_val_index): Ditto.
* valops.c: Include cp-support.h.
* Makefile.in (cp-support.o): Depend on dictionary_h, objfiles_h,
frame_h, and block_h.
(valops.o): Depend on cp_support_h.
2003-06-12 23:33:45 +08:00
|
|
|
{
|
|
|
|
int newsize;
|
|
|
|
int i;
|
|
|
|
char *sym_name;
|
|
|
|
|
2011-01-01 06:59:52 +08:00
|
|
|
/* If there is no type information, we can't do anything, so
|
|
|
|
skip. */
|
2003-06-12 David Carlton <carlton@bactrian.org>
* symtab.h: Delete declaration of make_symbol_overload_list.
Add declaration of lookup_partial_symbol.
* symtab.c (remove_params): Move to cp-support.c.
(overload_list_add_symbol, make_symbol_overload_list)
(sym_return_val_size, sym_return_val_index): Ditto.
(lookup_partial_symbol): Make extern.
* cp-support.h: Add declaration of make_symbol_overload_list.
* cp-support.c: Include dictionary.h, objfiles.h, frame.h,
symtab.h, and block.h.
(remove_params): Move here from symtab.c.
(overload_list_add_symbol, make_symbol_overload_list)
(sym_return_val_size, sym_return_val_index): Ditto.
* valops.c: Include cp-support.h.
* Makefile.in (cp-support.o): Depend on dictionary_h, objfiles_h,
frame_h, and block_h.
(valops.o): Depend on cp_support_h.
2003-06-12 23:33:45 +08:00
|
|
|
if (SYMBOL_TYPE (sym) == NULL)
|
|
|
|
return;
|
|
|
|
|
2011-01-01 06:59:52 +08:00
|
|
|
/* skip any symbols that we've already considered. */
|
2003-06-12 David Carlton <carlton@bactrian.org>
* symtab.h: Delete declaration of make_symbol_overload_list.
Add declaration of lookup_partial_symbol.
* symtab.c (remove_params): Move to cp-support.c.
(overload_list_add_symbol, make_symbol_overload_list)
(sym_return_val_size, sym_return_val_index): Ditto.
(lookup_partial_symbol): Make extern.
* cp-support.h: Add declaration of make_symbol_overload_list.
* cp-support.c: Include dictionary.h, objfiles.h, frame.h,
symtab.h, and block.h.
(remove_params): Move here from symtab.c.
(overload_list_add_symbol, make_symbol_overload_list)
(sym_return_val_size, sym_return_val_index): Ditto.
* valops.c: Include cp-support.h.
* Makefile.in (cp-support.o): Depend on dictionary_h, objfiles_h,
frame_h, and block_h.
(valops.o): Depend on cp_support_h.
2003-06-12 23:33:45 +08:00
|
|
|
for (i = 0; i < sym_return_val_index; ++i)
|
2004-02-03 04:44:53 +08:00
|
|
|
if (strcmp (SYMBOL_LINKAGE_NAME (sym),
|
|
|
|
SYMBOL_LINKAGE_NAME (sym_return_val[i])) == 0)
|
2003-06-12 David Carlton <carlton@bactrian.org>
* symtab.h: Delete declaration of make_symbol_overload_list.
Add declaration of lookup_partial_symbol.
* symtab.c (remove_params): Move to cp-support.c.
(overload_list_add_symbol, make_symbol_overload_list)
(sym_return_val_size, sym_return_val_index): Ditto.
(lookup_partial_symbol): Make extern.
* cp-support.h: Add declaration of make_symbol_overload_list.
* cp-support.c: Include dictionary.h, objfiles.h, frame.h,
symtab.h, and block.h.
(remove_params): Move here from symtab.c.
(overload_list_add_symbol, make_symbol_overload_list)
(sym_return_val_size, sym_return_val_index): Ditto.
* valops.c: Include cp-support.h.
* Makefile.in (cp-support.o): Depend on dictionary_h, objfiles_h,
frame_h, and block_h.
(valops.o): Depend on cp_support_h.
2003-06-12 23:33:45 +08:00
|
|
|
return;
|
|
|
|
|
|
|
|
/* Get the demangled name without parameters */
|
* ax-gdb.c (gen_var_ref): Use SYMBOL_LINKAGE_NAME.
* blockframe.c (find_pc_partial_function): Likewise.
* buildsym.c (find_symbol_in_list): Likewise.
* c-valprint.c (c_val_print): Likewise.
* coffread.c (patch_opaque_types, process_coff_symbol): Likewise.
(coff_read_enum_type): Likewise. Use SYMBOL_SET_LINKAGE_NAME.
* cp-support.c (cp_remove_params): Renamed from remove_params and
made global.
(overload_list_add_symbol): Update call to remove_params.
* cp-support.h (cp_remove_params): Declare.
* dwarf2read.c (process_enumeration_scope): Use SYMBOL_LINKAGE_NAME.
(dwarf2_const_value): Use SYMBOL_PRINT_NAME.
* expprint.c (dump_subexp_body_standard): Likewise.
* f-valprint.c (info_common_command, there_is_a_visible_common_named):
Use SYMBOL_LINKAGE_NAME to find symbols and SYMBOL_PRINT_NAME
for messages.
* findvar.c (read_var_value): Use SYMBOL_LINKAGE_NAME.
* gnu-v2-abi.c (gnuv2_value_rtti_type): Likewise.
* hppa-hpux-tdep.c (hppa32_hpux_in_solib_call_trampoline)
(hppa_hpux_skip_trampoline_code): Use SYMBOL_LINKAGE_NAME to find
symbols and SYMBOL_PRINT_NAME for messages.
* jv-lang.c (add_class_symbol): Use SYMBOL_SET_LINKAGE_NAME.
* linespec.c (decode_line_2): Use SYMBOL_LINKAGE_NAME.
* mdebugread.c (parse_symbol): Use SYMBOL_LINKAGE_NAME and
SYMBOL_SET_LINKAGE_NAME.
(mylookup_symbol): Use SYMBOL_LINKAGE_NAME.
* minsyms.c (add_minsym_to_demangled_hash_table): Use
SYMBOL_SEARCH_NAME.
(lookup_minimal_symbol): Use SYMBOL_LINKAGE_NAME or
SYMBOL_MATCHES_SEARCH_NAME, depending on the pass.
* objfiles.h (ALL_OBJFILE_MSYMBOLS): Use SYMBOL_LINKAGE_NAME.
* printcmd.c (build_address_symbolic): Use SYMBOL_LINKAGE_NAME.
(address_info): Use SYMBOL_PRINT_NAME for messages and
SYMBOL_LINKAGE_NAME for lookups.
* sol-thread.c (info_cb): Use SYMBOL_PRINT_NAME for messages.
* stabsread.c (patch_block_stabs, define_symbol)
(read_type, read_enum_type, common_block_end)
(cleanup_undefined_types_1, scan_file_globals): Use
SYMBOL_LINKAGE_NAME, SYMBOL_SET_LINKAGE_NAME, ALL_OBJFILE_MSYMBOLS,
and SYMBOL_PRINT_NAME.
* stack.c (print_frame_args): Use SYMBOL_LINKAGE_NAME.
(print_frame, frame_info): Use SYMBOL_PRINT_NAME for output. Use
cp_remove_params instead of cplus_demangle.
(print_block_frame_labels, print_frame_arg_vars): Use
SYMBOL_LINKAGE_NAME.
* symmisc.c (dump_msymbols): Use ALL_OBJFILE_MSYMBOLS and
SYMBOL_LINKAGE_NAME.
(dump_symtab_1, print_symbol, print_partial_symbols)
(maintenance_check_symtabs): Use SYMBOL_LINKAGE_NAME.
* symtab.h (DEPRECATED_SYMBOL_NAME): Delete.
(SYMBOL_SET_LINKAGE_NAME): New.
(SYMBOL_SET_NAMES): Add a comment.
* tracepoint.c (set_traceframe_context, validate_actionline)
(collect_symbol, scope_info): Use SYMBOL_LINKAGE_NAME for
lookups and SYMBOL_PRINT_NAME for output.
* typeprint.c (typedef_print): Use SYMBOL_LINKAGE_NAME.
* xcoffread.c (process_xcoff_symbol): Use SYMBOL_SET_LINKAGE_NAME.
2008-08-22 02:14:39 +08:00
|
|
|
sym_name = cp_remove_params (SYMBOL_NATURAL_NAME (sym));
|
2003-06-12 David Carlton <carlton@bactrian.org>
* symtab.h: Delete declaration of make_symbol_overload_list.
Add declaration of lookup_partial_symbol.
* symtab.c (remove_params): Move to cp-support.c.
(overload_list_add_symbol, make_symbol_overload_list)
(sym_return_val_size, sym_return_val_index): Ditto.
(lookup_partial_symbol): Make extern.
* cp-support.h: Add declaration of make_symbol_overload_list.
* cp-support.c: Include dictionary.h, objfiles.h, frame.h,
symtab.h, and block.h.
(remove_params): Move here from symtab.c.
(overload_list_add_symbol, make_symbol_overload_list)
(sym_return_val_size, sym_return_val_index): Ditto.
* valops.c: Include cp-support.h.
* Makefile.in (cp-support.o): Depend on dictionary_h, objfiles_h,
frame_h, and block_h.
(valops.o): Depend on cp_support_h.
2003-06-12 23:33:45 +08:00
|
|
|
if (!sym_name)
|
|
|
|
return;
|
|
|
|
|
|
|
|
/* skip symbols that cannot match */
|
|
|
|
if (strcmp (sym_name, oload_name) != 0)
|
|
|
|
{
|
|
|
|
xfree (sym_name);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
xfree (sym_name);
|
|
|
|
|
2011-01-01 06:59:52 +08:00
|
|
|
/* We have a match for an overload instance, so add SYM to the
|
|
|
|
current list of overload instances */
|
2003-06-12 David Carlton <carlton@bactrian.org>
* symtab.h: Delete declaration of make_symbol_overload_list.
Add declaration of lookup_partial_symbol.
* symtab.c (remove_params): Move to cp-support.c.
(overload_list_add_symbol, make_symbol_overload_list)
(sym_return_val_size, sym_return_val_index): Ditto.
(lookup_partial_symbol): Make extern.
* cp-support.h: Add declaration of make_symbol_overload_list.
* cp-support.c: Include dictionary.h, objfiles.h, frame.h,
symtab.h, and block.h.
(remove_params): Move here from symtab.c.
(overload_list_add_symbol, make_symbol_overload_list)
(sym_return_val_size, sym_return_val_index): Ditto.
* valops.c: Include cp-support.h.
* Makefile.in (cp-support.o): Depend on dictionary_h, objfiles_h,
frame_h, and block_h.
(valops.o): Depend on cp_support_h.
2003-06-12 23:33:45 +08:00
|
|
|
if (sym_return_val_index + 3 > sym_return_val_size)
|
|
|
|
{
|
|
|
|
newsize = (sym_return_val_size *= 2) * sizeof (struct symbol *);
|
2011-01-01 06:59:52 +08:00
|
|
|
sym_return_val = (struct symbol **)
|
|
|
|
xrealloc ((char *) sym_return_val, newsize);
|
2003-06-12 David Carlton <carlton@bactrian.org>
* symtab.h: Delete declaration of make_symbol_overload_list.
Add declaration of lookup_partial_symbol.
* symtab.c (remove_params): Move to cp-support.c.
(overload_list_add_symbol, make_symbol_overload_list)
(sym_return_val_size, sym_return_val_index): Ditto.
(lookup_partial_symbol): Make extern.
* cp-support.h: Add declaration of make_symbol_overload_list.
* cp-support.c: Include dictionary.h, objfiles.h, frame.h,
symtab.h, and block.h.
(remove_params): Move here from symtab.c.
(overload_list_add_symbol, make_symbol_overload_list)
(sym_return_val_size, sym_return_val_index): Ditto.
* valops.c: Include cp-support.h.
* Makefile.in (cp-support.o): Depend on dictionary_h, objfiles_h,
frame_h, and block_h.
(valops.o): Depend on cp_support_h.
2003-06-12 23:33:45 +08:00
|
|
|
}
|
|
|
|
sym_return_val[sym_return_val_index++] = sym;
|
|
|
|
sym_return_val[sym_return_val_index] = NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Return a null-terminated list of pointers to function symbols that
|
2004-02-03 04:44:53 +08:00
|
|
|
are named FUNC_NAME and are visible within NAMESPACE. */
|
2003-06-12 David Carlton <carlton@bactrian.org>
* symtab.h: Delete declaration of make_symbol_overload_list.
Add declaration of lookup_partial_symbol.
* symtab.c (remove_params): Move to cp-support.c.
(overload_list_add_symbol, make_symbol_overload_list)
(sym_return_val_size, sym_return_val_index): Ditto.
(lookup_partial_symbol): Make extern.
* cp-support.h: Add declaration of make_symbol_overload_list.
* cp-support.c: Include dictionary.h, objfiles.h, frame.h,
symtab.h, and block.h.
(remove_params): Move here from symtab.c.
(overload_list_add_symbol, make_symbol_overload_list)
(sym_return_val_size, sym_return_val_index): Ditto.
* valops.c: Include cp-support.h.
* Makefile.in (cp-support.o): Depend on dictionary_h, objfiles_h,
frame_h, and block_h.
(valops.o): Depend on cp_support_h.
2003-06-12 23:33:45 +08:00
|
|
|
|
|
|
|
struct symbol **
|
2004-02-03 04:44:53 +08:00
|
|
|
make_symbol_overload_list (const char *func_name,
|
|
|
|
const char *namespace)
|
2003-06-12 David Carlton <carlton@bactrian.org>
* symtab.h: Delete declaration of make_symbol_overload_list.
Add declaration of lookup_partial_symbol.
* symtab.c (remove_params): Move to cp-support.c.
(overload_list_add_symbol, make_symbol_overload_list)
(sym_return_val_size, sym_return_val_index): Ditto.
(lookup_partial_symbol): Make extern.
* cp-support.h: Add declaration of make_symbol_overload_list.
* cp-support.c: Include dictionary.h, objfiles.h, frame.h,
symtab.h, and block.h.
(remove_params): Move here from symtab.c.
(overload_list_add_symbol, make_symbol_overload_list)
(sym_return_val_size, sym_return_val_index): Ditto.
* valops.c: Include cp-support.h.
* Makefile.in (cp-support.o): Depend on dictionary_h, objfiles_h,
frame_h, and block_h.
(valops.o): Depend on cp_support_h.
2003-06-12 23:33:45 +08:00
|
|
|
{
|
2004-02-03 04:44:53 +08:00
|
|
|
struct cleanup *old_cleanups;
|
2010-06-08 01:51:03 +08:00
|
|
|
const char *name;
|
2003-06-12 David Carlton <carlton@bactrian.org>
* symtab.h: Delete declaration of make_symbol_overload_list.
Add declaration of lookup_partial_symbol.
* symtab.c (remove_params): Move to cp-support.c.
(overload_list_add_symbol, make_symbol_overload_list)
(sym_return_val_size, sym_return_val_index): Ditto.
(lookup_partial_symbol): Make extern.
* cp-support.h: Add declaration of make_symbol_overload_list.
* cp-support.c: Include dictionary.h, objfiles.h, frame.h,
symtab.h, and block.h.
(remove_params): Move here from symtab.c.
(overload_list_add_symbol, make_symbol_overload_list)
(sym_return_val_size, sym_return_val_index): Ditto.
* valops.c: Include cp-support.h.
* Makefile.in (cp-support.o): Depend on dictionary_h, objfiles_h,
frame_h, and block_h.
(valops.o): Depend on cp_support_h.
2003-06-12 23:33:45 +08:00
|
|
|
|
2004-02-03 04:44:53 +08:00
|
|
|
sym_return_val_size = 100;
|
|
|
|
sym_return_val_index = 0;
|
|
|
|
sym_return_val = xmalloc ((sym_return_val_size + 1) *
|
|
|
|
sizeof (struct symbol *));
|
|
|
|
sym_return_val[0] = NULL;
|
2003-06-12 David Carlton <carlton@bactrian.org>
* symtab.h: Delete declaration of make_symbol_overload_list.
Add declaration of lookup_partial_symbol.
* symtab.c (remove_params): Move to cp-support.c.
(overload_list_add_symbol, make_symbol_overload_list)
(sym_return_val_size, sym_return_val_index): Ditto.
(lookup_partial_symbol): Make extern.
* cp-support.h: Add declaration of make_symbol_overload_list.
* cp-support.c: Include dictionary.h, objfiles.h, frame.h,
symtab.h, and block.h.
(remove_params): Move here from symtab.c.
(overload_list_add_symbol, make_symbol_overload_list)
(sym_return_val_size, sym_return_val_index): Ditto.
* valops.c: Include cp-support.h.
* Makefile.in (cp-support.o): Depend on dictionary_h, objfiles_h,
frame_h, and block_h.
(valops.o): Depend on cp_support_h.
2003-06-12 23:33:45 +08:00
|
|
|
|
2004-02-03 04:44:53 +08:00
|
|
|
old_cleanups = make_cleanup (xfree, sym_return_val);
|
|
|
|
|
|
|
|
make_symbol_overload_list_using (func_name, namespace);
|
|
|
|
|
2010-06-08 01:51:03 +08:00
|
|
|
if (namespace[0] == '\0')
|
|
|
|
name = func_name;
|
|
|
|
else
|
|
|
|
{
|
|
|
|
char *concatenated_name
|
|
|
|
= alloca (strlen (namespace) + 2 + strlen (func_name) + 1);
|
|
|
|
strcpy (concatenated_name, namespace);
|
|
|
|
strcat (concatenated_name, "::");
|
|
|
|
strcat (concatenated_name, func_name);
|
|
|
|
name = concatenated_name;
|
|
|
|
}
|
|
|
|
|
|
|
|
make_symbol_overload_list_qualified (name);
|
|
|
|
|
2004-02-03 04:44:53 +08:00
|
|
|
discard_cleanups (old_cleanups);
|
|
|
|
|
|
|
|
return sym_return_val;
|
|
|
|
}
|
|
|
|
|
2010-06-08 01:51:03 +08:00
|
|
|
/* Add all symbols with a name matching NAME in BLOCK to the overload
|
|
|
|
list. */
|
|
|
|
|
|
|
|
static void
|
|
|
|
make_symbol_overload_list_block (const char *name,
|
|
|
|
const struct block *block)
|
|
|
|
{
|
|
|
|
struct dict_iterator iter;
|
|
|
|
struct symbol *sym;
|
|
|
|
|
|
|
|
const struct dictionary *dict = BLOCK_DICT (block);
|
|
|
|
|
|
|
|
for (sym = dict_iter_name_first (dict, name, &iter);
|
|
|
|
sym != NULL;
|
|
|
|
sym = dict_iter_name_next (name, &iter))
|
|
|
|
overload_list_add_symbol (sym, name);
|
|
|
|
}
|
|
|
|
|
2010-05-07 22:46:28 +08:00
|
|
|
/* Adds the function FUNC_NAME from NAMESPACE to the overload set. */
|
|
|
|
|
|
|
|
static void
|
|
|
|
make_symbol_overload_list_namespace (const char *func_name,
|
|
|
|
const char *namespace)
|
|
|
|
{
|
2010-06-08 01:51:03 +08:00
|
|
|
const char *name;
|
|
|
|
const struct block *block = NULL;
|
|
|
|
|
2010-05-07 22:46:28 +08:00
|
|
|
if (namespace[0] == '\0')
|
2010-06-08 01:51:03 +08:00
|
|
|
name = func_name;
|
2010-05-07 22:46:28 +08:00
|
|
|
else
|
|
|
|
{
|
|
|
|
char *concatenated_name
|
|
|
|
= alloca (strlen (namespace) + 2 + strlen (func_name) + 1);
|
2010-05-14 07:53:32 +08:00
|
|
|
|
2010-05-07 22:46:28 +08:00
|
|
|
strcpy (concatenated_name, namespace);
|
|
|
|
strcat (concatenated_name, "::");
|
|
|
|
strcat (concatenated_name, func_name);
|
2010-06-08 01:51:03 +08:00
|
|
|
name = concatenated_name;
|
2010-05-07 22:46:28 +08:00
|
|
|
}
|
2010-06-08 01:51:03 +08:00
|
|
|
|
|
|
|
/* Look in the static block. */
|
|
|
|
block = block_static_block (get_selected_block (0));
|
2011-02-19 03:10:48 +08:00
|
|
|
if (block)
|
|
|
|
make_symbol_overload_list_block (name, block);
|
2010-06-08 01:51:03 +08:00
|
|
|
|
|
|
|
/* Look in the global block. */
|
|
|
|
block = block_global_block (block);
|
2011-02-19 03:10:48 +08:00
|
|
|
if (block)
|
|
|
|
make_symbol_overload_list_block (name, block);
|
2010-06-08 01:51:03 +08:00
|
|
|
|
2010-05-07 22:46:28 +08:00
|
|
|
}
|
|
|
|
|
2011-01-01 06:59:52 +08:00
|
|
|
/* Search the namespace of the given type and namespace of and public
|
|
|
|
base types. */
|
2010-05-07 22:46:28 +08:00
|
|
|
|
|
|
|
static void
|
|
|
|
make_symbol_overload_list_adl_namespace (struct type *type,
|
|
|
|
const char *func_name)
|
|
|
|
{
|
|
|
|
char *namespace;
|
|
|
|
char *type_name;
|
|
|
|
int i, prefix_len;
|
|
|
|
|
2011-01-01 06:59:52 +08:00
|
|
|
while (TYPE_CODE (type) == TYPE_CODE_PTR
|
|
|
|
|| TYPE_CODE (type) == TYPE_CODE_REF
|
2010-05-07 22:46:28 +08:00
|
|
|
|| TYPE_CODE (type) == TYPE_CODE_ARRAY
|
|
|
|
|| TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
|
|
|
|
{
|
|
|
|
if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
|
|
|
|
type = check_typedef(type);
|
|
|
|
else
|
|
|
|
type = TYPE_TARGET_TYPE (type);
|
|
|
|
}
|
|
|
|
|
|
|
|
type_name = TYPE_NAME (type);
|
|
|
|
|
2010-06-02 23:31:30 +08:00
|
|
|
if (type_name == NULL)
|
|
|
|
return;
|
|
|
|
|
2010-05-07 22:46:28 +08:00
|
|
|
prefix_len = cp_entire_prefix_len (type_name);
|
|
|
|
|
|
|
|
if (prefix_len != 0)
|
|
|
|
{
|
|
|
|
namespace = alloca (prefix_len + 1);
|
|
|
|
strncpy (namespace, type_name, prefix_len);
|
|
|
|
namespace[prefix_len] = '\0';
|
|
|
|
|
|
|
|
make_symbol_overload_list_namespace (func_name, namespace);
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Check public base type */
|
|
|
|
if (TYPE_CODE (type) == TYPE_CODE_CLASS)
|
|
|
|
for (i = 0; i < TYPE_N_BASECLASSES (type); i++)
|
|
|
|
{
|
|
|
|
if (BASETYPE_VIA_PUBLIC (type, i))
|
2011-01-01 06:59:52 +08:00
|
|
|
make_symbol_overload_list_adl_namespace (TYPE_BASECLASS (type,
|
|
|
|
i),
|
2010-05-07 22:46:28 +08:00
|
|
|
func_name);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2011-02-26 10:07:10 +08:00
|
|
|
/* Adds the overload list overload candidates for FUNC_NAME found
|
2011-01-01 06:59:52 +08:00
|
|
|
through argument dependent lookup. */
|
2010-05-07 22:46:28 +08:00
|
|
|
|
|
|
|
struct symbol **
|
|
|
|
make_symbol_overload_list_adl (struct type **arg_types, int nargs,
|
|
|
|
const char *func_name)
|
|
|
|
{
|
|
|
|
int i;
|
|
|
|
|
|
|
|
gdb_assert (sym_return_val_size != -1);
|
|
|
|
|
|
|
|
for (i = 1; i <= nargs; i++)
|
2011-01-01 06:59:52 +08:00
|
|
|
make_symbol_overload_list_adl_namespace (arg_types[i - 1],
|
|
|
|
func_name);
|
2010-05-07 22:46:28 +08:00
|
|
|
|
|
|
|
return sym_return_val;
|
|
|
|
}
|
|
|
|
|
2011-01-01 06:59:52 +08:00
|
|
|
/* Used for cleanups to reset the "searched" flag in case of an
|
|
|
|
error. */
|
2010-06-26 00:16:44 +08:00
|
|
|
|
|
|
|
static void
|
|
|
|
reset_directive_searched (void *data)
|
|
|
|
{
|
|
|
|
struct using_direct *direct = data;
|
|
|
|
direct->searched = 0;
|
|
|
|
}
|
|
|
|
|
2004-02-03 04:44:53 +08:00
|
|
|
/* This applies the using directives to add namespaces to search in,
|
|
|
|
and then searches for overloads in all of those namespaces. It
|
|
|
|
adds the symbols found to sym_return_val. Arguments are as in
|
|
|
|
make_symbol_overload_list. */
|
|
|
|
|
|
|
|
static void
|
|
|
|
make_symbol_overload_list_using (const char *func_name,
|
|
|
|
const char *namespace)
|
|
|
|
{
|
2010-06-26 00:16:44 +08:00
|
|
|
struct using_direct *current;
|
2010-06-08 00:11:35 +08:00
|
|
|
const struct block *block;
|
2004-02-03 04:44:53 +08:00
|
|
|
|
|
|
|
/* First, go through the using directives. If any of them apply,
|
|
|
|
look in the appropriate namespaces for new functions to match
|
|
|
|
on. */
|
2003-06-12 David Carlton <carlton@bactrian.org>
* symtab.h: Delete declaration of make_symbol_overload_list.
Add declaration of lookup_partial_symbol.
* symtab.c (remove_params): Move to cp-support.c.
(overload_list_add_symbol, make_symbol_overload_list)
(sym_return_val_size, sym_return_val_index): Ditto.
(lookup_partial_symbol): Make extern.
* cp-support.h: Add declaration of make_symbol_overload_list.
* cp-support.c: Include dictionary.h, objfiles.h, frame.h,
symtab.h, and block.h.
(remove_params): Move here from symtab.c.
(overload_list_add_symbol, make_symbol_overload_list)
(sym_return_val_size, sym_return_val_index): Ditto.
* valops.c: Include cp-support.h.
* Makefile.in (cp-support.o): Depend on dictionary_h, objfiles_h,
frame_h, and block_h.
(valops.o): Depend on cp_support_h.
2003-06-12 23:33:45 +08:00
|
|
|
|
2010-06-08 00:11:35 +08:00
|
|
|
for (block = get_selected_block (0);
|
|
|
|
block != NULL;
|
|
|
|
block = BLOCK_SUPERBLOCK (block))
|
|
|
|
for (current = block_using (block);
|
|
|
|
current != NULL;
|
|
|
|
current = current->next)
|
|
|
|
{
|
2010-06-26 00:16:44 +08:00
|
|
|
/* Prevent recursive calls. */
|
|
|
|
if (current->searched)
|
|
|
|
continue;
|
|
|
|
|
2011-01-01 06:59:52 +08:00
|
|
|
/* If this is a namespace alias or imported declaration ignore
|
|
|
|
it. */
|
2010-06-08 00:11:35 +08:00
|
|
|
if (current->alias != NULL || current->declaration != NULL)
|
|
|
|
continue;
|
|
|
|
|
|
|
|
if (strcmp (namespace, current->import_dest) == 0)
|
2010-06-26 00:16:44 +08:00
|
|
|
{
|
2011-01-01 06:59:52 +08:00
|
|
|
/* Mark this import as searched so that the recursive call
|
|
|
|
does not search it again. */
|
2010-06-26 00:16:44 +08:00
|
|
|
struct cleanup *old_chain;
|
|
|
|
current->searched = 1;
|
2011-01-01 06:59:52 +08:00
|
|
|
old_chain = make_cleanup (reset_directive_searched,
|
|
|
|
current);
|
2010-06-26 00:16:44 +08:00
|
|
|
|
2011-01-01 06:59:52 +08:00
|
|
|
make_symbol_overload_list_using (func_name,
|
|
|
|
current->import_src);
|
2010-06-26 00:16:44 +08:00
|
|
|
|
|
|
|
current->searched = 0;
|
|
|
|
discard_cleanups (old_chain);
|
|
|
|
}
|
2010-06-08 00:11:35 +08:00
|
|
|
}
|
2003-06-12 David Carlton <carlton@bactrian.org>
* symtab.h: Delete declaration of make_symbol_overload_list.
Add declaration of lookup_partial_symbol.
* symtab.c (remove_params): Move to cp-support.c.
(overload_list_add_symbol, make_symbol_overload_list)
(sym_return_val_size, sym_return_val_index): Ditto.
(lookup_partial_symbol): Make extern.
* cp-support.h: Add declaration of make_symbol_overload_list.
* cp-support.c: Include dictionary.h, objfiles.h, frame.h,
symtab.h, and block.h.
(remove_params): Move here from symtab.c.
(overload_list_add_symbol, make_symbol_overload_list)
(sym_return_val_size, sym_return_val_index): Ditto.
* valops.c: Include cp-support.h.
* Makefile.in (cp-support.o): Depend on dictionary_h, objfiles_h,
frame_h, and block_h.
(valops.o): Depend on cp_support_h.
2003-06-12 23:33:45 +08:00
|
|
|
|
2004-02-03 04:44:53 +08:00
|
|
|
/* Now, add names for this namespace. */
|
2010-05-07 22:46:28 +08:00
|
|
|
make_symbol_overload_list_namespace (func_name, namespace);
|
2004-02-03 04:44:53 +08:00
|
|
|
}
|
2003-06-12 David Carlton <carlton@bactrian.org>
* symtab.h: Delete declaration of make_symbol_overload_list.
Add declaration of lookup_partial_symbol.
* symtab.c (remove_params): Move to cp-support.c.
(overload_list_add_symbol, make_symbol_overload_list)
(sym_return_val_size, sym_return_val_index): Ditto.
(lookup_partial_symbol): Make extern.
* cp-support.h: Add declaration of make_symbol_overload_list.
* cp-support.c: Include dictionary.h, objfiles.h, frame.h,
symtab.h, and block.h.
(remove_params): Move here from symtab.c.
(overload_list_add_symbol, make_symbol_overload_list)
(sym_return_val_size, sym_return_val_index): Ditto.
* valops.c: Include cp-support.h.
* Makefile.in (cp-support.o): Depend on dictionary_h, objfiles_h,
frame_h, and block_h.
(valops.o): Depend on cp_support_h.
2003-06-12 23:33:45 +08:00
|
|
|
|
2004-02-03 04:44:53 +08:00
|
|
|
/* This does the bulk of the work of finding overloaded symbols.
|
|
|
|
FUNC_NAME is the name of the overloaded function we're looking for
|
|
|
|
(possibly including namespace info). */
|
2003-06-12 David Carlton <carlton@bactrian.org>
* symtab.h: Delete declaration of make_symbol_overload_list.
Add declaration of lookup_partial_symbol.
* symtab.c (remove_params): Move to cp-support.c.
(overload_list_add_symbol, make_symbol_overload_list)
(sym_return_val_size, sym_return_val_index): Ditto.
(lookup_partial_symbol): Make extern.
* cp-support.h: Add declaration of make_symbol_overload_list.
* cp-support.c: Include dictionary.h, objfiles.h, frame.h,
symtab.h, and block.h.
(remove_params): Move here from symtab.c.
(overload_list_add_symbol, make_symbol_overload_list)
(sym_return_val_size, sym_return_val_index): Ditto.
* valops.c: Include cp-support.h.
* Makefile.in (cp-support.o): Depend on dictionary_h, objfiles_h,
frame_h, and block_h.
(valops.o): Depend on cp_support_h.
2003-06-12 23:33:45 +08:00
|
|
|
|
2004-02-03 04:44:53 +08:00
|
|
|
static void
|
|
|
|
make_symbol_overload_list_qualified (const char *func_name)
|
|
|
|
{
|
|
|
|
struct symbol *sym;
|
|
|
|
struct symtab *s;
|
|
|
|
struct objfile *objfile;
|
|
|
|
const struct block *b, *surrounding_static_block = 0;
|
|
|
|
struct dict_iterator iter;
|
|
|
|
const struct dictionary *dict;
|
2003-06-12 David Carlton <carlton@bactrian.org>
* symtab.h: Delete declaration of make_symbol_overload_list.
Add declaration of lookup_partial_symbol.
* symtab.c (remove_params): Move to cp-support.c.
(overload_list_add_symbol, make_symbol_overload_list)
(sym_return_val_size, sym_return_val_index): Ditto.
(lookup_partial_symbol): Make extern.
* cp-support.h: Add declaration of make_symbol_overload_list.
* cp-support.c: Include dictionary.h, objfiles.h, frame.h,
symtab.h, and block.h.
(remove_params): Move here from symtab.c.
(overload_list_add_symbol, make_symbol_overload_list)
(sym_return_val_size, sym_return_val_index): Ditto.
* valops.c: Include cp-support.h.
* Makefile.in (cp-support.o): Depend on dictionary_h, objfiles_h,
frame_h, and block_h.
(valops.o): Depend on cp_support_h.
2003-06-12 23:33:45 +08:00
|
|
|
|
2011-01-01 06:59:52 +08:00
|
|
|
/* Look through the partial symtabs for all symbols which begin by
|
|
|
|
matching FUNC_NAME. Make sure we read that symbol table in. */
|
2003-06-12 David Carlton <carlton@bactrian.org>
* symtab.h: Delete declaration of make_symbol_overload_list.
Add declaration of lookup_partial_symbol.
* symtab.c (remove_params): Move to cp-support.c.
(overload_list_add_symbol, make_symbol_overload_list)
(sym_return_val_size, sym_return_val_index): Ditto.
(lookup_partial_symbol): Make extern.
* cp-support.h: Add declaration of make_symbol_overload_list.
* cp-support.c: Include dictionary.h, objfiles.h, frame.h,
symtab.h, and block.h.
(remove_params): Move here from symtab.c.
(overload_list_add_symbol, make_symbol_overload_list)
(sym_return_val_size, sym_return_val_index): Ditto.
* valops.c: Include cp-support.h.
* Makefile.in (cp-support.o): Depend on dictionary_h, objfiles_h,
frame_h, and block_h.
(valops.o): Depend on cp_support_h.
2003-06-12 23:33:45 +08:00
|
|
|
|
gdb
* xcoffread.c: Include psymtab.h.
(xcoff_sym_fns): Update.
* symtab.h (struct partial_symbol): Remove.
(PSYMBOL_DOMAIN, PSYMBOL_CLASS): Remove.
(struct partial_symtab): Remove.
(PSYMTAB_TO_SYMTAB): Remove.
(lookup_partial_symbol, lookup_partial_symtab, find_pc_psymtab)
(find_pc_sect_psymtab): Remove.
(find_pc_sect_symtab_via_partial): Declare.
(find_pc_psymtab, find_pc_sect_psymbol, psymtab_to_symtab)
(find_main_psymtab): Remove.
(find_main_filename): Declare.
(fixup_psymbol_section): Remove.
(fixup_section): Declare.
* symtab.c: Include psymtab.h.
(lookup_symtab): Use lookup_symtab method.
(lookup_partial_symtab): Remove.
(find_pc_sect_psymtab_closer): Remove.
(find_pc_sect_psymtab): Remove.
(find_pc_sect_symtab_via_partial): New function.
(find_pc_psymtab, find_pc_sect_psymbol, find_pc_psymbol): Remove.
(fixup_section): No longer static.
(fixup_psymbol_section): Remove.
(lookup_symbol_aux): Use lookup_symbol_aux_quick.
(lookup_global_symbol_from_objfile): Likewise.
(lookup_symbol_aux_psymtabs): Remove.
(lookup_symbol_aux_quick): New function.
(lookup_symbol_global): Use lookup_symbol_aux_quick.
(lookup_partial_symbol): Remove.
(basic_lookup_transparent_type_quick): New function.
(basic_lookup_transparent_type): Use it.
(find_main_psymtab): Remove.
(find_main_filename): New function.
(find_pc_sect_symtab): Use find_pc_sect_symtab method.
(find_line_symtab): Use expand_symtabs_with_filename method.
(output_partial_symbol_filename): New function.
(sources_info): Use map_partial_symbol_filenames.
(struct search_symbols_data): New type.
(search_symbols_file_matches): New function.
(search_symbols_name_matches): Likewise.
(search_symbols): Use expand_symtabs_matching method.
(struct add_name_data): Rename from add_macro_name_data.
(add_macro_name): Update.
(add_partial_symbol_name): New function.
(default_make_symbol_completion_list): Use
map_partial_symbol_names.
(struct add_partial_symbol_name): New type.
(maybe_add_partial_symtab_filename): New function.
(make_source_files_completion_list): Use
map_partial_symbol_filenames.
(expand_line_sal): Use expand_symtabs_with_filename method.
* symmisc.c: Include psymtab.h.
(print_objfile_statistics): Use print_stats method.
(dump_objfile): Use dump method.
(dump_psymtab, maintenance_print_psymbols)
(maintenance_info_psymtabs, maintenance_check_symtabs)
(extend_psymbol_list): Remove.
* symfile.h (struct quick_symbol_functions): New struct.
(struct sym_fns) <qf>: New field.
(sort_pst_symbols): Remove.
(increment_reading_symtab): Declare.
* symfile.c: Include psymtab.h.
(compare_psymbols, sort_pst_symbols): Remove.
(psymtab_to_symtab): Remove.
(increment_reading_symtab): New function.
(symbol_file_add_with_addrs_or_offsets): Use expand_all_symtabs
method.
(set_initial_language): Use find_main_filename.
(allocate_psymtab, discard_psymtab, cashier_psymtab): Remove.
(free_named_symtabs): Remove unused code.
(start_psymtab_common, add_psymbol_to_bcache)
(append_psymbol_to_list, add_psymbol_to_list, init_psymbol_list):
Remove.
* stack.c: Include psymtab.h, symfile.h.
(backtrace_command_1): Use find_pc_sect_symtab_via_partial.
* source.h (psymtab_to_fullname): Don't declare.
* source.c: Include psymtab.h.
(select_source_symtab): Use find_last_source_symtab method.
(forget_cached_source_info): Use forget_cached_source_info
method.
(find_and_open_source): No longer static.
(psymtab_to_fullname): Remove.
* somread.c: Include psymtab.h.
(som_sym_fns): Update.
* psympriv.h: New file.
* psymtab.h: New file.
* psymtab.c: New file.
* objfiles.h: (ALL_OBJFILE_PSYMTABS): Remove.
(ALL_PSYMTABS, ALL_PSPACE_PSYMTABS): Likewise.
* objfiles.c: Include psymtab.h.
(objfile_relocate1): Use relocate method.
(objfile_has_partial_symbols): Use has_symbols method.
* mipsread.c: Include psymtab.h.
(ecoff_sym_fns): Update.
* mi/mi-cmd-file.c: Include psymtab.h.
(print_partial_file_name): New function.
(mi_cmd_file_list_exec_source_files): Use
map_partial_symbol_filenames.
* mdebugread.c: Include psympriv.h.
* machoread.c: Include psympriv.h.
(macho_sym_fns): Update.
* m2-exp.y (yylex): Use lookup_symtab.
* elfread.c: Include psympriv.h.
(elf_sym_fns): Update.
* dwarf2read.c: Include psympriv.h.
* dbxread.c: Include psympriv.h.
(aout_sym_fns): Update.
* cp-support.c: Include psymtab.h.
(read_in_psymtabs): Remove.
(make_symbol_overload_list_qualified): Use
expand_symtabs_for_function method.
* coffread.c: Include psympriv.h.
(coff_sym_fns): Update.
* blockframe.c: Include psymtab.h.
(find_pc_partial_function): Use find_pc_sect_symtab method.
* ada-lang.h (ada_update_initial_language): Update.
* ada-lang.c: Include psymtab.h.
(ada_update_initial_language): Remove 'main_pst' argument.
(ada_lookup_partial_symbol): Remove.
(struct ada_psym_data): New type.
(ada_add_psyms): New function.
(ada_add_non_local_symbols): Use map_ada_symtabs method.
(struct add_partial_datum): New type.
(ada_add_partial_symbol_completions): New function.
(ada_make_symbol_completion_list): Use map_partial_symbol_names.
(ada_exception_support_info_sniffer): Update.
* Makefile.in (SFILES): Add psymtab.c.
(COMMON_OBS): Add psymtab.o.
(HFILES_NO_SRCDIR): Add psymtab.h, psympriv.h.
gdb/doc
* gdbint.texinfo (Symbol Handling): Update.
2010-03-11 02:20:08 +08:00
|
|
|
ALL_OBJFILES (objfile)
|
|
|
|
{
|
|
|
|
if (objfile->sf)
|
|
|
|
objfile->sf->qf->expand_symtabs_for_function (objfile, func_name);
|
|
|
|
}
|
2003-06-12 David Carlton <carlton@bactrian.org>
* symtab.h: Delete declaration of make_symbol_overload_list.
Add declaration of lookup_partial_symbol.
* symtab.c (remove_params): Move to cp-support.c.
(overload_list_add_symbol, make_symbol_overload_list)
(sym_return_val_size, sym_return_val_index): Ditto.
(lookup_partial_symbol): Make extern.
* cp-support.h: Add declaration of make_symbol_overload_list.
* cp-support.c: Include dictionary.h, objfiles.h, frame.h,
symtab.h, and block.h.
(remove_params): Move here from symtab.c.
(overload_list_add_symbol, make_symbol_overload_list)
(sym_return_val_size, sym_return_val_index): Ditto.
* valops.c: Include cp-support.h.
* Makefile.in (cp-support.o): Depend on dictionary_h, objfiles_h,
frame_h, and block_h.
(valops.o): Depend on cp_support_h.
2003-06-12 23:33:45 +08:00
|
|
|
|
|
|
|
/* Search upwards from currently selected frame (so that we can
|
|
|
|
complete on local vars. */
|
|
|
|
|
|
|
|
for (b = get_selected_block (0); b != NULL; b = BLOCK_SUPERBLOCK (b))
|
2010-06-08 01:51:03 +08:00
|
|
|
make_symbol_overload_list_block (func_name, b);
|
2003-06-12 David Carlton <carlton@bactrian.org>
* symtab.h: Delete declaration of make_symbol_overload_list.
Add declaration of lookup_partial_symbol.
* symtab.c (remove_params): Move to cp-support.c.
(overload_list_add_symbol, make_symbol_overload_list)
(sym_return_val_size, sym_return_val_index): Ditto.
(lookup_partial_symbol): Make extern.
* cp-support.h: Add declaration of make_symbol_overload_list.
* cp-support.c: Include dictionary.h, objfiles.h, frame.h,
symtab.h, and block.h.
(remove_params): Move here from symtab.c.
(overload_list_add_symbol, make_symbol_overload_list)
(sym_return_val_size, sym_return_val_index): Ditto.
* valops.c: Include cp-support.h.
* Makefile.in (cp-support.o): Depend on dictionary_h, objfiles_h,
frame_h, and block_h.
(valops.o): Depend on cp_support_h.
2003-06-12 23:33:45 +08:00
|
|
|
|
2004-02-03 04:44:53 +08:00
|
|
|
surrounding_static_block = block_static_block (get_selected_block (0));
|
|
|
|
|
2003-06-12 David Carlton <carlton@bactrian.org>
* symtab.h: Delete declaration of make_symbol_overload_list.
Add declaration of lookup_partial_symbol.
* symtab.c (remove_params): Move to cp-support.c.
(overload_list_add_symbol, make_symbol_overload_list)
(sym_return_val_size, sym_return_val_index): Ditto.
(lookup_partial_symbol): Make extern.
* cp-support.h: Add declaration of make_symbol_overload_list.
* cp-support.c: Include dictionary.h, objfiles.h, frame.h,
symtab.h, and block.h.
(remove_params): Move here from symtab.c.
(overload_list_add_symbol, make_symbol_overload_list)
(sym_return_val_size, sym_return_val_index): Ditto.
* valops.c: Include cp-support.h.
* Makefile.in (cp-support.o): Depend on dictionary_h, objfiles_h,
frame_h, and block_h.
(valops.o): Depend on cp_support_h.
2003-06-12 23:33:45 +08:00
|
|
|
/* Go through the symtabs and check the externs and statics for
|
|
|
|
symbols which match. */
|
|
|
|
|
2007-01-22 00:55:49 +08:00
|
|
|
ALL_PRIMARY_SYMTABS (objfile, s)
|
2003-06-12 David Carlton <carlton@bactrian.org>
* symtab.h: Delete declaration of make_symbol_overload_list.
Add declaration of lookup_partial_symbol.
* symtab.c (remove_params): Move to cp-support.c.
(overload_list_add_symbol, make_symbol_overload_list)
(sym_return_val_size, sym_return_val_index): Ditto.
(lookup_partial_symbol): Make extern.
* cp-support.h: Add declaration of make_symbol_overload_list.
* cp-support.c: Include dictionary.h, objfiles.h, frame.h,
symtab.h, and block.h.
(remove_params): Move here from symtab.c.
(overload_list_add_symbol, make_symbol_overload_list)
(sym_return_val_size, sym_return_val_index): Ditto.
* valops.c: Include cp-support.h.
* Makefile.in (cp-support.o): Depend on dictionary_h, objfiles_h,
frame_h, and block_h.
(valops.o): Depend on cp_support_h.
2003-06-12 23:33:45 +08:00
|
|
|
{
|
|
|
|
QUIT;
|
|
|
|
b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK);
|
2010-06-08 01:51:03 +08:00
|
|
|
make_symbol_overload_list_block (func_name, b);
|
2003-06-12 David Carlton <carlton@bactrian.org>
* symtab.h: Delete declaration of make_symbol_overload_list.
Add declaration of lookup_partial_symbol.
* symtab.c (remove_params): Move to cp-support.c.
(overload_list_add_symbol, make_symbol_overload_list)
(sym_return_val_size, sym_return_val_index): Ditto.
(lookup_partial_symbol): Make extern.
* cp-support.h: Add declaration of make_symbol_overload_list.
* cp-support.c: Include dictionary.h, objfiles.h, frame.h,
symtab.h, and block.h.
(remove_params): Move here from symtab.c.
(overload_list_add_symbol, make_symbol_overload_list)
(sym_return_val_size, sym_return_val_index): Ditto.
* valops.c: Include cp-support.h.
* Makefile.in (cp-support.o): Depend on dictionary_h, objfiles_h,
frame_h, and block_h.
(valops.o): Depend on cp_support_h.
2003-06-12 23:33:45 +08:00
|
|
|
}
|
|
|
|
|
2007-01-22 00:55:49 +08:00
|
|
|
ALL_PRIMARY_SYMTABS (objfile, s)
|
2003-06-12 David Carlton <carlton@bactrian.org>
* symtab.h: Delete declaration of make_symbol_overload_list.
Add declaration of lookup_partial_symbol.
* symtab.c (remove_params): Move to cp-support.c.
(overload_list_add_symbol, make_symbol_overload_list)
(sym_return_val_size, sym_return_val_index): Ditto.
(lookup_partial_symbol): Make extern.
* cp-support.h: Add declaration of make_symbol_overload_list.
* cp-support.c: Include dictionary.h, objfiles.h, frame.h,
symtab.h, and block.h.
(remove_params): Move here from symtab.c.
(overload_list_add_symbol, make_symbol_overload_list)
(sym_return_val_size, sym_return_val_index): Ditto.
* valops.c: Include cp-support.h.
* Makefile.in (cp-support.o): Depend on dictionary_h, objfiles_h,
frame_h, and block_h.
(valops.o): Depend on cp_support_h.
2003-06-12 23:33:45 +08:00
|
|
|
{
|
|
|
|
QUIT;
|
|
|
|
b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK);
|
|
|
|
/* Don't do this block twice. */
|
|
|
|
if (b == surrounding_static_block)
|
|
|
|
continue;
|
2010-06-08 01:51:03 +08:00
|
|
|
make_symbol_overload_list_block (func_name, b);
|
2003-06-12 David Carlton <carlton@bactrian.org>
* symtab.h: Delete declaration of make_symbol_overload_list.
Add declaration of lookup_partial_symbol.
* symtab.c (remove_params): Move to cp-support.c.
(overload_list_add_symbol, make_symbol_overload_list)
(sym_return_val_size, sym_return_val_index): Ditto.
(lookup_partial_symbol): Make extern.
* cp-support.h: Add declaration of make_symbol_overload_list.
* cp-support.c: Include dictionary.h, objfiles.h, frame.h,
symtab.h, and block.h.
(remove_params): Move here from symtab.c.
(overload_list_add_symbol, make_symbol_overload_list)
(sym_return_val_size, sym_return_val_index): Ditto.
* valops.c: Include cp-support.h.
* Makefile.in (cp-support.o): Depend on dictionary_h, objfiles_h,
frame_h, and block_h.
(valops.o): Depend on cp_support_h.
2003-06-12 23:33:45 +08:00
|
|
|
}
|
2004-02-03 04:44:53 +08:00
|
|
|
}
|
|
|
|
|
2011-01-01 06:59:52 +08:00
|
|
|
/* Lookup the rtti type for a class name. */
|
2003-12-05 12:25:09 +08:00
|
|
|
|
|
|
|
struct type *
|
|
|
|
cp_lookup_rtti_type (const char *name, struct block *block)
|
|
|
|
{
|
|
|
|
struct symbol * rtti_sym;
|
|
|
|
struct type * rtti_type;
|
|
|
|
|
* symtab.h (lookup_symbol_in_language): Remove SYMTAB parameter.
(lookup_symbol): Likewise.
* symtab.c (lookup_symbol_in_language): Remove SYMTAB parameter.
(lookup_symbol): Likewise.
(search_symbols): Update.
* linespec.c (find_methods, collect_methods): Update.
(add_matching_methods, add_constructors): Update.
(decode_compound, decode_dollar, decode_variable): Update.
(lookup_prefix_sym): Update.
(symbol_found): Remove SYM_SYMTAB parameter.
Use SYMBOL_SYMTAB (sym) instead.
* gdbtypes.c (lookup_typename): Update.
(lookup_struct, lookup_union, lookup_enum): Update.
(lookup_template_type): Update.
(check_typedef): Update.
* language.c (lang_bool_type): Update.
* mdebugread.c (parse_procedure): Update.
* mi/mi-cmd-stack.c (list_args_or_locals): Update.
* parse.c (write_dollar_variable): Update.
* printcmd.c (address_info): Update.
* source.c (select_source_symtab): Update.
* stack.c (print_frame_args, print_frame_arg_vars): Update.
* valops.c (find_function_in_inferior): Update.
(value_struct_elt_for_reference): Update.
* value.c (value_static_field, value_fn_field): Update.
* alpha-mdebug-tdep.c (find_proc_desc): Update.
* arm-tdep.c (arm_skip_prologue): Update.
* mt-tdep.c (mt_skip_prologue): Update.
* xstormy16-tdep.c (xstormy16_skip_prologue): Update.
* ada-lang.h (struct ada_symbol_info): Remove SYMTAB member.
* ada-lang.c (ada_add_block_symbols): Remove SYMTAB parameter.
(add_defn_to_vec): Likewise.
(ada_add_block_symbols): Likewise.
(lookup_cached_symbol, cache_symbol): Likewise.
(standard_lookup): Update.
(ada_lookup_symbol_list): Update.
* c-valprint.c (c_val_print): Update.
* cp-support.c (cp_lookup_rtti_type): Update.
* jv-lang.c (java_lookup_class, get_java_object_type): Update.
* objc-lang.c (lookup_struct_typedef, find_imps): Update.
* p-valprint.c (pascal_val_print): Update.
* scm-lang.c (scm_lookup_name): Update.
* c-exp.y: Update.
* f-exp.y: Update.
* jv-exp.y: Update.
* m2-exp.y: Update.
* objc-exp.y: Update.
* p-exp.y: Update.
2008-05-19 23:50:10 +08:00
|
|
|
rtti_sym = lookup_symbol (name, block, STRUCT_DOMAIN, NULL);
|
2003-12-05 12:25:09 +08:00
|
|
|
|
|
|
|
if (rtti_sym == NULL)
|
|
|
|
{
|
2005-02-10 Andrew Cagney <cagney@gnu.org>
Mark up all error and warning messages.
* ada-lang.c, amd64-tdep.c, arch-utils.c, breakpoint.c: Update.
* bsd-kvm.c, bsd-uthread.c, coff-solib.h, coffread.c: Update.
* core-aout.c, core-regset.c, corefile.c, corelow.c: Update.
* cp-abi.c, cp-support.c, cp-valprint.c, cris-tdep.c: Update.
* dbxread.c, demangle.c, doublest.c, dsrec.c: Update.
* dve3900-rom.c, dwarf2expr.c, dwarf2loc.c: Update.
* dwarf2read.c, dwarfread.c, elfread.c, eval.c: Update.
* event-top.c, exec.c, expprint.c, f-lang.c: Update.
* f-typeprint.c, f-valprint.c, fbsd-nat.c, findvar.c: Update.
* frame.c, frv-linux-tdep.c, gcore.c, gdbtypes.c: Update.
* gnu-nat.c, gnu-v2-abi.c, gnu-v3-abi.c, go32-nat.c: Update.
* hpacc-abi.c, hppa-hpux-nat.c, hppa-hpux-tdep.c: Update.
* hppa-linux-nat.c, hppa-linux-tdep.c, hppa-tdep.c: Update.
* hpread.c, hpux-thread.c, i386-linux-nat.c: Update.
* i386-linux-tdep.c, i386-tdep.c, i386bsd-nat.c: Update.
* i386gnu-nat.c, i387-tdep.c, ia64-linux-nat.c: Update.
* ia64-tdep.c, inf-child.c, inf-ptrace.c, inf-ttrace.c: Update.
* infcall.c, infcmd.c, inflow.c, infptrace.c, infrun.c: Update.
* inftarg.c, interps.c, irix5-nat.c, jv-lang.c: Update.
* kod-cisco.c, kod.c, language.c, libunwind-frame.c: Update.
* linespec.c, linux-nat.c, linux-thread-db.c, m2-lang.c: Update.
* m32r-rom.c, m68hc11-tdep.c, m68k-tdep.c: Update.
* m68klinux-nat.c, macrocmd.c, macroexp.c, main.c: Update.
* maint.c, mdebugread.c, mem-break.c, memattr.c: Update.
* mips-linux-tdep.c, mips-tdep.c, mipsread.c, monitor.c: Update.
* nlmread.c, nto-procfs.c, objc-lang.c, objfiles.c: Update.
* observer.c, ocd.c, p-lang.c, p-typeprint.c: Update.
* p-valprint.c, pa64solib.c, parse.c, ppc-linux-tdep.c: Update.
* ppcnbsd-tdep.c, printcmd.c, procfs.c, remote-e7000.c: Update.
* remote-fileio.c, remote-m32r-sdi.c, remote-rdi.c: Update.
* remote-rdp.c, remote-sim.c, remote-st.c: Update.
* remote-utils.c, remote-utils.h, remote.c: Update.
* rom68k-rom.c, rs6000-nat.c, s390-tdep.c, scm-lang.c: Update.
* ser-e7kpc.c, ser-tcp.c, ser-unix.c, sh-tdep.c: Update.
* sh3-rom.c, shnbsd-tdep.c, sol-thread.c, solib-aix5.c: Update.
* solib-frv.c, solib-irix.c, solib-osf.c, solib-pa64.c: Update.
* solib-som.c, solib-sunos.c, solib-svr4.c, solib.c: Update.
* somread.c, somsolib.c, source.c, stabsread.c: Update.
* stack.c, std-regs.c, symfile-mem.c, symfile.c: Update.
* symmisc.c, symtab.c, target.c, thread.c, top.c: Update.
* tracepoint.c, trad-frame.c, typeprint.c, utils.c: Update.
* uw-thread.c, valarith.c, valops.c, valprint.c: Update.
* value.c, varobj.c, version.in, win32-nat.c, wince.c: Update.
* xcoffread.c, xcoffsolib.c, cli/cli-cmds.c: Update.
* cli/cli-decode.c, cli/cli-dump.c, cli/cli-logging.c: Update.
* cli/cli-script.c, cli/cli-setshow.c, mi/mi-cmd-break.c: Update.
* mi/mi-cmd-disas.c, mi/mi-cmd-env.c, mi/mi-cmd-file.c: Update.
* mi/mi-cmd-stack.c, mi/mi-cmd-var.c, mi/mi-getopt.c: Update.
* mi/mi-symbol-cmds.c, tui/tui-layout.c, tui/tui-stack.c: Update.
* tui/tui-win.c: Update.
2005-02-11 12:06:14 +08:00
|
|
|
warning (_("RTTI symbol not found for class '%s'"), name);
|
2003-12-05 12:25:09 +08:00
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (SYMBOL_CLASS (rtti_sym) != LOC_TYPEDEF)
|
|
|
|
{
|
2005-02-10 Andrew Cagney <cagney@gnu.org>
Mark up all error and warning messages.
* ada-lang.c, amd64-tdep.c, arch-utils.c, breakpoint.c: Update.
* bsd-kvm.c, bsd-uthread.c, coff-solib.h, coffread.c: Update.
* core-aout.c, core-regset.c, corefile.c, corelow.c: Update.
* cp-abi.c, cp-support.c, cp-valprint.c, cris-tdep.c: Update.
* dbxread.c, demangle.c, doublest.c, dsrec.c: Update.
* dve3900-rom.c, dwarf2expr.c, dwarf2loc.c: Update.
* dwarf2read.c, dwarfread.c, elfread.c, eval.c: Update.
* event-top.c, exec.c, expprint.c, f-lang.c: Update.
* f-typeprint.c, f-valprint.c, fbsd-nat.c, findvar.c: Update.
* frame.c, frv-linux-tdep.c, gcore.c, gdbtypes.c: Update.
* gnu-nat.c, gnu-v2-abi.c, gnu-v3-abi.c, go32-nat.c: Update.
* hpacc-abi.c, hppa-hpux-nat.c, hppa-hpux-tdep.c: Update.
* hppa-linux-nat.c, hppa-linux-tdep.c, hppa-tdep.c: Update.
* hpread.c, hpux-thread.c, i386-linux-nat.c: Update.
* i386-linux-tdep.c, i386-tdep.c, i386bsd-nat.c: Update.
* i386gnu-nat.c, i387-tdep.c, ia64-linux-nat.c: Update.
* ia64-tdep.c, inf-child.c, inf-ptrace.c, inf-ttrace.c: Update.
* infcall.c, infcmd.c, inflow.c, infptrace.c, infrun.c: Update.
* inftarg.c, interps.c, irix5-nat.c, jv-lang.c: Update.
* kod-cisco.c, kod.c, language.c, libunwind-frame.c: Update.
* linespec.c, linux-nat.c, linux-thread-db.c, m2-lang.c: Update.
* m32r-rom.c, m68hc11-tdep.c, m68k-tdep.c: Update.
* m68klinux-nat.c, macrocmd.c, macroexp.c, main.c: Update.
* maint.c, mdebugread.c, mem-break.c, memattr.c: Update.
* mips-linux-tdep.c, mips-tdep.c, mipsread.c, monitor.c: Update.
* nlmread.c, nto-procfs.c, objc-lang.c, objfiles.c: Update.
* observer.c, ocd.c, p-lang.c, p-typeprint.c: Update.
* p-valprint.c, pa64solib.c, parse.c, ppc-linux-tdep.c: Update.
* ppcnbsd-tdep.c, printcmd.c, procfs.c, remote-e7000.c: Update.
* remote-fileio.c, remote-m32r-sdi.c, remote-rdi.c: Update.
* remote-rdp.c, remote-sim.c, remote-st.c: Update.
* remote-utils.c, remote-utils.h, remote.c: Update.
* rom68k-rom.c, rs6000-nat.c, s390-tdep.c, scm-lang.c: Update.
* ser-e7kpc.c, ser-tcp.c, ser-unix.c, sh-tdep.c: Update.
* sh3-rom.c, shnbsd-tdep.c, sol-thread.c, solib-aix5.c: Update.
* solib-frv.c, solib-irix.c, solib-osf.c, solib-pa64.c: Update.
* solib-som.c, solib-sunos.c, solib-svr4.c, solib.c: Update.
* somread.c, somsolib.c, source.c, stabsread.c: Update.
* stack.c, std-regs.c, symfile-mem.c, symfile.c: Update.
* symmisc.c, symtab.c, target.c, thread.c, top.c: Update.
* tracepoint.c, trad-frame.c, typeprint.c, utils.c: Update.
* uw-thread.c, valarith.c, valops.c, valprint.c: Update.
* value.c, varobj.c, version.in, win32-nat.c, wince.c: Update.
* xcoffread.c, xcoffsolib.c, cli/cli-cmds.c: Update.
* cli/cli-decode.c, cli/cli-dump.c, cli/cli-logging.c: Update.
* cli/cli-script.c, cli/cli-setshow.c, mi/mi-cmd-break.c: Update.
* mi/mi-cmd-disas.c, mi/mi-cmd-env.c, mi/mi-cmd-file.c: Update.
* mi/mi-cmd-stack.c, mi/mi-cmd-var.c, mi/mi-getopt.c: Update.
* mi/mi-symbol-cmds.c, tui/tui-layout.c, tui/tui-stack.c: Update.
* tui/tui-win.c: Update.
2005-02-11 12:06:14 +08:00
|
|
|
warning (_("RTTI symbol for class '%s' is not a type"), name);
|
2003-12-05 12:25:09 +08:00
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
rtti_type = SYMBOL_TYPE (rtti_sym);
|
|
|
|
|
|
|
|
switch (TYPE_CODE (rtti_type))
|
|
|
|
{
|
|
|
|
case TYPE_CODE_CLASS:
|
|
|
|
break;
|
|
|
|
case TYPE_CODE_NAMESPACE:
|
|
|
|
/* chastain/2003-11-26: the symbol tables often contain fake
|
|
|
|
symbols for namespaces with the same name as the struct.
|
|
|
|
This warning is an indication of a bug in the lookup order
|
|
|
|
or a bug in the way that the symbol tables are populated. */
|
2005-02-10 Andrew Cagney <cagney@gnu.org>
Mark up all error and warning messages.
* ada-lang.c, amd64-tdep.c, arch-utils.c, breakpoint.c: Update.
* bsd-kvm.c, bsd-uthread.c, coff-solib.h, coffread.c: Update.
* core-aout.c, core-regset.c, corefile.c, corelow.c: Update.
* cp-abi.c, cp-support.c, cp-valprint.c, cris-tdep.c: Update.
* dbxread.c, demangle.c, doublest.c, dsrec.c: Update.
* dve3900-rom.c, dwarf2expr.c, dwarf2loc.c: Update.
* dwarf2read.c, dwarfread.c, elfread.c, eval.c: Update.
* event-top.c, exec.c, expprint.c, f-lang.c: Update.
* f-typeprint.c, f-valprint.c, fbsd-nat.c, findvar.c: Update.
* frame.c, frv-linux-tdep.c, gcore.c, gdbtypes.c: Update.
* gnu-nat.c, gnu-v2-abi.c, gnu-v3-abi.c, go32-nat.c: Update.
* hpacc-abi.c, hppa-hpux-nat.c, hppa-hpux-tdep.c: Update.
* hppa-linux-nat.c, hppa-linux-tdep.c, hppa-tdep.c: Update.
* hpread.c, hpux-thread.c, i386-linux-nat.c: Update.
* i386-linux-tdep.c, i386-tdep.c, i386bsd-nat.c: Update.
* i386gnu-nat.c, i387-tdep.c, ia64-linux-nat.c: Update.
* ia64-tdep.c, inf-child.c, inf-ptrace.c, inf-ttrace.c: Update.
* infcall.c, infcmd.c, inflow.c, infptrace.c, infrun.c: Update.
* inftarg.c, interps.c, irix5-nat.c, jv-lang.c: Update.
* kod-cisco.c, kod.c, language.c, libunwind-frame.c: Update.
* linespec.c, linux-nat.c, linux-thread-db.c, m2-lang.c: Update.
* m32r-rom.c, m68hc11-tdep.c, m68k-tdep.c: Update.
* m68klinux-nat.c, macrocmd.c, macroexp.c, main.c: Update.
* maint.c, mdebugread.c, mem-break.c, memattr.c: Update.
* mips-linux-tdep.c, mips-tdep.c, mipsread.c, monitor.c: Update.
* nlmread.c, nto-procfs.c, objc-lang.c, objfiles.c: Update.
* observer.c, ocd.c, p-lang.c, p-typeprint.c: Update.
* p-valprint.c, pa64solib.c, parse.c, ppc-linux-tdep.c: Update.
* ppcnbsd-tdep.c, printcmd.c, procfs.c, remote-e7000.c: Update.
* remote-fileio.c, remote-m32r-sdi.c, remote-rdi.c: Update.
* remote-rdp.c, remote-sim.c, remote-st.c: Update.
* remote-utils.c, remote-utils.h, remote.c: Update.
* rom68k-rom.c, rs6000-nat.c, s390-tdep.c, scm-lang.c: Update.
* ser-e7kpc.c, ser-tcp.c, ser-unix.c, sh-tdep.c: Update.
* sh3-rom.c, shnbsd-tdep.c, sol-thread.c, solib-aix5.c: Update.
* solib-frv.c, solib-irix.c, solib-osf.c, solib-pa64.c: Update.
* solib-som.c, solib-sunos.c, solib-svr4.c, solib.c: Update.
* somread.c, somsolib.c, source.c, stabsread.c: Update.
* stack.c, std-regs.c, symfile-mem.c, symfile.c: Update.
* symmisc.c, symtab.c, target.c, thread.c, top.c: Update.
* tracepoint.c, trad-frame.c, typeprint.c, utils.c: Update.
* uw-thread.c, valarith.c, valops.c, valprint.c: Update.
* value.c, varobj.c, version.in, win32-nat.c, wince.c: Update.
* xcoffread.c, xcoffsolib.c, cli/cli-cmds.c: Update.
* cli/cli-decode.c, cli/cli-dump.c, cli/cli-logging.c: Update.
* cli/cli-script.c, cli/cli-setshow.c, mi/mi-cmd-break.c: Update.
* mi/mi-cmd-disas.c, mi/mi-cmd-env.c, mi/mi-cmd-file.c: Update.
* mi/mi-cmd-stack.c, mi/mi-cmd-var.c, mi/mi-getopt.c: Update.
* mi/mi-symbol-cmds.c, tui/tui-layout.c, tui/tui-stack.c: Update.
* tui/tui-win.c: Update.
2005-02-11 12:06:14 +08:00
|
|
|
warning (_("RTTI symbol for class '%s' is a namespace"), name);
|
2003-12-05 12:25:09 +08:00
|
|
|
return NULL;
|
|
|
|
default:
|
2005-02-10 Andrew Cagney <cagney@gnu.org>
Mark up all error and warning messages.
* ada-lang.c, amd64-tdep.c, arch-utils.c, breakpoint.c: Update.
* bsd-kvm.c, bsd-uthread.c, coff-solib.h, coffread.c: Update.
* core-aout.c, core-regset.c, corefile.c, corelow.c: Update.
* cp-abi.c, cp-support.c, cp-valprint.c, cris-tdep.c: Update.
* dbxread.c, demangle.c, doublest.c, dsrec.c: Update.
* dve3900-rom.c, dwarf2expr.c, dwarf2loc.c: Update.
* dwarf2read.c, dwarfread.c, elfread.c, eval.c: Update.
* event-top.c, exec.c, expprint.c, f-lang.c: Update.
* f-typeprint.c, f-valprint.c, fbsd-nat.c, findvar.c: Update.
* frame.c, frv-linux-tdep.c, gcore.c, gdbtypes.c: Update.
* gnu-nat.c, gnu-v2-abi.c, gnu-v3-abi.c, go32-nat.c: Update.
* hpacc-abi.c, hppa-hpux-nat.c, hppa-hpux-tdep.c: Update.
* hppa-linux-nat.c, hppa-linux-tdep.c, hppa-tdep.c: Update.
* hpread.c, hpux-thread.c, i386-linux-nat.c: Update.
* i386-linux-tdep.c, i386-tdep.c, i386bsd-nat.c: Update.
* i386gnu-nat.c, i387-tdep.c, ia64-linux-nat.c: Update.
* ia64-tdep.c, inf-child.c, inf-ptrace.c, inf-ttrace.c: Update.
* infcall.c, infcmd.c, inflow.c, infptrace.c, infrun.c: Update.
* inftarg.c, interps.c, irix5-nat.c, jv-lang.c: Update.
* kod-cisco.c, kod.c, language.c, libunwind-frame.c: Update.
* linespec.c, linux-nat.c, linux-thread-db.c, m2-lang.c: Update.
* m32r-rom.c, m68hc11-tdep.c, m68k-tdep.c: Update.
* m68klinux-nat.c, macrocmd.c, macroexp.c, main.c: Update.
* maint.c, mdebugread.c, mem-break.c, memattr.c: Update.
* mips-linux-tdep.c, mips-tdep.c, mipsread.c, monitor.c: Update.
* nlmread.c, nto-procfs.c, objc-lang.c, objfiles.c: Update.
* observer.c, ocd.c, p-lang.c, p-typeprint.c: Update.
* p-valprint.c, pa64solib.c, parse.c, ppc-linux-tdep.c: Update.
* ppcnbsd-tdep.c, printcmd.c, procfs.c, remote-e7000.c: Update.
* remote-fileio.c, remote-m32r-sdi.c, remote-rdi.c: Update.
* remote-rdp.c, remote-sim.c, remote-st.c: Update.
* remote-utils.c, remote-utils.h, remote.c: Update.
* rom68k-rom.c, rs6000-nat.c, s390-tdep.c, scm-lang.c: Update.
* ser-e7kpc.c, ser-tcp.c, ser-unix.c, sh-tdep.c: Update.
* sh3-rom.c, shnbsd-tdep.c, sol-thread.c, solib-aix5.c: Update.
* solib-frv.c, solib-irix.c, solib-osf.c, solib-pa64.c: Update.
* solib-som.c, solib-sunos.c, solib-svr4.c, solib.c: Update.
* somread.c, somsolib.c, source.c, stabsread.c: Update.
* stack.c, std-regs.c, symfile-mem.c, symfile.c: Update.
* symmisc.c, symtab.c, target.c, thread.c, top.c: Update.
* tracepoint.c, trad-frame.c, typeprint.c, utils.c: Update.
* uw-thread.c, valarith.c, valops.c, valprint.c: Update.
* value.c, varobj.c, version.in, win32-nat.c, wince.c: Update.
* xcoffread.c, xcoffsolib.c, cli/cli-cmds.c: Update.
* cli/cli-decode.c, cli/cli-dump.c, cli/cli-logging.c: Update.
* cli/cli-script.c, cli/cli-setshow.c, mi/mi-cmd-break.c: Update.
* mi/mi-cmd-disas.c, mi/mi-cmd-env.c, mi/mi-cmd-file.c: Update.
* mi/mi-cmd-stack.c, mi/mi-cmd-var.c, mi/mi-getopt.c: Update.
* mi/mi-symbol-cmds.c, tui/tui-layout.c, tui/tui-stack.c: Update.
* tui/tui-win.c: Update.
2005-02-11 12:06:14 +08:00
|
|
|
warning (_("RTTI symbol for class '%s' has bad type"), name);
|
2003-12-05 12:25:09 +08:00
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
return rtti_type;
|
|
|
|
}
|
2003-06-12 David Carlton <carlton@bactrian.org>
* symtab.h: Delete declaration of make_symbol_overload_list.
Add declaration of lookup_partial_symbol.
* symtab.c (remove_params): Move to cp-support.c.
(overload_list_add_symbol, make_symbol_overload_list)
(sym_return_val_size, sym_return_val_index): Ditto.
(lookup_partial_symbol): Make extern.
* cp-support.h: Add declaration of make_symbol_overload_list.
* cp-support.c: Include dictionary.h, objfiles.h, frame.h,
symtab.h, and block.h.
(remove_params): Move here from symtab.c.
(overload_list_add_symbol, make_symbol_overload_list)
(sym_return_val_size, sym_return_val_index): Ditto.
* valops.c: Include cp-support.h.
* Makefile.in (cp-support.o): Depend on dictionary_h, objfiles_h,
frame_h, and block_h.
(valops.o): Depend on cp_support_h.
2003-06-12 23:33:45 +08:00
|
|
|
|
2003-04-15 David Carlton <carlton@math.stanford.edu>
* Makefile.in (SFILES): Add cp-namespace.c.
(COMMON_OBS): Add cp-namespace.o.
(block.o): Depend on gdb_obstack_h and cp_support_h.
(buildsym.o): Depend on cp_support_h.
(cp-namespace.o): New.
(cp-support.o): Depend on gdb_string_h, demangle_h, gdb_assert_h,
gdb_obstack_h, symtab_h, symfile_h, and gdbcmd_h.
(dwarf2read.o): Depend on cp_support_h.
* jv-lang.c (get_java_class_symtab): Set BLOCK_NAMESPACE.
* dwarf2read.c (process_die): Set processing_has_namespace_info,
processing_current_namespace.
(read_namespace): Update processing_current_namespace; check for
anonymous namespaces.
(dwarf2_name): New function.
(dwarf2_extension): Ditto.
* cp-support.h: Update copyright, contributors.
Add inclusion guards.
Add opaque declaration for structs obstack, block, symbol.
(struct using_direct): New struct.
Add declarations for cp_find_first_component,
cp_entire_prefix_len, processing_has_namespace_info,
processing_current_namespace, cp_is_anonymous,
cp_add_using_directive, cp_initialize_namespace,
cp_finalize_namespace, cp_set_block_scope,
cp_scan_for_anonymous_namespaces.
* cp-namespace.c: New file.
* cp-support.c: Update copyright.
Include ctype.h, gdb_assert.h, gdbcmd.h.
New variable maint_cplus_cmd_list.
(cp_find_first_component): New function.
(cp_entire_prefix_len, maint_cplus_command)
(first_component_command, _initialize_cp_support): Ditto.
* buildsym.c: Include cp-support.h.
New variable using_list.
(add_symbol_to_list): Check for anonymous namespaces.
(finish_block): Set block's scope.
(start_symtab): Initialize C++ namespace support.
(end_symtab): Finalize C++ namespace support.
* block.h: Add opaque declarations for structs
block_namespace_info, using_direct, and obstack.
Add declarations for block_set_scope and block_set_using.
(struct block): Add 'language_specific' member.
(BLOCK_NAMESPACE): New macro.
* block.c: Include gdb_obstack.h and cp-support.h.
(struct block_namespace_info): New struct.
(block_set_scope): New function.
(block_set_using, block_initialize_namespace): Ditto.
2003-04-15 David Carlton <carlton@math.stanford.edu>
* gdb.c++/maint.exp: New file.
2003-04-16 07:07:11 +08:00
|
|
|
/* Don't allow just "maintenance cplus". */
|
|
|
|
|
|
|
|
static void
|
|
|
|
maint_cplus_command (char *arg, int from_tty)
|
|
|
|
{
|
2011-01-06 06:22:53 +08:00
|
|
|
printf_unfiltered (_("\"maintenance cplus\" must be followed "
|
|
|
|
"by the name of a command.\n"));
|
2011-01-01 06:59:52 +08:00
|
|
|
help_list (maint_cplus_cmd_list,
|
|
|
|
"maintenance cplus ",
|
|
|
|
-1, gdb_stdout);
|
2003-04-15 David Carlton <carlton@math.stanford.edu>
* Makefile.in (SFILES): Add cp-namespace.c.
(COMMON_OBS): Add cp-namespace.o.
(block.o): Depend on gdb_obstack_h and cp_support_h.
(buildsym.o): Depend on cp_support_h.
(cp-namespace.o): New.
(cp-support.o): Depend on gdb_string_h, demangle_h, gdb_assert_h,
gdb_obstack_h, symtab_h, symfile_h, and gdbcmd_h.
(dwarf2read.o): Depend on cp_support_h.
* jv-lang.c (get_java_class_symtab): Set BLOCK_NAMESPACE.
* dwarf2read.c (process_die): Set processing_has_namespace_info,
processing_current_namespace.
(read_namespace): Update processing_current_namespace; check for
anonymous namespaces.
(dwarf2_name): New function.
(dwarf2_extension): Ditto.
* cp-support.h: Update copyright, contributors.
Add inclusion guards.
Add opaque declaration for structs obstack, block, symbol.
(struct using_direct): New struct.
Add declarations for cp_find_first_component,
cp_entire_prefix_len, processing_has_namespace_info,
processing_current_namespace, cp_is_anonymous,
cp_add_using_directive, cp_initialize_namespace,
cp_finalize_namespace, cp_set_block_scope,
cp_scan_for_anonymous_namespaces.
* cp-namespace.c: New file.
* cp-support.c: Update copyright.
Include ctype.h, gdb_assert.h, gdbcmd.h.
New variable maint_cplus_cmd_list.
(cp_find_first_component): New function.
(cp_entire_prefix_len, maint_cplus_command)
(first_component_command, _initialize_cp_support): Ditto.
* buildsym.c: Include cp-support.h.
New variable using_list.
(add_symbol_to_list): Check for anonymous namespaces.
(finish_block): Set block's scope.
(start_symtab): Initialize C++ namespace support.
(end_symtab): Finalize C++ namespace support.
* block.h: Add opaque declarations for structs
block_namespace_info, using_direct, and obstack.
Add declarations for block_set_scope and block_set_using.
(struct block): Add 'language_specific' member.
(BLOCK_NAMESPACE): New macro.
* block.c: Include gdb_obstack.h and cp-support.h.
(struct block_namespace_info): New struct.
(block_set_scope): New function.
(block_set_using, block_initialize_namespace): Ditto.
2003-04-15 David Carlton <carlton@math.stanford.edu>
* gdb.c++/maint.exp: New file.
2003-04-16 07:07:11 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
/* This is a front end for cp_find_first_component, for unit testing.
|
|
|
|
Be careful when using it: see the NOTE above
|
|
|
|
cp_find_first_component. */
|
|
|
|
|
|
|
|
static void
|
|
|
|
first_component_command (char *arg, int from_tty)
|
|
|
|
{
|
2008-03-29 03:52:23 +08:00
|
|
|
int len;
|
|
|
|
char *prefix;
|
|
|
|
|
|
|
|
if (!arg)
|
|
|
|
return;
|
|
|
|
|
|
|
|
len = cp_find_first_component (arg);
|
|
|
|
prefix = alloca (len + 1);
|
2003-04-15 David Carlton <carlton@math.stanford.edu>
* Makefile.in (SFILES): Add cp-namespace.c.
(COMMON_OBS): Add cp-namespace.o.
(block.o): Depend on gdb_obstack_h and cp_support_h.
(buildsym.o): Depend on cp_support_h.
(cp-namespace.o): New.
(cp-support.o): Depend on gdb_string_h, demangle_h, gdb_assert_h,
gdb_obstack_h, symtab_h, symfile_h, and gdbcmd_h.
(dwarf2read.o): Depend on cp_support_h.
* jv-lang.c (get_java_class_symtab): Set BLOCK_NAMESPACE.
* dwarf2read.c (process_die): Set processing_has_namespace_info,
processing_current_namespace.
(read_namespace): Update processing_current_namespace; check for
anonymous namespaces.
(dwarf2_name): New function.
(dwarf2_extension): Ditto.
* cp-support.h: Update copyright, contributors.
Add inclusion guards.
Add opaque declaration for structs obstack, block, symbol.
(struct using_direct): New struct.
Add declarations for cp_find_first_component,
cp_entire_prefix_len, processing_has_namespace_info,
processing_current_namespace, cp_is_anonymous,
cp_add_using_directive, cp_initialize_namespace,
cp_finalize_namespace, cp_set_block_scope,
cp_scan_for_anonymous_namespaces.
* cp-namespace.c: New file.
* cp-support.c: Update copyright.
Include ctype.h, gdb_assert.h, gdbcmd.h.
New variable maint_cplus_cmd_list.
(cp_find_first_component): New function.
(cp_entire_prefix_len, maint_cplus_command)
(first_component_command, _initialize_cp_support): Ditto.
* buildsym.c: Include cp-support.h.
New variable using_list.
(add_symbol_to_list): Check for anonymous namespaces.
(finish_block): Set block's scope.
(start_symtab): Initialize C++ namespace support.
(end_symtab): Finalize C++ namespace support.
* block.h: Add opaque declarations for structs
block_namespace_info, using_direct, and obstack.
Add declarations for block_set_scope and block_set_using.
(struct block): Add 'language_specific' member.
(BLOCK_NAMESPACE): New macro.
* block.c: Include gdb_obstack.h and cp-support.h.
(struct block_namespace_info): New struct.
(block_set_scope): New function.
(block_set_using, block_initialize_namespace): Ditto.
2003-04-15 David Carlton <carlton@math.stanford.edu>
* gdb.c++/maint.exp: New file.
2003-04-16 07:07:11 +08:00
|
|
|
|
|
|
|
memcpy (prefix, arg, len);
|
|
|
|
prefix[len] = '\0';
|
|
|
|
|
|
|
|
printf_unfiltered ("%s\n", prefix);
|
|
|
|
}
|
|
|
|
|
2003-06-08 Andrew Cagney <cagney@redhat.com>
* acinclude.m4 (gcc_AC_CHECK_DECL, (gcc_AC_CHECK_DECL): Stolen
from GCC's acinclude.m4.
* configure.in: Check for getopt's delcaration.
* aclocal.m4, config.in, configure: Re-generate.
* main.c (error_init): Delete declaration.
* defs.h (error_init): Declare.
* rs6000-tdep.c (rs6000_fetch_pointer_argument): Make static.
(rs6000_convert_from_func_ptr_addr): Make static.
(_initialize_rs6000_tdep): Add declaration.
* cli/cli-cmds.c (dont_repeat): Delete declaration.
(show_commands, set_verbose, show_history): Delete declaration.
* top.h (set_verbose): Add declaration.
(show_history, set_history, show_commands): Add declaration.
(do_restore_instream_cleanup): Add declaration.
* objc-lang.c (specialcmp): Make static.
(print_object_command): Make static.
(find_objc_msgsend): Make static.
(find_objc_msgcall_submethod_helper): Make static.
(find_objc_msgcall_submethod): Make static.
(_initialize_objc_language): Add declaration.
(find_implementation_from_class): Make static.
(find_implementation): Make static.
* objc-exp.y (yylex): Delete lookup_struct_typedef declaration.
* objc-lang.h (lookup_struct_typedef): Add declaration.
* cli/cli-interp.c (_initialize_cli_interp): Add declaration.
* cli/cli-script.c (clear_hook_in_cleanup): Make static.
(do_restore_user_call_depth): Make static.
(do_restore_instream_cleanup): Delete declaration.
(dont_repeat): Delete declaration.
* cli/cli-decode.c (add_abbrev_cmd): Delete function.
* cli/cli-dump.c (_initialize_cli_dump): Add declaration.
* reggroups.c (_initialize_reggroup): Add declaration.
* cp-support.c (_initialize_cp_support): Add declaration.
* cp-abi.c (_initialize_cp_abi): Add declaration.
* hpacc-abi.c (_initialize_hpacc_abi): Add declaration.
* gnu-v3-abi.c (gnuv3_baseclass_offset): Make static.
(_initialize_gnu_v3_abi): Add declaration.
* gnu-v2-abi.c (gnuv2_value_rtti_type): Make static.
(_initialize_gnu_v2_abi): Add declaration.
* frame-base.c (_initialize_frame_base): Add declaration.
* doublest.c (floatformat_from_length): Make static.
* frame-unwind.c (_initialize_frame_unwind): Add declaration.
* frame.c (create_sentinel_frame): Make static.
(_initialize_frame): Add declaration.
* top.c (do_catch_errors): Make static.
(gdb_rl_operate_and_get_next_completion): Make static.
* typeprint.c: Include "typeprint.h".
* sentinel-frame.c (sentinel_frame_prev_register): Make static.
(sentinel_frame_this_id): Make static.
* p-valprint.c (_initialize_pascal_valprint): Add declaration.
* ui-out.c (make_cleanup_ui_out_begin_end): Delete function.
* dwarf2-frame.c (dwarf2_frame_cache): Make static.
* p-exp.y (push_current_type, pop_current_type): ISO C declaration.
* dwarf2expr.h (dwarf_expr_context): ISO C declaration.
* maint.c (maintenance_print_architecture): Make static.
* signals/signals.c (_initialize_signals): Add declaration.
* std-regs.c (_initialize_frame_reg): Add declaration.
* jv-exp.y (push_variable): ISO C definition.
(push_qualified_expression_name): Ditto.
* memattr.c (_initialize_mem): Add declaration.
* remote.c (remote_check_watch_resources): Make static.
(remote_stopped_by_watchpoint): Make static.
(remote_stopped_data_address): Make static.
* d10v-tdep.c (nr_dmap_regs): Make static.
(a0_regnum): Make static.
(d10v_frame_unwind_cache): Make static.
(d10v_frame_p): Make static.
* osabi.c (show_osabi): Make static.
(_initialize_gdb_osabi): Add extern declaration.
* gdbtypes.c (make_qualified_type): Make static.
(safe_parse_type): Make static.
* macrocmd.c (_initialize_macrocmd): Add extern declaration.
* macrotab.c (macro_bcache_free): Make static.
* interps.c (interp_set_quiet): Make static.
(interpreter_exec_cmd): Make static.
* stack.h (select_frame_command): New file.
* stack.c: Include "stack.h".
(select_frame_command_wrapper): Delete function.
(select_frame_command): Make global.
* infcall.c: Include "infcall.h".
* linespec.c: Include "linespec.h".
* symfile.c (sections_overlap): Make static.
* cp-support.h (cp_initialize_namespace): ISO C declaration.
* charset.c (_initialize_charset): Add missing prototype.
* regcache.c (init_legacy_regcache_descr): Make static.
(do_regcache_xfree): Make static.
(regcache_xfer_part): Make static.
(_initialize_regcache): Add missing prototype.
* breakpoint.c (parse_breakpoint_sals): Make static.
(breakpoint_sals_to_pc): Make static.
* interps.h (clear_interpreter_hooks): ISO C declaration.
* Makefile.in (stack_h): Define.
(stack.o, typeprint.o, mi-main.o): Update dependencies.
(mi-cmd-stack.o, infcall.o, linespec.o): Update dependencies.
Index: mi/ChangeLog
2003-06-08 Andrew Cagney <cagney@redhat.com>
* mi-parse.c (_initialize_mi_parse): Delete function.
* mi-main.c: Include "mi-main.h".
* mi-interp.c (_initialize_mi_interp): Add declaration.
* mi-cmd-stack.c: Include "stack.h".
(select_frame_command_wrapper): Delete extern declaration.
(mi_cmd_stack_select_frame): Replace select_frame_command_wrapper
with select_frame_command.
2003-06-09 02:27:14 +08:00
|
|
|
extern initialize_file_ftype _initialize_cp_support; /* -Wmissing-prototypes */
|
|
|
|
|
2009-09-22 03:46:43 +08:00
|
|
|
#define SKIP_SPACE(P) \
|
|
|
|
do \
|
|
|
|
{ \
|
|
|
|
while (*(P) == ' ' || *(P) == '\t') \
|
|
|
|
++(P); \
|
|
|
|
} \
|
|
|
|
while (0)
|
|
|
|
|
|
|
|
/* Returns the length of the operator name or 0 if INPUT does not
|
2011-01-01 06:59:52 +08:00
|
|
|
point to a valid C++ operator. INPUT should start with
|
|
|
|
"operator". */
|
2009-09-22 03:46:43 +08:00
|
|
|
int
|
|
|
|
cp_validate_operator (const char *input)
|
|
|
|
{
|
|
|
|
int i;
|
|
|
|
char *copy;
|
|
|
|
const char *p;
|
|
|
|
struct expression *expr;
|
|
|
|
struct value *val;
|
|
|
|
struct gdb_exception except;
|
|
|
|
|
|
|
|
p = input;
|
|
|
|
|
|
|
|
if (strncmp (p, "operator", 8) == 0)
|
|
|
|
{
|
|
|
|
int valid = 0;
|
|
|
|
|
2010-05-14 07:53:32 +08:00
|
|
|
p += 8;
|
2009-09-22 03:46:43 +08:00
|
|
|
SKIP_SPACE (p);
|
2011-01-01 06:59:52 +08:00
|
|
|
for (i = 0;
|
|
|
|
i < sizeof (operator_tokens) / sizeof (operator_tokens[0]);
|
2009-09-22 03:46:43 +08:00
|
|
|
++i)
|
|
|
|
{
|
|
|
|
int length = strlen (operator_tokens[i]);
|
2010-05-14 07:53:32 +08:00
|
|
|
|
2011-01-01 06:59:52 +08:00
|
|
|
/* By using strncmp here, we MUST have operator_tokens
|
|
|
|
ordered! See additional notes where operator_tokens is
|
|
|
|
defined above. */
|
2009-09-22 03:46:43 +08:00
|
|
|
if (strncmp (p, operator_tokens[i], length) == 0)
|
|
|
|
{
|
|
|
|
const char *op = p;
|
2010-05-14 07:53:32 +08:00
|
|
|
|
2009-09-22 03:46:43 +08:00
|
|
|
valid = 1;
|
|
|
|
p += length;
|
|
|
|
|
|
|
|
if (strncmp (op, "new", 3) == 0
|
|
|
|
|| strncmp (op, "delete", 6) == 0)
|
|
|
|
{
|
|
|
|
|
2011-01-01 06:59:52 +08:00
|
|
|
/* Special case: new[] and delete[]. We must be
|
|
|
|
careful to swallow whitespace before/in "[]". */
|
2009-09-22 03:46:43 +08:00
|
|
|
SKIP_SPACE (p);
|
|
|
|
|
|
|
|
if (*p == '[')
|
|
|
|
{
|
|
|
|
++p;
|
|
|
|
SKIP_SPACE (p);
|
|
|
|
if (*p == ']')
|
|
|
|
++p;
|
|
|
|
else
|
|
|
|
valid = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (valid)
|
|
|
|
return (p - input);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Check input for a conversion operator. */
|
|
|
|
|
2011-01-01 06:59:52 +08:00
|
|
|
/* Skip past base typename. */
|
2009-09-22 03:46:43 +08:00
|
|
|
while (*p != '*' && *p != '&' && *p != 0 && *p != ' ')
|
|
|
|
++p;
|
|
|
|
SKIP_SPACE (p);
|
|
|
|
|
2011-01-01 06:59:52 +08:00
|
|
|
/* Add modifiers '*' / '&'. */
|
2009-09-22 03:46:43 +08:00
|
|
|
while (*p == '*' || *p == '&')
|
|
|
|
{
|
|
|
|
++p;
|
|
|
|
SKIP_SPACE (p);
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Check for valid type. [Remember: input starts with
|
|
|
|
"operator".] */
|
|
|
|
copy = savestring (input + 8, p - input - 8);
|
|
|
|
expr = NULL;
|
|
|
|
val = NULL;
|
|
|
|
TRY_CATCH (except, RETURN_MASK_ALL)
|
|
|
|
{
|
|
|
|
expr = parse_expression (copy);
|
|
|
|
val = evaluate_type (expr);
|
|
|
|
}
|
|
|
|
|
|
|
|
xfree (copy);
|
|
|
|
if (expr)
|
|
|
|
xfree (expr);
|
|
|
|
|
|
|
|
if (val != NULL && value_type (val) != NULL)
|
|
|
|
return (p - input);
|
|
|
|
}
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2003-04-15 David Carlton <carlton@math.stanford.edu>
* Makefile.in (SFILES): Add cp-namespace.c.
(COMMON_OBS): Add cp-namespace.o.
(block.o): Depend on gdb_obstack_h and cp_support_h.
(buildsym.o): Depend on cp_support_h.
(cp-namespace.o): New.
(cp-support.o): Depend on gdb_string_h, demangle_h, gdb_assert_h,
gdb_obstack_h, symtab_h, symfile_h, and gdbcmd_h.
(dwarf2read.o): Depend on cp_support_h.
* jv-lang.c (get_java_class_symtab): Set BLOCK_NAMESPACE.
* dwarf2read.c (process_die): Set processing_has_namespace_info,
processing_current_namespace.
(read_namespace): Update processing_current_namespace; check for
anonymous namespaces.
(dwarf2_name): New function.
(dwarf2_extension): Ditto.
* cp-support.h: Update copyright, contributors.
Add inclusion guards.
Add opaque declaration for structs obstack, block, symbol.
(struct using_direct): New struct.
Add declarations for cp_find_first_component,
cp_entire_prefix_len, processing_has_namespace_info,
processing_current_namespace, cp_is_anonymous,
cp_add_using_directive, cp_initialize_namespace,
cp_finalize_namespace, cp_set_block_scope,
cp_scan_for_anonymous_namespaces.
* cp-namespace.c: New file.
* cp-support.c: Update copyright.
Include ctype.h, gdb_assert.h, gdbcmd.h.
New variable maint_cplus_cmd_list.
(cp_find_first_component): New function.
(cp_entire_prefix_len, maint_cplus_command)
(first_component_command, _initialize_cp_support): Ditto.
* buildsym.c: Include cp-support.h.
New variable using_list.
(add_symbol_to_list): Check for anonymous namespaces.
(finish_block): Set block's scope.
(start_symtab): Initialize C++ namespace support.
(end_symtab): Finalize C++ namespace support.
* block.h: Add opaque declarations for structs
block_namespace_info, using_direct, and obstack.
Add declarations for block_set_scope and block_set_using.
(struct block): Add 'language_specific' member.
(BLOCK_NAMESPACE): New macro.
* block.c: Include gdb_obstack.h and cp-support.h.
(struct block_namespace_info): New struct.
(block_set_scope): New function.
(block_set_using, block_initialize_namespace): Ditto.
2003-04-15 David Carlton <carlton@math.stanford.edu>
* gdb.c++/maint.exp: New file.
2003-04-16 07:07:11 +08:00
|
|
|
void
|
|
|
|
_initialize_cp_support (void)
|
|
|
|
{
|
2011-01-01 06:59:52 +08:00
|
|
|
add_prefix_cmd ("cplus", class_maintenance,
|
|
|
|
maint_cplus_command,
|
|
|
|
_("C++ maintenance commands."),
|
|
|
|
&maint_cplus_cmd_list,
|
|
|
|
"maintenance cplus ",
|
|
|
|
0, &maintenancelist);
|
|
|
|
add_alias_cmd ("cp", "cplus",
|
|
|
|
class_maintenance, 1,
|
|
|
|
&maintenancelist);
|
|
|
|
|
|
|
|
add_cmd ("first_component",
|
|
|
|
class_maintenance,
|
|
|
|
first_component_command,
|
2005-02-14 Andrew Cagney <cagney@gnu.org>
Mark up add_cmd.
* arch-utils.c, avr-tdep.c, breakpoint.c, corefile.c: Update.
* cp-abi.c, cp-namespace.c, cp-support.c, dummy-frame.c: Update.
* exec.c, gnu-nat.c, go32-nat.c, hppa-tdep.c, infcmd.c: Update.
* infrun.c, interps.c, macrocmd.c, maint.c, memattr.c: Update.
* mips-tdep.c, ocd.c, osabi.c, printcmd.c, regcache.c: Update.
* reggroups.c, remote-fileio.c, remote-rdi.c, remote.c: Update.
* sol-thread.c, source.c, stack.c, symfile-mem.c: Update.
* symfile.c, thread.c, tracepoint.c, valprint.c, value.c: Update.
* win32-nat.c, cli/cli-cmds.c, cli/cli-dump.c: Update.
* cli/cli-logging.c, tui/tui-regs.c: Update.
2005-02-15 02:10:11 +08:00
|
|
|
_("Print the first class/namespace component of NAME."),
|
2003-04-15 David Carlton <carlton@math.stanford.edu>
* Makefile.in (SFILES): Add cp-namespace.c.
(COMMON_OBS): Add cp-namespace.o.
(block.o): Depend on gdb_obstack_h and cp_support_h.
(buildsym.o): Depend on cp_support_h.
(cp-namespace.o): New.
(cp-support.o): Depend on gdb_string_h, demangle_h, gdb_assert_h,
gdb_obstack_h, symtab_h, symfile_h, and gdbcmd_h.
(dwarf2read.o): Depend on cp_support_h.
* jv-lang.c (get_java_class_symtab): Set BLOCK_NAMESPACE.
* dwarf2read.c (process_die): Set processing_has_namespace_info,
processing_current_namespace.
(read_namespace): Update processing_current_namespace; check for
anonymous namespaces.
(dwarf2_name): New function.
(dwarf2_extension): Ditto.
* cp-support.h: Update copyright, contributors.
Add inclusion guards.
Add opaque declaration for structs obstack, block, symbol.
(struct using_direct): New struct.
Add declarations for cp_find_first_component,
cp_entire_prefix_len, processing_has_namespace_info,
processing_current_namespace, cp_is_anonymous,
cp_add_using_directive, cp_initialize_namespace,
cp_finalize_namespace, cp_set_block_scope,
cp_scan_for_anonymous_namespaces.
* cp-namespace.c: New file.
* cp-support.c: Update copyright.
Include ctype.h, gdb_assert.h, gdbcmd.h.
New variable maint_cplus_cmd_list.
(cp_find_first_component): New function.
(cp_entire_prefix_len, maint_cplus_command)
(first_component_command, _initialize_cp_support): Ditto.
* buildsym.c: Include cp-support.h.
New variable using_list.
(add_symbol_to_list): Check for anonymous namespaces.
(finish_block): Set block's scope.
(start_symtab): Initialize C++ namespace support.
(end_symtab): Finalize C++ namespace support.
* block.h: Add opaque declarations for structs
block_namespace_info, using_direct, and obstack.
Add declarations for block_set_scope and block_set_using.
(struct block): Add 'language_specific' member.
(BLOCK_NAMESPACE): New macro.
* block.c: Include gdb_obstack.h and cp-support.h.
(struct block_namespace_info): New struct.
(block_set_scope): New function.
(block_set_using, block_initialize_namespace): Ditto.
2003-04-15 David Carlton <carlton@math.stanford.edu>
* gdb.c++/maint.exp: New file.
2003-04-16 07:07:11 +08:00
|
|
|
&maint_cplus_cmd_list);
|
|
|
|
}
|