mirror of
https://github.com/bminor/binutils-gdb.git
synced 2025-12-26 09:08:59 +00:00
Revert patchset for c++/16253: it causes a large performance regression.
See the bug for further information.
This commit is contained in:
@@ -4393,20 +4393,6 @@ ada_clear_symbol_cache (void)
|
||||
ada_init_symbol_cache (sym_cache);
|
||||
}
|
||||
|
||||
/* STRUCT_DOMAIN symbols are also typedefs for the type. This function tests
|
||||
the equivalency of two Ada symbol domain types. */
|
||||
|
||||
static int
|
||||
ada_symbol_matches_domain (domain_enum symbol_domain, domain_enum domain)
|
||||
{
|
||||
if (symbol_domain == domain
|
||||
|| ((domain == VAR_DOMAIN || domain == STRUCT_DOMAIN)
|
||||
&& symbol_domain == STRUCT_DOMAIN))
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Search our cache for an entry matching NAME and NAMESPACE.
|
||||
Return it if found, or NULL otherwise. */
|
||||
|
||||
@@ -4508,13 +4494,6 @@ standard_lookup (const char *name, const struct block *block,
|
||||
if (lookup_cached_symbol (name, domain, &sym, NULL))
|
||||
return sym;
|
||||
sym = lookup_symbol_in_language (name, block, domain, language_c, 0);
|
||||
|
||||
/* STRUCT_DOMAIN symbols also define a typedef for the type. Lookup
|
||||
a STRUCT_DOMAIN symbol if one is requested for VAR_DOMAIN and not
|
||||
found. */
|
||||
if (sym == NULL && domain == VAR_DOMAIN)
|
||||
sym = lookup_symbol_in_language (name, block, STRUCT_DOMAIN, language_c, 0);
|
||||
|
||||
cache_symbol (name, domain, sym, block_found);
|
||||
return sym;
|
||||
}
|
||||
@@ -5340,29 +5319,13 @@ add_nonlocal_symbols (struct obstack *obstackp, const char *name,
|
||||
data.objfile = objfile;
|
||||
|
||||
if (is_wild_match)
|
||||
{
|
||||
objfile->sf->qf->map_matching_symbols (objfile, name, domain, global,
|
||||
aux_add_nonlocal_symbols,
|
||||
&data, wild_match, NULL);
|
||||
if (domain == VAR_DOMAIN)
|
||||
objfile->sf->qf->map_matching_symbols (objfile, name,
|
||||
STRUCT_DOMAIN, global,
|
||||
aux_add_nonlocal_symbols,
|
||||
&data, wild_match, NULL);
|
||||
}
|
||||
objfile->sf->qf->map_matching_symbols (objfile, name, domain, global,
|
||||
aux_add_nonlocal_symbols, &data,
|
||||
wild_match, NULL);
|
||||
else
|
||||
{
|
||||
objfile->sf->qf->map_matching_symbols (objfile, name, domain, global,
|
||||
aux_add_nonlocal_symbols,
|
||||
&data, full_match,
|
||||
compare_names);
|
||||
if (domain == VAR_DOMAIN)
|
||||
objfile->sf->qf->map_matching_symbols (objfile, name,
|
||||
STRUCT_DOMAIN, global,
|
||||
aux_add_nonlocal_symbols,
|
||||
&data, full_match,
|
||||
compare_names);
|
||||
}
|
||||
objfile->sf->qf->map_matching_symbols (objfile, name, domain, global,
|
||||
aux_add_nonlocal_symbols, &data,
|
||||
full_match, compare_names);
|
||||
}
|
||||
|
||||
if (num_defns_collected (obstackp) == 0 && global && !is_wild_match)
|
||||
@@ -5886,7 +5849,8 @@ ada_add_block_symbols (struct obstack *obstackp,
|
||||
for (sym = block_iter_match_first (block, name, wild_match, &iter);
|
||||
sym != NULL; sym = block_iter_match_next (name, wild_match, &iter))
|
||||
{
|
||||
if (ada_symbol_matches_domain (SYMBOL_DOMAIN (sym), domain)
|
||||
if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
|
||||
SYMBOL_DOMAIN (sym), domain)
|
||||
&& wild_match (SYMBOL_LINKAGE_NAME (sym), name) == 0)
|
||||
{
|
||||
if (SYMBOL_CLASS (sym) == LOC_UNRESOLVED)
|
||||
@@ -5908,7 +5872,8 @@ ada_add_block_symbols (struct obstack *obstackp,
|
||||
for (sym = block_iter_match_first (block, name, full_match, &iter);
|
||||
sym != NULL; sym = block_iter_match_next (name, full_match, &iter))
|
||||
{
|
||||
if (ada_symbol_matches_domain (SYMBOL_DOMAIN (sym), domain))
|
||||
if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
|
||||
SYMBOL_DOMAIN (sym), domain))
|
||||
{
|
||||
if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
|
||||
{
|
||||
@@ -5940,7 +5905,8 @@ ada_add_block_symbols (struct obstack *obstackp,
|
||||
|
||||
ALL_BLOCK_SYMBOLS (block, iter, sym)
|
||||
{
|
||||
if (ada_symbol_matches_domain (SYMBOL_DOMAIN (sym), domain))
|
||||
if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
|
||||
SYMBOL_DOMAIN (sym), domain))
|
||||
{
|
||||
int cmp;
|
||||
|
||||
@@ -7528,12 +7494,11 @@ ada_find_any_type_symbol (const char *name)
|
||||
struct symbol *sym;
|
||||
|
||||
sym = standard_lookup (name, get_selected_block (NULL), VAR_DOMAIN);
|
||||
if (sym != NULL
|
||||
&& (SYMBOL_DOMAIN (sym) != VAR_DOMAIN
|
||||
|| SYMBOL_CLASS (sym) == LOC_TYPEDEF))
|
||||
if (sym != NULL && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
|
||||
return sym;
|
||||
|
||||
return NULL;
|
||||
sym = standard_lookup (name, NULL, STRUCT_DOMAIN);
|
||||
return sym;
|
||||
}
|
||||
|
||||
/* Find a type named NAME. Ignores ambiguity. This routine will look
|
||||
|
||||
Reference in New Issue
Block a user