aboutsummaryrefslogtreecommitdiffstats
path: root/iseq.c
diff options
context:
space:
mode:
Diffstat (limited to 'iseq.c')
-rw-r--r--iseq.c23
1 files changed, 16 insertions, 7 deletions
diff --git a/iseq.c b/iseq.c
index 930a88d28f..abb0f37b98 100644
--- a/iseq.c
+++ b/iseq.c
@@ -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;
}
/*