Fix recent change to FLUID-LET to support unassigning.
authorTaylor R Campbell <campbell@mumble.net>
Fri, 8 Oct 2010 04:13:46 +0000 (04:13 +0000)
committerTaylor R Campbell <campbell@mumble.net>
Fri, 8 Oct 2010 04:13:46 +0000 (04:13 +0000)
Fixes

(define x 0)
(fluid-let ((x)) ...)
;The object (), passed as an argument to safe-car, is not a pair.

src/runtime/mit-macros.scm

index bbfe5acb3738a0d8e5aebed5c38fa56a49668240..461cb8333a54142e91d3d1abf771bc3b837f1788 100644 (file)
@@ -529,7 +529,7 @@ USA.
      compare
      (syntax-check '(KEYWORD (* (FORM ? EXPRESSION)) + FORM) form)
      (let ((names (map car (cadr form)))
-          (expressions (map cadr (cadr form)))
+          (right-hand-sides (map cdr (cadr form)))
           (r-define (rename 'DEFINE))
           (r-lambda (rename 'LAMBDA))
           (r-let (rename 'LET))
@@ -539,7 +539,7 @@ USA.
        (let ((temporaries (map make-synthetic-identifier names))
             (swap! (make-synthetic-identifier 'SWAP!))
             (body `(,r-lambda () ,@(cddr form))))
-        `(,r-let ,(map list temporaries expressions)
+        `(,r-let ,(map cons temporaries right-hand-sides)
            (,r-define (,swap!)
              ,@(map (lambda (name temporary)
                       `(,r-set! ,name (,r-set! ,temporary (,r-set! ,name))))