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