Allow sending messages to put to-actor as an actual actor instance.
authorChristopher Allan Webber <cwebber@dustycloud.org>
Thu, 10 Aug 2017 21:56:43 +0000 (16:56 -0500)
committerChristopher Allan Webber <cwebber@dustycloud.org>
Thu, 10 Aug 2017 21:56:43 +0000 (16:56 -0500)
This reduces a common error and also allows for cleaner code when an
actor wants to send a message to itself.

* 8sync/actors.scm (%<-): Allow sending messages to put to-actor as an
actual actor instance.

8sync/actors.scm

index fc8afcad3a6200550ae90396aff05881cd6fff5f..6d17e0597d9bab86bdaf86b6f85bd34fbd7179a5 100644 (file)
 ;; This is the internal, generalized message sending method.
 ;; Users shouldn't use it!  Use the <-foo forms instead.
 
-(define-inlinable (%<- wants-reply from-actor to action args message-id in-reply-to)
+(define (%<- wants-reply from-actor to action args message-id in-reply-to)
   ;; Okay, we need to deal with message ids.
   ;; Could we get rid of them? :\
   ;; It seems if we can use eq? and have messages be immutable then
      'TODO)
     ;; A message sent to nobody goes nowhere.
     ;; TODO: Should we display a warning here, probably?
-    (#f #f)))
+    (#f #f)
+    ;; We shouldn't technically be passing in actors but rather their
+    ;; addresses, but often actors want to message themselves and
+    ;; this makes that slightly easier.
+    ((? (lambda (x) (is-a? x <actor>)) actor)
+     (%<- wants-reply from-actor (actor-id actor) action
+          args message-id in-reply-to))))
 
 (define (<- to action . args)
   (define from-actor (*current-actor*))