mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-14 07:30:32 +02:00
macro expanders return memoized expressions
* libguile/eval.c (scm_c_primitive_eval): * module/ice-9/eval.scm (primitive-eval): Rely on the expander to produce a memoized expression. If the expression is already memoized, just pass it through (the equivalent of the old "noexpand" hack). * libguile/memoize.c (scm_init_memoize): Initialize `memoize-expression' as the initial binding of `macroexpand'. * libguile/modules.c (scm_module_transformer): Before modules are booted, look for `macroexpand', not `%pre-modules-transformer'. * module/ice-9/boot-9.scm: No more %pre-modules-transformer. Loading psyntax extends `macroexpand'. (make-module): `macroexpand' is the default transformer. * module/ice-9/psyntax.scm: No more `noexpand'. (top-level-eval-hook, local-eval-hook): Instead of annotating with noexpand, memoize the expression before handing it to primitive-eval. (macroexpand): No more noexpand hack -- in its place we have another hack, to memoize the result when running in eval mode. * module/ice-9/psyntax-pp.scm: Regenerated.
This commit is contained in:
parent
b79ba0b01e
commit
4f692ace90
7 changed files with 8224 additions and 8116 deletions
|
@ -564,7 +564,7 @@ scm_current_module_lookup_closure ()
|
|||
return SCM_BOOL_F;
|
||||
}
|
||||
|
||||
SCM_SYMBOL (sym_sys_pre_modules_transformer, "%pre-modules-transformer");
|
||||
SCM_SYMBOL (sym_macroexpand, "macroexpand");
|
||||
|
||||
SCM_DEFINE (scm_module_transformer, "module-transformer", 1, 0, 0,
|
||||
(SCM module),
|
||||
|
@ -572,13 +572,13 @@ SCM_DEFINE (scm_module_transformer, "module-transformer", 1, 0, 0,
|
|||
#define FUNC_NAME s_scm_module_transformer
|
||||
{
|
||||
if (SCM_UNLIKELY (scm_is_false (module)))
|
||||
{ SCM v = scm_hashq_ref (scm_pre_modules_obarray,
|
||||
sym_sys_pre_modules_transformer,
|
||||
{
|
||||
SCM v = scm_hashq_ref (scm_pre_modules_obarray,
|
||||
sym_macroexpand,
|
||||
SCM_BOOL_F);
|
||||
if (scm_is_false (v))
|
||||
return SCM_BOOL_F;
|
||||
else
|
||||
return SCM_VARIABLE_REF (v);
|
||||
SCM_MISC_ERROR ("no module, and `macroexpand' unbound", SCM_EOL);
|
||||
return SCM_VARIABLE_REF (v);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue