From 92bbcf8318dad8f77a8f859cd3f281688b602db8 Mon Sep 17 00:00:00 2001 From: Christopher Allan Webber Date: Tue, 3 May 2016 11:14:28 -0500 Subject: [PATCH] actors: Permit docstrings in mlambda. * 8sync/systems/actors.scm (mlambda): Switched to syntax-case so we can identify and allow docstrings. --- 8sync/systems/actors.scm | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/8sync/systems/actors.scm b/8sync/systems/actors.scm index e2fd27e..c75a25a 100644 --- a/8sync/systems/actors.scm +++ b/8sync/systems/actors.scm @@ -323,7 +323,7 @@ If key not found and DFLT not provided, throw an error." body body* ...)) (define-syntax mlambda - (syntax-rules () + (lambda (x) "A lambda for building message handlers. Use it like: @@ -334,13 +334,19 @@ Which is like doing manually: (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 -- 2.31.1