From patchwork Tue Oct 12 15:34:53 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Lu=C3=ADs_Ferreira?= X-Patchwork-Id: 46132 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id E24DC3857002 for ; Tue, 12 Oct 2021 15:35:18 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from 3.mo550.mail-out.ovh.net (3.mo550.mail-out.ovh.net [46.105.60.232]) by sourceware.org (Postfix) with ESMTPS id 9A2B73858C39 for ; Tue, 12 Oct 2021 15:35:01 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 9A2B73858C39 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=lsferreira.net Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=lsferreira.net Received: from player716.ha.ovh.net (unknown [10.110.103.199]) by mo550.mail-out.ovh.net (Postfix) with ESMTP id 4961322FB3 for ; Tue, 12 Oct 2021 15:35:00 +0000 (UTC) Received: from lsferreira.net (252.131.62.94.rev.vodafone.pt [94.62.131.252]) (Authenticated sender: contact@lsferreira.net) by player716.ha.ovh.net (Postfix) with ESMTPSA id D6EFC23157539; Tue, 12 Oct 2021 15:34:57 +0000 (UTC) Authentication-Results: garm.ovh; auth=pass (GARM-103G005bbc4214d-9354-45a9-afa9-e23086532edd, 828CA9600D60903EC6802A8F8DBF8650CE4CDEC1) smtp.auth=contact@lsferreira.net X-OVh-ClientIp: 94.62.131.252 From: =?utf-8?q?Lu=C3=ADs_Ferreira?= To: gcc-patches@gcc.gnu.org Subject: [PATCH v2] libiberty: d-demangle: use appendc for single chars append Date: Tue, 12 Oct 2021 16:34:53 +0100 Message-Id: <20211012153453.317497-1-contact@lsferreira.net> X-Mailer: git-send-email 2.33.0 MIME-Version: 1.0 X-Ovh-Tracer-Id: 12331700205763033336 X-VR-SPAMSTATE: OK X-VR-SPAMSCORE: 0 X-VR-SPAMCAUSE: gggruggvucftvghtrhhoucdtuddrgedvtddrvddtkedgkeekucetufdoteggodetrfdotffvucfrrhhofhhilhgvmecuqfggjfdpvefjgfevmfevgfenuceurghilhhouhhtmecuhedttdenucenucfjughrpefhvffufffkofggtgfgsehtkeertdertdejnecuhfhrohhmpefnuhovshcuhfgvrhhrvghirhgruceotghonhhtrggttheslhhsfhgvrhhrvghirhgrrdhnvghtqeenucggtffrrghtthgvrhhnpeelvddvtddtffdukeffffejtdfgkeegudelhfehveeuudejueegjeduueefgedukeenucfkpheptddrtddrtddrtddpleegrdeivddrudefuddrvdehvdenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepmhhouggvpehsmhhtphdqohhuthdphhgvlhhopehplhgrhigvrhejudeirdhhrgdrohhvhhdrnhgvthdpihhnvghtpedtrddtrddtrddtpdhmrghilhhfrhhomheptghonhhtrggttheslhhsfhgvrhhrvghirhgrrdhnvghtpdhrtghpthhtohepghgttgdqphgrthgthhgvshesghgttgdrghhnuhdrohhrgh X-Spam-Status: No, score=-11.1 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?utf-8?q?Lu=C3=ADs_Ferreira?= Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" This may be optimized by some modern smart compilers inliner, but since strlen can be an external source, this can produce slightly more unoptimized code. ChangeLog: libiberty/ * d-demangle.c (string_appendc): Add function to append single chars. * d-demangle.c: Rewrite usage of string_append and string_appendn for single chars to use string_appendc function. Signed-off-by: Luís Ferreira --- libiberty/d-demangle.c | 60 ++++++++++++++++++++++++------------------ 1 file changed, 34 insertions(+), 26 deletions(-) diff --git a/libiberty/d-demangle.c b/libiberty/d-demangle.c index 3adf7b562d1..9b12c8158bb 100644 --- a/libiberty/d-demangle.c +++ b/libiberty/d-demangle.c @@ -144,6 +144,14 @@ string_appendn (string *p, const char *s, size_t n) } } +static void +string_appendc (string *p, char c) +{ + string_need (p, 1); + *p->p = c; + p->p++; +} + static void string_prependn (string *p, const char *s, size_t n) { @@ -664,7 +672,7 @@ dlang_function_type (string *decl, const char *mangled, struct dlang_info *info) /* Append to decl in order. */ string_appendn (decl, type.b, string_length (&type)); string_appendn (decl, args.b, string_length (&args)); - string_append (decl, " "); + string_appendc (decl, ' '); string_appendn (decl, attr.b, string_length (&attr)); string_delete (&attr); @@ -816,9 +824,9 @@ dlang_type (string *decl, const char *mangled, struct dlang_info *info) mangled++; } mangled = dlang_type (decl, mangled, info); - string_append (decl, "["); + string_appendc (decl, '['); string_appendn (decl, numptr, num); - string_append (decl, "]"); + string_appendc (decl, ']'); return mangled; } case 'H': /* associative array (T[T]) */ @@ -832,9 +840,9 @@ dlang_type (string *decl, const char *mangled, struct dlang_info *info) sztype = string_length (&type); mangled = dlang_type (decl, mangled, info); - string_append (decl, "["); + string_appendc (decl, '['); string_appendn (decl, type.b, sztype); - string_append (decl, "]"); + string_appendc (decl, ']'); string_delete (&type); return mangled; @@ -844,7 +852,7 @@ dlang_type (string *decl, const char *mangled, struct dlang_info *info) if (!dlang_call_convention_p (mangled)) { mangled = dlang_type (decl, mangled, info); - string_append (decl, "*"); + string_appendc (decl, '*'); return mangled; } /* Fall through */ @@ -1181,7 +1189,7 @@ dlang_parse_integer (string *decl, const char *mangled, char type) { /* Represent as a character literal. */ char c = (char) val; - string_appendn (decl, &c, 1); + string_appendc (decl, c); } else { @@ -1297,7 +1305,7 @@ dlang_parse_real (string *decl, const char *mangled) /* Hexadecimal prefix and leading bit. */ if (*mangled == 'N') { - string_append (decl, "-"); + string_appendc (decl, '-'); mangled++; } @@ -1305,14 +1313,14 @@ dlang_parse_real (string *decl, const char *mangled) return NULL; string_append (decl, "0x"); - string_appendn (decl, mangled, 1); - string_append (decl, "."); + string_appendc (decl, *mangled); + string_appendc (decl, '.'); mangled++; /* Significand. */ while (ISXDIGIT (*mangled)) { - string_appendn (decl, mangled, 1); + string_appendc (decl, *mangled); mangled++; } @@ -1325,7 +1333,7 @@ dlang_parse_real (string *decl, const char *mangled) if (*mangled == 'N') { - string_append (decl, "-"); + string_appendc (decl, '-'); mangled++; } @@ -1352,7 +1360,7 @@ dlang_parse_string (string *decl, const char *mangled) return NULL; mangled++; - string_append (decl, "\""); + string_appendc (decl, '\"'); while (len--) { char val; @@ -1365,7 +1373,7 @@ dlang_parse_string (string *decl, const char *mangled) switch (val) { case ' ': - string_append (decl, " "); + string_appendc (decl, ' '); break; case '\t': string_append (decl, "\\t"); @@ -1415,7 +1423,7 @@ dlang_parse_arrayliteral (string *decl, const char *mangled, if (mangled == NULL) return NULL; - string_append (decl, "["); + string_appendc (decl, '['); while (elements--) { mangled = dlang_value (decl, mangled, NULL, '\0', info); @@ -1426,7 +1434,7 @@ dlang_parse_arrayliteral (string *decl, const char *mangled, string_append (decl, ", "); } - string_append (decl, "]"); + string_appendc (decl, ']'); return mangled; } @@ -1442,14 +1450,14 @@ dlang_parse_assocarray (string *decl, const char *mangled, if (mangled == NULL) return NULL; - string_append (decl, "["); + string_appendc (decl, '['); while (elements--) { mangled = dlang_value (decl, mangled, NULL, '\0', info); if (mangled == NULL) return NULL; - string_append (decl, ":"); + string_appendc (decl, ':'); mangled = dlang_value (decl, mangled, NULL, '\0', info); if (mangled == NULL) return NULL; @@ -1458,7 +1466,7 @@ dlang_parse_assocarray (string *decl, const char *mangled, string_append (decl, ", "); } - string_append (decl, "]"); + string_appendc (decl, ']'); return mangled; } @@ -1477,7 +1485,7 @@ dlang_parse_structlit (string *decl, const char *mangled, const char *name, if (name != NULL) string_append (decl, name); - string_append (decl, "("); + string_appendc (decl, '('); while (args--) { mangled = dlang_value (decl, mangled, NULL, '\0', info); @@ -1488,7 +1496,7 @@ dlang_parse_structlit (string *decl, const char *mangled, const char *name, string_append (decl, ", "); } - string_append (decl, ")"); + string_appendc (decl, ')'); return mangled; } @@ -1512,7 +1520,7 @@ dlang_value (string *decl, const char *mangled, const char *name, char type, /* Integral values. */ case 'N': mangled++; - string_append (decl, "-"); + string_appendc (decl, '-'); mangled = dlang_parse_integer (decl, mangled, type); break; @@ -1538,12 +1546,12 @@ dlang_value (string *decl, const char *mangled, const char *name, char type, case 'c': mangled++; mangled = dlang_parse_real (decl, mangled); - string_append (decl, "+"); + string_appendc (decl, '+'); if (mangled == NULL || *mangled != 'c') return NULL; mangled++; mangled = dlang_parse_real (decl, mangled); - string_append (decl, "i"); + string_appendc (decl, 'i'); break; /* String values. */ @@ -1651,7 +1659,7 @@ dlang_parse_qualified (string *decl, const char *mangled, do { if (n++) - string_append (decl, "."); + string_appendc (decl, '.'); /* Skip over anonymous symbols. */ while (*mangled == '0') @@ -1723,7 +1731,7 @@ dlang_parse_tuple (string *decl, const char *mangled, struct dlang_info *info) string_append (decl, ", "); } - string_append (decl, ")"); + string_appendc (decl, ')'); return mangled; }