summaryrefslogtreecommitdiff
path: root/vm_method.c
diff options
context:
space:
mode:
Diffstat (limited to 'vm_method.c')
-rw-r--r--vm_method.c15
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