ruby-changes:1787
From: ko1@a...
Date: 26 Aug 2007 12:31:33 +0900
Subject: [ruby-changes:1787] ko1 - Ruby:r13278 (trunk): * cont.c: fix to remove Fiber.new until fiber.so is not loaded.
ko1 2007-08-26 12:31:20 +0900 (Sun, 26 Aug 2007)
New Revision: 13278
Modified files:
trunk/ChangeLog
trunk/cont.c
trunk/test/ruby/test_continuation.rb
Log:
* cont.c: fix to remove Fiber.new until fiber.so is not loaded.
* test/ruby/test_continuation.rb: fix to use resume.
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/cont.c?r1=13278&r2=13277
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=13278&r2=13277
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/test/ruby/test_continuation.rb?r1=13278&r2=13277
Index: ChangeLog
===================================================================
--- ChangeLog (revision 13277)
+++ ChangeLog (revision 13278)
@@ -1,3 +1,9 @@
+Sun Aug 26 12:27:14 2007 Koichi Sasada <ko1@a...>
+
+ * cont.c: fix to remove Fiber.new until fiber.so is not loaded.
+
+ * test/ruby/test_continuation.rb: fix to use resume.
+
Sun Aug 26 06:51:46 2007 Masaki Suketa <masaki.suketa@n...>
* ext/win32ole/win32ole.c (ole_wc2mb, reg_enum_key): allocate
Index: cont.c
===================================================================
--- cont.c (revision 13277)
+++ cont.c (revision 13278)
@@ -471,16 +471,10 @@
#define FIBER_VM_STACK_SIZE (4 * 1024)
-VALUE
-rb_fiber_new(VALUE (*func)(ANYARGS), VALUE obj)
-{
- return rb_block_call(rb_cFiber, rb_intern("new"), 0, 0, func, obj);
-}
-
static VALUE
-rb_fiber_s_new(VALUE self)
+fiber_alloc(VALUE klass, VALUE proc)
{
- rb_context_t *cont = cont_new(self);
+ rb_context_t *cont = cont_new(klass);
VALUE contval = cont->self;
rb_thread_t *th = &cont->saved_thread;
@@ -507,14 +501,26 @@
th->cfp->block_iseq = 0;
th->tag = 0;
- th->first_proc = rb_block_proc();
+ th->first_proc = proc;
MEMCPY(&cont->jmpbuf, &th->root_jmpbuf, rb_jmpbuf_t, 1);
return contval;
}
+VALUE
+rb_fiber_new(VALUE (*func)(ANYARGS), VALUE obj)
+{
+ return fiber_alloc(rb_cFiber, rb_proc_new(func, obj));
+}
+
static VALUE
+rb_fiber_s_new(VALUE self)
+{
+ return fiber_alloc(self, rb_block_proc());
+}
+
+static VALUE
return_fiber(void)
{
rb_context_t *cont;
@@ -725,7 +731,6 @@
{
rb_cFiber = rb_define_class("Fiber", rb_cObject);
rb_undef_alloc_func(rb_cFiber);
- rb_define_singleton_method(rb_cFiber, "new", rb_fiber_s_new, 0);
rb_eFiberError = rb_define_class("FiberError", rb_eStandardError);
}
@@ -743,6 +748,7 @@
void
Init_Fiber_body(void)
{
+ rb_define_singleton_method(rb_cFiber, "new", rb_fiber_s_new, 0);
rb_define_method(rb_cFiber, "resume", rb_fiber_m_resume, -1);
rb_define_method(rb_cFiber, "transfer", rb_fiber_m_transfer, -1);
rb_define_method(rb_cFiber, "alive?", rb_fiber_alive_p, 0);
Index: test/ruby/test_continuation.rb
===================================================================
--- test/ruby/test_continuation.rb (revision 13277)
+++ test/ruby/test_continuation.rb (revision 13278)
@@ -46,7 +46,7 @@
c = nil
Fiber.new do
callcc {|c2| c = c2 }
- end.yield
+ end.resume
c.call
}
end
--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml