40 lines
827 B
Ruby
40 lines
827 B
Ruby
|
|
||
|
# for ruby-1.8.0
|
||
|
|
||
|
module DRb
|
||
|
class DRbServer
|
||
|
module InvokeMethod18Mixin
|
||
|
def block_yield(x)
|
||
|
block_value = @block.call(*x)
|
||
|
end
|
||
|
|
||
|
def rescue_break(err)
|
||
|
return :break, err.exit_value
|
||
|
end
|
||
|
|
||
|
def perform_with_block
|
||
|
@obj.__send__(@msg_id, *@argv) do |*x|
|
||
|
jump_error = nil
|
||
|
begin
|
||
|
block_value = block_yield(x)
|
||
|
rescue LocalJumpError
|
||
|
jump_error = $!
|
||
|
end
|
||
|
if jump_error
|
||
|
reason, jump_value = rescue_local_jump(jump_error)
|
||
|
case reason
|
||
|
when :retry
|
||
|
retry
|
||
|
when :break
|
||
|
break(jump_value)
|
||
|
else
|
||
|
raise jump_error
|
||
|
end
|
||
|
end
|
||
|
block_value
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|