mirror of
https://github.com/ruby/ruby.git
synced 2025-08-15 13:39:04 +02:00
* class.c (clone_method): should copy cbase in cref as well.
[ruby-dev:35116] * iseq.c (iseq_mark): mark original iseq object. * iseq.c (iseq_free): do not free internal data if they have original iseq to belong. * iseq.c (rb_iseq_clone): a new function to clone iseq value. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@18490 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
5898c07466
commit
e956f28724
4 changed files with 60 additions and 15 deletions
10
class.c
10
class.c
|
@ -13,6 +13,7 @@
|
|||
#include "ruby/signal.h"
|
||||
#include "ruby/node.h"
|
||||
#include "ruby/st.h"
|
||||
#include "vm_core.h"
|
||||
#include <ctype.h>
|
||||
|
||||
extern st_table *rb_class_tbl;
|
||||
|
@ -78,10 +79,17 @@ clone_method(ID mid, NODE *body, struct clone_method_data *data)
|
|||
st_insert(data->tbl, mid, 0);
|
||||
}
|
||||
else {
|
||||
NODE *fbody = body->nd_body->nd_body;
|
||||
|
||||
if (nd_type(fbody) == RUBY_VM_METHOD_NODE) {
|
||||
fbody = NEW_NODE(RUBY_VM_METHOD_NODE, 0,
|
||||
rb_iseq_clone((VALUE)fbody->nd_body, data->klass),
|
||||
0);
|
||||
}
|
||||
st_insert(data->tbl, mid,
|
||||
(st_data_t)
|
||||
NEW_FBODY(
|
||||
NEW_METHOD(body->nd_body->nd_body,
|
||||
NEW_METHOD(fbody,
|
||||
data->klass, /* TODO */
|
||||
body->nd_body->nd_noex),
|
||||
0));
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue