From patchwork Fri Apr 26 15:44:39 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 89053 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 89F773858431 for ; Fri, 26 Apr 2024 15:45:14 +0000 (GMT) X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from mail-il1-x136.google.com (mail-il1-x136.google.com [IPv6:2607:f8b0:4864:20::136]) by sourceware.org (Postfix) with ESMTPS id A32003858C60 for ; Fri, 26 Apr 2024 15:44:46 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org A32003858C60 Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=adacore.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=adacore.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org A32003858C60 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::136 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1714146289; cv=none; b=s5wfHvtVfYa+KLbSBXGwW3frXdSIN1bM4bJHgltXgXofWuhPL9QzvdZg7mJFosx0CVYwGbg0SihPIWdIZmqXQ4+CZBBAc+fo8Ip+YdgAMsm74cdpL2BWYNj5T9Dc76un1nyTcFWwV1Szuxn87G25gaKFOGThJpudvKD9wq6qKUU= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1714146289; c=relaxed/simple; bh=IFqg3IUHYivaDrYi0N36O5yW5OiUOEeqwWxRLk8Jrpw=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=vxqt98ZaMcYn66mVOFoSKOD/axpLsNaE74qKSg2ZvkW8HI8+RboYlhkOiMp5wPXLEFXIsAJyXInKFKC5Jdr0ILYB5zGUATKc6IPERk3yXCH8D2XsA50JqTNyLoc0Lez+gJ8vkTZQUF03EJ/b4LhmyGIKe1V8SAzqz+uhsE4jFWI= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-il1-x136.google.com with SMTP id e9e14a558f8ab-36b2fcff072so8305725ab.0 for ; Fri, 26 Apr 2024 08:44:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=adacore.com; s=google; t=1714146286; x=1714751086; darn=sourceware.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=AkvhuT7NJj2nAjsOooGRUwG+pmPOUaRotJk3R2HAfgI=; b=CDhRcZoYNriWDM5pudl+kqCiC65LZQsiABKWnkU5Sp3NSA5ZNM7kAo3+EXZR9CjnJm plGnjxHVawdLoq5qG6ZspKnzjjwZwlFzsVmS5SJ4qXQztZvRqaPCkUiTMtG6QPSGFepP 6+5h4R/ABI/zvc6ns/9pTs/UTsnzhSoXOSlCBUxESBKhaofTVAOB3QGGFcdEQmnJGClm lVzJJe9uowtYatL/y/19p/UCoKwvOL9lAQh3HI5GHF7MkT3ECDZois1vJzr9L1KcFUUu ETD1zcKk29JIkUW/GIO5mh4g3BIiCrDZWeGifXwvYM0U/ZfSopSl6otX9XGr9no09EgI +JZw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714146286; x=1714751086; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=AkvhuT7NJj2nAjsOooGRUwG+pmPOUaRotJk3R2HAfgI=; b=F+yOjuCkuk1L+v609lBTyjGgqxE7mzkvaVgl5JrEfHowAd4bGj8pPlhazO9xn/nu6W PqXkOevwD4qnkxUgJegWK8hLpzKgDM5V62gO7QteDjjTkxeh24OaCUi2p0wq4eYHo45+ A4fRn8geX/dW4W+af5eZBr+QpjBBUHoFYlXhkWXQR+GXOM++nK4nRtO08aW9wyD1f/SG RhBGgWOkEH3lUxXOhNaokzvoj/Wv/zQs+u/wIfi1VKdcnx5BMV2owEHniFF1+0VY9Fmn KKX18tQNy/o650Bip0anlRi3ZdthKO+s1MMcxBr/slZ+23CoTcAbdOnW9Sirmred5Vh+ ruGw== X-Gm-Message-State: AOJu0YzFPd2qN3O2pXA91iVFS6gNRldbSA3jOyWsVlcAboK27ba4CnZT rrsW2Nd27Pt6GeuNG/NvS8QTdCfAsVEKKqw8sP6B4Ll5z1W7EOzyPdp+vYd1CyDHf1y/16uZ9q4 = X-Google-Smtp-Source: AGHT+IG7RLc29VxFegZiH2m1EtcuzXHeL5PZfPVzVIIyAySLNOgKioJ2KcrRt0uHTyb7vIvwlwjlmQ== X-Received: by 2002:a05:6e02:1a2e:b0:36a:fa1f:b571 with SMTP id g14-20020a056e021a2e00b0036afa1fb571mr3756041ile.2.1714146285797; Fri, 26 Apr 2024 08:44:45 -0700 (PDT) Received: from localhost.localdomain (97-122-86-252.hlrn.qwest.net. [97.122.86.252]) by smtp.gmail.com with ESMTPSA id fv4-20020a05663866c400b0047ec5c5b36fsm5557218jab.69.2024.04.26.08.44.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 26 Apr 2024 08:44:45 -0700 (PDT) From: Tom Tromey To: gdb-patches@sourceware.org Cc: Tom Tromey Subject: [PATCH v2] Simplify macro_define_command Date: Fri, 26 Apr 2024 09:44:39 -0600 Message-ID: <20240426154439.94728-1-tromey@adacore.com> X-Mailer: git-send-email 2.44.0 MIME-Version: 1.0 X-Spam-Status: No, score=-11.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gdb-patches-bounces+patchwork=sourceware.org@sourceware.org This simplifies macro_define_command, using std::vector to remove some manual memory management. temporary_macro_definition is also simplified -- much of the code there was simply unnecessary. This version addresses all the review comments. Regression tested on x86-64 Fedora 38. --- gdb/macrocmd.c | 62 ++++++++++++++++---------------------------------- 1 file changed, 20 insertions(+), 42 deletions(-) diff --git a/gdb/macrocmd.c b/gdb/macrocmd.c index bf7e43a8530..d9ffc635369 100644 --- a/gdb/macrocmd.c +++ b/gdb/macrocmd.c @@ -308,33 +308,27 @@ extract_identifier (const char **expp, int is_parameter) return gdb::unique_xmalloc_ptr (result); } -struct temporary_macro_definition : public macro_definition +struct temporary_macro_definition { - temporary_macro_definition () - { - table = nullptr; - kind = macro_object_like; - argc = 0; - argv = nullptr; - replacement = nullptr; - } + temporary_macro_definition () = default; + DISABLE_COPY_AND_ASSIGN (temporary_macro_definition); ~temporary_macro_definition () { - int i; + free_vector_argv (argv); + } - for (i = 0; i < argc; ++i) - xfree ((char *) argv[i]); - xfree ((char *) argv); - /* Note that the 'replacement' field is not allocated. */ + void add_argument (gdb::unique_xmalloc_ptr &&value) + { + argv.push_back (value.release ()); } + + std::vector argv; }; static void macro_define_command (const char *exp, int from_tty) { - temporary_macro_definition new_macro; - if (!exp) error (_("usage: macro define NAME[(ARGUMENT-LIST)] [REPLACEMENT-LIST]")); @@ -344,13 +338,7 @@ macro_define_command (const char *exp, int from_tty) error (_("Invalid macro name.")); if (*exp == '(') { - /* Function-like macro. */ - int alloced = 5; - char **argv = XNEWVEC (char *, alloced); - - new_macro.kind = macro_function_like; - new_macro.argc = 0; - new_macro.argv = (const char * const *) argv; + temporary_macro_definition new_macro; /* Skip the '(' and whitespace. */ ++exp; @@ -358,25 +346,15 @@ macro_define_command (const char *exp, int from_tty) while (*exp != ')') { - int i; - - if (new_macro.argc == alloced) - { - alloced *= 2; - argv = (char **) xrealloc (argv, alloced * sizeof (char *)); - /* Must update new_macro as well... */ - new_macro.argv = (const char * const *) argv; - } - argv[new_macro.argc] = extract_identifier (&exp, 1).release (); - if (! argv[new_macro.argc]) + auto arg = extract_identifier (&exp, 1); + if (arg == nullptr) error (_("Macro is missing an argument.")); - ++new_macro.argc; - for (i = new_macro.argc - 2; i >= 0; --i) - { - if (! strcmp (argv[i], argv[new_macro.argc - 1])) - error (_("Two macro arguments with identical names.")); - } + for (const char *existing : new_macro.argv) + if (! strcmp (existing, arg.get ())) + error (_("Two macro arguments with identical names.")); + + new_macro.add_argument (std::move (arg)); skip_ws (&exp); if (*exp == ',') @@ -392,8 +370,8 @@ macro_define_command (const char *exp, int from_tty) skip_ws (&exp); macro_define_function (macro_main (macro_user_macros), -1, name.get (), - new_macro.argc, (const char **) new_macro.argv, - exp); + new_macro.argv.size (), + (const char **) new_macro.argv.data (), exp); } else {