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