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:
parent
b3950ad6d8
commit
1371fe9b14
1 changed files with 5 additions and 1 deletions
|
@ -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)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue