From 2471a2cf648569db98e3a89a15849f9164edd1b4 Mon Sep 17 00:00:00 2001 From: Vladimir Sedach Date: Sun, 13 Sep 2009 16:19:11 -0600 Subject: [PATCH] Fixed the CHAIN macro to correctly chain plain slot values. Thanks to Daniel White for the patch. --- src/lib/ps-macro-lib.lisp | 4 +++- t/ps-tests.lisp | 12 ++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/lib/ps-macro-lib.lisp b/src/lib/ps-macro-lib.lisp index be90b79..2ef7d82 100644 --- a/src/lib/ps-macro-lib.lisp +++ b/src/lib/ps-macro-lib.lisp @@ -84,7 +84,9 @@ (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)) + (if (listp (car method-calls)) + `((@ ,(do-chain (cdr method-calls)) ,(caar method-calls)) ,@(cdar method-calls)) + `(@ ,(do-chain (cdr method-calls)) ,(car method-calls))) (car method-calls)))) (do-chain (reverse method-calls)))) diff --git a/t/ps-tests.lisp b/t/ps-tests.lisp index 1064aa8..2350f03 100644 --- a/t/ps-tests.lisp +++ b/t/ps-tests.lisp @@ -1193,3 +1193,15 @@ x1 - x1; var _cmp1; return (_cmp1 = 2, 1 < _cmp1 && _cmp1 < 3); };") + +(test-ps-js chain-slot-value1 + (chain ($ "foo") (bar x z) frob (baz 5)) + "$('foo').bar(x, z).frob.baz(5);") + +(test-ps-js chain-slot-value2 + (chain ($ "foo") bar baz) + "$('foo').bar.baz;") + +(test-ps-js chain-slot-value3 + (chain ($ "foo") bar (x y) baz) + "$('foo').bar.x(y).baz;") -- 2.20.1