actors: Adding "mhandlers" and updating define-simple-actor to use it.
authorChristopher Allan Webber <cwebber@dustycloud.org>
Sat, 17 Dec 2016 00:20:28 +0000 (18:20 -0600)
committerChristopher Allan Webber <cwebber@dustycloud.org>
Sat, 17 Dec 2016 00:20:28 +0000 (18:20 -0600)
We also mark a whole range of abstractions as deprecated, but those will
be removed as they're phased out of use.

* 8sync/systems/actors.scm (mhandlers): New macro.
  (define-simple-actor): Update to use mhandlers.

8sync/systems/actors.scm

index 52b18779a11d6d1bd12ba2559dfe804f892de933..ce23bfab2acdc16daecfded2456cb66ee47f3bb2 100644 (file)
@@ -53,6 +53,8 @@
             simple-dispatcher build-actions make-action-dispatch
             define-simple-actor
 
+            mhandlers
+
             <hive>
             make-hive
             ;; There are more methods for the hive, but there's
 ;;; Actor utilities
 ;;; ===============
 
+;;;;;;;;;;; Deprecated abstractions start here ;;;;;;;;;;;
+
 (define (simple-dispatcher action-map)
   (lambda (actor message)
     (let* ((action (message-action message))
@@ -375,11 +379,21 @@ more compact following syntax:
     ((make-action-dispatch action-item ...)
      (simple-dispatcher (build-actions action-item ...)))))
 
-(define-syntax-rule (define-simple-actor class actions ...)
+;;;;;;;;;;; Deprecated abstractions end here ;;;;;;;;;;;
+
+
+(define-syntax-rule (mhandlers (symbol method) ...)
+  "Construct an alist of (symbol . method), where the method is wrapped
+with wrap-apply to facilitate live hacking and allow the method definition
+to come after class definition."
+  (list
+   (cons (quote symbol)
+         (wrap-apply method)) ...))
+
+(define-syntax-rule (define-simple-actor class action ...)
   (define-class class (<actor>)
-    (message-handler
-     #:init-value (make-action-dispatch actions ...)
-     #:allocation #:each-subclass)))
+    (actions #:init-value (mhandlers action ...)
+             #:allocation #:each-subclass)))
 
 \f
 ;;; The Hive