actors: Add define-mhandler, a method handler definition tool.
authorChristopher Allan Webber <cwebber@dustycloud.org>
Sat, 30 Apr 2016 21:35:51 +0000 (16:35 -0500)
committerChristopher Allan Webber <cwebber@dustycloud.org>
Sat, 30 Apr 2016 21:35:51 +0000 (16:35 -0500)
* 8sync/systems/actors.scm (define-mhandler): New macro.

8sync/systems/actors.scm

index 8c4258d725267b189d91c86142f7a62f08e6da4f..a5033135653422a8c8feb7db452a766fe9288d4c 100644 (file)
@@ -47,7 +47,7 @@
             actor-id-hive
             actor-id-string
 
-            mlambda
+            mlambda define-mhandler
             make-action-dispatch
             define-simple-actor
 
@@ -334,6 +334,14 @@ Which is like doing manually:
        (let ((message-arg (message-ref message (quote message-arg))) ...)
          body body* ...)))))
 
+;; @@: Sadly, docstrings won't work with this...
+;;   I think we need to bust out syntax-case to make that happen...
+(define-syntax-rule (define-mhandler (name actor message message-arg ...)
+                      body ...)
+  (define name
+    (mlambda (actor message message-arg ...)
+             body ...)))
+
 (define (simple-dispatcher action-map)
   (lambda (actor message)
     (let* ((action (message-action message))