You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I'm using Thread#backtrace_locations and noticed several differences between MRI and JRuby.
I'll report them separately because they may have different fixes, but feel free to mark any as duplicate if it makes sense to do so.
Environment
JRuby: jruby 9.1.17.0 (2.3.3) 2018-04-20 d8b1ff9 Java HotSpot(TM) 64-Bit Server VM 25.171-b11 on 1.8.0_171-b11 +jit [linux-x86_64]
Kernel: Linux u186024434db159d25c92 4.13.0-39-generic #44~16.04.1-Ubuntu SMP Thu Apr 5 16:43:10 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
Distro: Ubuntu 16.04.4 LTS
Expected Behavior
When looking at a Thread::Backtrace::Location, MRI provides both #base_label and #label.
For most methods, these are exactly the same, but for blocks it allows the caller to get the name of the method separate from the "block in" text without resorting to parsing the result.
An additional detail from MRI is that whenever #base_label and #label match, the underlying String is reused and thus both are #equal?. This allows a very fast check if a Location is a block or not, as we can use equal? instead of a heavier ==.
…re #== on MRI they are also #equal?
Our desire for laziness was the cause of this issue. In the future we will
migrate to using symbol for methodNames to fully support M17n and this fix
ickiness will be able to be deleted. Largely we use basename for all cases
except blocks. In either case we save off the string we make so the equality
property is preserved.
With symbols the strings we have will always end up as the same string and
equality will also be true. The amount of API changes is a bit too much to
do the m17n work now.
Hello again!
I'm using
Thread#backtrace_locations
and noticed several differences between MRI and JRuby.I'll report them separately because they may have different fixes, but feel free to mark any as duplicate if it makes sense to do so.
Environment
jruby 9.1.17.0 (2.3.3) 2018-04-20 d8b1ff9 Java HotSpot(TM) 64-Bit Server VM 25.171-b11 on 1.8.0_171-b11 +jit [linux-x86_64]
Linux u186024434db159d25c92 4.13.0-39-generic #44~16.04.1-Ubuntu SMP Thu Apr 5 16:43:10 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
Ubuntu 16.04.4 LTS
Expected Behavior
When looking at a
Thread::Backtrace::Location
, MRI provides both#base_label
and#label
.For most methods, these are exactly the same, but for blocks it allows the caller to get the name of the method separate from the "block in" text without resorting to parsing the result.
An additional detail from MRI is that whenever
#base_label
and#label
match, the underlyingString
is reused and thus both are#equal?
. This allows a very fast check if aLocation
is a block or not, as we can useequal?
instead of a heavier==
.Testcase:
Output on MRI:
Actual Behavior
JRuby creates different Strings for both methods, so they end up not being
equal?
.If it would be helpful I can also submit a testcase to RubySpec.
The text was updated successfully, but these errors were encountered: