1# for ruby-1.8.0 2 3module DRb 4 class DRbServer 5 module InvokeMethod18Mixin # :nodoc: all 6 def block_yield(x) 7 if x.size == 1 && x[0].class == Array 8 x[0] = DRbArray.new(x[0]) 9 end 10 @block.call(*x) 11 end 12 13 def perform_with_block 14 @obj.__send__(@msg_id, *@argv) do |*x| 15 jump_error = nil 16 begin 17 block_value = block_yield(x) 18 rescue LocalJumpError 19 jump_error = $! 20 end 21 if jump_error 22 case jump_error.reason 23 when :break 24 break(jump_error.exit_value) 25 else 26 raise jump_error 27 end 28 end 29 block_value 30 end 31 end 32 end 33 end 34end 35