From e29db33c14bc2cb21b7c044fcd0d61a68ad150bb Mon Sep 17 00:00:00 2001 From: Andy Wingo Date: Fri, 6 Nov 2009 17:17:33 +0100 Subject: [PATCH] %invalidate-method-cache invalidates the dispatch procedure too * libguile/goops.c (make_dispatch_procedure, clear_method_cache): Properly reset the dispatch procedure. --- libguile/goops.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/libguile/goops.c b/libguile/goops.c index c343e3db2..e0afa5543 100644 --- a/libguile/goops.c +++ b/libguile/goops.c @@ -1899,12 +1899,23 @@ scm_make_method_cache (SCM gf) gf); } +SCM_SYMBOL (sym_delayed_compile, "delayed-compile"); +static SCM +make_dispatch_procedure (SCM gf) +{ + static SCM var = SCM_BOOL_F; + if (var == SCM_BOOL_F) + var = scm_module_variable (scm_c_resolve_module ("oop goops dispatch"), + sym_delayed_compile); + return scm_call_1 (SCM_VARIABLE_REF (var), gf); +} + static void clear_method_cache (SCM gf) { SCM cache = scm_make_method_cache (gf); SCM_SET_GENERIC_METHOD_CACHE (gf, cache); - SCM_SET_GENERIC_DISPATCH_PROCEDURE (gf, SCM_BOOL_F); + SCM_SET_GENERIC_DISPATCH_PROCEDURE (gf, make_dispatch_procedure (gf)); SCM_CLEAR_GENERIC_EFFECTIVE_METHODS (gf); }