From: Vladimir Sedach Date: Thu, 18 Jun 2009 23:11:56 +0000 (-0600) Subject: Added the 'chain' convenience macro for method call chaining (ex: X-Git-Url: http://git.hcoop.net/clinton/parenscript.git/commitdiff_plain/d9d9a9705bdfd0559ee1bbf9caa1733d0b3f142b Added the 'chain' convenience macro for method call chaining (ex: (chain ($ "foo") (bar x z) (baz 5)) => $('foo').bar(x, z).baz(5);) --- diff --git a/src/lib/ps-macro-lib.lisp b/src/lib/ps-macro-lib.lisp index 5c65ad6..1013939 100644 --- a/src/lib/ps-macro-lib.lisp +++ b/src/lib/ps-macro-lib.lisp @@ -81,6 +81,14 @@ `(@ (slot-value ,obj ,(if (symbolp (car props)) `',(car props) (car props))) ,@(cdr props)) obj)) +(defpsmacro chain (&rest method-calls) + (labels ((do-chain (method-calls) + (if (cdr method-calls) + `((@ ,(do-chain (cdr method-calls)) ,(caar method-calls)) ,@(cdar method-calls)) + (car method-calls)))) + (do-chain (reverse method-calls)))) + + (defpsmacro concatenate (result-type &rest sequences) (assert (equal result-type ''string) () "Right now Parenscript 'concatenate' only support strings.") (cons '+ sequences))