mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-20 19:50:24 +02:00
%invalidate-method-cache invalidates the dispatch procedure too
* libguile/goops.c (make_dispatch_procedure, clear_method_cache): Properly reset the dispatch procedure.
This commit is contained in:
parent
cfe55d3e81
commit
e29db33c14
1 changed files with 12 additions and 1 deletions
|
@ -1899,12 +1899,23 @@ scm_make_method_cache (SCM gf)
|
||||||
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
|
static void
|
||||||
clear_method_cache (SCM gf)
|
clear_method_cache (SCM gf)
|
||||||
{
|
{
|
||||||
SCM cache = scm_make_method_cache (gf);
|
SCM cache = scm_make_method_cache (gf);
|
||||||
SCM_SET_GENERIC_METHOD_CACHE (gf, cache);
|
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);
|
SCM_CLEAR_GENERIC_EFFECTIVE_METHODS (gf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue