git.fiddlerwoaroof.com
Browse code

Rejigger things...

Ed Langley authored on 11/03/2019 00:17:18
Showing 2 changed files
... ...
@@ -22,9 +22,12 @@
22 22
 
23 23
 (defgeneric queue (event-loop))
24 24
 
25
-(defgeneric register-finish-cb (cb event-loop))
25
+(defgeneric (setf finish-cb) (cb event-loop))
26
+(defgeneric finish-cb (event-loop))
26 27
 
27
-(defgeneric tick (event-loop))
28
+(defgeneric tick (event-loop)
29
+  (:method :around (event-loop)
30
+    (call-next-method)))
28 31
 
29 32
 (defparameter *task-depth* 10)
30 33
 
... ...
@@ -34,12 +37,14 @@
34 37
 
35 38
 (defun run-loop (event-loop)
36 39
   (let ((finished nil))
37
-    (register-finish-cb (lambda ()
38
-                          (setf finished t))
39
-                        event-loop)
40
+    (setf (finish-cb event-loop)
41
+          (lambda ()
42
+            (setf finished t)))
40 43
     (prepare-loop event-loop)
41 44
     (unwind-protect (until-finished finished
42
-                      (tick event-loop))
45
+                      (with-simple-restart (continue "continue event loop")
46
+                        (tick event-loop)))
47
+      (format t "unwinding...")
43 48
       (cleanup event-loop))))
44 49
 
45 50
 (defun wait-for-promise (promise)
... ...
@@ -6,5 +6,5 @@
6 6
    #:run-loop
7 7
    #:wait-for-promise
8 8
    #:prepare-loop
9
-   #:register-finish-cb
10
-   #:cleanup))
9
+   #:cleanup
10
+   #:finish-cb))