Closed deepj closed 2 years ago
Thanks for the issue.
Note only happens in IRB.
Reproduce a similar issue on CRuby as well:
Ruby 3.1.2
irb
irb(main):001:1* def !
irb(main):002:0> end
(Object doesn't support #inspect)
=>
.../3.1.2/lib/ruby/3.1.0/irb/init.rb:350:in `rc_file': NoMethodError
...
Ruby 3.0.3
irb
irb(main):001:1* def !
irb(main):002:0> end
(Object doesn't support #inspect)
=>
.../3.0.3/lib/ruby/3.0.0/irb/init.rb:329:in `rc_file': private method `!' called for #<Proc:0x00007fb39a0dbc90 .../3.0.3/lib/ruby/3.0.0/irb/init.rb:360> (NoMethodError)
...
I could repro with a file like:
p def !
end
Without the p
it works fine on TruffleRuby.
With it it fails but this is expected, this code redefines the !
globally and incorrectly for all Object, and also as a private method hence the error.
So the problem also happens on CRuby with more code:
def !
end
p !1
gives
$ ruby -v excl.rb
ruby 3.0.3p157 (2021-11-24 revision 3fb7d2cadc) [x86_64-linux]
excl.rb:4:in `<main>': private method `!' called for 1:Integer (NoMethodError)
$ ruby -v excl.rb
truffleruby 22.3.0-dev-1db71db4, like ruby 3.0.3, GraalVM CE Native [x86_64-linux]
Error while formatting Ruby exception:
<internal:core> core/exception.rb:112:in `to_tty?': private method `!' called for false:FalseClass (NoMethodError)
from <internal:core> core/truffle/exception_operations.rb:125:in `full_message'
from <internal:core> core/truffle/exception_operations.rb:234:in `get_formatted_backtrace'
Original Ruby exception:
excl.rb:4:in `<main>': private method `!' called for 1:Integer (NoMethodError)
When I try to define the following code (I know weird but it doesn't cause exception under MRI but it returns
:!
)To reproduce:
Error:
There was a similar problem in JRuby https://github.com/jruby/jruby/issues/4845