eval.scm's handling of with-fluids doesn't leave the VM
authorAndy Wingo <wingo@pobox.com>
Wed, 24 Feb 2010 23:32:40 +0000 (00:32 +0100)
committerAndy Wingo <wingo@pobox.com>
Wed, 24 Feb 2010 23:43:52 +0000 (00:43 +0100)
* module/ice-9/eval.scm (primitive-eval): Implement with-fluids in terms
  of with-fluids, to avoid recursively calling the VM via with-fluids*.

module/ice-9/eval.scm

index f7cb6ce..e38f2df 100644 (file)
         (('with-fluids (fluids vals . exp))
          (let* ((fluids (map (lambda (x) (eval x env)) fluids))
                 (vals (map (lambda (x) (eval x env)) vals)))
-           (with-fluids* fluids vals (lambda () (eval exp env)))))
+           (let lp ((fluids fluids) (vals vals))
+             (if (null? fluids)
+                 (eval exp env)
+                 (with-fluids (((car fluids) (car vals)))
+                   (lp (cdr fluids) (cdr vals)))))))
         
         (('prompt (tag exp . handler))
          (@prompt (eval tag env)