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/