mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-20 11:40:18 +02:00
Fix 'local-eval' when the specified environment is a module
* module/ice-9/local-eval.scm (local-wrap): Fix the (module? e) case, to reference the expression 'x' instead of the non-existent variable 'exp', as was previously done. Also use quasisyntax instead of quasiquote, so that the introduced 'lambda' is an identifier instead of a bare symbol, so that this will work in modules that have rebound 'lambda' to something else. * test-suite/tests/eval.test (local-eval): Make sure to test both 'local-eval' and 'local-compile' when the specified environment is a module.
This commit is contained in:
parent
505afe2832
commit
2f3e436411
2 changed files with 12 additions and 10 deletions
|
@ -235,7 +235,7 @@
|
|||
(scope (caddr l)))
|
||||
(within-nested-ellipses (datum->syntax scope name) lvl)))
|
||||
(lexenv-patterns e))))
|
||||
((module? e) `(lambda () #f ,exp))
|
||||
((module? e) #`(lambda () #f #,x))
|
||||
(else (error "invalid lexical environment" e))))
|
||||
|
||||
(define (local-eval x e)
|
||||
|
|
|
@ -431,9 +431,10 @@
|
|||
|
||||
(pass-if "local-eval"
|
||||
|
||||
(let* ((env1 (let ((x 1) (y 2) (z 3))
|
||||
(define-syntax-rule (foo x) (quote x))
|
||||
(the-environment)))
|
||||
(let* ((env1 (local-eval '(let ((x 1) (y 2) (z 3))
|
||||
(define-syntax-rule (foo x) (quote x))
|
||||
(the-environment))
|
||||
(current-module)))
|
||||
(env2 (local-eval '(let ((x 111) (a 'a))
|
||||
(define-syntax-rule (bar x) (quote x))
|
||||
(the-environment))
|
||||
|
@ -448,9 +449,10 @@
|
|||
|
||||
(pass-if "local-compile"
|
||||
|
||||
(let* ((env1 (let ((x 1) (y 2) (z 3))
|
||||
(define-syntax-rule (foo x) (quote x))
|
||||
(the-environment)))
|
||||
(let* ((env1 (local-compile '(let ((x 1) (y 2) (z 3))
|
||||
(define-syntax-rule (foo x) (quote x))
|
||||
(the-environment))
|
||||
(current-module)))
|
||||
(env2 (local-compile '(let ((x 111) (a 'a))
|
||||
(define-syntax-rule (bar x) (quote x))
|
||||
(the-environment))
|
||||
|
@ -477,9 +479,9 @@
|
|||
(the-environment))))
|
||||
module-a)
|
||||
(module-use! module-b (resolve-interface '(guile)))
|
||||
(let ((env (eval `(let ((x 111) (y 222))
|
||||
((@@ ,module-a-name test)))
|
||||
module-b)))
|
||||
(let ((env (local-eval `(let ((x 111) (y 222))
|
||||
((@@ ,module-a-name test)))
|
||||
module-b)))
|
||||
(equal? (local-eval '(list x y z) env)
|
||||
'(1 2 3))))))
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue