Project

General

Profile

Actions

Feature #20912

closed

Add warning when redefining __id__ as well as object_id

Added by jhawthorn (John Hawthorn) 22 days ago. Updated 19 days ago.

Status:
Closed
Assignee:
-
Target version:
-
[ruby-core:120016]

Description

Currently if you create a class and redefine or remove either object_id or __send__ it will issue a warning. There's no such warning on __id__.

❯ ruby -we 'class << Object.new; def object_id = 1; end'
-e:1: warning: redefining `object_id' may cause serious problems
❯ ruby -we 'class << Object.new; def __id__ = 1; end'
❯ 

It makes sense that there's no warning on send, because we expect __send__ to be the method reliably available. __send__ is on BasicObject, send is only on Kernel. This seems a little inconsistent that object_id warns while __id__ does not warn. __id__ is the equivalent to __send__ as it's also on BasicObject, where object_id is only on Kernel.

This may be a more obvious problem in Ruby 3.4.0 as commit:cffd380390967d17899fde0a81f5151ae6ddd076 makes the warning print in more cases.

I propose we change this warning to be emitted only when __id__ is redefined and not when object_id is redefined:

Proposed behaviour:

❯ ruby -we 'class << Object.new; def object_id = 1; end'
❯ ruby -we 'class << Object.new; def __id__ = 1; end'
-e:1: warning: redefining `__id__' may cause serious problems 
❯ 
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0