From 2315bb2d5764527617aef124cbcd52a13395e245 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Fri, 26 Mar 2021 13:44:24 -0600 Subject: [PATCH] Simplify use of map_matching_symbols in ada-lang.c I noticed that ada-lang.c creates a lambda to call aux_add_nonlocal_symbols. However, this code can be simplified a bit by changing match_data to implement operator(), and then simply passing the object as the callback. That is what this patch implements. gdb/ChangeLog 2021-03-26 Tom Tromey * ada-lang.c (struct match_data): Add operator(). (match_data::operator()): Rename from aux_add_nonlocal_symbols. (callback): Remove 'callback'. --- gdb/ChangeLog | 6 ++++++ gdb/ada-lang.c | 46 ++++++++++++++++++---------------------------- 2 files changed, 24 insertions(+), 28 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 168cd5b9c05..89b3cf00bcc 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2021-03-26 Tom Tromey + + * ada-lang.c (struct match_data): Add operator(). + (match_data::operator()): Rename from aux_add_nonlocal_symbols. + (callback): Remove 'callback'. + 2021-03-26 Tom Tromey * psymtab.c (psymbol_functions::expand_symtabs_matching): Only diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c index d0374780b98..e5fbf74ef27 100644 --- a/gdb/ada-lang.c +++ b/gdb/ada-lang.c @@ -4970,7 +4970,7 @@ ada_add_local_symbols (std::vector &result, add_symbols_from_enclosing_procs (result, lookup_name, domain); } -/* An object of this type is used as the user_data argument when +/* An object of this type is used as the callback argument when calling the map_matching_symbols method. */ struct match_data @@ -4981,48 +4981,43 @@ struct match_data } DISABLE_COPY_AND_ASSIGN (match_data); + bool operator() (struct block_symbol *bsym); + struct objfile *objfile = nullptr; std::vector *resultp; struct symbol *arg_sym = nullptr; bool found_sym = false; }; -/* A callback for add_nonlocal_symbols that adds symbol, found in BSYM, - to a list of symbols. DATA is a pointer to a struct match_data * - containing the vector that collects the symbol list, the file that SYM - must come from, a flag indicating whether a non-argument symbol has - been found in the current block, and the last argument symbol - passed in SYM within the current block (if any). When SYM is null, - marking the end of a block, the argument symbol is added if no - other has been found. */ +/* A callback for add_nonlocal_symbols that adds symbol, found in + BSYM, to a list of symbols. */ -static bool -aux_add_nonlocal_symbols (struct block_symbol *bsym, - struct match_data *data) +bool +match_data::operator() (struct block_symbol *bsym) { const struct block *block = bsym->block; struct symbol *sym = bsym->symbol; if (sym == NULL) { - if (!data->found_sym && data->arg_sym != NULL) - add_defn_to_vec (*data->resultp, - fixup_symbol_section (data->arg_sym, data->objfile), + if (!found_sym && arg_sym != NULL) + add_defn_to_vec (*resultp, + fixup_symbol_section (arg_sym, objfile), block); - data->found_sym = false; - data->arg_sym = NULL; + found_sym = false; + arg_sym = NULL; } else { if (SYMBOL_CLASS (sym) == LOC_UNRESOLVED) return true; else if (SYMBOL_IS_ARGUMENT (sym)) - data->arg_sym = sym; + arg_sym = sym; else { - data->found_sym = true; - add_defn_to_vec (*data->resultp, - fixup_symbol_section (sym, data->objfile), + found_sym = true; + add_defn_to_vec (*resultp, + fixup_symbol_section (sym, objfile), block); } } @@ -5194,16 +5189,11 @@ add_nonlocal_symbols (std::vector &result, bool is_wild_match = lookup_name.ada ().wild_match_p (); - auto callback = [&] (struct block_symbol *bsym) - { - return aux_add_nonlocal_symbols (bsym, &data); - }; - for (objfile *objfile : current_program_space->objfiles ()) { data.objfile = objfile; - objfile->map_matching_symbols (lookup_name, domain, global, callback, + objfile->map_matching_symbols (lookup_name, domain, global, data, is_wild_match ? NULL : compare_names); for (compunit_symtab *cu : objfile->compunits ()) @@ -5226,7 +5216,7 @@ add_nonlocal_symbols (std::vector &result, for (objfile *objfile : current_program_space->objfiles ()) { data.objfile = objfile; - objfile->map_matching_symbols (name1, domain, global, callback, + objfile->map_matching_symbols (name1, domain, global, data, compare_names); } } -- 2.39.2