Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Andrew Burgess <andrew.burgess@embecosm.com>
To: gdb-patches@sourceware.org
Cc: Tom Tromey <tom@tromey.com>,
	Andrew Burgess <andrew.burgess@embecosm.com>
Subject: Re: [PATCH 00/12] remove some cleanups using a cleanup function
Date: Sat, 12 Jan 2019 11:50:00 -0000	[thread overview]
Message-ID: <cover.1547292660.git.andrew.burgess@embecosm.com> (raw)
In-Reply-To: <20190109033426.16062-1-tom@tromey.com>

I've been thinking about a similar idea for a while too.  I wondered
if there was a way we could make use of templates to generate some of
the common boiler plate cleanups.

This mini-series changes the first 4 of your patches to you this idea
so you can see how it might work.

First, the ideal, description, a new templated class
`cleanup_function` that allows you to do something like this:

    void
    delete_longjmp_breakpoint (int arg)
    {
      /* Blah, blah, blah...  */
    }

    using longjmp_breakpoint_cleanup
        = cleanup_function <delete_longjmp_breakpoint, int>;

This creates a new cleanup class `longjmp_breakpoint_cleanup` than can
then be used like this:

    longjmp_breakpoint_cleanup obj (thread);

    /* Blah, blah, blah...  */

    obj.cancel ();  /* Optional cancel if needed.  */

The cleanup_function class can take any number of arguments, and is
cancellable if needed, it can also take zero arguments.  In theory
this would allow any cleanup that only needs to hold some simple
arguments by value and call a static function to be made into a
`cleanup_function` specialisation.

Now the only slight problem is that the above requires C++17, which
isn't what we use right now. However, there is a C++11 alternative
which we can use for now, so you _actually_ have to write this:

    using longjmp_breakpoint_cleanup
        = cleanup_function <void (*) (int), delete_longjmp_breakpoint, int>;

The function signature is added in as pre-C++17 GCC doesn't support
`auto` template parameters.

The 4 patches below make use of `#ifdef __cpp_template_auto` to
demonstrate the pre and post C++17 code variants.  A final submission
would be based on pre-C++11 and include the function signatures, but
add a comment in the `cleanup_function` class that when we update the
C++ standard, we can update how the class is used.

How do you think this compares to your original patches?  Any interest
in this approach?

Thanks,
Andrew


--

Andrew Burgess (4):
  gdb: Remove delete_longjmp_breakpoint_cleanup
  gdb: Remove remaining cleanup from breakpoint.c
  gdb: Remove make_bpstat_clear_actions_cleanup
  gdb/testsuite: Don't allow paths to appear in test name

 gdb/ChangeLog                 |  29 +++++++++++
 gdb/breakpoint.c              |  26 +++-------
 gdb/breakpoint.h              |  19 +++++++
 gdb/common/cleanup-function.h | 118 ++++++++++++++++++++++++++++++++++++++++++
 gdb/infcmd.c                  |  12 +----
 gdb/inferior.h                |   2 -
 gdb/infrun.c                  |   7 +--
 gdb/testsuite/ChangeLog       |   4 ++
 gdb/top.c                     |   7 ++-
 gdb/utils.c                   |  17 ------
 gdb/utils.h                   |   1 -
 11 files changed, 187 insertions(+), 55 deletions(-)
 create mode 100644 gdb/common/cleanup-function.h

-- 
2.14.5


       reply	other threads:[~2019-01-12 11:50 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-01-12 11:50 Andrew Burgess [this message]
2019-01-09  3:34 ` Tom Tromey
2019-01-09  3:34   ` [PATCH 11/12] Update cleanup comment in ui-out.h Tom Tromey
2019-01-09  3:34   ` [PATCH 01/12] Remove delete_longjmp_breakpoint_cleanup Tom Tromey
2019-01-09  3:34   ` [PATCH 05/12] Remove cleanup from linux-nat.c Tom Tromey
2019-01-09  3:34   ` [PATCH 07/12] Remove delete_just_stopped_threads_infrun_breakpoints_cleanup Tom Tromey
2019-01-09  3:34   ` [PATCH 04/12] Remove cleanup_delete_std_terminate_breakpoint Tom Tromey
2019-01-09  3:34   ` [PATCH 03/12] Remove make_bpstat_clear_actions_cleanup Tom Tromey
2019-01-09  3:34   ` [PATCH 10/12] Update an obsolete cleanup comment Tom Tromey
2019-01-09  3:34   ` [PATCH 08/12] Remove cleanup from stop_all_threads Tom Tromey
2019-01-09  3:34   ` [PATCH 12/12] Use cleanup_function in regcache.c Tom Tromey
2019-01-09  3:34   ` [PATCH 06/12] Remove clear_symtab_users_cleanup Tom Tromey
2019-01-09  3:34   ` [PATCH 09/12] Remove remaining cleanup from fetch_inferior_event Tom Tromey
2019-01-09  3:36   ` [PATCH 02/12] Remove remaining cleanup from breakpoint.c Tom Tromey
2019-01-11  6:56   ` [PATCH 00/12] remove some cleanups using a cleanup function Joel Brobecker
2019-01-12 11:50   ` [PATCH 3/4] gdb: Remove make_bpstat_clear_actions_cleanup Andrew Burgess
2019-01-12 11:50   ` [PATCH 1/4] gdb: Remove delete_longjmp_breakpoint_cleanup Andrew Burgess
2019-01-12 11:50   ` [PATCH 2/4] gdb: Remove remaining cleanup from breakpoint.c Andrew Burgess
2019-01-12 11:50   ` [PATCH 4/4] gdb/testsuite: Don't allow paths to appear in test name Andrew Burgess
2019-01-12 15:54 ` [PATCH 00/12] remove some cleanups using a cleanup function Tom Tromey
2019-01-12 22:41   ` Tom Tromey
2019-01-14 11:06     ` Andrew Burgess
2019-01-14 15:39       ` Pedro Alves
2019-01-14 20:37 ` Pedro Alves
2019-01-15  9:42   ` Andrew Burgess
     [not found]     ` <87ef9dttfl.fsf@tromey.com>
2019-01-15 23:43       ` Pedro Alves
2019-01-16 11:19         ` Andrew Burgess
2019-01-16 23:10         ` Pedro Alves
2019-01-17 21:39           ` Tom Tromey
2019-01-21 20:12             ` Pedro Alves

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=cover.1547292660.git.andrew.burgess@embecosm.com \
    --to=andrew.burgess@embecosm.com \
    --cc=gdb-patches@sourceware.org \
    --cc=tom@tromey.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox