[前][次][番号順一覧][スレッド一覧]

ruby-changes:1768

From: ko1@a...
Date: 25 Aug 2007 11:03:56 +0900
Subject: [ruby-changes:1768] ko1 - Ruby:r13259 (trunk): * cont.c: separate Continuation and Fiber from core.

ko1	2007-08-25 11:03:44 +0900 (Sat, 25 Aug 2007)

  New Revision: 13259

  Added directories:
    trunk/ext/continuation/
    trunk/ext/fiber/
  Added files:
    trunk/ext/continuation/continuation.c
    trunk/ext/continuation/extconf.rb
    trunk/ext/fiber/extconf.rb
    trunk/ext/fiber/fiber.c
  Modified files:
    trunk/ChangeLog
    trunk/cont.c
    trunk/enumerator.c
    trunk/include/ruby/intern.h
    trunk/include/ruby/ruby.h
    trunk/test/ruby/test_continuation.rb
    trunk/test/ruby/test_enumerator.rb
    trunk/test/ruby/test_fiber.rb

  Log:
    * cont.c: separate Continuation and Fiber from core.
    * ext/continuation/*, ext/fiber/*: ditto.
    * include/ruby/ruby.h: remove rb_cFiber.
    * include/ruby/intern.h: add the rb_fiber_new() declaration.
    * enumerator.c (next_init): fix to use rb_fiber_new().
    * test/ruby/test_enumerator.rb: remove next? tests.
    * test/ruby/test_continuation.rb: add a require 'continuation'.
    * test/ruby/test_fiber.rb: add a require 'fiber'.
    

  Added: trunk/ext/continuation/

  Added: trunk/ext/fiber/

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/include/ruby/ruby.h?r1=13259&r2=13258
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/test/ruby/test_fiber.rb?r1=13259&r2=13258
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ext/continuation/extconf.rb?r1=13259&r2=13258
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ext/continuation/extconf.rb?revision=13259&view=markup
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/cont.c?r1=13259&r2=13258
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=13259&r2=13258
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/test/ruby/test_enumerator.rb?r1=13259&r2=13258
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ext/fiber/extconf.rb?r1=13259&r2=13258
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ext/fiber/extconf.rb?revision=13259&view=markup
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/test/ruby/test_continuation.rb?r1=13259&r2=13258
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/include/ruby/intern.h?r1=13259&r2=13258
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ext/continuation/continuation.c?r1=13259&r2=13258
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ext/continuation/continuation.c?revision=13259&view=markup
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/enumerator.c?r1=13259&r2=13258
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ext/fiber/fiber.c?r1=13259&r2=13258
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ext/fiber/fiber.c?revision=13259&view=markup

Index: include/ruby/intern.h
===================================================================
--- include/ruby/intern.h	(revision 13258)
+++ include/ruby/intern.h	(revision 13259)
@@ -148,6 +148,7 @@
 int rb_cmpint(VALUE, VALUE, VALUE);
 NORETURN(void rb_cmperr(VALUE, VALUE));
 /* cont.c */
+VALUE rb_fiber_new(VALUE (*)(ANYARGS), VALUE);
 VALUE rb_fiber_resume(VALUE fib, int argc, VALUE *args);
 VALUE rb_fiber_yield(int argc, VALUE *args);
 VALUE rb_fiber_current(void);
Index: include/ruby/ruby.h
===================================================================
--- include/ruby/ruby.h	(revision 13258)
+++ include/ruby/ruby.h	(revision 13259)
@@ -761,7 +761,6 @@
 RUBY_EXTERN VALUE rb_cDir;
 RUBY_EXTERN VALUE rb_cData;
 RUBY_EXTERN VALUE rb_cFalseClass;
