WITH-SLOTS had a problem with multiple evaluation:

(ps (with-slots (a b) (foo) (+ a b)))  
  => "foo().a + foo().b;"

I pushed a fix for that. Patch below.

Daniel


commit 305778c609dd6102b4a313ef436985551c29ee18
Author: Daniel Gackle <danielgackle@gmail.com>
Date:   Fri Mar 1 17:17:04 2013 -0700

    Fixed bug: multiple evaluation in WITH-SLOTS.

diff --git a/src/macros.lisp b/src/macros.lisp
index 5537872..b75f4b0 100644
--- a/src/macros.lisp
+++ b/src/macros.lisp
@@ -140,10 +140,11 @@
            (if (listp slot)
                (second slot)
                slot)))
-    `(symbol-macrolet ,(mapcar (lambda (slot)
-                                 `(,(slot-var slot) (getprop ,object ',(slot-symbol slot))))
-                               slots)
-       ,@body)))
+    (maybe-once-only (object)
+      `(symbol-macrolet ,(mapcar (lambda (slot)
+                                   `(,(slot-var slot) (getprop ,object ',(slot-symbol slot))))
+                                 slots)
+         ,@body))))
 
 ;;; multiple values
 
diff --git a/t/output-tests.lisp b/t/output-tests.lisp
index 361cd8b..f2d856c 100644
--- a/t/output-tests.lisp
+++ b/t/output-tests.lisp
@@ -141,6 +141,13 @@
     (+ a b c))
   "this.a + this.b + this.c;")
 
+(test-ps-js with-slots-single-eval
+  (lambda () (with-slots (a b) (foo) (+ a b)))
+  "(function () {
+    var object1 = foo();
+    return object1.a + object1.b;
+});")
+
 (test-ps-js object-literal-quoted-symbols
   (create 'test "bang" 'symbol-saved-my-life "parenscript")
   "({ 'test' : 'bang', 'symbolSavedMyLife' : 'parenscript' });")