* [rfa] move make_symbol_overload_list to cp-support.c
@ 2003-06-12 0:26 David Carlton
2003-06-12 1:30 ` Daniel Jacobowitz
2003-06-12 2:11 ` Elena Zannoni
0 siblings, 2 replies; 4+ messages in thread
From: David Carlton @ 2003-06-12 0:26 UTC (permalink / raw)
To: gdb-patches; +Cc: Elena Zannoni, Daniel Jacobowitz
As previously discussed, here's a patch to move
make_symbol_overload_list and everything associated with it to
cp-support.c. It should be pretty obvious, and Daniel and Elena have
both agreed in principle, so I'll commit this once one of them gives a
thumbs-up. (I'm pretty sure I'm not missing anything - I just moved
code, so it's hard to imagine how anything could have gone wrong.)
David Carlton
carlton@bactrian.org
2003-06-11 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.
symtab.c (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.
Index: symtab.h
===================================================================
RCS file: /cvs/src/src/gdb/symtab.h,v
retrieving revision 1.74
diff -u -p -r1.74 symtab.h
--- symtab.h 11 Jun 2003 23:29:48 -0000 1.74
+++ symtab.h 12 Jun 2003 00:19:16 -0000
@@ -1024,6 +1024,13 @@ extern struct symbol *lookup_symbol_aux_
const domain_enum domain,
struct symtab **symtab);
+/* Lookup a partial symbol. */
+
+extern struct partial_symbol *lookup_partial_symbol (struct partial_symtab *,
+ const char *,
+ const char *, int,
+ domain_enum);
+
/* lookup a symbol by name, within a specified block */
extern struct symbol *lookup_block_symbol (const struct block *, const char *,
@@ -1285,8 +1292,6 @@ extern void select_source_symtab (struct
extern char **make_symbol_completion_list (char *, char *);
extern char **make_file_symbol_completion_list (char *, char *, char *);
-
-extern struct symbol **make_symbol_overload_list (struct symbol *);
extern char **make_source_files_completion_list (char *, char *);
Index: symtab.c
===================================================================
RCS file: /cvs/src/src/gdb/symtab.c,v
retrieving revision 1.111
diff -u -p -r1.111 symtab.c
--- symtab.c 11 Jun 2003 23:29:48 -0000 1.111
+++ symtab.c 12 Jun 2003 00:19:30 -0000
@@ -77,11 +77,6 @@ static int find_line_common (struct line
char *operator_chars (char *p, char **end);
-static struct partial_symbol *lookup_partial_symbol (struct partial_symtab *,
- const char *,
- const char *, int,
- domain_enum);
-
static struct symbol *lookup_symbol_aux (const char *name,
const char *linkage_name,
const struct block *block,
@@ -136,8 +131,6 @@ static void print_msymbol_info (struct m
static void symtab_symbol_info (char *, domain_enum, int);
-static void overload_list_add_symbol (struct symbol *sym, char *oload_name);
-
void _initialize_symtab (void);
/* */
@@ -1392,7 +1385,7 @@ lookup_symbol_global (const char *name,
linkage name matches it. Check the global symbols if GLOBAL, the
static symbols if not */
-static struct partial_symbol *
+struct partial_symbol *
lookup_partial_symbol (struct partial_symtab *pst, const char *name,
const char *linkage_name, int global,
domain_enum domain)
@@ -3922,211 +3915,6 @@ in_prologue (CORE_ADDR pc, CORE_ADDR fun
return func_addr <= pc && pc < sal.end;
}
-
-/* Begin overload resolution functions */
-
-static char *
-remove_params (const char *demangled_name)
-{
- const char *argp;
- char *new_name;
- int depth;
-
- if (demangled_name == NULL)
- return NULL;
-
- /* First find the end of the arg list. */
- argp = strrchr (demangled_name, ')');
- if (argp == NULL)
- return NULL;
-
- /* Back up to the beginning. */
- depth = 1;
-
- while (argp-- > demangled_name)
- {
- if (*argp == ')')
- depth ++;
- else if (*argp == '(')
- {
- depth --;
-
- if (depth == 0)
- break;
- }
- }
- if (depth != 0)
- internal_error (__FILE__, __LINE__,
- "bad demangled name %s\n", demangled_name);
- while (argp[-1] == ' ' && argp > demangled_name)
- argp --;
-
- new_name = xmalloc (argp - demangled_name + 1);
- memcpy (new_name, demangled_name, argp - demangled_name);
- new_name[argp - demangled_name] = '\0';
- return new_name;
-}
-
-/* Helper routine for make_symbol_completion_list. */
-
-static int sym_return_val_size;
-static int sym_return_val_index;
-static struct symbol **sym_return_val;
-
-/* Test to see if the symbol specified by SYMNAME (which is already
- demangled for C++ symbols) matches SYM_TEXT in the first SYM_TEXT_LEN
- characters. If so, add it to the current completion list. */
-
-static void
-overload_list_add_symbol (struct symbol *sym, char *oload_name)
-{
- int newsize;
- int i;
- char *sym_name;
-
- /* If there is no type information, we can't do anything, so skip */
- if (SYMBOL_TYPE (sym) == NULL)
- return;
-
- /* skip any symbols that we've already considered. */
- for (i = 0; i < sym_return_val_index; ++i)
- if (!strcmp (DEPRECATED_SYMBOL_NAME (sym), DEPRECATED_SYMBOL_NAME (sym_return_val[i])))
- return;
-
- /* Get the demangled name without parameters */
- sym_name = remove_params (SYMBOL_DEMANGLED_NAME (sym));
- if (!sym_name)
- return;
-
- /* skip symbols that cannot match */
- if (strcmp (sym_name, oload_name) != 0)
- {
- xfree (sym_name);
- return;
- }
-
- xfree (sym_name);
-
- /* We have a match for an overload instance, so add SYM to the current list
- * of overload instances */
- if (sym_return_val_index + 3 > sym_return_val_size)
- {
- newsize = (sym_return_val_size *= 2) * sizeof (struct symbol *);
- sym_return_val = (struct symbol **) xrealloc ((char *) sym_return_val, newsize);
- }
- 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
- * match name of the supplied symbol FSYM.
- * This is used in finding all overloaded instances of a function name.
- * This has been modified from make_symbol_completion_list. */
-
-
-struct symbol **
-make_symbol_overload_list (struct symbol *fsym)
-{
- register struct symbol *sym;
- register struct symtab *s;
- register struct partial_symtab *ps;
- register struct objfile *objfile;
- register struct block *b, *surrounding_static_block = 0;
- struct dict_iterator iter;
- /* The name we are completing on. */
- char *oload_name = NULL;
- /* Length of name. */
- int oload_name_len = 0;
-
- /* Look for the symbol we are supposed to complete on. */
-
- oload_name = remove_params (SYMBOL_DEMANGLED_NAME (fsym));
- if (!oload_name)
- {
- sym_return_val_size = 1;
- sym_return_val = (struct symbol **) xmalloc (2 * sizeof (struct symbol *));
- sym_return_val[0] = fsym;
- sym_return_val[1] = NULL;
-
- return sym_return_val;
- }
- oload_name_len = strlen (oload_name);
-
- sym_return_val_size = 100;
- sym_return_val_index = 0;
- sym_return_val = (struct symbol **) xmalloc ((sym_return_val_size + 1) * sizeof (struct symbol *));
- sym_return_val[0] = NULL;
-
- /* Read in all partial symtabs containing a partial symbol named
- OLOAD_NAME. */
-
- ALL_PSYMTABS (objfile, ps)
- {
- struct partial_symbol **psym;
-
- /* If the psymtab's been read in we'll get it when we search
- through the blockvector. */
- if (ps->readin)
- continue;
-
- if ((lookup_partial_symbol (ps, oload_name, NULL, 1, VAR_DOMAIN)
- != NULL)
- || (lookup_partial_symbol (ps, oload_name, NULL, 0, VAR_DOMAIN)
- != NULL))
- PSYMTAB_TO_SYMTAB (ps);
- }
-
- /* 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))
- {
- if (!BLOCK_SUPERBLOCK (b))
- {
- surrounding_static_block = b; /* For elimination of dups */
- }
-
- /* Also catch fields of types defined in this places which match our
- text string. Only complete on types visible from current context. */
-
- ALL_BLOCK_SYMBOLS (b, iter, sym)
- {
- overload_list_add_symbol (sym, oload_name);
- }
- }
-
- /* Go through the symtabs and check the externs and statics for
- symbols which match. */
-
- ALL_SYMTABS (objfile, s)
- {
- QUIT;
- b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK);
- ALL_BLOCK_SYMBOLS (b, iter, sym)
- {
- overload_list_add_symbol (sym, oload_name);
- }
- }
-
- ALL_SYMTABS (objfile, s)
- {
- QUIT;
- b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK);
- /* Don't do this block twice. */
- if (b == surrounding_static_block)
- continue;
- ALL_BLOCK_SYMBOLS (b, iter, sym)
- {
- overload_list_add_symbol (sym, oload_name);
- }
- }
-
- xfree (oload_name);
-
- return (sym_return_val);
-}
-
-/* End of overload resolution functions */
\f
struct symtabs_and_lines
decode_line_spec (char *string, int funfirstline)
Index: cp-support.h
===================================================================
RCS file: /cvs/src/src/gdb/cp-support.h,v
retrieving revision 1.5
diff -u -p -r1.5 cp-support.h
--- cp-support.h 8 Jun 2003 18:27:13 -0000 1.5
+++ cp-support.h 12 Jun 2003 00:19:39 -0000
@@ -58,6 +58,7 @@ extern unsigned int cp_find_first_compon
extern unsigned int cp_entire_prefix_len (const char *name);
+extern struct symbol **make_symbol_overload_list (struct symbol *);
/* Functions/variables from cp-namespace.c. */
Index: cp-support.c
===================================================================
RCS file: /cvs/src/src/gdb/cp-support.c,v
retrieving revision 1.4
diff -u -p -r1.4 cp-support.c
--- cp-support.c 8 Jun 2003 18:27:13 -0000 1.4
+++ cp-support.c 12 Jun 2003 00:19:35 -0000
@@ -27,6 +27,21 @@
#include "demangle.h"
#include "gdb_assert.h"
#include "gdbcmd.h"
+#include "dictionary.h"
+#include "objfiles.h"
+#include "frame.h"
+#include "symtab.h"
+#include "block.h"
+
+/* Functions/variables related to overload resolution. */
+
+static int sym_return_val_size;
+static int sym_return_val_index;
+static struct symbol **sym_return_val;
+
+static char *remove_params (const char *demangled_name);
+
+static void overload_list_add_symbol (struct symbol *sym, char *oload_name);
/* The list of "maint cplus" commands. */
@@ -323,6 +338,204 @@ cp_entire_prefix_len (const char *name)
return previous_len;
}
+
+/* Overload resolution functions. */
+
+static char *
+remove_params (const char *demangled_name)
+{
+ const char *argp;
+ char *new_name;
+ int depth;
+
+ if (demangled_name == NULL)
+ return NULL;
+
+ /* First find the end of the arg list. */
+ argp = strrchr (demangled_name, ')');
+ if (argp == NULL)
+ return NULL;
+
+ /* Back up to the beginning. */
+ depth = 1;
+
+ while (argp-- > demangled_name)
+ {
+ if (*argp == ')')
+ depth ++;
+ else if (*argp == '(')
+ {
+ depth --;
+
+ if (depth == 0)
+ break;
+ }
+ }
+ if (depth != 0)
+ internal_error (__FILE__, __LINE__,
+ "bad demangled name %s\n", demangled_name);
+ while (argp[-1] == ' ' && argp > demangled_name)
+ argp --;
+
+ new_name = xmalloc (argp - demangled_name + 1);
+ memcpy (new_name, demangled_name, argp - demangled_name);
+ new_name[argp - demangled_name] = '\0';
+ return new_name;
+}
+
+/* Test to see if the symbol specified by SYMNAME (which is already
+ demangled for C++ symbols) matches SYM_TEXT in the first SYM_TEXT_LEN
+ characters. If so, add it to the current completion list. */
+
+static void
+overload_list_add_symbol (struct symbol *sym, char *oload_name)
+{
+ int newsize;
+ int i;
+ char *sym_name;
+
+ /* If there is no type information, we can't do anything, so skip */
+ if (SYMBOL_TYPE (sym) == NULL)
+ return;
+
+ /* skip any symbols that we've already considered. */
+ for (i = 0; i < sym_return_val_index; ++i)
+ if (!strcmp (DEPRECATED_SYMBOL_NAME (sym), DEPRECATED_SYMBOL_NAME (sym_return_val[i])))
+ return;
+
+ /* Get the demangled name without parameters */
+ sym_name = remove_params (SYMBOL_DEMANGLED_NAME (sym));
+ if (!sym_name)
+ return;
+
+ /* skip symbols that cannot match */
+ if (strcmp (sym_name, oload_name) != 0)
+ {
+ xfree (sym_name);
+ return;
+ }
+
+ xfree (sym_name);
+
+ /* We have a match for an overload instance, so add SYM to the current list
+ * of overload instances */
+ if (sym_return_val_index + 3 > sym_return_val_size)
+ {
+ newsize = (sym_return_val_size *= 2) * sizeof (struct symbol *);
+ sym_return_val = (struct symbol **) xrealloc ((char *) sym_return_val, newsize);
+ }
+ 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
+ * match name of the supplied symbol FSYM.
+ * This is used in finding all overloaded instances of a function name.
+ * This has been modified from make_symbol_completion_list. */
+
+
+struct symbol **
+make_symbol_overload_list (struct symbol *fsym)
+{
+ register struct symbol *sym;
+ register struct symtab *s;
+ register struct partial_symtab *ps;
+ register struct objfile *objfile;
+ register struct block *b, *surrounding_static_block = 0;
+ struct dict_iterator iter;
+ /* The name we are completing on. */
+ char *oload_name = NULL;
+ /* Length of name. */
+ int oload_name_len = 0;
+
+ /* Look for the symbol we are supposed to complete on. */
+
+ oload_name = remove_params (SYMBOL_DEMANGLED_NAME (fsym));
+ if (!oload_name)
+ {
+ sym_return_val_size = 1;
+ sym_return_val = (struct symbol **) xmalloc (2 * sizeof (struct symbol *));
+ sym_return_val[0] = fsym;
+ sym_return_val[1] = NULL;
+
+ return sym_return_val;
+ }
+ oload_name_len = strlen (oload_name);
+
+ sym_return_val_size = 100;
+ sym_return_val_index = 0;
+ sym_return_val = (struct symbol **) xmalloc ((sym_return_val_size + 1) * sizeof (struct symbol *));
+ sym_return_val[0] = NULL;
+
+ /* Read in all partial symtabs containing a partial symbol named
+ OLOAD_NAME. */
+
+ ALL_PSYMTABS (objfile, ps)
+ {
+ struct partial_symbol **psym;
+
+ /* If the psymtab's been read in we'll get it when we search
+ through the blockvector. */
+ if (ps->readin)
+ continue;
+
+ if ((lookup_partial_symbol (ps, oload_name, NULL, 1, VAR_DOMAIN)
+ != NULL)
+ || (lookup_partial_symbol (ps, oload_name, NULL, 0, VAR_DOMAIN)
+ != NULL))
+ PSYMTAB_TO_SYMTAB (ps);
+ }
+
+ /* 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))
+ {
+ if (!BLOCK_SUPERBLOCK (b))
+ {
+ surrounding_static_block = b; /* For elimination of dups */
+ }
+
+ /* Also catch fields of types defined in this places which match our
+ text string. Only complete on types visible from current context. */
+
+ ALL_BLOCK_SYMBOLS (b, iter, sym)
+ {
+ overload_list_add_symbol (sym, oload_name);
+ }
+ }
+
+ /* Go through the symtabs and check the externs and statics for
+ symbols which match. */
+
+ ALL_SYMTABS (objfile, s)
+ {
+ QUIT;
+ b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK);
+ ALL_BLOCK_SYMBOLS (b, iter, sym)
+ {
+ overload_list_add_symbol (sym, oload_name);
+ }
+ }
+
+ ALL_SYMTABS (objfile, s)
+ {
+ QUIT;
+ b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK);
+ /* Don't do this block twice. */
+ if (b == surrounding_static_block)
+ continue;
+ ALL_BLOCK_SYMBOLS (b, iter, sym)
+ {
+ overload_list_add_symbol (sym, oload_name);
+ }
+ }
+
+ xfree (oload_name);
+
+ return (sym_return_val);
+}
+
/* Don't allow just "maintenance cplus". */
Index: valops.c
===================================================================
RCS file: /cvs/src/src/gdb/valops.c,v
retrieving revision 1.111
diff -u -p -r1.111 valops.c
--- valops.c 11 Jun 2003 23:29:48 -0000 1.111
+++ valops.c 12 Jun 2003 00:19:47 -0000
@@ -36,6 +36,7 @@
#include "block.h"
#include "infcall.h"
#include "dictionary.h"
+#include "cp-support.h"
#include <errno.h>
#include "gdb_string.h"
Index: Makefile.in
===================================================================
RCS file: /cvs/src/src/gdb/Makefile.in,v
retrieving revision 1.399
diff -u -p -r1.399 Makefile.in
--- Makefile.in 11 Jun 2003 23:29:45 -0000 1.399
+++ Makefile.in 12 Jun 2003 00:20:01 -0000
@@ -1637,7 +1637,8 @@ cp-abi.o: cp-abi.c $(defs_h) $(value_h)
cp-namespace.o: cp-namespace.c $(defs_h) $(cp_support_h) $(gdb_obstack_h) \
$(symtab_h) $(symfile_h) $(gdb_assert_h) $(block_h)
cp-support.o: cp-support.c $(defs_h) $(cp_support_h) $(gdb_string_h) \
- $(demangle_h) $(gdb_assert_h) $(gdbcmd_h)
+ $(demangle_h) $(gdb_assert_h) $(gdbcmd_h) $(dictionary_h) \
+ $(objfiles_h) $(frame_h) $(block_h)
cp-valprint.o: cp-valprint.c $(defs_h) $(gdb_obstack_h) $(symtab_h) \
$(gdbtypes_h) $(expression_h) $(value_h) $(command_h) $(gdbcmd_h) \
$(demangle_h) $(annotate_h) $(gdb_string_h) $(c_lang_h) $(target_h) \
@@ -2349,7 +2350,7 @@ valarith.o: valarith.c $(defs_h) $(value
valops.o: valops.c $(defs_h) $(symtab_h) $(gdbtypes_h) $(value_h) $(frame_h) \
$(inferior_h) $(gdbcore_h) $(target_h) $(demangle_h) $(language_h) \
$(gdbcmd_h) $(regcache_h) $(cp_abi_h) $(gdb_string_h) \
- $(gdb_assert_h) $(block_h) $(dictionary_h)
+ $(gdb_assert_h) $(block_h) $(dictionary_h) $(cp_support_h)
valprint.o: valprint.c $(defs_h) $(gdb_string_h) $(symtab_h) $(gdbtypes_h) \
$(value_h) $(gdbcore_h) $(gdbcmd_h) $(target_h) $(language_h) \
$(annotate_h) $(valprint_h) $(floatformat_h) $(doublest_h)
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [rfa] move make_symbol_overload_list to cp-support.c
2003-06-12 0:26 [rfa] move make_symbol_overload_list to cp-support.c David Carlton
@ 2003-06-12 1:30 ` Daniel Jacobowitz
2003-06-12 15:36 ` David Carlton
2003-06-12 2:11 ` Elena Zannoni
1 sibling, 1 reply; 4+ messages in thread
From: Daniel Jacobowitz @ 2003-06-12 1:30 UTC (permalink / raw)
To: gdb-patches
On Wed, Jun 11, 2003 at 05:24:42PM -0700, David Carlton wrote:
> As previously discussed, here's a patch to move
> make_symbol_overload_list and everything associated with it to
> cp-support.c. It should be pretty obvious, and Daniel and Elena have
> both agreed in principle, so I'll commit this once one of them gives a
> thumbs-up. (I'm pretty sure I'm not missing anything - I just moved
> code, so it's hard to imagine how anything could have gone wrong.)
Looks good. I'm not thrilled with externing lookup_partial_symbol but
it'll do for a while.
> David Carlton
> carlton@bactrian.org
>
> 2003-06-11 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.
> symtab.c (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.
--
Daniel Jacobowitz
MontaVista Software Debian GNU/Linux Developer
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [rfa] move make_symbol_overload_list to cp-support.c
2003-06-12 0:26 [rfa] move make_symbol_overload_list to cp-support.c David Carlton
2003-06-12 1:30 ` Daniel Jacobowitz
@ 2003-06-12 2:11 ` Elena Zannoni
1 sibling, 0 replies; 4+ messages in thread
From: Elena Zannoni @ 2003-06-12 2:11 UTC (permalink / raw)
To: David Carlton; +Cc: gdb-patches, Elena Zannoni, Daniel Jacobowitz
David Carlton writes:
> As previously discussed, here's a patch to move
> make_symbol_overload_list and everything associated with it to
> cp-support.c. It should be pretty obvious, and Daniel and Elena have
> both agreed in principle, so I'll commit this once one of them gives a
> thumbs-up. (I'm pretty sure I'm not missing anything - I just moved
> code, so it's hard to imagine how anything could have gone wrong.)
My thumbs are up.
elena
>
> David Carlton
> carlton@bactrian.org
>
> 2003-06-11 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.
> symtab.c (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.
>
> Index: symtab.h
> ===================================================================
> RCS file: /cvs/src/src/gdb/symtab.h,v
> retrieving revision 1.74
> diff -u -p -r1.74 symtab.h
> --- symtab.h 11 Jun 2003 23:29:48 -0000 1.74
> +++ symtab.h 12 Jun 2003 00:19:16 -0000
> @@ -1024,6 +1024,13 @@ extern struct symbol *lookup_symbol_aux_
> const domain_enum domain,
> struct symtab **symtab);
>
> +/* Lookup a partial symbol. */
> +
> +extern struct partial_symbol *lookup_partial_symbol (struct partial_symtab *,
> + const char *,
> + const char *, int,
> + domain_enum);
> +
> /* lookup a symbol by name, within a specified block */
>
> extern struct symbol *lookup_block_symbol (const struct block *, const char *,
> @@ -1285,8 +1292,6 @@ extern void select_source_symtab (struct
> extern char **make_symbol_completion_list (char *, char *);
>
> extern char **make_file_symbol_completion_list (char *, char *, char *);
> -
> -extern struct symbol **make_symbol_overload_list (struct symbol *);
>
> extern char **make_source_files_completion_list (char *, char *);
>
> Index: symtab.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/symtab.c,v
> retrieving revision 1.111
> diff -u -p -r1.111 symtab.c
> --- symtab.c 11 Jun 2003 23:29:48 -0000 1.111
> +++ symtab.c 12 Jun 2003 00:19:30 -0000
> @@ -77,11 +77,6 @@ static int find_line_common (struct line
>
> char *operator_chars (char *p, char **end);
>
> -static struct partial_symbol *lookup_partial_symbol (struct partial_symtab *,
> - const char *,
> - const char *, int,
> - domain_enum);
> -
> static struct symbol *lookup_symbol_aux (const char *name,
> const char *linkage_name,
> const struct block *block,
> @@ -136,8 +131,6 @@ static void print_msymbol_info (struct m
>
> static void symtab_symbol_info (char *, domain_enum, int);
>
> -static void overload_list_add_symbol (struct symbol *sym, char *oload_name);
> -
> void _initialize_symtab (void);
>
> /* */
> @@ -1392,7 +1385,7 @@ lookup_symbol_global (const char *name,
> linkage name matches it. Check the global symbols if GLOBAL, the
> static symbols if not */
>
> -static struct partial_symbol *
> +struct partial_symbol *
> lookup_partial_symbol (struct partial_symtab *pst, const char *name,
> const char *linkage_name, int global,
> domain_enum domain)
> @@ -3922,211 +3915,6 @@ in_prologue (CORE_ADDR pc, CORE_ADDR fun
> return func_addr <= pc && pc < sal.end;
> }
>
> -
> -/* Begin overload resolution functions */
> -
> -static char *
> -remove_params (const char *demangled_name)
> -{
> - const char *argp;
> - char *new_name;
> - int depth;
> -
> - if (demangled_name == NULL)
> - return NULL;
> -
> - /* First find the end of the arg list. */
> - argp = strrchr (demangled_name, ')');
> - if (argp == NULL)
> - return NULL;
> -
> - /* Back up to the beginning. */
> - depth = 1;
> -
> - while (argp-- > demangled_name)
> - {
> - if (*argp == ')')
> - depth ++;
> - else if (*argp == '(')
> - {
> - depth --;
> -
> - if (depth == 0)
> - break;
> - }
> - }
> - if (depth != 0)
> - internal_error (__FILE__, __LINE__,
> - "bad demangled name %s\n", demangled_name);
> - while (argp[-1] == ' ' && argp > demangled_name)
> - argp --;
> -
> - new_name = xmalloc (argp - demangled_name + 1);
> - memcpy (new_name, demangled_name, argp - demangled_name);
> - new_name[argp - demangled_name] = '\0';
> - return new_name;
> -}
> -
> -/* Helper routine for make_symbol_completion_list. */
> -
> -static int sym_return_val_size;
> -static int sym_return_val_index;
> -static struct symbol **sym_return_val;
> -
> -/* Test to see if the symbol specified by SYMNAME (which is already
> - demangled for C++ symbols) matches SYM_TEXT in the first SYM_TEXT_LEN
> - characters. If so, add it to the current completion list. */
> -
> -static void
> -overload_list_add_symbol (struct symbol *sym, char *oload_name)
> -{
> - int newsize;
> - int i;
> - char *sym_name;
> -
> - /* If there is no type information, we can't do anything, so skip */
> - if (SYMBOL_TYPE (sym) == NULL)
> - return;
> -
> - /* skip any symbols that we've already considered. */
> - for (i = 0; i < sym_return_val_index; ++i)
> - if (!strcmp (DEPRECATED_SYMBOL_NAME (sym), DEPRECATED_SYMBOL_NAME (sym_return_val[i])))
> - return;
> -
> - /* Get the demangled name without parameters */
> - sym_name = remove_params (SYMBOL_DEMANGLED_NAME (sym));
> - if (!sym_name)
> - return;
> -
> - /* skip symbols that cannot match */
> - if (strcmp (sym_name, oload_name) != 0)
> - {
> - xfree (sym_name);
> - return;
> - }
> -
> - xfree (sym_name);
> -
> - /* We have a match for an overload instance, so add SYM to the current list
> - * of overload instances */
> - if (sym_return_val_index + 3 > sym_return_val_size)
> - {
> - newsize = (sym_return_val_size *= 2) * sizeof (struct symbol *);
> - sym_return_val = (struct symbol **) xrealloc ((char *) sym_return_val, newsize);
> - }
> - 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
> - * match name of the supplied symbol FSYM.
> - * This is used in finding all overloaded instances of a function name.
> - * This has been modified from make_symbol_completion_list. */
> -
> -
> -struct symbol **
> -make_symbol_overload_list (struct symbol *fsym)
> -{
> - register struct symbol *sym;
> - register struct symtab *s;
> - register struct partial_symtab *ps;
> - register struct objfile *objfile;
> - register struct block *b, *surrounding_static_block = 0;
> - struct dict_iterator iter;
> - /* The name we are completing on. */
> - char *oload_name = NULL;
> - /* Length of name. */
> - int oload_name_len = 0;
> -
> - /* Look for the symbol we are supposed to complete on. */
> -
> - oload_name = remove_params (SYMBOL_DEMANGLED_NAME (fsym));
> - if (!oload_name)
> - {
> - sym_return_val_size = 1;
> - sym_return_val = (struct symbol **) xmalloc (2 * sizeof (struct symbol *));
> - sym_return_val[0] = fsym;
> - sym_return_val[1] = NULL;
> -
> - return sym_return_val;
> - }
> - oload_name_len = strlen (oload_name);
> -
> - sym_return_val_size = 100;
> - sym_return_val_index = 0;
> - sym_return_val = (struct symbol **) xmalloc ((sym_return_val_size + 1) * sizeof (struct symbol *));
> - sym_return_val[0] = NULL;
> -
> - /* Read in all partial symtabs containing a partial symbol named
> - OLOAD_NAME. */
> -
> - ALL_PSYMTABS (objfile, ps)
> - {
> - struct partial_symbol **psym;
> -
> - /* If the psymtab's been read in we'll get it when we search
> - through the blockvector. */
> - if (ps->readin)
> - continue;
> -
> - if ((lookup_partial_symbol (ps, oload_name, NULL, 1, VAR_DOMAIN)
> - != NULL)
> - || (lookup_partial_symbol (ps, oload_name, NULL, 0, VAR_DOMAIN)
> - != NULL))
> - PSYMTAB_TO_SYMTAB (ps);
> - }
> -
> - /* 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))
> - {
> - if (!BLOCK_SUPERBLOCK (b))
> - {
> - surrounding_static_block = b; /* For elimination of dups */
> - }
> -
> - /* Also catch fields of types defined in this places which match our
> - text string. Only complete on types visible from current context. */
> -
> - ALL_BLOCK_SYMBOLS (b, iter, sym)
> - {
> - overload_list_add_symbol (sym, oload_name);
> - }
> - }
> -
> - /* Go through the symtabs and check the externs and statics for
> - symbols which match. */
> -
> - ALL_SYMTABS (objfile, s)
> - {
> - QUIT;
> - b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK);
> - ALL_BLOCK_SYMBOLS (b, iter, sym)
> - {
> - overload_list_add_symbol (sym, oload_name);
> - }
> - }
> -
> - ALL_SYMTABS (objfile, s)
> - {
> - QUIT;
> - b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK);
> - /* Don't do this block twice. */
> - if (b == surrounding_static_block)
> - continue;
> - ALL_BLOCK_SYMBOLS (b, iter, sym)
> - {
> - overload_list_add_symbol (sym, oload_name);
> - }
> - }
> -
> - xfree (oload_name);
> -
> - return (sym_return_val);
> -}
> -
> -/* End of overload resolution functions */
> \f
> struct symtabs_and_lines
> decode_line_spec (char *string, int funfirstline)
> Index: cp-support.h
> ===================================================================
> RCS file: /cvs/src/src/gdb/cp-support.h,v
> retrieving revision 1.5
> diff -u -p -r1.5 cp-support.h
> --- cp-support.h 8 Jun 2003 18:27:13 -0000 1.5
> +++ cp-support.h 12 Jun 2003 00:19:39 -0000
> @@ -58,6 +58,7 @@ extern unsigned int cp_find_first_compon
>
> extern unsigned int cp_entire_prefix_len (const char *name);
>
> +extern struct symbol **make_symbol_overload_list (struct symbol *);
>
> /* Functions/variables from cp-namespace.c. */
>
> Index: cp-support.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/cp-support.c,v
> retrieving revision 1.4
> diff -u -p -r1.4 cp-support.c
> --- cp-support.c 8 Jun 2003 18:27:13 -0000 1.4
> +++ cp-support.c 12 Jun 2003 00:19:35 -0000
> @@ -27,6 +27,21 @@
> #include "demangle.h"
> #include "gdb_assert.h"
> #include "gdbcmd.h"
> +#include "dictionary.h"
> +#include "objfiles.h"
> +#include "frame.h"
> +#include "symtab.h"
> +#include "block.h"
> +
> +/* Functions/variables related to overload resolution. */
> +
> +static int sym_return_val_size;
> +static int sym_return_val_index;
> +static struct symbol **sym_return_val;
> +
> +static char *remove_params (const char *demangled_name);
> +
> +static void overload_list_add_symbol (struct symbol *sym, char *oload_name);
>
> /* The list of "maint cplus" commands. */
>
> @@ -323,6 +338,204 @@ cp_entire_prefix_len (const char *name)
>
> return previous_len;
> }
> +
> +/* Overload resolution functions. */
> +
> +static char *
> +remove_params (const char *demangled_name)
> +{
> + const char *argp;
> + char *new_name;
> + int depth;
> +
> + if (demangled_name == NULL)
> + return NULL;
> +
> + /* First find the end of the arg list. */
> + argp = strrchr (demangled_name, ')');
> + if (argp == NULL)
> + return NULL;
> +
> + /* Back up to the beginning. */
> + depth = 1;
> +
> + while (argp-- > demangled_name)
> + {
> + if (*argp == ')')
> + depth ++;
> + else if (*argp == '(')
> + {
> + depth --;
> +
> + if (depth == 0)
> + break;
> + }
> + }
> + if (depth != 0)
> + internal_error (__FILE__, __LINE__,
> + "bad demangled name %s\n", demangled_name);
> + while (argp[-1] == ' ' && argp > demangled_name)
> + argp --;
> +
> + new_name = xmalloc (argp - demangled_name + 1);
> + memcpy (new_name, demangled_name, argp - demangled_name);
> + new_name[argp - demangled_name] = '\0';
> + return new_name;
> +}
> +
> +/* Test to see if the symbol specified by SYMNAME (which is already
> + demangled for C++ symbols) matches SYM_TEXT in the first SYM_TEXT_LEN
> + characters. If so, add it to the current completion list. */
> +
> +static void
> +overload_list_add_symbol (struct symbol *sym, char *oload_name)
> +{
> + int newsize;
> + int i;
> + char *sym_name;
> +
> + /* If there is no type information, we can't do anything, so skip */
> + if (SYMBOL_TYPE (sym) == NULL)
> + return;
> +
> + /* skip any symbols that we've already considered. */
> + for (i = 0; i < sym_return_val_index; ++i)
> + if (!strcmp (DEPRECATED_SYMBOL_NAME (sym), DEPRECATED_SYMBOL_NAME (sym_return_val[i])))
> + return;
> +
> + /* Get the demangled name without parameters */
> + sym_name = remove_params (SYMBOL_DEMANGLED_NAME (sym));
> + if (!sym_name)
> + return;
> +
> + /* skip symbols that cannot match */
> + if (strcmp (sym_name, oload_name) != 0)
> + {
> + xfree (sym_name);
> + return;
> + }
> +
> + xfree (sym_name);
> +
> + /* We have a match for an overload instance, so add SYM to the current list
> + * of overload instances */
> + if (sym_return_val_index + 3 > sym_return_val_size)
> + {
> + newsize = (sym_return_val_size *= 2) * sizeof (struct symbol *);
> + sym_return_val = (struct symbol **) xrealloc ((char *) sym_return_val, newsize);
> + }
> + 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
> + * match name of the supplied symbol FSYM.
> + * This is used in finding all overloaded instances of a function name.
> + * This has been modified from make_symbol_completion_list. */
> +
> +
> +struct symbol **
> +make_symbol_overload_list (struct symbol *fsym)
> +{
> + register struct symbol *sym;
> + register struct symtab *s;
> + register struct partial_symtab *ps;
> + register struct objfile *objfile;
> + register struct block *b, *surrounding_static_block = 0;
> + struct dict_iterator iter;
> + /* The name we are completing on. */
> + char *oload_name = NULL;
> + /* Length of name. */
> + int oload_name_len = 0;
> +
> + /* Look for the symbol we are supposed to complete on. */
> +
> + oload_name = remove_params (SYMBOL_DEMANGLED_NAME (fsym));
> + if (!oload_name)
> + {
> + sym_return_val_size = 1;
> + sym_return_val = (struct symbol **) xmalloc (2 * sizeof (struct symbol *));
> + sym_return_val[0] = fsym;
> + sym_return_val[1] = NULL;
> +
> + return sym_return_val;
> + }
> + oload_name_len = strlen (oload_name);
> +
> + sym_return_val_size = 100;
> + sym_return_val_index = 0;
> + sym_return_val = (struct symbol **) xmalloc ((sym_return_val_size + 1) * sizeof (struct symbol *));
> + sym_return_val[0] = NULL;
> +
> + /* Read in all partial symtabs containing a partial symbol named
> + OLOAD_NAME. */
> +
> + ALL_PSYMTABS (objfile, ps)
> + {
> + struct partial_symbol **psym;
> +
> + /* If the psymtab's been read in we'll get it when we search
> + through the blockvector. */
> + if (ps->readin)
> + continue;
> +
> + if ((lookup_partial_symbol (ps, oload_name, NULL, 1, VAR_DOMAIN)
> + != NULL)
> + || (lookup_partial_symbol (ps, oload_name, NULL, 0, VAR_DOMAIN)
> + != NULL))
> + PSYMTAB_TO_SYMTAB (ps);
> + }
> +
> + /* 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))
> + {
> + if (!BLOCK_SUPERBLOCK (b))
> + {
> + surrounding_static_block = b; /* For elimination of dups */
> + }
> +
> + /* Also catch fields of types defined in this places which match our
> + text string. Only complete on types visible from current context. */
> +
> + ALL_BLOCK_SYMBOLS (b, iter, sym)
> + {
> + overload_list_add_symbol (sym, oload_name);
> + }
> + }
> +
> + /* Go through the symtabs and check the externs and statics for
> + symbols which match. */
> +
> + ALL_SYMTABS (objfile, s)
> + {
> + QUIT;
> + b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK);
> + ALL_BLOCK_SYMBOLS (b, iter, sym)
> + {
> + overload_list_add_symbol (sym, oload_name);
> + }
> + }
> +
> + ALL_SYMTABS (objfile, s)
> + {
> + QUIT;
> + b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK);
> + /* Don't do this block twice. */
> + if (b == surrounding_static_block)
> + continue;
> + ALL_BLOCK_SYMBOLS (b, iter, sym)
> + {
> + overload_list_add_symbol (sym, oload_name);
> + }
> + }
> +
> + xfree (oload_name);
> +
> + return (sym_return_val);
> +}
> +
>
> /* Don't allow just "maintenance cplus". */
>
> Index: valops.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/valops.c,v
> retrieving revision 1.111
> diff -u -p -r1.111 valops.c
> --- valops.c 11 Jun 2003 23:29:48 -0000 1.111
> +++ valops.c 12 Jun 2003 00:19:47 -0000
> @@ -36,6 +36,7 @@
> #include "block.h"
> #include "infcall.h"
> #include "dictionary.h"
> +#include "cp-support.h"
>
> #include <errno.h>
> #include "gdb_string.h"
> Index: Makefile.in
> ===================================================================
> RCS file: /cvs/src/src/gdb/Makefile.in,v
> retrieving revision 1.399
> diff -u -p -r1.399 Makefile.in
> --- Makefile.in 11 Jun 2003 23:29:45 -0000 1.399
> +++ Makefile.in 12 Jun 2003 00:20:01 -0000
> @@ -1637,7 +1637,8 @@ cp-abi.o: cp-abi.c $(defs_h) $(value_h)
> cp-namespace.o: cp-namespace.c $(defs_h) $(cp_support_h) $(gdb_obstack_h) \
> $(symtab_h) $(symfile_h) $(gdb_assert_h) $(block_h)
> cp-support.o: cp-support.c $(defs_h) $(cp_support_h) $(gdb_string_h) \
> - $(demangle_h) $(gdb_assert_h) $(gdbcmd_h)
> + $(demangle_h) $(gdb_assert_h) $(gdbcmd_h) $(dictionary_h) \
> + $(objfiles_h) $(frame_h) $(block_h)
> cp-valprint.o: cp-valprint.c $(defs_h) $(gdb_obstack_h) $(symtab_h) \
> $(gdbtypes_h) $(expression_h) $(value_h) $(command_h) $(gdbcmd_h) \
> $(demangle_h) $(annotate_h) $(gdb_string_h) $(c_lang_h) $(target_h) \
> @@ -2349,7 +2350,7 @@ valarith.o: valarith.c $(defs_h) $(value
> valops.o: valops.c $(defs_h) $(symtab_h) $(gdbtypes_h) $(value_h) $(frame_h) \
> $(inferior_h) $(gdbcore_h) $(target_h) $(demangle_h) $(language_h) \
> $(gdbcmd_h) $(regcache_h) $(cp_abi_h) $(gdb_string_h) \
> - $(gdb_assert_h) $(block_h) $(dictionary_h)
> + $(gdb_assert_h) $(block_h) $(dictionary_h) $(cp_support_h)
> valprint.o: valprint.c $(defs_h) $(gdb_string_h) $(symtab_h) $(gdbtypes_h) \
> $(value_h) $(gdbcore_h) $(gdbcmd_h) $(target_h) $(language_h) \
> $(annotate_h) $(valprint_h) $(floatformat_h) $(doublest_h)
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [rfa] move make_symbol_overload_list to cp-support.c
2003-06-12 1:30 ` Daniel Jacobowitz
@ 2003-06-12 15:36 ` David Carlton
0 siblings, 0 replies; 4+ messages in thread
From: David Carlton @ 2003-06-12 15:36 UTC (permalink / raw)
To: Daniel Jacobowitz; +Cc: gdb-patches
On Wed, 11 Jun 2003 21:29:58 -0400, Daniel Jacobowitz <drow@mvista.com> said:
> On Wed, Jun 11, 2003 at 05:24:42PM -0700, David Carlton wrote:
>> As previously discussed, here's a patch to move
>> make_symbol_overload_list and everything associated with it to
>> cp-support.c.
> Looks good. I'm not thrilled with externing lookup_partial_symbol
> but it'll do for a while.
Yeah, that surprised me a bit, too. But I think it will have to do
until we have a better handle on a clean interface to symtab stuff
that hides the existence of partial symtabs.
Anyways, I've committed it.
David Carlton
carlton@math.stanford.edu
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2003-06-12 15:36 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-06-12 0:26 [rfa] move make_symbol_overload_list to cp-support.c David Carlton
2003-06-12 1:30 ` Daniel Jacobowitz
2003-06-12 15:36 ` David Carlton
2003-06-12 2:11 ` Elena Zannoni
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox