From: Dmitry Neverov <dmitry.neverov@jetbrains.com>
To: gdb-patches@sourceware.org
Cc: dmitry.neverov@jetbrains.com
Subject: [RFC v2][PR symtab/30520 4/4] gdb/symtab: use symbol name matcher for all segments in a qualified name
Date: Tue, 23 Jan 2024 18:03:25 +0100 [thread overview]
Message-ID: <20240123170325.752251-4-dmitry.neverov@jetbrains.com> (raw)
In-Reply-To: <20240123170325.752251-1-dmitry.neverov@jetbrains.com>
---
gdb/dwarf2/read.c | 38 ++++++++++++++++++++++++++------------
1 file changed, 26 insertions(+), 12 deletions(-)
diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c
index 338e2bfbfa7..08a834e141b 100644
--- a/gdb/dwarf2/read.c
+++ b/gdb/dwarf2/read.c
@@ -16637,14 +16637,17 @@ cooked_index_functions::expand_symtabs_matching
for (enum language lang : unique_styles)
{
- std::vector<std::string_view> name_vec
- = lookup_name_without_params.split_name (lang);
- std::string last_name (name_vec.back ());
-
- lookup_name_info last_segment_lookup_name (
- last_name, symbol_name_match_type::SEARCH_NAME, completing, true);
+ std::vector<std::string_view> name_vec = lookup_name_without_params
+ .split_name (lang);
+ std::vector<std::string> name_str_vec (name_vec.begin (), name_vec.end ());
+ std::vector<lookup_name_info> segment_lookup_names;
+ segment_lookup_names.reserve (name_vec.size ());
+ for (auto &segment_name : name_str_vec) {
+ segment_lookup_names.emplace_back (
+ segment_name, symbol_name_match_type::SEARCH_NAME, completing, true);
+ }
- for (const cooked_index_entry *entry : table->find (last_name,
+ for (const cooked_index_entry *entry : table->find (name_str_vec.back (),
completing))
{
QUIT;
@@ -16674,13 +16677,24 @@ cooked_index_functions::expand_symtabs_matching
{
/* If we ran out of entries, or if this segment doesn't
match, this did not match. */
- if (parent == nullptr
- || strncmp (parent->name, name_vec[i - 1].data (),
- name_vec[i - 1].length ()) != 0)
+ if (parent == nullptr)
{
found = false;
break;
}
+ if (parent->lang != language_unknown)
+ {
+ const language_defn *lang_def = language_def (parent->lang);
+ symbol_name_matcher_ftype *name_matcher
+ = lang_def->get_symbol_name_matcher
+ (segment_lookup_names[i-1]);
+ if (!name_matcher (parent->canonical,
+ segment_lookup_names[i-1], nullptr))
+ {
+ found = false;
+ break;
+ }
+ }
parent = parent->get_parent ();
}
@@ -16704,9 +16718,9 @@ cooked_index_functions::expand_symtabs_matching
const language_defn *lang_def = language_def (entry->lang);
symbol_name_matcher_ftype *name_matcher
= lang_def->get_symbol_name_matcher
- (last_segment_lookup_name);
+ (segment_lookup_names.back ());
if (!name_matcher (entry->canonical,
- last_segment_lookup_name, nullptr))
+ segment_lookup_names.back (), nullptr))
continue;
}
}
--
2.39.2
next prev parent reply other threads:[~2024-01-23 17:04 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-01-23 17:03 [RFC v2][PR symtab/30520 1/4] gdb/symtab: check name matches before expanding a CU Dmitry Neverov
2024-01-23 17:03 ` [RFC v2][PR symtab/30520 2/4] gdb/symtab: reuse last segment lookup name info Dmitry Neverov
2024-01-23 17:03 ` [RFC v2][PR symtab/30520 3/4] gdb/symtab: compute match_type outside the loop Dmitry Neverov
2024-01-23 17:03 ` Dmitry Neverov [this message]
2024-01-25 8:44 ` [RFC v2][PR symtab/30520] gdb/symtab: fix the gdb.cp/anon-struct test Dmitry Neverov
2024-02-07 20:25 ` Tom Tromey
2024-02-09 16:32 ` Dmitry Neverov
2024-02-09 19:38 ` Tom Tromey
2024-03-18 16:35 ` Dmitry Neverov
2024-03-18 17:58 ` Tom Tromey
2024-03-19 12:16 ` Dmitry Neverov
2024-03-22 17:29 ` Tom Tromey
2024-05-04 1:20 ` Joel Brobecker
2024-05-06 14:32 ` Dmitry Neverov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240123170325.752251-4-dmitry.neverov@jetbrains.com \
--to=dmitry.neverov@jetbrains.com \
--cc=gdb-patches@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox