builtins/optimized_redefinition_parens.rb
tests/_examples/builtins/optimized_redefinition_parens.rb in the metorex repository.
# A core method the interpreter answers without a dispatch says so when it is
# replaced, and an UnboundMethod cut from it before the change still runs the
# arithmetic underneath.
module Warning
def warn(message, category: nil)
print("[#{category}] #{message.split(': warning: ').last}")
nil
end
end
Warning[:performance] = true
original = Integer.instance_method(:+)
class Integer
def +(other)
:replaced
end
end
puts(1 + 2)
puts(original.bind(1).call(2))
Warning[:performance] = false
class Integer
def -(other)
:quiet
end
end
puts(5 - 1)
srand(0x12345678901234567890)
puts(srand)
Output:
[performance] Redefining 'Integer#+' disables interpreter and JIT optimizations
replaced
3
quiet
85968058271978839505040