aboutsummaryrefslogtreecommitdiffstats
path: root/cont.c
diff options
context:
space:
mode:
authorko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-08-10 02:58:36 +0000
committerko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-08-10 02:58:36 +0000
commitd5b6cdd64784e6ed9b112317e4e0d8d2d8376e01 (patch)
treee696a34c00d2d333a01e85e91e964e2f8a40e707 /cont.c
parenta3e5e22f9e2155abb30261bffe7c0a7e6105a3e3 (diff)
downloadruby-d5b6cdd64784e6ed9b112317e4e0d8d2d8376e01.tar.gz
Fiber#to_s (#inspect) return richer information.
* cont.c (fiber_to_s): return with block and status information. * proc.c (proc_to_s_): removed and introduce rb_block_to_s() function to return block information string. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59558 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'cont.c')
-rw-r--r--cont.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/cont.c b/cont.c
index d3c24355a0..2991a35fec 100644
--- a/cont.c
+++ b/cont.c
@@ -1717,6 +1717,26 @@ rb_fiber_s_current(VALUE klass)
return rb_fiber_current();
}
+/*
+ * call-seq:
+ * fiber.to_s -> string
+ *
+ * Returns fiber information string.
+ *
+ */
+
+static VALUE
+fiber_to_s(VALUE fibval)
+{
+ const rb_fiber_t *fib;
+ const rb_proc_t *proc;
+ char status_info[0x10];
+
+ GetFiberPtr(fibval, fib);
+ GetProcPtr(fib->first_proc, proc);
+ snprintf(status_info, 0x10, " (%s)", fiber_status_name(fib->status));
+ return rb_block_to_s(fibval, &proc->block, status_info);
+}
/*
@@ -1754,6 +1774,8 @@ Init_Cont(void)
rb_define_singleton_method(rb_cFiber, "yield", rb_fiber_s_yield, -1);
rb_define_method(rb_cFiber, "initialize", rb_fiber_init, 0);
rb_define_method(rb_cFiber, "resume", rb_fiber_m_resume, -1);
+ rb_define_method(rb_cFiber, "to_s", fiber_to_s, 0);
+ rb_define_alias(rb_cFiber, "inspect", "to_s");
}
RUBY_SYMBOL_EXPORT_BEGIN