From cee02d754d76563635c1db90d2ab6c01f8492470 Mon Sep 17 00:00:00 2001 From: Koichi Sasada Date: Sat, 19 Dec 2020 04:30:25 +0900 Subject: fix refinements/prepend bug replaced method entry should be invalidated. [Bug #17386] --- class.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'class.c') diff --git a/class.c b/class.c index 45c9c6a87f..a76609112f 100644 --- a/class.c +++ b/class.c @@ -1110,7 +1110,9 @@ move_refined_method(ID key, VALUE value, void *data) struct rb_id_table *tbl = RCLASS_M_TBL(klass); if (me->def->type == VM_METHOD_TYPE_REFINED) { - if (me->def->body.refined.orig_me) { + rb_clear_method_cache(klass, me->called_id); + + if (me->def->body.refined.orig_me) { const rb_method_entry_t *orig_me = me->def->body.refined.orig_me, *new_me; RB_OBJ_WRITE(me, &me->def->body.refined.orig_me, NULL); new_me = rb_method_entry_clone(me); -- cgit v1.2.3