David Kastrup <[email protected]> writes:
> How will either fare with:
>
> (let ((env
> (let ((x 1))
> (the-environment))))
> (local-eval '(set! x 4) env))
This example (or more complex ones based on the same idea) present no
difficulties for either patch.
scheme@(guile-user)> (use-modules (ice-9 local-eval))
scheme@(guile-user)> (let ((env (let ((x 1))
(the-environment))))
(local-eval '(set! x 4) env)
env)
$1 = #<lexical-environment (guile-user) ((x 4)) ()>
They work even if you replace the outer `let' with `letrec', so that
(the-environment) captures its own binding (though attempts to print
such an environment cause an infinite recursion :)
scheme@(guile-user)> (letrec ((env (let ((x 1))
(the-environment))))
(local-eval '(set! x 4) env)
env)
$3 = #<lexical-environment (guile-user) ice-9/format.scm:42:2: In procedure
format:
ice-9/format.scm:42:2: Throw to key `vm-error' with args `(vm-run "VM: Stack
overflow" ())'.
Entering a new prompt. Type `,bt' for a backtrace or `,q' to continue.
scheme@(guile-user) [1]> ,q
scheme@(guile-user)> (local-eval 'x $3)
$4 = 4
scheme@(guile-user)>
Best,
Mark