summaryrefslogtreecommitdiff
path: root/iseq.c
diff options
context:
space:
mode:
Diffstat (limited to 'iseq.c')
-rw-r--r--iseq.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/iseq.c b/iseq.c
index 711712a4db..643e399c06 100644
--- a/iseq.c
+++ b/iseq.c
@@ -107,6 +107,9 @@ iseq_mark(void *ptr)
for (i=0; i<iseq->ic_size; i++) {
RUBY_MARK_UNLESS_NULL(iseq->ic_entries[i].ic_class);
RUBY_MARK_UNLESS_NULL(iseq->ic_entries[i].ic_value);
+ if (iseq->ic_entries[i].ic_method) {
+ rb_gc_mark_method_entry(iseq->ic_entries[i].ic_method);
+ }
}
if (iseq->compile_data != 0) {
@@ -1002,17 +1005,14 @@ rb_iseq_disasm(VALUE self)
static VALUE
iseq_s_disasm(VALUE klass, VALUE body)
{
- extern NODE *rb_method_body(VALUE body);
- NODE *node;
VALUE ret = Qnil;
+ rb_iseq_t *iseq;
+ extern rb_iseq_t *rb_method_get_iseq(VALUE body);
rb_secure(1);
- if ((node = rb_method_body(body)) != 0) {
- if (nd_type(node) == RUBY_VM_METHOD_NODE) {
- VALUE iseqval = (VALUE)node->nd_body;
- ret = rb_iseq_disasm(iseqval);
- }
+ if ((iseq = rb_method_get_iseq(body)) != 0) {
+ ret = rb_iseq_disasm(iseq->self);
}
return ret;