From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm1-x331.google.com (mail-wm1-x331.google.com [IPv6:2a00:1450:4864:20::331]) by sourceware.org (Postfix) with ESMTPS id B8512393BC12 for ; Fri, 15 May 2020 15:07:15 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org B8512393BC12 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=embecosm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=andrew.burgess@embecosm.com Received: by mail-wm1-x331.google.com with SMTP id f134so2673540wmf.1 for ; Fri, 15 May 2020 08:07:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=embecosm.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=7RELBdvP8LEhiXgCPteO3nA0uBKQ3FKKDL85NOSxzp0=; b=WJh28GjX/pX2zXxs5Mb/W2iBYD29B5iLuT23cTrdPI8O4yZG3t71TLKwXYh9M5x++4 711Af7RRKUY/tEzH/w45vMekHm20HdpnHr00dBs2S49D/RJGLgKwlb1xvYGzXUMfBZMV L2tDtjxVP8aDXQMVx9slbJjEmoWcyBYHe5sDuBXor4bSDmV1VMV4wAZ+Yzd0hy4zH/E1 fsDxl6nBLs4hcawAPSJs0XMv5qJurZhiRsUFB18WMLMXVrNK0B9Qb4H+LV40wd7FJ9Jg xBzAa18+SoiXMSJmdwUV5PdOg3vSqvC/K0RcekFDNPoKoarjzq96yJnvH3WuSfDOXgMy w9wA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=7RELBdvP8LEhiXgCPteO3nA0uBKQ3FKKDL85NOSxzp0=; b=pbV7/ozPY2+FTx8Ffr7Vax1jqyY9nfZoI6k47Al/RhMASXxK9FvcBu5b8AcArm3lA/ gMXrbMtCMQRe6cWzTt/SwdkpLNC0HEL4Qxl2uCC1eaK18dNySFJw0bZlxdyR2e8VJJn7 3lCIzvA9D8dOt8FWicN/rP3LuRnRvswQcDvtlFmVXzqpOvq9jpRvZLOr/fY3oVlm8Wxu SqERsczdpPTsjYVYgP/3lvs7uRr/UnyJT3SMsKZwWo2iNSKBRXmMM3VochRIURcXO7CS 3SqjUuyylbOx8iZDGtCLye8bTWW5aqHJAEgkO371XF2Mg09bFjFpOSV/BdRv0Gv8w8m2 /vrA== X-Gm-Message-State: AOAM530sLkP2ChuB90WYZ+hNh05sQteU5p3Rmg/NtRzAPQY3K75TEv0w l0o/XI+c11nsG2lCGPGwNa9P16G5MuI= X-Google-Smtp-Source: ABdhPJx/UvlH5obkEcBYrylIQ7rKOinziIWD6/gkoOXUQfNIcQD4Rw2kHN7twmM3wrTUPCp1+6Ve9Q== X-Received: by 2002:a1c:5502:: with SMTP id j2mr4733773wmb.56.1589555234357; Fri, 15 May 2020 08:07:14 -0700 (PDT) Received: from localhost (host86-128-12-16.range86-128.btcentralplus.com. [86.128.12.16]) by smtp.gmail.com with ESMTPSA id w15sm3973087wrl.73.2020.05.15.08.07.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 15 May 2020 08:07:13 -0700 (PDT) From: Andrew Burgess To: gdb-patches@sourceware.org Subject: [PATCHv2 07/13] gdb: Convert language la_iterate_over_symbols field to a method Date: Fri, 15 May 2020 16:06:46 +0100 Message-Id: <485f4cebde70917b73024a51440eb532ce8b52dd.1589555076.git.andrew.burgess@embecosm.com> X-Mailer: git-send-email 2.25.4 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-10.9 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_BARRACUDACENTRAL, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 15 May 2020 15:07:24 -0000 This commit changes the language_data::la_iterate_over_symbols function pointer member variable into a member function of language_defn. There should be no user visible changes after this commit. gdb/ChangeLog: * ada-lang.c (ada_add_all_symbols): Update comment. (ada_iterate_over_symbols): Delete, move implementation to... (ada_language::iterate_over_symbols): ...here, a new member function, rewrite to use range based for loop. (ada_language_data): Delete la_iterate_over_symbols initializer. * c-lang.c (c_language_data): Likewise. (cplus_language_data): Likewise. (asm_language_data): Likewise. (minimal_language_data): Likewise. * d-lang.c (d_language_data): Likewise. * f-lang.c (f_language_data): Likewise. * go-lang.c (go_language_data): Likewise. * language.c (unknown_language_data): Likewise. (auto_language_data): Likewise. * language.h (language_data): Delete la_iterate_over_symbols field. (language_defn::iterate_over_symbols): New member function. (LA_ITERATE_OVER_SYMBOLS): Update. * linespec.c (iterate_over_all_matching_symtabs): Update. * m2-lang.c (m2_language_data): Delete la_iterate_over_symbols initializer. * objc-lang.c (objc_language_data): Likewise. * opencl-lang.c (opencl_language_data): Likewise. * p-lang.c (pascal_language_data): Likewise. * rust-lang.c (rust_language_data): Likewise. --- gdb/ChangeLog | 27 +++++++++++++++++++++++++++ gdb/ada-lang.c | 44 ++++++++++++++++++++------------------------ gdb/c-lang.c | 4 ---- gdb/d-lang.c | 1 - gdb/f-lang.c | 1 - gdb/go-lang.c | 1 - gdb/language.c | 2 -- gdb/language.h | 41 ++++++++++++++++++++++------------------- gdb/linespec.c | 2 +- gdb/m2-lang.c | 1 - gdb/objc-lang.c | 1 - gdb/opencl-lang.c | 1 - gdb/p-lang.c | 1 - gdb/rust-lang.c | 1 - 14 files changed, 70 insertions(+), 58 deletions(-) diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c index e2d9aa7ab3a..ede6f90b422 100644 --- a/gdb/ada-lang.c +++ b/gdb/ada-lang.c @@ -5686,7 +5686,7 @@ ada_add_all_symbols (struct obstack *obstackp, else { /* In the !full_search case we're are being called by - ada_iterate_over_symbols, and we don't want to search + iterate_over_symbols, and we don't want to search superblocks. */ ada_add_block_symbols (obstackp, block, lookup_name, domain, NULL); } @@ -5787,28 +5787,6 @@ ada_lookup_symbol_list (const char *name, const struct block *block, return ada_lookup_symbol_list_worker (lookup_name, block, domain, results, 1); } -/* Implementation of the la_iterate_over_symbols method. */ - -static bool -ada_iterate_over_symbols - (const struct block *block, const lookup_name_info &name, - domain_enum domain, - gdb::function_view callback) -{ - int ndefs, i; - std::vector results; - - ndefs = ada_lookup_symbol_list_worker (name, block, domain, &results, 0); - - for (i = 0; i < ndefs; ++i) - { - if (!callback (&results[i])) - return false; - } - - return true; -} - /* The result is as for ada_lookup_symbol_list with FULL_SEARCH set to 1, but choosing the first symbol found if there are multiple choices. @@ -13996,7 +13974,6 @@ extern const struct language_data ada_language_data = ada_collect_symbol_completion_matches, ada_watch_location_expression, ada_get_symbol_name_matcher, /* la_get_symbol_name_matcher */ - ada_iterate_over_symbols, default_search_name_hash, &ada_varobj_ops, NULL, @@ -14108,6 +14085,25 @@ class ada_language : public language_defn lai->bool_type_symbol = NULL; lai->bool_type_default = builtin->builtin_bool; } + + /* See language.h. */ + + bool iterate_over_symbols + (const struct block *block, const lookup_name_info &name, + domain_enum domain, + gdb::function_view callback) const override + { + std::vector results; + + ada_lookup_symbol_list_worker (name, block, domain, &results, 0); + for (block_symbol &sym : results) + { + if (!callback (&sym)) + return false; + } + + return true; + } }; /* Single instance of the Ada language class. */ diff --git a/gdb/c-lang.c b/gdb/c-lang.c index 2eead3d8305..f6fd3b3d287 100644 --- a/gdb/c-lang.c +++ b/gdb/c-lang.c @@ -922,7 +922,6 @@ extern const struct language_data c_language_data = default_collect_symbol_completion_matches, c_watch_location_expression, NULL, /* la_get_symbol_name_matcher */ - iterate_over_symbols, default_search_name_hash, &c_varobj_ops, c_get_compile_context, @@ -1022,7 +1021,6 @@ extern const struct language_data cplus_language_data = default_collect_symbol_completion_matches, c_watch_location_expression, cp_get_symbol_name_matcher, - iterate_over_symbols, cp_search_name_hash, &cplus_varobj_ops, cplus_get_compile_context, @@ -1164,7 +1162,6 @@ extern const struct language_data asm_language_data = default_collect_symbol_completion_matches, c_watch_location_expression, NULL, /* la_get_symbol_name_matcher */ - iterate_over_symbols, default_search_name_hash, &default_varobj_ops, NULL, @@ -1235,7 +1232,6 @@ extern const struct language_data minimal_language_data = default_collect_symbol_completion_matches, c_watch_location_expression, NULL, /* la_get_symbol_name_matcher */ - iterate_over_symbols, default_search_name_hash, &default_varobj_ops, NULL, diff --git a/gdb/d-lang.c b/gdb/d-lang.c index 8c4ee44ac97..57327780214 100644 --- a/gdb/d-lang.c +++ b/gdb/d-lang.c @@ -176,7 +176,6 @@ extern const struct language_data d_language_data = default_collect_symbol_completion_matches, c_watch_location_expression, NULL, /* la_get_symbol_name_matcher */ - iterate_over_symbols, default_search_name_hash, &default_varobj_ops, NULL, diff --git a/gdb/f-lang.c b/gdb/f-lang.c index 32435fa856a..ae559dee812 100644 --- a/gdb/f-lang.c +++ b/gdb/f-lang.c @@ -633,7 +633,6 @@ extern const struct language_data f_language_data = f_collect_symbol_completion_matches, c_watch_location_expression, cp_get_symbol_name_matcher, /* la_get_symbol_name_matcher */ - iterate_over_symbols, cp_search_name_hash, &default_varobj_ops, NULL, diff --git a/gdb/go-lang.c b/gdb/go-lang.c index edd4e7f167e..7e0bd5d0934 100644 --- a/gdb/go-lang.c +++ b/gdb/go-lang.c @@ -561,7 +561,6 @@ extern const struct language_data go_language_data = default_collect_symbol_completion_matches, c_watch_location_expression, NULL, /* la_get_symbol_name_matcher */ - iterate_over_symbols, default_search_name_hash, &default_varobj_ops, NULL, diff --git a/gdb/language.c b/gdb/language.c index d06cf4ac71a..7670db7d3ce 100644 --- a/gdb/language.c +++ b/gdb/language.c @@ -836,7 +836,6 @@ extern const struct language_data unknown_language_data = default_collect_symbol_completion_matches, c_watch_location_expression, NULL, /* la_get_symbol_name_matcher */ - iterate_over_symbols, default_search_name_hash, &default_varobj_ops, NULL, @@ -903,7 +902,6 @@ extern const struct language_data auto_language_data = default_collect_symbol_completion_matches, c_watch_location_expression, NULL, /* la_get_symbol_name_matcher */ - iterate_over_symbols, default_search_name_hash, &default_varobj_ops, NULL, diff --git a/gdb/language.h b/gdb/language.h index a5ca641194f..73d7f7a3edb 100644 --- a/gdb/language.h +++ b/gdb/language.h @@ -384,24 +384,6 @@ struct language_data symbol_name_matcher_ftype *(*la_get_symbol_name_matcher) (const lookup_name_info &); - /* Find all symbols in the current program space matching NAME in - DOMAIN, according to this language's rules. - - The search is done in BLOCK only. - The caller is responsible for iterating up through superblocks - if desired. - - For each one, call CALLBACK with the symbol. If CALLBACK - returns false, the iteration ends at that point. - - This field may not be NULL. If the language does not need any - special processing here, 'iterate_over_symbols' should be - used as the definition. */ - bool (*la_iterate_over_symbols) - (const struct block *block, const lookup_name_info &name, - domain_enum domain, - gdb::function_view callback); - /* Hash the given symbol search name. Use default_search_name_hash if no special treatment is required. */ @@ -507,6 +489,27 @@ struct language_defn : language_data return basic_lookup_transparent_type (name); } + /* Find all symbols in the current program space matching NAME in + DOMAIN, according to this language's rules. + + The search is done in BLOCK only. + The caller is responsible for iterating up through superblocks + if desired. + + For each one, call CALLBACK with the symbol. If CALLBACK + returns false, the iteration ends at that point. + + This field may not be NULL. If the language does not need any + special processing here, 'iterate_over_symbols' should be + used as the definition. */ + virtual bool iterate_over_symbols + (const struct block *block, const lookup_name_info &name, + domain_enum domain, + gdb::function_view callback) const + { + return ::iterate_over_symbols (block, name, domain, callback); + } + /* List of all known languages. */ static const struct language_defn *languages[nr_languages]; }; @@ -615,7 +618,7 @@ extern enum language set_language (enum language); (current_language->print_array_index(index_value, stream, options)) #define LA_ITERATE_OVER_SYMBOLS(BLOCK, NAME, DOMAIN, CALLBACK) \ - (current_language->la_iterate_over_symbols (BLOCK, NAME, DOMAIN, CALLBACK)) + (current_language->iterate_over_symbols (BLOCK, NAME, DOMAIN, CALLBACK)) /* Test a character to decide whether it can be printed in literal form or needs to be printed in another representation. For example, diff --git a/gdb/linespec.c b/gdb/linespec.c index 1e70cdb0dca..d891e05ab7d 100644 --- a/gdb/linespec.c +++ b/gdb/linespec.c @@ -1168,7 +1168,7 @@ iterate_over_all_matching_symtabs i++) { block = BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (symtab), i); - state->language->la_iterate_over_symbols + state->language->iterate_over_symbols (block, lookup_name, name_domain, [&] (block_symbol *bsym) { diff --git a/gdb/m2-lang.c b/gdb/m2-lang.c index 71e26869424..128d236f880 100644 --- a/gdb/m2-lang.c +++ b/gdb/m2-lang.c @@ -386,7 +386,6 @@ extern const struct language_data m2_language_data = default_collect_symbol_completion_matches, c_watch_location_expression, NULL, /* la_get_symbol_name_matcher */ - iterate_over_symbols, default_search_name_hash, &default_varobj_ops, NULL, diff --git a/gdb/objc-lang.c b/gdb/objc-lang.c index 040226c81d5..6cf8bbbe091 100644 --- a/gdb/objc-lang.c +++ b/gdb/objc-lang.c @@ -401,7 +401,6 @@ extern const struct language_data objc_language_data = default_collect_symbol_completion_matches, c_watch_location_expression, NULL, /* la_get_symbol_name_matcher */ - iterate_over_symbols, default_search_name_hash, &default_varobj_ops, NULL, diff --git a/gdb/opencl-lang.c b/gdb/opencl-lang.c index 55baac56b8c..ebb07eb5c00 100644 --- a/gdb/opencl-lang.c +++ b/gdb/opencl-lang.c @@ -1061,7 +1061,6 @@ extern const struct language_data opencl_language_data = default_collect_symbol_completion_matches, c_watch_location_expression, NULL, /* la_get_symbol_name_matcher */ - iterate_over_symbols, default_search_name_hash, &default_varobj_ops, NULL, diff --git a/gdb/p-lang.c b/gdb/p-lang.c index 287c01f2009..52d202786c0 100644 --- a/gdb/p-lang.c +++ b/gdb/p-lang.c @@ -416,7 +416,6 @@ extern const struct language_data pascal_language_data = default_collect_symbol_completion_matches, c_watch_location_expression, NULL, /* la_compare_symbol_for_completion */ - iterate_over_symbols, default_search_name_hash, &default_varobj_ops, NULL, diff --git a/gdb/rust-lang.c b/gdb/rust-lang.c index e12a941afe2..2268ac3daf7 100644 --- a/gdb/rust-lang.c +++ b/gdb/rust-lang.c @@ -2093,7 +2093,6 @@ extern const struct language_data rust_language_data = default_collect_symbol_completion_matches, rust_watch_location_expression, NULL, /* la_get_symbol_name_matcher */ - iterate_over_symbols, default_search_name_hash, &default_varobj_ops, NULL, -- 2.25.4