mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-17 01:00:20 +02:00
primitive-eval takes expanded, not memoized, source
* module/ice-9/eval.scm (primitive-eval): * libguile/eval.c (scm_c_primitive_eval): Don't expect a memoized expression -- expect either raw source or an *expanded* expression. We handle memoization ourselves. * libguile/expand.c (scm_macroexpand): Settle down into its proper name, "macroexpand", even as we comment that it is but a fleeting boot expander. (scm_macroexpanded_p): New predicate for expanded code. * libguile/expand.h: Add scm_macroexpanded_p. * libguile/memoize.c (scm_memoize_expression): Require that the expression be expanded. (scm_init_memoize): Don't alias memoize-expression to macroexpand. * module/ice-9/psyntax-pp.scm: * module/ice-9/psyntax.scm: Always produce macroexpanded expressions, and hand them to primitive-eval. No more calls to memoize-expression here. * test-suite/tests/optargs.test: Remove some tests, as unfortunately we have no way to invoke the boot expander after boot.
This commit is contained in:
parent
3e5ea35c2f
commit
a310a1d12e
8 changed files with 1485 additions and 1516 deletions
|
@ -455,7 +455,8 @@
|
|||
(lambda (exp)
|
||||
"Evaluate @var{exp} in the current module."
|
||||
(eval
|
||||
(if (memoized? exp)
|
||||
exp
|
||||
((module-transformer (current-module)) exp))
|
||||
(memoize-expression
|
||||
(if (macroexpanded? exp)
|
||||
exp
|
||||
((module-transformer (current-module)) exp)))
|
||||
'()))))
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -307,11 +307,11 @@
|
|||
|
||||
(define top-level-eval-hook
|
||||
(lambda (x mod)
|
||||
(primitive-eval (memoize-expression x))))
|
||||
(primitive-eval x)))
|
||||
|
||||
(define local-eval-hook
|
||||
(lambda (x mod)
|
||||
(primitive-eval (memoize-expression x))))
|
||||
(primitive-eval x)))
|
||||
|
||||
(define-syntax gensym-hook
|
||||
(syntax-rules ()
|
||||
|
@ -2397,10 +2397,7 @@
|
|||
(cadr rest)))
|
||||
(mod (cons 'hygiene (module-name (current-module)))))
|
||||
(with-fluids ((*mode* m))
|
||||
(if (eq? m 'e)
|
||||
(memoize-expression
|
||||
(chi-top x null-env top-wrap m esew mod))
|
||||
(chi-top x null-env top-wrap m esew mod))))))
|
||||
(chi-top x null-env top-wrap m esew mod)))))
|
||||
|
||||
(set! identifier?
|
||||
(lambda (x)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue