Skip to content

IRB crashes when Object's constants #235

@JunichiIto

Description

@JunichiIto

Description

I could change Object's constants in Ruby 2.6.6 and irb 1.0.0.

$ ruby -v
irb(main):001:0> RUBY_VERSION=1
(irb):1: warning: already initialized constant RUBY_VERSION
=> 1
irb(main):002:0> RUBY_VERSION
=> 1
irb(main):003:0> ENV=1
(irb):3: warning: already initialized constant ENV
=> 1
irb(main):004:0> ENV
=> 1

But IRB crashes when I do the same thing in irb 1.3.5.

$ ruby -v
ruby 3.0.1p64 (2021-04-05 revision 0fb782ee38) [arm64-darwin20]
$ irb -v
irb 1.3.5 (2021-04-03)
$ irb
irb(main):001:0> RUBY_VERSION=1
(irb):1: warning: already initialized constant RUBY_VERSION
=> 1
irb(main):002:0> RUBY_VERSION
/Users/jnito/.rbenv/versions/3.0.1/lib/ruby/3.0.0/reline.rb:178:in `<': comparison of Integer with String failed (ArgumentError)
	from /Users/jnito/.rbenv/versions/3.0.1/lib/ruby/3.0.0/reline.rb:178:in `readmultiline'
	from /Users/jnito/.rbenv/versions/3.0.1/lib/ruby/3.0.0/forwardable.rb:238:in `readmultiline'
	from /Users/jnito/.rbenv/versions/3.0.1/lib/ruby/3.0.0/forwardable.rb:238:in `readmultiline'
	from /Users/jnito/.rbenv/versions/3.0.1/lib/ruby/3.0.0/irb/input-method.rb:319:in `gets'
	from /Users/jnito/.rbenv/versions/3.0.1/lib/ruby/3.0.0/irb.rb:529:in `block (2 levels) in eval_input'
	from /Users/jnito/.rbenv/versions/3.0.1/lib/ruby/3.0.0/irb.rb:751:in `signal_status'
	from /Users/jnito/.rbenv/versions/3.0.1/lib/ruby/3.0.0/irb.rb:528:in `block in eval_input'
	from /Users/jnito/.rbenv/versions/3.0.1/lib/ruby/3.0.0/irb/ruby-lex.rb:267:in `lex'
	from /Users/jnito/.rbenv/versions/3.0.1/lib/ruby/3.0.0/irb/ruby-lex.rb:236:in `block (2 levels) in each_top_level_statement'
	from /Users/jnito/.rbenv/versions/3.0.1/lib/ruby/3.0.0/irb/ruby-lex.rb:233:in `loop'
	from /Users/jnito/.rbenv/versions/3.0.1/lib/ruby/3.0.0/irb/ruby-lex.rb:233:in `block in each_top_level_statement'
	from /Users/jnito/.rbenv/versions/3.0.1/lib/ruby/3.0.0/irb/ruby-lex.rb:232:in `catch'
	from /Users/jnito/.rbenv/versions/3.0.1/lib/ruby/3.0.0/irb/ruby-lex.rb:232:in `each_top_level_statement'
	from /Users/jnito/.rbenv/versions/3.0.1/lib/ruby/3.0.0/irb.rb:547:in `eval_input'
	from /Users/jnito/.rbenv/versions/3.0.1/lib/ruby/3.0.0/irb.rb:481:in `block in run'
	from /Users/jnito/.rbenv/versions/3.0.1/lib/ruby/3.0.0/irb.rb:480:in `catch'
	from /Users/jnito/.rbenv/versions/3.0.1/lib/ruby/3.0.0/irb.rb:480:in `run'
	from /Users/jnito/.rbenv/versions/3.0.1/lib/ruby/3.0.0/irb.rb:409:in `start'
	from /Users/jnito/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/irb-1.3.5/exe/irb:11:in `<top (required)>'
	from /Users/jnito/.rbenv/versions/3.0.1/bin/irb:23:in `load'
	from /Users/jnito/.rbenv/versions/3.0.1/bin/irb:23:in `<main>'
