From: hanachin@... Date: 2015-03-06T13:00:48+00:00 Subject: [ruby-core:68440] [Ruby trunk - Bug #10929] NilClass#to_proc and & don't mix? Issue #10929 has been updated by Seiei Higa. File block_from_nil.patch added I wrote a patch for this issue. ```diff diff --git bootstraptest/test_block.rb bootstraptest/test_block.rb index cdc5960..4347fdd 100644 --- bootstraptest/test_block.rb +++ bootstraptest/test_block.rb @@ -611,3 +611,17 @@ assert_equal 'ok', %q{ end 'ok' } + +assert_equal 'ok', %q{ + class NilClass + def to_proc + Proc.new {|x| x } + end + end + + def foo(&blk) + blk.call('ok') + end + + foo(&nil) +}, '[ruby-core:68384] [Bug #10929]' diff --git vm_args.c vm_args.c index cf7256b..e1cb8ac 100644 --- vm_args.c +++ vm_args.c @@ -755,7 +755,7 @@ vm_caller_setup_arg_block(const rb_thread_t *th, rb_control_frame_t *reg_cfp, rb proc = *(--reg_cfp->sp); - if (proc != Qnil) { + if (proc != Qnil || rb_respond_to(Qnil, idTo_proc)) { if (!rb_obj_is_proc(proc)) { VALUE b; ``` ---------------------------------------- Bug #10929: NilClass#to_proc and & don't mix? https://bugs.ruby-lang.org/issues/10929#change-51787 * Author: Thomas Sawyer * Status: Open * Priority: Low * Assignee: * ruby -v: ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-linux] * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN ---------------------------------------- This is sort of like a "who would ever care" kind of bug. Nonetheless technically it seems like it is one. So I thought it best that I report it just the same. ~~~ class NilClass def to_proc Proc.new{ |*x| nil } end end def f(&b) b.call(1) end f(&nil) => NoMethodError: undefined method `call' for nil:NilClass ~~~ (Maybe it was fixed already. Filing out this issue reminded me I need to update my version of Ruby.) ---Files-------------------------------- block_from_nil.patch (771 Bytes) -- https://bugs.ruby-lang.org/