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


As you found, I think it's just a special case that BasicObject has a constant named "BasicObject".

It's defined here in CRuby:
https://github.com/ruby/ruby/blob/b10c9d201222b144df7d63660d1c731af53c4ae2/class.c#L569
And here in TruffleRuby:
https://github.com/oracle/truffleruby/blob/e2680f10e367eaca2069636109918541b682a7a0/src/main/java/org/truffleruby/core/CoreLibrary.java#L813-L814

I'm not sure why there is this exception, since all other constants basically don't work in a subclass of BasicObject, they need `::Const`.

----------------------------------------
Misc #16910: BasicObject is resolved in BasicObject
https://bugs.ruby-lang.org/issues/16910#change-85776

* Author: fxn (Xavier Noria)
* Status: Open
* Priority: Normal
----------------------------------------
I categorized this as Misc because I do not really know if this is a bug, or perhaps I miss some special rule in the resolution of relative constants.

Basically, I would expect

```ruby
class C < BasicObject
  BasicObject
end
```

or, even simpler,

```ruby
class BasicObject
  BasicObject
end
```


to raise `NameError`.

Reason would be that top-level constants are stored in `Object`, which is not among the ancestors in any of the two examples above.

Is my reasoning flawed or is it a bug? If flawed, which is the correct reasoning?



-- 
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>