diff options
author | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-08-10 02:58:36 +0000 |
---|---|---|
committer | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-08-10 02:58:36 +0000 |
commit | 43384ae9788be243746849ee54d9f5c8f7e0412b (patch) | |
tree | e696a34c00d2d333a01e85e91e964e2f8a40e707 /cont.c | |
parent | 57199f2125ce8e2043420af6ccc3354e1d411c0f (diff) |
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.c | 22 |
1 files changed, 22 insertions, 0 deletions
@@ -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 |