1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-30 06:50:31 +02:00

eval.scm's handling of with-fluids doesn't leave the VM

* module/ice-9/eval.scm (primitive-eval): Implement with-fluids in terms
  of with-fluids, to avoid recursively calling the VM via with-fluids*.
This commit is contained in:
Andy Wingo 2010-02-25 00:32:40 +01:00
parent b3950ad6d8
commit 1371fe9b14

View file

@ -307,7 +307,11 @@
(('with-fluids (fluids vals . exp)) (('with-fluids (fluids vals . exp))
(let* ((fluids (map (lambda (x) (eval x env)) fluids)) (let* ((fluids (map (lambda (x) (eval x env)) fluids))
(vals (map (lambda (x) (eval x env)) vals))) (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 (tag exp . handler))
(@prompt (eval tag env) (@prompt (eval tag env)