From patchwork Fri Sep 23 19:52:59 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 15960 Received: (qmail 47142 invoked by alias); 23 Sep 2016 19:53:21 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 47003 invoked by uid 89); 23 Sep 2016 19:53:20 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=0.0 required=5.0 tests=AWL, BAYES_00, KAM_STOCKGEN, RCVD_IN_DNSWL_NONE, RCVD_IN_SORBS_SPAM, SPF_PASS autolearn=no version=3.3.2 spammy=H*r:4.86_1, 6088, H*F:U*tom, Hx-spam-relays-external:67.222.39.168 X-HELO: gproxy6-pub.mail.unifiedlayer.com Received: from gproxy6-pub.mail.unifiedlayer.com (HELO gproxy6-pub.mail.unifiedlayer.com) (67.222.39.168) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with SMTP; Fri, 23 Sep 2016 19:53:13 +0000 Received: (qmail 22033 invoked by uid 0); 23 Sep 2016 19:53:11 -0000 Received: from unknown (HELO cmgw4) (10.0.90.85) by gproxy6.mail.unifiedlayer.com with SMTP; 23 Sep 2016 19:53:11 -0000 Received: from box522.bluehost.com ([74.220.219.122]) by cmgw4 with id n7t51t00x2f2jeq017t8la; Fri, 23 Sep 2016 13:53:11 -0600 X-Authority-Analysis: v=2.1 cv=Hq7lRSjS c=1 sm=1 tr=0 a=GsOEXm/OWkKvwdLVJsfwcA==:117 a=GsOEXm/OWkKvwdLVJsfwcA==:17 a=L9H7d07YOLsA:10 a=9cW_t1CCXrUA:10 a=s5jvgZ67dGcA:10 a=GW1xBdLrtEIA:10 a=zstS-IiYAAAA:8 a=s1g-JnNrsz_X0fBHR7cA:9 a=4G6NA9xxw8l3yy4pmD5M:22 Received: from 174-16-151-161.hlrn.qwest.net ([174.16.151.161]:55642 helo=bapiya.Home) by box522.bluehost.com with esmtpsa (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.86_1) (envelope-from ) id 1bnWWv-0005Ed-Ff; Fri, 23 Sep 2016 13:53:05 -0600 From: Tom Tromey To: gdb-patches@sourceware.org Cc: Tom Tromey Subject: [FYI v2 2/5] Use std::string in cp-namespace.c Date: Fri, 23 Sep 2016 13:52:59 -0600 Message-Id: <1474660382-14294-3-git-send-email-tom@tromey.com> In-Reply-To: <1474660382-14294-1-git-send-email-tom@tromey.com> References: <1474660382-14294-1-git-send-email-tom@tromey.com> X-BWhitelist: no X-Exim-ID: 1bnWWv-0005Ed-Ff X-Source-Sender: 174-16-151-161.hlrn.qwest.net (bapiya.Home) [174.16.151.161]:55642 X-Source-Auth: tom+tromey.com X-Email-Count: 3 X-Source-Cap: ZWx5bnJvYmk7ZWx5bnJvYmk7Ym94NTIyLmJsdWVob3N0LmNvbQ== This changes a few spots in cp-namespace.c to use std::string, removing some cleanups. 2016-09-23 Tom Tromey * cp-namespace.c: Include . (cp_search_static_and_baseclasses) (cp_lookup_symbol_imports_or_template, find_symbol_in_baseclass): Use std::string. --- gdb/ChangeLog | 7 +++++++ gdb/cp-namespace.c | 49 +++++++++++++++---------------------------------- 2 files changed, 22 insertions(+), 34 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 8c8b18a..410c386 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,12 @@ 2016-09-23 Tom Tromey + * cp-namespace.c: Include . + (cp_search_static_and_baseclasses) + (cp_lookup_symbol_imports_or_template, find_symbol_in_baseclass): + Use std::string. + +2016-09-23 Tom Tromey + * break-catch-sig.c: Include . (signal_catchpoint_print_one): Use std::string. diff --git a/gdb/cp-namespace.c b/gdb/cp-namespace.c index 0f1b452..e19a6f3 100644 --- a/gdb/cp-namespace.c +++ b/gdb/cp-namespace.c @@ -32,6 +32,7 @@ #include "buildsym.h" #include "language.h" #include "namespace.h" +#include static struct block_symbol cp_lookup_nested_symbol_1 (struct type *container_type, @@ -246,8 +247,6 @@ cp_search_static_and_baseclasses (const char *name, int is_in_anonymous) { struct block_symbol sym; - char *klass, *nested; - struct cleanup *cleanup; struct block_symbol klass_sym; struct type *klass_type; @@ -258,36 +257,28 @@ cp_search_static_and_baseclasses (const char *name, /* Find the name of the class and the name of the method, variable, etc. */ /* The class name is everything up to and including PREFIX_LEN. */ - klass = savestring (name, prefix_len); + std::string klass (name, prefix_len); /* The rest of the name is everything else past the initial scope operator. */ - nested = xstrdup (name + prefix_len + 2); - - /* Add cleanups to free memory for these strings. */ - cleanup = make_cleanup (xfree, klass); - make_cleanup (xfree, nested); + std::string nested (name + prefix_len + 2); /* Lookup a class named KLASS. If none is found, there is nothing more that can be done. KLASS could be a namespace, so always look in VAR_DOMAIN. This works for classes too because of symbol_matches_domain (which should be replaced with something else, but it's what we have today). */ - klass_sym = lookup_global_symbol (klass, block, VAR_DOMAIN); + klass_sym = lookup_global_symbol (klass.c_str (), block, VAR_DOMAIN); if (klass_sym.symbol == NULL) - { - do_cleanups (cleanup); - return null_block_symbol; - } + return null_block_symbol; klass_type = SYMBOL_TYPE (klass_sym.symbol); /* Look for a symbol named NESTED in this class. The caller is assumed to have already have done a basic lookup of NAME. So we pass zero for BASIC_LOOKUP to cp_lookup_nested_symbol_1 here. */ - sym = cp_lookup_nested_symbol_1 (klass_type, nested, name, block, domain, - 0, is_in_anonymous); + sym = cp_lookup_nested_symbol_1 (klass_type, nested.c_str (), name, + block, domain, 0, is_in_anonymous); - do_cleanups (cleanup); return sym; } @@ -567,8 +558,7 @@ cp_lookup_symbol_imports_or_template (const char *scope, if (SYMBOL_NATURAL_NAME (function)) { struct type *context; - char *name_copy = xstrdup (SYMBOL_NATURAL_NAME (function)); - struct cleanup *cleanups = make_cleanup (xfree, name_copy); + std::string name_copy (SYMBOL_NATURAL_NAME (function)); const struct language_defn *lang = language_def (language_cplus); struct gdbarch *arch = symbol_arch (function); const struct block *parent = BLOCK_SUPERBLOCK (block); @@ -576,15 +566,16 @@ cp_lookup_symbol_imports_or_template (const char *scope, while (1) { - unsigned int prefix_len = cp_entire_prefix_len (name_copy); + unsigned int prefix_len + = cp_entire_prefix_len (name_copy.c_str ()); if (prefix_len == 0) context = NULL; else { - name_copy[prefix_len] = '\0'; + name_copy.erase (prefix_len); context = lookup_typename (lang, arch, - name_copy, + name_copy.c_str (), parent, 1); } @@ -597,7 +588,6 @@ cp_lookup_symbol_imports_or_template (const char *scope, TYPE_TEMPLATE_ARGUMENTS (context)); if (sym != NULL) { - do_cleanups (cleanups); if (symbol_lookup_debug) { fprintf_unfiltered @@ -608,8 +598,6 @@ cp_lookup_symbol_imports_or_template (const char *scope, return (struct block_symbol) {sym, parent}; } } - - do_cleanups (cleanups); } } @@ -832,34 +820,27 @@ find_symbol_in_baseclass (struct type *parent_type, const char *name, { int i; struct block_symbol sym; - struct cleanup *cleanup; - char *concatenated_name; sym.symbol = NULL; sym.block = NULL; - concatenated_name = NULL; - cleanup = make_cleanup (free_current_contents, &concatenated_name); for (i = 0; i < TYPE_N_BASECLASSES (parent_type); ++i) { - size_t len; struct type *base_type = TYPE_BASECLASS (parent_type, i); const char *base_name = TYPE_BASECLASS_NAME (parent_type, i); if (base_name == NULL) continue; - len = strlen (base_name) + 2 + strlen (name) + 1; - concatenated_name = (char *) xrealloc (concatenated_name, len); - xsnprintf (concatenated_name, len, "%s::%s", base_name, name); + std::string concatenated_name = std::string (base_name) + "::" + name; - sym = cp_lookup_nested_symbol_1 (base_type, name, concatenated_name, + sym = cp_lookup_nested_symbol_1 (base_type, name, + concatenated_name.c_str (), block, domain, 1, is_in_anonymous); if (sym.symbol != NULL) break; } - do_cleanups (cleanup); return sym; }