Issue #17660 has been updated by Eregon (Benoit Daloze).


It sounds useful, +1 from me.
I think we should clarify in the name that only redefined basic methods are reported, and not all redefined methods.
How about `redefined_basic_methods`?

Putting it under `RubyVM` increases the issue that `RubyVM` is becoming less and less CRuby-specific.
But I'm pretty much convinced this will happen anyway since ruby-core doesn't seem to want to avoid that (https://bugs.ruby-lang.org/issues/15752#note-28).
So I'm not against it, just making note of this aspect.

I think having this method under a "VM"-named module makes sense at least.
We should consider this method like any other new method, i.e., `RubyVM` is de facto no longer experimental.

Another place where this method might make sense is as a instance method of `Class` (or `Module`).

----------------------------------------
Feature #17660: Expose information about which basic methods have been redefined
https://bugs.ruby-lang.org/issues/17660#change-90630

* Author: tenderlovemaking (Aaron Patterson)
* Status: Open
* Priority: Normal
----------------------------------------
I would like to tell if code is redefining methods that can impact
MRI's optimizations.  This commit exposes which basic methods have been
redefined.  For example:

```ruby
class Integer
  def +(x); x ** self; end
end

p RubyVM.redefined_methods # => {Integer=>[:+]}
```

This will allow us to prevent basic method redefinitions from happening
by checking for them in CI environments.  For example:

```ruby
Minitest.after_run {
  fail "Basic methods have been redefine" if RubyVM.redefined_methods.any?
}
```

---Files--------------------------------
0001-Expose-information-about-which-basic-methods-have-be.patch (3.89 KB)


-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>