Skip to content

Commit e6ca890

Browse files
luke-gruberhsbt
authored andcommitted
Allow use of DelegateClass in ractor
Use `eval` instead of `define_method` when defining delegate methods for `DelegateClass`.
1 parent a21fe2a commit e6ca890

File tree

1 file changed

+8
-10
lines changed

1 file changed

+8
-10
lines changed

lib/delegate.rb

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -344,17 +344,15 @@ def __setobj__(obj)
344344
end
345345
end
346346

347-
def Delegator.delegating_block(mid) # :nodoc:
348-
prok = lambda do |*args, &block|
347+
def Delegator.delegating_code(mid) # :nodoc:
348+
line = __LINE__+2
349+
src = <<~RUBY
350+
ruby2_keywords def #{mid}(*args, &block)
349351
target = self.__getobj__
350-
target.__send__(mid, *args, &block)
351-
end
352-
prok.ruby2_keywords
353-
if defined?(Ractor.shareable_proc)
354-
Ractor.shareable_proc(&prok)
355-
else
356-
prok
352+
target.__send__(:'#{mid}', *args, &block)
357353
end
354+
RUBY
355+
[src, __FILE__, line]
358356
end
359357

360358
#
@@ -433,7 +431,7 @@ def __setobj__(obj) # :nodoc:
433431
class_eval(source.join(";"), __FILE__, __LINE__)
434432

435433
special.each do |method|
436-
define_method(method, Delegator.delegating_block(method))
434+
module_eval(*Delegator.delegating_code(method))
437435
end
438436

439437
protected(*protected_instance_methods)

0 commit comments

Comments
 (0)