2003-06-18 19:45:12 +04:00
|
|
|
# for ruby-1.8.0
|
|
|
|
|
|
|
|
module DRb
|
|
|
|
class DRbServer
|
|
|
|
module InvokeMethod18Mixin
|
|
|
|
def block_yield(x)
|
2006-06-23 18:39:01 +04:00
|
|
|
if x.size == 1 && x[0].class == Array
|
2003-10-30 17:43:03 +03:00
|
|
|
x[0] = DRbArray.new(x[0])
|
|
|
|
end
|
2010-07-11 20:59:10 +04:00
|
|
|
@block.call(*x)
|
2003-06-18 19:45:12 +04:00
|
|
|
end
|
2009-03-06 06:56:38 +03:00
|
|
|
|
2003-06-18 19:45:12 +04:00
|
|
|
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
|
2003-06-29 02:03:41 +04:00
|
|
|
case jump_error.reason
|
2003-06-18 19:45:12 +04:00
|
|
|
when :break
|
2003-06-29 02:03:41 +04:00
|
|
|
break(jump_error.exit_value)
|
2003-06-18 19:45:12 +04:00
|
|
|
else
|
|
|
|
raise jump_error
|
|
|
|
end
|
|
|
|
end
|
|
|
|
block_value
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|