Fixed order of evaluation in defsetf long form.
authorVladimir Sedach <vsedach@gmail.com>
Fri, 3 Aug 2007 21:19:00 +0000 (21:19 +0000)
committerVladimir Sedach <vsedach@gmail.com>
Fri, 3 Aug 2007 21:19:00 +0000 (21:19 +0000)
src/ps-macrology.lisp
t/ps-tests.lisp

index 0fff088..c77f485 100644 (file)
@@ -387,8 +387,8 @@ lambda-list::=
                               (gensymed-arg-bindings (mapcar #'list gensymed-names (list ,@var-bindings))))
                          (destructuring-bind ,var-bindings
                              gensymed-names
                               (gensymed-arg-bindings (mapcar #'list gensymed-names (list ,@var-bindings))))
                          (destructuring-bind ,var-bindings
                              gensymed-names
-                           `(let ((,,store-var ,store-form)
-                                  ,@gensymed-arg-bindings)
+                           `(let (,@(reverse gensymed-arg-bindings)
+                                  (,,store-var ,store-form))
                              ,,form))))))))
   nil)
 
                              ,,form))))))))
   nil)
 
index 21acde8..9d4f801 100644 (file)
@@ -238,7 +238,7 @@ x = 2 + sideEffect() + x + 5;")
 
 (test defsetf1
   (ps (defsetf baz (x y) (newval) `(set-baz ,x ,y ,newval)))
 
 (test defsetf1
   (ps (defsetf baz (x y) (newval) `(set-baz ,x ,y ,newval)))
-  (is (string= "var PS_GS_1 = 3; var PS_GS_2 = 2; var PS_GS_3 = 1; setBaz(PS_GS_3, PS_GS_2, PS_GS_1);"
+  (is (string= "var PS_GS_3 = 1; var PS_GS_2 = 2; var PS_GS_1 = 3; setBaz(PS_GS_3, PS_GS_2, PS_GS_1);"
                (normalize-js-code (let ((ps::*gen-script-name-counter* 0))
                                     (ps (setf (baz 1 2) 3)))))))
 
                (normalize-js-code (let ((ps::*gen-script-name-counter* 0))
                                     (ps (setf (baz 1 2) 3)))))))