Actions
Bug #18743
closedEnumerator#next / peek re-use each others stacktraces
Bug #18743: Enumerator#next / peek re-use each others stacktraces
Description
I encountered an odd behavior.
If I rescue the StopIteration exception from peek and call next afterwards: (or vice-versa)
# enum.rb # 1 # 2 enum = [].each # 3 enum.peek rescue nil # 4 enum.next # 5 it will show the stacktrace from the rescued peek call:
$ ruby enum.rb enum.rb:4:in `peek': iteration reached an end (StopIteration) from enum.rb:4:in `<main>' Whereas the error should refer to next on line number 5.
The same happens when calling peek after next or when having muliple peek / next calls:
# enum.rb # 1 # 2 enum = [].each # 3 enum.peek rescue nil # 4 enum.next rescue nil # 5 enum.peek rescue nil # 6 puts "line #{__LINE__}" # 7 enum.next # 8 The stacktrace from the first (rescued) peek or next call will be shown which doesn't reflect the actual error location:
$ ruby enum.rb line 7 enum.rb:4:in `peek': iteration reached an end (StopIteration) from enum.rb:4:in `<main>' This is very confusing when debugging code.
Files
Actions