summaryrefslogtreecommitdiff
path: root/lib/irb/context.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/irb/context.rb')
-rw-r--r--lib/irb/context.rb24
1 files changed, 23 insertions, 1 deletions
diff --git a/lib/irb/context.rb b/lib/irb/context.rb
index 58964aa832..6f209b596a 100644
--- a/lib/irb/context.rb
+++ b/lib/irb/context.rb
@@ -475,7 +475,29 @@ module IRB
def evaluate(line, line_no) # :nodoc:
@line_no = line_no
- set_last_value(@workspace.evaluate(line, irb_path, line_no))
+ result = nil
+
+ if IRB.conf[:MEASURE] && IRB.conf[:MEASURE_CALLBACKS].empty?
+ IRB.set_measure_callback
+ end
+
+ if IRB.conf[:MEASURE] && !IRB.conf[:MEASURE_CALLBACKS].empty?
+ last_proc = proc do
+ result = @workspace.evaluate(line, irb_path, line_no)
+ end
+ IRB.conf[:MEASURE_CALLBACKS].inject(last_proc) do |chain, item|
+ _name, callback, arg = item
+ proc do
+ callback.(self, line, line_no, arg) do
+ chain.call
+ end
+ end
+ end.call
+ else
+ result = @workspace.evaluate(line, irb_path, line_no)
+ end
+
+ set_last_value(result)
end
def inspect_last_value # :nodoc: