diff options
Diffstat (limited to 'vm_method.c')
-rw-r--r-- | vm_method.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/vm_method.c b/vm_method.c index 842c19c12b..55fb2b5337 100644 --- a/vm_method.c +++ b/vm_method.c @@ -3,6 +3,7 @@ */ #include "id_table.h" +#include "ujit_compile.h" #define METHOD_DEBUG 0 @@ -114,6 +115,19 @@ rb_vm_mtbl_dump(const char *msg, VALUE klass, ID target_mid) vm_mtbl_dump(klass, target_mid); } +void +rb_vm_cc_invalidate(const struct rb_callcache *cc) +{ + VM_ASSERT(IMEMO_TYPE_P(cc, imemo_callcache)); + VM_ASSERT(cc != vm_cc_empty()); + VM_ASSERT(cc->klass != 0); // should be enable + + *(VALUE *)&cc->klass = 0; + rb_ujit_method_lookup_change((VALUE)cc); + RB_DEBUG_COUNTER_INC(cc_ent_invalidate); +} + + static inline void vm_cme_invalidate(rb_callable_method_entry_t *cme) { @@ -121,6 +135,7 @@ vm_cme_invalidate(rb_callable_method_entry_t *cme) VM_ASSERT(callable_method_entry_p(cme)); METHOD_ENTRY_INVALIDATED_SET(cme); RB_DEBUG_COUNTER_INC(cc_cme_invalidate); + rb_ujit_method_lookup_change((VALUE)cme); } void |