diff options
Diffstat (limited to 'mrbgems/mruby-method')
| -rw-r--r-- | mrbgems/mruby-method/src/method.c | 7 | ||||
| -rw-r--r-- | mrbgems/mruby-method/test/method.rb | 9 |
2 files changed, 15 insertions, 1 deletions
diff --git a/mrbgems/mruby-method/src/method.c b/mrbgems/mruby-method/src/method.c index b8a55e618..18fcaa03a 100644 --- a/mrbgems/mruby-method/src/method.c +++ b/mrbgems/mruby-method/src/method.c @@ -300,7 +300,12 @@ method_search_vm(mrb_state *mrb, struct RClass **cp, mrb_sym mid) return NULL; if (MRB_METHOD_PROC_P(m)) return MRB_METHOD_PROC(m); - return mrb_proc_new_cfunc(mrb, MRB_METHOD_FUNC(m)); + + struct RProc *proc = mrb_proc_new_cfunc(mrb, MRB_METHOD_FUNC(m)); + if (MRB_METHOD_NOARG_P(m)) { + proc->flags |= MRB_PROC_NOARG; + } + return proc; } static mrb_value diff --git a/mrbgems/mruby-method/test/method.rb b/mrbgems/mruby-method/test/method.rb index ba4d05e3c..9089c96d6 100644 --- a/mrbgems/mruby-method/test/method.rb +++ b/mrbgems/mruby-method/test/method.rb @@ -98,6 +98,9 @@ assert 'Method#call' do }.new assert_raise(LocalJumpError) { i.method(:bar).call } assert_equal 3, i.method(:bar).call { |i| i } + + assert_raise(ArgumentError) { nil.method(:__id__).call nil, 1 } + assert_raise(ArgumentError) { nil.method(:__id__).call nil, opts: 1 } end assert 'Method#call for regression' do @@ -218,6 +221,9 @@ assert 'Method#to_proc' do assert_equal values, o.method(:baz).to_proc.call(1, 2, 3, 4, 5, 6, **{ u: 7, v: 8, s: 9, t: 10 }, &blk) assert_equal values, o.method(:baz).to_proc.call(*[1, 2, 3, 4, 5, 6], u: 7, v: 8, s: 9, t: 10, &blk) assert_equal values, o.method(:baz).to_proc.call(*[1, 2, 3, 4, 5, 6], **{ u: 7, v: 8, s: 9, t: 10 }, &blk) + + assert_raise(ArgumentError) { nil.method(:__id__).to_proc.call nil, 1 } + assert_raise(ArgumentError) { nil.method(:__id__).to_proc.call nil, opts: 1 } end assert 'to_s' do @@ -472,4 +478,7 @@ assert 'UnboundMethod#bind_call' do assert_equal values, m.bind_call(o, *[1, 2, 3, 4, 5, 6], u: 7, v: 8, s: 9, t: 10, &blk) assert_equal values, m.bind_call(o, *[1, 2, 3, 4, 5, 6], **{ u: 7, v: 8, s: 9, t: 10 }, &blk) assert_raise(ArgumentError) { m.bind_call } + + assert_raise(ArgumentError) { BasicObject.instance_method(:__id__).bind_call nil, 1 } + assert_raise(ArgumentError) { BasicObject.instance_method(:__id__).bind_call nil, opts: 1 } end |
