[ruby-core:122551] [Ruby Misc#20968] `Array#fetch_values` unexpected method name in stack trace
From:
"mame (Yusuke Endoh) via ruby-core" <ruby-core@...>
Date:
2025-06-18 08:44:02 UTC
List:
ruby-core #122551
Issue #20968 has been updated by mame (Yusuke Endoh).
I have updated the behavior to (mostly) suppress the display of `<internal:...>` frames in a backtrace. The algorithm works as follows:
* When internal frames appear in a sequence, it retains only one frame -- the one directly called from Ruby code.
* The location information of the internal frame is now backpatched with the filename and line number of the caller (similar to how we handle C frames).
If you encounter any cases where this algorithm does not work well, please let me know.
Please note that this transformation is not applied when using the debug inspector API or `TracePoint#path`, so `<internal:...>` will still appear in those cases. This behavior may change in the future. See also #21395.
----------------------------------------
Misc #20968: `Array#fetch_values` unexpected method name in stack trace
https://bugs.ruby-lang.org/issues/20968#change-113784
* Author: koic (Koichi ITO)
* Status: Closed
----------------------------------------
It seems that the current Ruby implementation is displaying unexpected method name in stack trace.
## Expected
Similar to `Hash#fetch_values`, the method name `Array#fetch_values` is expected to be displayed in the stack trace.
```console
$ ruby -e '{k: 42}.fetch_values(:unknown)'
-e:1:in 'Hash#fetch_values': key not found: :unknown (KeyError)
from -e:1:in '<main>'
$ ruby -e '[1].fetch_values(42)'
-e:1:in 'Array#fetch_values': index 42 outside of array bounds: -1...1 (IndexError)
from -e:1:in '<main>'
```
## Actual
The stack trace displays the `Array#fetch` method, which user is not aware of, along with the `<internal.array>` stack trace.
```console
$ ruby -e '[1].fetch_values(42)'
<internal:array>:211:in 'Array#fetch': index 42 outside of array bounds: -1...1 (IndexError)
from <internal:array>:211:in 'block in Array#fetch_values'
from <internal:array>:211:in 'Array#map!'
from <internal:array>:211:in 'Array#fetch_values'
from -e:1:in '<main>'
```
It likely requires an approach such as implementing it in C, as suggested in https://github.com/ruby/ruby/pull/11555.
--
https://bugs.ruby-lang.org/
______________________________________________
ruby-core mailing list -- ruby-core@ml.ruby-lang.org
To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/