summaryrefslogtreecommitdiff
path: root/libguile/memoize.c
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2010-02-18 16:53:30 +0100
committerAndy Wingo <wingo@pobox.com>2010-02-18 22:15:43 +0100
commitc08899ff24932b96573093d490160591e446b8a0 (patch)
treec7a16d252d179494e483a81f9ffe156cc1e2d271 /libguile/memoize.c
parentf3a8d1b745285a9667041c09f4ac6d5ff738570f (diff)
downloadguile-c08899ff24932b96573093d490160591e446b8a0.tar.gz
fix unmemoization bug
* libguile/memoize.c (unmemoize): Fix unmemoization of memoized toplevel-ref and module-ref forms.
Diffstat (limited to 'libguile/memoize.c')
-rw-r--r--libguile/memoize.c16
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 ();