mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-02 04:27:46 +08:00
C++ improvements
This commit is contained in:
24
gdb/symtab.c
24
gdb/symtab.c
@ -954,7 +954,7 @@ lookup_symbol (name, block, namespace, is_a_field_of_this, symtab)
|
||||
*symtab = NULL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/* Look, in partial_symtab PST, for symbol NAME. Check the global
|
||||
symbols if GLOBAL, the static symbols if not */
|
||||
|
||||
@ -965,20 +965,20 @@ lookup_partial_symbol (pst, name, global, namespace)
|
||||
int global;
|
||||
namespace_enum namespace;
|
||||
{
|
||||
struct partial_symbol *temp;
|
||||
struct partial_symbol **start, **psym;
|
||||
struct partial_symbol **top, **bottom, **center;
|
||||
int length = (global ? pst->n_global_syms : pst->n_static_syms);
|
||||
int do_linear_search = 1;
|
||||
|
||||
|
||||
if (length == 0)
|
||||
{
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
start = (global ?
|
||||
pst->objfile->global_psymbols.list + pst->globals_offset :
|
||||
pst->objfile->static_psymbols.list + pst->statics_offset);
|
||||
|
||||
|
||||
if (global) /* This means we can use a binary search. */
|
||||
{
|
||||
do_linear_search = 0;
|
||||
@ -996,9 +996,7 @@ lookup_partial_symbol (pst, name, global, namespace)
|
||||
if (!(center < top))
|
||||
abort ();
|
||||
if (!do_linear_search
|
||||
&& (SYMBOL_LANGUAGE (*center) == language_cplus
|
||||
|| SYMBOL_LANGUAGE (*center) == language_java
|
||||
))
|
||||
&& (SYMBOL_LANGUAGE (*center) == language_java))
|
||||
{
|
||||
do_linear_search = 1;
|
||||
}
|
||||
@ -1013,11 +1011,15 @@ lookup_partial_symbol (pst, name, global, namespace)
|
||||
}
|
||||
if (!(top == bottom))
|
||||
abort ();
|
||||
while (STREQ (SYMBOL_NAME (*top), name))
|
||||
|
||||
/* djb - 2000-06-03 - Use SYMBOL_MATCHES_NAME, not a strcmp, so
|
||||
we don't have to force a linear search on C++. Probably holds true
|
||||
for JAVA as well, no way to check.*/
|
||||
while (SYMBOL_MATCHES_NAME (*top,name))
|
||||
{
|
||||
if (SYMBOL_NAMESPACE (*top) == namespace)
|
||||
{
|
||||
return (*top);
|
||||
return (*top);
|
||||
}
|
||||
top++;
|
||||
}
|
||||
@ -1027,7 +1029,7 @@ lookup_partial_symbol (pst, name, global, namespace)
|
||||
we should also do a linear search. */
|
||||
|
||||
if (do_linear_search)
|
||||
{
|
||||
{
|
||||
for (psym = start; psym < start + length; psym++)
|
||||
{
|
||||
if (namespace == SYMBOL_NAMESPACE (*psym))
|
||||
@ -4018,6 +4020,7 @@ functions_info (regexp, from_tty)
|
||||
symtab_symbol_info (regexp, FUNCTIONS_NAMESPACE, from_tty);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
types_info (regexp, from_tty)
|
||||
char *regexp;
|
||||
@ -4664,6 +4667,7 @@ _initialize_symtab ()
|
||||
add_info ("functions", functions_info,
|
||||
"All function names, or those matching REGEXP.");
|
||||
|
||||
|
||||
/* FIXME: This command has at least the following problems:
|
||||
1. It prints builtin types (in a very strange and confusing fashion).
|
||||
2. It doesn't print right, e.g. with
|
||||
|
Reference in New Issue
Block a user