This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]