-RUBY_EXTERN VALUE rb_cFiber;
 RUBY_EXTERN VALUE rb_cFile;
 RUBY_EXTERN VALUE rb_cFixnum;
 RUBY_EXTERN VALUE rb_cFloat;
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 13258)
+++ ChangeLog	(revision 13259)
@@ -1,3 +1,21 @@
+Sat Aug 25 10:59:19 2007  Koichi Sasada  <ko1@a...>
+
+	* cont.c: separate Continuation and Fiber from core.
+
+	* ext/continuation/*, ext/fiber/*: ditto.
+
+	* include/ruby/ruby.h: remove rb_cFiber.
+
+	* include/ruby/intern.h: add the rb_fiber_new() declaration.
+
+	* enumerator.c (next_init): fix to use rb_fiber_new().
+
+	* test/ruby/test_enumerator.rb: remove next? tests.
+
+	* test/ruby/test_continuation.rb: add a require 'continuation'.
+
+	* test/ruby/test_fiber.rb: add a require 'fiber'.
+
 Sat Aug 25 10:20:28 2007  Nobuyoshi Nakada  <nobu@r...>
 
 	* common.mk (prelude.o): depends on vm_core.h now.
Index: enumerator.c
===================================================================
--- enumerator.c	(revision 13258)
+++ enumerator.c	(revision 13259)
@@ -391,7 +391,7 @@
 {
     VALUE curr = rb_fiber_current();
     e->dst = curr;
-    e->fib = rb_block_call(rb_cFiber, rb_intern("new"), 0, 0, next_i, obj);
+    e->fib = rb_fiber_new(next_i, obj);
 }
 
 /*
Index: ext/fiber/extconf.rb
===================================================================
--- ext/fiber/extconf.rb	(revision 0)
+++ ext/fiber/extconf.rb	(revision 13259)
@@ -0,0 +1,3 @@
+require 'mkmf'
+create_makefile('fiber')
+

Property changes on: ext/fiber/extconf.rb
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + LF

Index: ext/fiber/fiber.c
===================================================================
--- ext/fiber/fiber.c	(revision 0)
+++ ext/fiber/fiber.c	(revision 13259)
@@ -0,0 +1,8 @@
+
+void Init_Fiber_body(void);
+
+void
+Init_fiber(void)
+{
+    Init_Fiber_body();
+}

Property changes on: ext/fiber/fiber.c
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + LF

Index: ext/continuation/extconf.rb
===================================================================
--- ext/continuation/extconf.rb	(revision 0)
+++ ext/continuation/extconf.rb	(revision 13259)
@@ -0,0 +1,3 @@
+require 'mkmf'
+create_makefile('continuation')
+

Property changes on: ext/continuation/extconf.rb
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + LF

Index: ext/continuation/continuation.c
===================================================================
--- ext/continuation/continuation.c	(revision 0)
+++ ext/continuation/continuation.c	(revision 13259)
@@ -0,0 +1,8 @@
+
+void Init_Continuation_body(void);
+
+void
+Init_continuation(void)
+{
+    Init_Continuation_body();
+}

Property changes on: ext/continuation/continuation.c
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + LF

Index: cont.c
===================================================================
--- cont.c	(revision 13258)
+++ cont.c	(revision 13259)
@@ -34,10 +34,9 @@
     int alive;
 } rb_context_t;
 
-VALUE rb_cCont;
-VALUE rb_cFiber;
-VALUE rb_cFiberCore;
-VALUE rb_eFiberError;
+static VALUE rb_cContinuation;
+static VALUE rb_cFiber;
+static VALUE rb_eFiberError;
 
 #define GetContPtr(obj, ptr)  \
   Data_Get_Struct(obj, rb_context_t, ptr)
@@ -151,9 +150,6 @@
     contval = Data_Make_Struct(klass, rb_context_t,
 			       cont_mark, cont_free, cont);
 
-    RUBY_GC_INFO("cont alloc: %p (klass: %s)\n", cont,
-		 klass == rb_cFiber ? "Fiber": "Continuation");
-
     cont->self = contval;
     cont->alive = Qtrue;
 
@@ -173,7 +169,7 @@
     volatile VALUE contval;
 
     vm_stack_to_heap(th);
-    cont = cont_new(rb_cCont);
+    cont = cont_new(rb_cContinuation);
     contval = cont->self;
     sth = &cont->saved_thread;
 
@@ -475,6 +471,12 @@
 
 #define FIBER_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)
 {
@@ -590,7 +592,7 @@
     rb_thread_t *th = GET_THREAD();
     if (th->fiber == 0) {
 	/* save root */
