summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoraycabta <aycabta@gmail.com>2021-02-06 21:07:11 +0900
committergit <svn-admin@ruby-lang.org>2021-02-06 21:09:31 +0900
commit7b354cf67ba95305b600cc8b3ba684923cdc5a98 (patch)
treeb6215c4c41cf913f4ceb8353d205414486939515
parent5704b5fe5e42bd5b1f42a27368cd5d52dd5a9060 (diff)
[ruby/irb] Enable to reassign a new block with "measure" command
https://github.com/ruby/irb/commit/b444573aa2
-rw-r--r--lib/irb/init.rb8
-rw-r--r--test/irb/test_cmd.rb9
2 files changed, 16 insertions, 1 deletions
diff --git a/lib/irb/init.rb b/lib/irb/init.rb
index cd57012c61..78ef2fa3c1 100644
--- a/lib/irb/init.rb
+++ b/lib/irb/init.rb
@@ -157,6 +157,14 @@ module IRB # :nodoc:
added = [:CUSTOM, IRB.conf[:MEASURE_PROC][:CUSTOM], arg]
elsif block_given?
added = [:BLOCK, block, arg]
+ found = IRB.conf[:MEASURE_CALLBACKS].find{ |m| m[0] == added[0] && m[2] == added[2] }
+ if found
+ found[1] = block
+ return added
+ else
+ IRB.conf[:MEASURE_CALLBACKS] << added
+ return added
+ end
else
added = [:TIME, IRB.conf[:MEASURE_PROC][:TIME], arg]
end
diff --git a/test/irb/test_cmd.rb b/test/irb/test_cmd.rb
index 045ce0f0e7..7219473e4c 100644
--- a/test/irb/test_cmd.rb
+++ b/test/irb/test_cmd.rb
@@ -294,6 +294,13 @@ module TestIRB
"measure { |context, code, line_no, &block|\n",
" result = block.()\n",
" puts 'aaa' if IRB.conf[:MEASURE]\n",
+ " result\n",
+ "}\n",
+ "3\n",
+ "measure { |context, code, line_no, &block|\n",
+ " result = block.()\n",
+ " puts 'bbb' if IRB.conf[:MEASURE]\n",
+ " result\n",
"}\n",
"3\n",
"measure :off\n",
@@ -306,7 +313,7 @@ module TestIRB
irb.eval_input
end
assert_empty err
- assert_match(/\A=> 3\nBLOCK is added\.\n=> nil\naaa\n=> 3\n=> nil\n=> 3\n/, out)
+ assert_match(/\A=> 3\nBLOCK is added\.\n=> nil\naaa\n=> 3\nBLOCK is added.\naaa\n=> nil\nbbb\n=> 3\n=> nil\n=> 3\n/, out)
assert_empty(c.class_variables)
end