[#122258] [Ruby Misc#21367] Remove link to ruby-doc.org from www.ruby-lang.org/en/documentation/ — "p8 (Petrik de Heus) via ruby-core" <ruby-core@...>
Issue #21367 has been reported by p8 (Petrik de Heus).
11 messages
2025/05/23
[ruby-core:121796] [Ruby Bug#21298] `ObjectSpace.allocation_class_path` returns inconsistent results depending on `TracePoint` state
From:
"tenderlovemaking (Aaron Patterson) via ruby-core" <ruby-core@...>
Date:
2025-05-01 19:30:55 UTC
List:
ruby-core #121796
Issue #21298 has been updated by tenderlovemaking (Aaron Patterson).
I remember the problem now. `power_assert` expects to find the `Class#new` frame: https://github.com/ruby/ruby/actions/runs/14781787226/job/41502113192?pr=13232
I want to make the behavior consistent, but I'm not sure what to do about `power_assert`
----------------------------------------
Bug #21298: `ObjectSpace.allocation_class_path` returns inconsistent results depending on `TracePoint` state
https://bugs.ruby-lang.org/issues/21298#change-112861
* Author: mame (Yusuke Endoh)
* Status: Open
* Assignee: tenderlovemaking (Aaron Patterson)
* Backport: 3.2: UNKNOWN, 3.3: UNKNOWN, 3.4: UNKNOWN
----------------------------------------
`ObjectSpace.allocation_class_path` is an API that returns the class of `self` in the context where an object was allocated. However, due to recent optimizations in `Class#new` (#21254), the return value now changes depending on whether `TracePoint` is enabled.
```ruby
require "objspace"
class Foo
def test
obj = Object.new
ObjectSpace.allocation_class_path(obj)
end
end
ObjectSpace.trace_object_allocations_start
p Foo.new.test #=> 3.4.2: "Class", master: "Foo"
```
Previously, this returned `"Class"` (from the `Class#new` call frame), but in the master branch, the result is now `"Foo"` because that frame is gone.
I am ok for the incompatibility itself because I find the new behavior more intuitive and useful. However, there's an inconsistency: the optimization is disabled when `TracePoint` is enabled, causing the result to revert to the old behavior.
```ruby
p Foo.new.test #=> master: "Foo"
TracePoint.new {}.enable do
p Foo.new.test #=> master: "Class", expected: "Foo"
end
```
This makes behavior dependent on whether `TracePoint` is enabled, which can lead to confusion.
@ko1 @tenderlovemaking Can we make `ObjectSpace.allocation_class_path` consistently return the class from the `.new` call context, regardless of the `TracePoint` state?
---
I am facing a failure of the following test when code coverage (which uses `TracePoint`) is enabled:
https://github.com/ruby/ruby/blob/e8ad728209ee22136e61054fea74096b49088b8a/test/objspace/test_objspace.rb#L206
As a short-term workaround, I'm considering commenting out this test.
--
https://bugs.ruby-lang.org/
______________________________________________
ruby-core mailing list -- [email protected]
To unsubscribe send an email to [email protected]
ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/