diff options
Diffstat (limited to 'iseq.c')
-rw-r--r-- | iseq.c | 23 |
1 files changed, 16 insertions, 7 deletions
@@ -2320,17 +2320,26 @@ iseqw_s_of(VALUE klass, VALUE body) rb_secure(1); if (rb_obj_is_proc(body)) { - iseq = vm_proc_iseq(body); + iseq = vm_proc_iseq(body); - if (!rb_obj_is_iseq((VALUE)iseq)) { - iseq = NULL; - } + if (rb_obj_is_iseq((VALUE)iseq)) { + return iseqw_new(iseq); + } + else { + return Qnil; + } + } + else if (rb_obj_is_method(body)) { + return iseqw_new(rb_method_iseq(body)); + } + else if (RB_TYPE_P(body, T_DATA) && + RTYPEDDATA_P(body) && + RTYPEDDATA_TYPE(body) == &iseqw_data_type) { + return body; } else { - iseq = rb_method_iseq(body); + return Qnil; } - - return iseq ? iseqw_new(iseq) : Qnil; } /* |