This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
simplify continuations a bit more.
- From: Pedro Alves <pedro at codesourcery dot com>
- To: gdb-patches at sourceware dot org
- Date: Fri, 27 May 2011 15:57:33 +0100
- Subject: simplify continuations a bit more.
Yes more continuations love, replacing the hard to read
prototypes with function pointer typedefs ...
Applied.
Pedro Alves
2011-05-27 Pedro Alves <pedro@codesourcery.com>
gdb/
* defs.h (continuation_ftype, continuation_free_arg_ftype): New
typedefs.
(add_continuation, add_intermediate_continuation)
(add_inferior_continuation): Use them.
* continuations.c (struct continuation): Use them.
(make_continuation_ftype): Delete.
(make_continuation, add_inferior_continuation, add_continuation)
(add_intermediate_continuation): Use continuation_ftype and
continuation_free_arg_ftype. Rename parameters to shorter names.
---
gdb/continuations.c | 32 ++++++++++++++------------------
gdb/defs.h | 22 +++++++++++++++-------
2 files changed, 29 insertions(+), 25 deletions(-)
Index: src/gdb/defs.h
===================================================================
--- src.orig/gdb/defs.h 2011-05-27 15:07:35.000000000 +0100
+++ src/gdb/defs.h 2011-05-27 15:45:20.320787876 +0100
@@ -740,21 +740,29 @@ struct continuation;
struct thread_info;
struct inferior;
-/* From utils.c */
+/* From continuations.c */
+
+/* Prototype of the continuation callback functions. */
+typedef void (continuation_ftype) (void *);
+
+/* Prototype of the function responsible for releasing the argument
+ passed to the continuation callback functions, either when the
+ continuation is called, or discarded. */
+typedef void (continuation_free_arg_ftype) (void *);
/* Thread specific continuations. */
extern void add_continuation (struct thread_info *,
- void (*)(void *), void *,
- void (*)(void *));
+ continuation_ftype *, void *,
+ continuation_free_arg_ftype *);
extern void do_all_continuations (void);
extern void do_all_continuations_thread (struct thread_info *);
extern void discard_all_continuations (void);
extern void discard_all_continuations_thread (struct thread_info *);
extern void add_intermediate_continuation (struct thread_info *,
- void (*)(void *), void *,
- void (*)(void *));
+ continuation_ftype *, void *,
+ continuation_free_arg_ftype *);
extern void do_all_intermediate_continuations (void);
extern void do_all_intermediate_continuations_thread (struct thread_info *);
extern void discard_all_intermediate_continuations (void);
@@ -762,9 +770,9 @@ extern void discard_all_intermediate_con
/* Inferior specific (any thread) continuations. */
-extern void add_inferior_continuation (void (*) (void *),
+extern void add_inferior_continuation (continuation_ftype *,
void *,
- void (*) (void *));
+ continuation_free_arg_ftype *);
extern void do_all_inferior_continuations (void);
extern void discard_all_inferior_continuations (struct inferior *inf);
Index: src/gdb/continuations.c
===================================================================
--- src.orig/gdb/continuations.c 2011-05-27 15:43:35.000000000 +0100
+++ src/gdb/continuations.c 2011-05-27 15:43:28.060787856 +0100
@@ -26,20 +26,18 @@
struct continuation
{
struct continuation *next;
- void (*function) (void *);
- void (*free_arg) (void *);
+ continuation_ftype *function;
+ continuation_free_arg_ftype *free_arg;
void *arg;
};
-typedef void (make_continuation_ftype) (void *);
-
/* Add a new continuation to the continuation chain. Args are
FUNCTION to run the continuation up with, and ARG to pass to
it. */
static void
make_continuation (struct continuation **pmy_chain,
- make_continuation_ftype *function,
+ continuation_ftype *function,
void *arg, void (*free_arg) (void *))
{
struct continuation *new = XNEW (struct continuation);
@@ -113,13 +111,12 @@ discard_my_continuations (struct continu
continuation will be added at the front. */
void
-add_inferior_continuation (void (*continuation_hook) (void *), void *args,
- void (*continuation_free_args) (void *))
+add_inferior_continuation (continuation_ftype *hook, void *args,
+ continuation_free_arg_ftype *free_arg)
{
struct inferior *inf = current_inferior ();
- make_continuation (&inf->continuations, continuation_hook,
- args, continuation_free_args);
+ make_continuation (&inf->continuations, hook, args, free_arg);
}
/* Do all continuations of the current inferior. */
@@ -144,11 +141,10 @@ discard_all_inferior_continuations (stru
void
add_continuation (struct thread_info *thread,
- void (*continuation_hook) (void *), void *args,
- void (*continuation_free_args) (void *))
+ continuation_ftype *hook, void *args,
+ continuation_free_arg_ftype *free_arg)
{
- make_continuation (&thread->continuations, continuation_hook,
- args, continuation_free_args);
+ make_continuation (&thread->continuations, hook, args, free_arg);
}
static void
@@ -256,12 +252,12 @@ discard_all_continuations (void)
void
add_intermediate_continuation (struct thread_info *thread,
- void (*continuation_hook)
- (void *), void *args,
- void (*continuation_free_args) (void *))
+ continuation_ftype *hook,
+ void *args,
+ continuation_free_arg_ftype *free_arg)
{
- make_continuation (&thread->intermediate_continuations, continuation_hook,
- args, continuation_free_args);
+ make_continuation (&thread->intermediate_continuations, hook,
+ args, free_arg);
}
/* Walk down the cmd_continuation list, and execute all the