Actions
Bug #18743
closedEnumerator#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
Like0
Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0