$ irb
irb(main):001:0> ENV=1
(irb):1: warning: already initialized constant ENV
(Object doesn't support #inspect)
=> 
/Users/jnito/.rbenv/versions/3.0.1/lib/ruby/3.0.0/reline.rb:201:in `[]': no implicit conversion of String into Integer (TypeError)
	from /Users/jnito/.rbenv/versions/3.0.1/lib/ruby/3.0.0/reline.rb:201:in `inner_readline'
	from /Users/jnito/.rbenv/versions/3.0.1/lib/ruby/3.0.0/reline.rb:175:in `readmultiline'
	from /Users/jnito/.rbenv/versions/3.0.1/lib/ruby/3.0.0/forwardable.rb:238:in `readmultiline'
	from /Users/jnito/.rbenv/versions/3.0.1/lib/ruby/3.0.0/forwardable.rb:238:in `readmultiline'
	from /Users/jnito/.rbenv/versions/3.0.1/lib/ruby/3.0.0/irb/input-method.rb:319:in `gets'
	from /Users/jnito/.rbenv/versions/3.0.1/lib/ruby/3.0.0/irb.rb:529:in `block (2 levels) in eval_input'
	from /Users/jnito/.rbenv/versions/3.0.1/lib/ruby/3.0.0/irb.rb:751:in `signal_status'
	from /Users/jnito/.rbenv/versions/3.0.1/lib/ruby/3.0.0/irb.rb:528:in `block in eval_input'
	from /Users/jnito/.rbenv/versions/3.0.1/lib/ruby/3.0.0/irb/ruby-lex.rb:267:in `lex'
	from /Users/jnito/.rbenv/versions/3.0.1/lib/ruby/3.0.0/irb/ruby-lex.rb:236:in `block (2 levels) in each_top_level_statement'
	from /Users/jnito/.rbenv/versions/3.0.1/lib/ruby/3.0.0/irb/ruby-lex.rb:233:in `loop'
	from /Users/jnito/.rbenv/versions/3.0.1/lib/ruby/3.0.0/irb/ruby-lex.rb:233:in `block in each_top_level_statement'
	from /Users/jnito/.rbenv/versions/3.0.1/lib/ruby/3.0.0/irb/ruby-lex.rb:232:in `catch'
	from /Users/jnito/.rbenv/versions/3.0.1/lib/ruby/3.0.0/irb/ruby-lex.rb:232:in `each_top_level_statement'
	from /Users/jnito/.rbenv/versions/3.0.1/lib/ruby/3.0.0/irb.rb:547:in `eval_input'
	from /Users/jnito/.rbenv/versions/3.0.1/lib/ruby/3.0.0/irb.rb:481:in `block in run'
	from /Users/jnito/.rbenv/versions/3.0.1/lib/ruby/3.0.0/irb.rb:480:in `catch'
	from /Users/jnito/.rbenv/versions/3.0.1/lib/ruby/3.0.0/irb.rb:480:in `run'
	from /Users/jnito/.rbenv/versions/3.0.1/lib/ruby/3.0.0/irb.rb:409:in `start'
	from /Users/jnito/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/irb-1.3.5/exe/irb:11:in `<top (required)>'
	from /Users/jnito/.rbenv/versions/3.0.1/bin/irb:23:in `load'
	from /Users/jnito/.rbenv/versions/3.0.1/bin/irb:23:in `<main>'

Result of irb_info

irb(main):001:0> irb_info
=> 
Ruby version: 3.0.1
IRB version: irb 1.3.5 (2021-04-03)
InputMethod: ReidlineInputMethod with Reline 0.2.5
RUBY_PLATFORM: arm64-darwin20

Terminal Emulator

Terminal.app in macOS 11.3

Setting Files

Are you using ~/.irbrc and ~/.inputrc? => No.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions