Closed
Description
Description
When I run the following code, irb crashes and exits when I enter any key.
$ cat t.rb
#! /usr/bin/env ruby
class Foo
def a(methods)
binding.irb
end
end
Foo.new.a(1)
$ ruby t.rb
From: t.rb @ line 5 :
1: #! /usr/bin/env ruby
2:
3: class Foo
4: def a(methods)
=> 5: binding.irb
6: end
7: end
8:
9: Foo.new.a(1)
# Pressing any key...
irb(#<Foo:0x0000000100b0ec20>):001:0> a(eval):1:in `|': Array can't be coerced into Integer (TypeError)
from (eval):1:in `a'
from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/irb-1.4.1/lib/irb/completion.rb:362:in `eval'
from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/irb-1.4.1/lib/irb/completion.rb:362:in `retrieve_completion_data'
from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/irb-1.4.1/lib/irb/completion.rb:130:in `block in <module:InputCompletor>'
from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/reline-0.3.1/lib/reline/line_editor.rb:1681:in `call_completion_proc_with_checking_args'
from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/reline-0.3.1/lib/reline/line_editor.rb:543:in `call_completion_proc_with_checking_args'
from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/reline-0.3.1/lib/reline.rb:226:in `block in <class:Core>'
from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/reline-0.3.1/lib/reline/line_editor.rb:588:in `instance_exec'
from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/reline-0.3.1/lib/reline/line_editor.rb:588:in `call'
from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/reline-0.3.1/lib/reline/line_editor.rb:623:in `call'
from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/reline-0.3.1/lib/reline/line_editor.rb:667:in `render_each_dialog'
from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/reline-0.3.1/lib/reline/line_editor.rb:651:in `block in render_dialog'
from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/reline-0.3.1/lib/reline/line_editor.rb:650:in `each'
from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/reline-0.3.1/lib/reline/line_editor.rb:650:in `render_dialog'
from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/reline-0.3.1/lib/reline/line_editor.rb:510:in `rerender'
from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/reline-0.3.1/lib/reline.rb:330:in `block (3 levels) in inner_readline'
from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/reline-0.3.1/lib/reline.rb:328:in `each'
from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/reline-0.3.1/lib/reline.rb:328:in `block (2 levels) in inner_readline'
from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/reline-0.3.1/lib/reline.rb:403:in `block in read_io'
from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/reline-0.3.1/lib/reline.rb:373:in `loop'
from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/reline-0.3.1/lib/reline.rb:373:in `read_io'
from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/reline-0.3.1/lib/reline.rb:326:in `block in inner_readline'
from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/reline-0.3.1/lib/reline.rb:324:in `loop'
from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/reline-0.3.1/lib/reline.rb:324:in `inner_readline'
from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/reline-0.3.1/lib/reline.rb:254:in `readmultiline'
from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/3.1.0/forwardable.rb:238:in `readmultiline'
from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/3.1.0/forwardable.rb:238:in `readmultiline'
from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/irb-1.4.1/lib/irb/input-method.rb:418:in `gets'
from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/irb-1.4.1/lib/irb.rb:539:in `block (2 levels) in eval_input'
from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/irb-1.4.1/lib/irb.rb:770:in `signal_status'
from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/irb-1.4.1/lib/irb.rb:538:in `block in eval_input'
from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/irb-1.4.1/lib/irb/ruby-lex.rb:284:in `lex'
from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/irb-1.4.1/lib/irb/ruby-lex.rb:253:in `block (2 levels) in each_top_level_statement'
from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/irb-1.4.1/lib/irb/ruby-lex.rb:250:in `loop'
from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/irb-1.4.1/lib/irb/ruby-lex.rb:250:in `block in each_top_level_statement'
from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/irb-1.4.1/lib/irb/ruby-lex.rb:249:in `catch'
from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/irb-1.4.1/lib/irb/ruby-lex.rb:249:in `each_top_level_statement'
from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/irb-1.4.1/lib/irb.rb:557:in `eval_input'
from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/irb-1.4.1/lib/irb.rb:491:in `block in run'
from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/irb-1.4.1/lib/irb.rb:490:in `catch'
from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/irb-1.4.1/lib/irb.rb:490:in `run'
from /Users/ksss/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/irb-1.4.1/lib/irb.rb:976:in `irb'
from <internal:prelude>:5:in `irb'
from t.rb:5:in `a'
from t.rb:9:in `<main>'
This is happening in the following eval code.
Line 362 in af99c01
Probably, it occurs when any one of methods
private_methods
local_variables
instance_variables
does not have a #|
method.
I discovered this problem when I inserted binding.irb
into the code below.
https://github.com/ruby/rbs/blob/4dc5b95c4971e7abdbbfd1304996275c8ae0f859/lib/rbs/definition_builder/method_builder.rb#L104
Result of irb_info
$ irb
irb(main):001:0> irb_info
=>
Ruby version: 3.1.1
IRB version: irb 1.4.1 (2021-12-25)
InputMethod: ReidlineInputMethod with Reline 0.3.1
RUBY_PLATFORM: arm64-darwin21
LANG env: ja_JP.UTF-8
East Asian Ambiguous Width: 1
Terminal Emulator
What's your terminal emulator?
iTerm2
Setting Files
Are you using
~/.irbrc
and~/.inputrc
?
No.
Metadata
Metadata
Assignees
Labels
No labels