From: nov@... Date: 2021-01-23T02:36:42+00:00 Subject: [ruby-core:102208] [Ruby master Bug#17564] Source command in irb exits after reading and evaluating the file Issue #17564 has been updated by no6v (Nobuhiro IMAI). I could reproduce the situation and I made a pull-request to fix this: https://github.com/ruby/irb/pull/177 Unexpectedly, there are many changes, but most of the measures are to pass existing tests and prevent file leaks. ---------------------------------------- Bug #17564: Source command in irb exits after reading and evaluating the file https://bugs.ruby-lang.org/issues/17564#change-90055 * Author: rsharman (Richard Sharman) * Status: Assigned * Priority: Normal * Assignee: aycabta (aycabta .) * ruby -v: ruby 3.0.0p0 (2020-12-25 revision 95aff21468) [x86_64-darwin17] * Backport: 2.5: UNKNOWN, 2.6: UNKNOWN, 2.7: UNKNOWN, 3.0: UNKNOWN ---------------------------------------- In the irb of ruby 2.3.7 (the version that comes with Macos) the ���source��� command allows ruby code to be fed to irb as if it were typed in by hand. This has a advantage over the ���load��� command because variables can be setup not just functions. However, for ruby versions 2.7.2 and 3.0 irb���s ���source��� command exits after reading and evaluating everything. This is not very useful in an interactive environment. I found what I think was a crucial difference between version 2.3.7 and later versions: in function "each_top_level_statement" of irb/ruby-lex.rb the statement ``` break unless l ``` was replaced by ``` break if @io.eof? ``` When I replaced ���break if @io.eof?��� by ���break unless l��� in version 3.0.0 the old behaviour of the ���source��� command returned! I can now read in ruby code, including variables, and use them. See file patch for a unified diff of the change. I don���t understand why this ���fix��� works, and realize it may not be valid, but I am submitting it in case it is legitimate and can be used. A trivial file demonstrates the problem: file ���a.rb��� simply sets variable ���a���. To test, invoke irb and issue the command ���source ���a.rb������. The expected behaviour is you are left at the irb prompt and variable a is valid. The behaviour in verions 3.0.0 without the fix is irb exits. See file a.rb and output with and without fix in file Log. ---Files-------------------------------- a.rb (9 Bytes) Log (298 Bytes) Patch (383 Bytes) -- https://bugs.ruby-lang.org/ Unsubscribe: