diff --git a/ChangeLog b/ChangeLog index faf099b172..0e3ba2ef8d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Mon May 18 15:31:31 2015 Nobuyoshi Nakada + + * include/ruby/intern.h (rb_f_notimplement): should not respond to + not-implemented methods. as the address inside a DLL and the + imported address are different on Windows, use an exported + variable to share the same address. + Mon May 18 13:55:01 2015 Shugo Maeda * lib/monitor.rb (mon_try_enter, mon_enter): should reset @mon_count diff --git a/include/ruby/intern.h b/include/ruby/intern.h index 127de00bb3..1d4d90a5ba 100644 --- a/include/ruby/intern.h +++ b/include/ruby/intern.h @@ -401,6 +401,10 @@ VALUE rb_eval_cmd(VALUE, VALUE, int); int rb_obj_respond_to(VALUE, ID, int); int rb_respond_to(VALUE, ID); VALUE rb_f_notimplement(int argc, const VALUE *argv, VALUE obj); +#if !defined(RUBY_EXPORT) && defined(_WIN32) +RUBY_EXTERN VALUE (*const rb_f_notimplement_)(int, const VALUE *, VALUE); +#define rb_f_notimplement (*rb_f_notimplement_) +#endif void rb_interrupt(void); VALUE rb_apply(VALUE, ID, VALUE); void rb_backtrace(void); diff --git a/test/-ext-/test_notimplement.rb b/test/-ext-/test_notimplement.rb index 22bb7f7b88..7394126fb1 100644 --- a/test/-ext-/test_notimplement.rb +++ b/test/-ext-/test_notimplement.rb @@ -7,4 +7,8 @@ class TestNotImplement < Test::Unit::TestCase Bug.funcall(:notimplement) } end + + def test_respond_to + assert_not_respond_to(Bug, :notimplement) + end end diff --git a/win32/win32.c b/win32/win32.c index e17d35b0c2..b084e079fd 100644 --- a/win32/win32.c +++ b/win32/win32.c @@ -7356,6 +7356,8 @@ rb_w32_pow(double x, double y) } #endif +VALUE (*const rb_f_notimplement_)(int, const VALUE *, VALUE) = rb_f_notimplement; + #if RUBY_MSVCRT_VERSION < 120 #include "missing/nextafter.c" #endif