diff options
Diffstat (limited to 'gdb/block.c')
-rw-r--r-- | gdb/block.c | 38 |
1 files changed, 20 insertions, 18 deletions
diff --git a/gdb/block.c b/gdb/block.c index 1c343aa..a8075a1 100644 --- a/gdb/block.c +++ b/gdb/block.c @@ -595,8 +595,7 @@ block_iterator_next (struct block_iterator *iterator) static struct symbol * block_iter_match_step (struct block_iterator *iterator, - const char *name, - symbol_compare_ftype *compare, + const lookup_name_info &name, int first) { struct symbol *sym; @@ -618,10 +617,10 @@ block_iter_match_step (struct block_iterator *iterator, block = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (cust), iterator->which); sym = dict_iter_match_first (BLOCK_DICT (block), name, - compare, &iterator->dict_iter); + &iterator->dict_iter); } else - sym = dict_iter_match_next (name, compare, &iterator->dict_iter); + sym = dict_iter_match_next (name, &iterator->dict_iter); if (sym != NULL) return sym; @@ -638,30 +637,27 @@ block_iter_match_step (struct block_iterator *iterator, struct symbol * block_iter_match_first (const struct block *block, - const char *name, - symbol_compare_ftype *compare, + const lookup_name_info &name, struct block_iterator *iterator) { initialize_block_iterator (block, iterator); if (iterator->which == FIRST_LOCAL_BLOCK) - return dict_iter_match_first (block->dict, name, compare, - &iterator->dict_iter); + return dict_iter_match_first (block->dict, name, &iterator->dict_iter); - return block_iter_match_step (iterator, name, compare, 1); + return block_iter_match_step (iterator, name, 1); } /* See block.h. */ struct symbol * -block_iter_match_next (const char *name, - symbol_compare_ftype *compare, +block_iter_match_next (const lookup_name_info &name, struct block_iterator *iterator) { if (iterator->which == FIRST_LOCAL_BLOCK) - return dict_iter_match_next (name, compare, &iterator->dict_iter); + return dict_iter_match_next (name, &iterator->dict_iter); - return block_iter_match_step (iterator, name, compare, 0); + return block_iter_match_step (iterator, name, 0); } /* See block.h. @@ -682,11 +678,13 @@ block_lookup_symbol (const struct block *block, const char *name, struct block_iterator iter; struct symbol *sym; + lookup_name_info lookup_name (name, symbol_name_match_type::FULL); + if (!BLOCK_FUNCTION (block)) { struct symbol *other = NULL; - ALL_BLOCK_SYMBOLS_WITH_NAME (block, name, iter, sym) + ALL_BLOCK_SYMBOLS_WITH_NAME (block, lookup_name, iter, sym) { if (SYMBOL_DOMAIN (sym) == domain) return sym; @@ -713,7 +711,7 @@ block_lookup_symbol (const struct block *block, const char *name, struct symbol *sym_found = NULL; - ALL_BLOCK_SYMBOLS_WITH_NAME (block, name, iter, sym) + ALL_BLOCK_SYMBOLS_WITH_NAME (block, lookup_name, iter, sym) { if (symbol_matches_domain (SYMBOL_LANGUAGE (sym), SYMBOL_DOMAIN (sym), domain)) @@ -738,14 +736,16 @@ block_lookup_symbol_primary (const struct block *block, const char *name, struct symbol *sym, *other; struct dict_iterator dict_iter; + lookup_name_info lookup_name (name, symbol_name_match_type::FULL); + /* Verify BLOCK is STATIC_BLOCK or GLOBAL_BLOCK. */ gdb_assert (BLOCK_SUPERBLOCK (block) == NULL || BLOCK_SUPERBLOCK (BLOCK_SUPERBLOCK (block)) == NULL); other = NULL; - for (sym = dict_iter_match_first (block->dict, name, strcmp_iw, &dict_iter); + for (sym = dict_iter_match_first (block->dict, lookup_name, &dict_iter); sym != NULL; - sym = dict_iter_match_next (name, strcmp_iw, &dict_iter)) + sym = dict_iter_match_next (lookup_name, &dict_iter)) { if (SYMBOL_DOMAIN (sym) == domain) return sym; @@ -772,11 +772,13 @@ block_find_symbol (const struct block *block, const char *name, struct block_iterator iter; struct symbol *sym; + lookup_name_info lookup_name (name, symbol_name_match_type::FULL); + /* Verify BLOCK is STATIC_BLOCK or GLOBAL_BLOCK. */ gdb_assert (BLOCK_SUPERBLOCK (block) == NULL || BLOCK_SUPERBLOCK (BLOCK_SUPERBLOCK (block)) == NULL); - ALL_BLOCK_SYMBOLS_WITH_NAME (block, name, iter, sym) + ALL_BLOCK_SYMBOLS_WITH_NAME (block, lookup_name, iter, sym) { /* MATCHER is deliberately called second here so that it never sees a non-domain-matching symbol. */ |