aboutsummaryrefslogtreecommitdiffstats
path: root/vm_method.c
diff options
context:
space:
mode:
authorshugo <shugo@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-09-23 11:46:33 +0000
committershugo <shugo@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-09-23 11:46:33 +0000
commitb166d4bc7c9710e1b6184659d2f51710228998f6 (patch)
tree97d7228c670ed87e3c39b77f7d96b97503bd170d /vm_method.c
parentf32fba70c5984f990503bdc5b3aac245117de4d6 (diff)
downloadruby-b166d4bc7c9710e1b6184659d2f51710228998f6.tar.gz
* eval.c (rb_mod_refine): refine modules as well.
[ruby-core:76199] [Feature #12534] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56213 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'vm_method.c')
-rw-r--r--vm_method.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/vm_method.c b/vm_method.c
index b5a6f538d0..c7417de455 100644
--- a/vm_method.c
+++ b/vm_method.c
@@ -439,13 +439,17 @@ make_method_entry_refined(VALUE owner, rb_method_entry_t *me)
}
else {
struct {
- const struct rb_method_entry_struct *orig_me;
+ struct rb_method_entry_struct *orig_me;
VALUE owner;
} refined;
rb_vm_check_redefinition_opt_method(me, me->owner);
- refined.orig_me = rb_method_entry_clone(me);
+ refined.orig_me =
+ rb_method_entry_alloc(me->called_id, me->owner,
+ me->defined_class || owner,
+ method_definition_addref(me->def));
+ METHOD_ENTRY_FLAGS_COPY(refined.orig_me, me);
refined.owner = owner;
method_definition_set(me, method_definition_create(VM_METHOD_TYPE_REFINED, me->called_id), (void *)&refined);