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

ruby-changes:26182

From: shugo <ko1@a...>
Date: Thu, 6 Dec 2012 23:31:56 +0900 (JST)
Subject: [ruby-changes:26182] shugo:r38239 (trunk): * eval.c (ruby_Init_refinement): a new function to enable

shugo	2012-12-06 23:31:43 +0900 (Thu, 06 Dec 2012)

  New Revision: 38239

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=38239

  Log:
    * eval.c (ruby_Init_refinement): a new function to enable
      Refinements with a warning "Refinements are experimental...".
    
    * ext/refinement/refinement.c, ext/refinement/extconf.rb: a new
      extension library to enable Refinements.

  Added directories:
    trunk/ext/refinement/
  Added files:
    trunk/ext/refinement/extconf.rb
    trunk/ext/refinement/refinement.c
  Modified files:
    trunk/ChangeLog
    trunk/eval.c
    trunk/test/ruby/test_refinement.rb

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 38238)
+++ ChangeLog	(revision 38239)
@@ -1,3 +1,11 @@
+Thu Dec  6 23:27:50 2012  Shugo Maeda  <shugo@r...>
+
+	* eval.c (ruby_Init_refinement): a new function to enable
+	  Refinements with a warning "Refinements are experimental...".
+
+	* ext/refinement/refinement.c, ext/refinement/extconf.rb: a new
+	  extension library to enable Refinements.
+
 Thu Dec  6 18:23:05 2012  Shugo Maeda  <shugo@r...>
 
 	* revised r37993 to avoid SEGV/ILL in tests.  In r37993, a method
Index: eval.c
===================================================================
--- eval.c	(revision 38238)
+++ eval.c	(revision 38239)
@@ -1616,9 +1616,6 @@
     rb_define_private_method(rb_cModule, "include", rb_mod_include, -1);
     rb_define_private_method(rb_cModule, "prepend_features", rb_mod_prepend_features, 1);
     rb_define_private_method(rb_cModule, "prepend", rb_mod_prepend, -1);
-    rb_define_private_method(rb_cModule, "using", rb_mod_using, 1);
-    rb_define_private_method(rb_cModule, "refine", rb_mod_refine, 1);
-    rb_define_method(rb_cModule, "refinements", rb_mod_refinements, 0);
 
     rb_undef_method(rb_cClass, "module_function");
 
@@ -1629,7 +1626,6 @@
     rb_define_singleton_method(rb_cModule, "constants", rb_mod_s_constants, -1);
 
     rb_define_singleton_method(rb_vm_top_self(), "include", top_include, -1);
-    rb_define_singleton_method(rb_vm_top_self(), "using", top_using, 1);
 
     rb_define_method(rb_mKernel, "extend", rb_obj_extend, -1);
 
@@ -1641,3 +1637,20 @@
     OBJ_TAINT(exception_error);
     OBJ_FREEZE(exception_error);
 }
+
+#if defined __GNUC__ && __GNUC__ >= 4
+#pragma GCC visibility push(default)
+#endif
+
+void
+ruby_Init_refinement(void)
+{
+    rb_define_private_method(rb_cModule, "using", rb_mod_using, 1);
+    rb_define_private_method(rb_cModule, "refine", rb_mod_refine, 1);
+    rb_define_method(rb_cModule, "refinements", rb_mod_refinements, 0);
+    rb_define_singleton_method(rb_vm_top_self(), "using", top_using, 1);
+}
+
+#if defined __GNUC__ && __GNUC__ >= 4
+#pragma GCC visibility pop
+#endif
Index: ext/refinement/extconf.rb
===================================================================
--- ext/refinement/extconf.rb	(revision 0)
+++ ext/refinement/extconf.rb	(revision 38239)
@@ -0,0 +1,3 @@
+require 'mkmf'
+create_makefile('refinement')
+
Index: ext/refinement/refinement.c
===================================================================
--- ext/refinement/refinement.c	(revision 0)
+++ ext/refinement/refinement.c	(revision 38239)
@@ -0,0 +1,8 @@
+void ruby_Init_refinement(void);
+
+void
+Init_refinement(void)
+{
+    rb_warn("Refinements are experimental, and the behavior may change in future versions of Ruby!");
+    ruby_Init_refinement();
+}
Index: test/ruby/test_refinement.rb
===================================================================
--- test/ruby/test_refinement.rb	(revision 38238)
+++ test/ruby/test_refinement.rb	(revision 38239)
@@ -1,6 +1,8 @@
 require 'test/unit'
 require_relative 'envutil'
 
+require "refinement"
+
 class TestRefinement < Test::Unit::TestCase
   class Foo
     def x
@@ -480,7 +482,9 @@
   end
 
   def test_main_using
-    assert_in_out_err([], <<-INPUT, %w(:C :M), [])
+    assert_in_out_err([], <<-INPUT, %w(:C :M), /Refinements are experimental/)
+      require "refinement"
+
       class C
         def foo
           :C
@@ -775,7 +779,9 @@
     assert_equal("original", UsingMethodCache::M::ORIGINAL_FOO)
     assert_equal("M2", UsingMethodCache::M::M2_FOO)
 
-    assert_in_out_err([], <<-INPUT, %w(:M1 :M2), [])
+    assert_in_out_err([], <<-INPUT, %w(:M1 :M2), /Refinements are experimental/)
+      require "refinement"
+
       class C
         def foo
           "original"

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

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