1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-17 17:20:29 +02:00

fix unmemoization bug

* libguile/memoize.c (unmemoize): Fix unmemoization of memoized
  toplevel-ref and module-ref forms.
This commit is contained in:
Andy Wingo 2010-02-18 16:53:30 +01:00
parent f3a8d1b745
commit c08899ff24

View file

@ -1106,15 +1106,17 @@ unmemoize (const SCM expr)
case SCM_M_TOPLEVEL_SET:
return scm_list_3 (scm_sym_set_x, CAR (args), unmemoize (CDR (args)));
case SCM_M_MODULE_REF:
return scm_list_3 (scm_is_true (CDDR (args)) ? scm_sym_at : scm_sym_atat,
scm_i_finite_list_copy (CAR (args)),
CADR (args));
return SCM_VARIABLEP (args) ? args
: scm_list_3 (scm_is_true (CDDR (args)) ? scm_sym_at : scm_sym_atat,
scm_i_finite_list_copy (CAR (args)),
CADR (args));
case SCM_M_MODULE_SET:
return scm_list_3 (scm_sym_set_x,
scm_list_3 (scm_is_true (CDDDR (args))
? scm_sym_at : scm_sym_atat,
scm_i_finite_list_copy (CADR (args)),
CADDR (args)),
SCM_VARIABLEP (CDR (args)) ? CDR (args)
: scm_list_3 (scm_is_true (CDDDR (args))
? scm_sym_at : scm_sym_atat,
scm_i_finite_list_copy (CADR (args)),
CADDR (args)),
unmemoize (CAR (args)));
default:
abort ();