aboutsummaryrefslogtreecommitdiffstats
path: root/vm_insnhelper.c
diff options
context:
space:
mode:
Diffstat (limited to 'vm_insnhelper.c')
-rw-r--r--vm_insnhelper.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/vm_insnhelper.c b/vm_insnhelper.c
index 4d1d4ea0f9..8ca446d3a4 100644
--- a/vm_insnhelper.c
+++ b/vm_insnhelper.c
@@ -1573,8 +1573,14 @@ vm_search_cc(VALUE klass, const struct rb_callinfo *ci)
if (ccs == NULL) {
VM_ASSERT(cc_tbl != NULL);
- ccs = vm_ccs_create(klass, cme);
- rb_id_table_insert(cc_tbl, mid, (VALUE)ccs);
+ if (LIKELY(rb_id_table_lookup(cc_tbl, mid, (VALUE*)&ccs))) {
+ // rb_callable_method_entry() prepares ccs.
+ }
+ else {
+ // TODO: required?
+ ccs = vm_ccs_create(klass, cme);
+ rb_id_table_insert(cc_tbl, mid, (VALUE)ccs);
+ }
}
vm_ccs_push(klass, ccs, ci, cc);