diff options
author | Andy Wingo <wingo@pobox.com> | 2010-02-18 16:53:30 +0100 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2010-02-18 22:15:43 +0100 |
commit | c08899ff24932b96573093d490160591e446b8a0 (patch) | |
tree | c7a16d252d179494e483a81f9ffe156cc1e2d271 | |
parent | f3a8d1b745285a9667041c09f4ac6d5ff738570f (diff) | |
download | guile-c08899ff24932b96573093d490160591e446b8a0.tar.gz |
fix unmemoization bug
* libguile/memoize.c (unmemoize): Fix unmemoization of memoized
toplevel-ref and module-ref forms.
-rw-r--r-- | libguile/memoize.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/libguile/memoize.c b/libguile/memoize.c index d209a86b8..8fd1595ff 100644 --- a/libguile/memoize.c +++ b/libguile/memoize.c @@ -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 (); |