From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-il1-x129.google.com (mail-il1-x129.google.com [IPv6:2607:f8b0:4864:20::129]) by sourceware.org (Postfix) with ESMTPS id 1257B3858D3C for ; Mon, 22 Apr 2024 15:49:34 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 1257B3858D3C 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 1257B3858D3C Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::129 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1713800976; cv=none; b=Rm02ZfD9lgj57D3BlahMDmGgSyFl6viActFCq46GRqOlKksDrAL8RifbDP1tzeqh97kBe8yi3+9vvTrsbu6CMiwAp+31h380qRUmJtjVC8Y9YgpngTvvvtGQNgY1ly5FCoAeEA9FiOR3jBhCusaqf2ec0FawWibI+4RP7OcMbWA= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1713800976; c=relaxed/simple; bh=RJqxfy2VWX2Tt1F9Spdjn/eK8IDmyb9QYdlToI+iCg4=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=FiR2d5R48izhv+nyhj2aOp4LCx/IK8P0Wx1JnBLM7OV4r0r0Vf3IuQUtdziMtFwXATPX7lnKCEcXrNwLIh+vq7yPx0RHKoLKJXA6OITgd+aZcdu24ob157sxUpa4Xtcch9rJk9Fexuw0hS+hF6AaG2Ska8tL+lr/2C3e14okIg8= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-il1-x129.google.com with SMTP id e9e14a558f8ab-36b2adedec7so19505805ab.1 for ; Mon, 22 Apr 2024 08:49:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=adacore.com; s=google; t=1713800973; x=1714405773; 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=0mkdzGsNsqXRyea+/VRO+ggN14SHeoO7ZyBJT8+UvEY=; b=OumraxiIt9GkKOlSwxtfnQdsoNXlpAUm4moDt9sPWwq2q/Y5vdoiKPrIoLfGIlEGg9 eTQj6b92xv0G5YalbvKGK+ApuGAFDtDixG/i/irLkNlvHiN9mjCRHXme2gdx+Gyq+MlG TryilWf2wj5cl13AulKXujFvC7R6C6sry6+nxomXzp60ibofIEKSUVui8ZV1H3aImuXf hM5La7ZM04Mgxe/Obd6ZArqtydIYNxEpgIING1dNZ34ZOclE5GvxAgnItnVWHgVEauoo Y0AjFSitBTZ9zm2P1sRZiPehG0jF22FggD6vI04CuUUz54gXoofzdFy5Z1Deuu2EpwzC X/1w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713800973; x=1714405773; 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=0mkdzGsNsqXRyea+/VRO+ggN14SHeoO7ZyBJT8+UvEY=; b=JtpTNIQ3Dggk60wBqEBDdThHM9gVvgzz99+bPBLZEmwinkgenCoR4hOGrrRUbz1d6l n43BS6V742fLK006Mfm7bbVOI2DifqPVqcwe490x1Rb6fKUtMn1u6PvsTAYFeIz4zTp1 bl1/i9wPxzen5OxPr37HyPlFHs57YLUDxJunBQ8BqzG8cmkXulLZ+LWoQmMP0Tifh+Z2 fZKMZi4Ar1LNOj+vZMMJp9AX7Cz7/h6uau8BD0jlgz5jB5X/phIE9/cepbMpNuZDfWSu 3u2tyAjJCX+UFc0a3Ea7QOUy0THHhf/lPd2ysvQhEtATSYlGbMUeub5yk4BFyITPHjEC wgkg== X-Gm-Message-State: AOJu0Yz9ZGRpQnjmeuAUE8PZualLJscOvDBMhDCfoenhaqK1+Lb51+nQ UFYzwKRuqfUo4qmLOhH89tuBcomDj5GQf8p6f9+wG6dG2llzXtTWDVa4zwjob41bvkoBSyxVFec = X-Google-Smtp-Source: AGHT+IEre5T4zKG3TcALC1F0lLNxQFOn////R/7lKhUICCQHCWyBTcyha7Ei8+gdg1h4haDbIfBV6Q== X-Received: by 2002:a05:6e02:190c:b0:36a:fe3d:157d with SMTP id w12-20020a056e02190c00b0036afe3d157dmr15537248ilu.25.1713800973135; Mon, 22 Apr 2024 08:49:33 -0700 (PDT) Received: from localhost.localdomain (97-122-86-252.hlrn.qwest.net. [97.122.86.252]) by smtp.gmail.com with ESMTPSA id i3-20020a05663813c300b00482f19f6d4csm2883610jaj.110.2024.04.22.08.49.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Apr 2024 08:49:32 -0700 (PDT) From: Tom Tromey To: gdb-patches@sourceware.org Cc: Tom Tromey Subject: [PATCH] Simplify macro_define_command Date: Mon, 22 Apr 2024 09:49:23 -0600 Message-ID: <20240422154923.1601231-1-tromey@adacore.com> X-Mailer: git-send-email 2.43.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-11.4 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 List-Id: 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. Regression tested on x86-64 Fedora 38. --- gdb/macrocmd.c | 55 +++++++++++++++----------------------------------- 1 file changed, 16 insertions(+), 39 deletions(-) diff --git a/gdb/macrocmd.c b/gdb/macrocmd.c index ddabfede0f5..0d0db5d1b90 100644 --- a/gdb/macrocmd.c +++ b/gdb/macrocmd.c @@ -308,33 +308,24 @@ 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 () + ~temporary_macro_definition () { - table = nullptr; - kind = macro_object_like; - argc = 0; - argv = nullptr; - replacement = nullptr; + free_vector_argv (argv); } - ~temporary_macro_definition () + void add_argument (gdb::unique_xmalloc_ptr &&value) { - int i; - - for (i = 0; i < argc; ++i) - xfree ((char *) argv[i]); - xfree ((char *) argv); - /* Note that the 'replacement' field is not allocated. */ + 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 +335,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,26 +343,18 @@ 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) error (_("Macro is missing an argument.")); - ++new_macro.argc; - for (i = new_macro.argc - 2; i >= 0; --i) + for (const char *existing : new_macro.argv) { - if (! strcmp (argv[i], argv[new_macro.argc - 1])) + 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 +369,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 { -- 2.43.0