public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
* Re: [PATCH 00/12] remove some cleanups using a cleanup function
  2019-01-09  3:34 ` Tom Tromey
@ 2019-01-12 11:50 Andrew Burgess
  2019-01-09  3:34 ` Tom Tromey
                   ` (2 more replies)
  16 siblings, 3 replies; 33+ messages in thread
From: Andrew Burgess @ 2019-01-12 11:50 UTC (permalink / raw)
  To: gdb-patches; +Cc: Tom Tromey, Andrew Burgess

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

^ permalink raw reply	[flat|nested] 33+ messages in thread

end of thread, other threads:[~2019-01-22  3:56 UTC | newest]

Thread overview: 33+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-01-12 11:50 [PATCH 00/12] remove some cleanups using a cleanup function Andrew Burgess
2019-01-09  3:34 ` 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 08/12] Remove cleanup from stop_all_threads Tom Tromey
2019-01-09  3:34   ` [PATCH 04/12] Remove cleanup_delete_std_terminate_breakpoint 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 06/12] Remove clear_symtab_users_cleanup 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 05/12] Remove cleanup from linux-nat.c Tom Tromey
2019-01-09  3:34   ` [PATCH 12/12] Use cleanup_function in regcache.c 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 4/4] gdb/testsuite: Don't allow paths to appear in test name 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 3/4] gdb: Remove make_bpstat_clear_actions_cleanup 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
2019-01-15 23:03     ` Tom Tromey
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
2019-01-22  3:56               ` Tom Tromey
2019-01-21 12:19           ` Andrew Burgess

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).