-	rb_context_t *cont = cont_new(rb_cFiberCore);
+	rb_context_t *cont = cont_new(rb_cFiber);
 	cont->prev = Qnil;
 	th->root_fiber = th->fiber = cont->self;
     }
@@ -720,30 +722,29 @@
 void
 Init_Cont(void)
 {
-    rb_cCont = rb_define_class("Continuation", rb_cObject);
-    rb_undef_alloc_func(rb_cCont);
-    rb_undef_method(CLASS_OF(rb_cCont), "new");
-    rb_define_method(rb_cCont, "call", rb_cont_call, -1);
-    rb_define_method(rb_cCont, "[]", rb_cont_call, -1);
+    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);
+}
+
+void
+Init_Continuation_body(void)
+{
+    rb_cContinuation = rb_define_class("Continuation", rb_cObject);
+    rb_undef_alloc_func(rb_cContinuation);
+    rb_undef_method(CLASS_OF(rb_cContinuation), "new");
+    rb_define_method(rb_cContinuation, "call", rb_cont_call, -1);
+    rb_define_method(rb_cContinuation, "[]", rb_cont_call, -1);
     rb_define_global_function("callcc", rb_callcc, 0);
+}
 
-    rb_cFiber = rb_define_class("Fiber", rb_cObject);
-    rb_undef_alloc_func(rb_cFiber);
+void
+Init_Fiber_body(void)
+{
     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);
-
+    rb_define_singleton_method(rb_cFiber, "yield", rb_fiber_s_yield, -1);
     rb_define_singleton_method(rb_cFiber, "current", rb_fiber_s_current, 0);
-    rb_define_singleton_method(rb_cFiber, "yield", rb_fiber_s_yield, -1);
-    rb_define_singleton_method(rb_cFiber, "new", rb_fiber_s_new, 0);
-
-    rb_cFiberCore = rb_define_class_under(rb_cFiber, "Core", rb_cObject);
-    rb_undef_alloc_func(rb_cFiberCore);
-    rb_define_method(rb_cFiberCore, "transfer", rb_fiber_m_transfer, -1);
-    rb_define_method(rb_cFiberCore, "alive?", rb_fiber_alive_p, 0);
-
-    rb_define_singleton_method(rb_cFiberCore, "current", rb_fiber_s_current, 0);
-    rb_define_singleton_method(rb_cFiberCore, "new", rb_fiber_s_new, 0);
-    
-    rb_eFiberError = rb_define_class("FiberError", rb_eStandardError);
 }
-
Index: test/ruby/test_enumerator.rb
===================================================================
--- test/ruby/test_enumerator.rb	(revision 13258)
+++ test/ruby/test_enumerator.rb	(revision 13259)
@@ -24,14 +24,13 @@
     assert_raise(StopIteration){e.next}
   end
 
-  def test_next?
+  def test_loop
     e = 3.times
-    assert_equal true, e.next?
-    3.times{|i|
-      assert_equal true, e.next?
-      assert_equal i, e.next
+    i = 0
+    loop{
+      assert_equal(i, e.next)
+      i += 1
     }
-    assert_equal false, e.next?
   end
 
   def test_nested_itaration
Index: test/ruby/test_fiber.rb
===================================================================
--- test/ruby/test_fiber.rb	(revision 13258)
+++ test/ruby/test_fiber.rb	(revision 13259)
@@ -1,4 +1,5 @@
 require 'test/unit'
+require 'fiber'
 
 class TestFiber < Test::Unit::TestCase
   def test_normal
@@ -118,11 +119,11 @@
   def test_transfer
     ary = []
     f2 = nil
-    f1 = Fiber::Core.new{
+    f1 = Fiber.new{
       ary << f2.transfer(:foo)
       :ok
     }
-    f2 = Fiber::Core.new{
+    f2 = Fiber.new{
       ary << f1.transfer(:baz)
       :ng
     }
Index: test/ruby/test_continuation.rb
===================================================================
--- test/ruby/test_continuation.rb	(revision 13258)
+++ test/ruby/test_continuation.rb	(revision 13259)
@@ -1,4 +1,6 @@
 require 'test/unit'
+require 'continuation'
+require 'fiber'
 
 class TestContinuation < Test::Unit::TestCase
   def test_create

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml

[前][次][番号順一覧][スレッド一覧]