* 8sync/systems/actors.scm (mlambda): Switched to syntax-case so we can
identify and allow docstrings.
body body* ...))
(define-syntax mlambda
body body* ...))
(define-syntax mlambda
"A lambda for building message handlers.
Use it like:
"A lambda for building message handlers.
Use it like:
(lambda (actor message)
(let ((foo (message-ref message foo)))
...))"
(lambda (actor message)
(let ((foo (message-ref message foo)))
...))"
- ((_ (actor message message-arg ...)
- body body* ...)
- (lambda (actor message)
- (with-message-args (message message-arg ...) body body* ...)))))
+ (syntax-case x ()
+ ((_ (actor message message-arg ...)
+ docstring
+ body ...)
+ (string? (syntax->datum #'docstring))
+ #'(lambda (actor message)
+ docstring
+ (with-message-args (message message-arg ...) body ...)))
+ ((_ (actor message message-arg ...)
+ body body* ...)
+ #'(lambda (actor message)
+ (with-message-args (message 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
(define-syntax-rule (define-mhandler (name actor message message-arg ...)
body ...)
(define name