From fd0485acf7936e865903d643715433a7b861afbb Mon Sep 17 00:00:00 2001 From: nobu Date: Sat, 7 Aug 2010 04:33:33 +0000 Subject: * vm_eval.c (vm_call0): fix for VM_METHOD_TYPE_NOTIMPLEMENTED. [ruby-dev:41953] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@28895 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 +++++ ext/-test-/bug-3662/bug.c | 16 ++++++++++++++++ ext/-test-/bug-3662/extconf.rb | 1 + test/-ext-/test_bug-3662.rb | 10 ++++++++++ vm_eval.c | 1 + 5 files changed, 33 insertions(+) create mode 100644 ext/-test-/bug-3662/bug.c create mode 100644 ext/-test-/bug-3662/extconf.rb create mode 100644 test/-ext-/test_bug-3662.rb diff --git a/ChangeLog b/ChangeLog index 45b43f9504..c5de296d47 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Sat Aug 7 13:33:25 2010 Nobuyoshi Nakada + + * vm_eval.c (vm_call0): fix for VM_METHOD_TYPE_NOTIMPLEMENTED. + [ruby-dev:41953] + Sat Aug 7 09:47:06 2010 Masaki Suketa * ext/win32ole/win32ole.c: fix checking version of GCC. diff --git a/ext/-test-/bug-3662/bug.c b/ext/-test-/bug-3662/bug.c new file mode 100644 index 0000000000..9375dace10 --- /dev/null +++ b/ext/-test-/bug-3662/bug.c @@ -0,0 +1,16 @@ +#include + +static VALUE +bug_funcall(int argc, VALUE *argv, VALUE self) +{ + if (argc < 1) rb_raise(rb_eArgError, "not enough argument"); + return rb_funcall2(self, rb_to_id(*argv), argc-1, argv+1); +} + +void +Init_bug(void) +{ + VALUE mBug = rb_define_module("Bug"); + rb_define_module_function(mBug, "funcall", bug_funcall, -1); + rb_define_module_function(mBug, "notimplement", rb_f_notimplement, -1); +} diff --git a/ext/-test-/bug-3662/extconf.rb b/ext/-test-/bug-3662/extconf.rb new file mode 100644 index 0000000000..7a1b73023c --- /dev/null +++ b/ext/-test-/bug-3662/extconf.rb @@ -0,0 +1 @@ +create_makefile("-test-/bug-3662/bug") diff --git a/test/-ext-/test_bug-3662.rb b/test/-ext-/test_bug-3662.rb new file mode 100644 index 0000000000..73c0697241 --- /dev/null +++ b/test/-ext-/test_bug-3662.rb @@ -0,0 +1,10 @@ +require '-test-/bug-3662/bug' + +class Test_BUG_3662 < Test::Unit::TestCase + def test_funcall_notimplement + bug3662 = '[ruby-dev:41953]' + assert_raise(NotImplementedError, bug3662) { + Bug.funcall(:notimplement) + } + end +end diff --git a/vm_eval.c b/vm_eval.c index 122837b449..ca3fbba950 100644 --- a/vm_eval.c +++ b/vm_eval.c @@ -66,6 +66,7 @@ vm_call0(rb_thread_t* th, VALUE recv, VALUE id, int argc, const VALUE *argv, val = vm_exec(th); break; } + case VM_METHOD_TYPE_NOTIMPLEMENTED: case VM_METHOD_TYPE_CFUNC: { EXEC_EVENT_HOOK(th, RUBY_EVENT_C_CALL, recv, id, klass); { -- cgit v1.2.3