From d9d9a9705bdfd0559ee1bbf9caa1733d0b3f142b Mon Sep 17 00:00:00 2001 From: Vladimir Sedach Date: Thu, 18 Jun 2009 17:11:56 -0600 Subject: [PATCH] Added the 'chain' convenience macro for method call chaining (ex: (chain ($ "foo") (bar x z) (baz 5)) => $('foo').bar(x, z).baz(5);) --- src/lib/ps-macro-lib.lisp | 8 ++++++++ 1 file changed, 8 insertions(+) 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)) -- 2.20.1