[#111472] [Ruby master Bug#19274] Error installing ruby 3.2.0 on RH 8 — "aalllop (Alberto Allegue) via ruby-core" <ruby-core@...>
Issue #19274 has been reported by aalllop (Alberto Allegue).
5 messages
2022/12/28
[#111508] Data support for versions before 3.2.0 — Eustáquio Rangel via ruby-core <ruby-core@...>
I was wondering that every piece of code (gems, etc) that use the new Data =
3 messages
2022/12/29
[ruby-core:111138] [Ruby master Bug#19169] Kernel#freeze doesn't propagate to singleton class when the singleton class has prepended modules
From:
"alanwu (Alan Wu)" <noreply@...>
Date:
2022-12-01 23:46:40 UTC
List:
ruby-core #111138
Issue #19169 has been reported by alanwu (Alan Wu).
----------------------------------------
Bug #19169: Kernel#freeze doesn't propagate to singleton class when the singleton class has prepended modules
https://bugs.ruby-lang.org/issues/19169
* Author: alanwu (Alan Wu)
* Status: Open
* Priority: Normal
* ruby -v: ruby 3.2.0dev (2022-12-01T16:50:48Z master 9da2a5204f) [arm64-darwin22]
* Backport: 2.7: UNKNOWN, 3.0: UNKNOWN, 3.1: UNKNOWN
----------------------------------------
```ruby
a = []
singleton = a.singleton_class
a.freeze
p singleton.frozen? # => true
a = []
singleton = a.singleton_class.tap { |klass| klass.prepend(Module.new) }
a.freeze
p singleton.frozen? # => false
```
It's because of this function:
```c
void
rb_freeze_singleton_class(VALUE x)
{
/* should not propagate to meta-meta-class, and so on */
if (!(RBASIC(x)->flags & FL_SINGLETON)) {
VALUE klass = RBASIC_CLASS(x);
if (klass && (klass = RCLASS_ORIGIN(klass)) != 0 &&
FL_TEST(klass, (FL_SINGLETON|FL_FREEZE)) == FL_SINGLETON) {
OBJ_FREEZE_RAW(klass);
}
}
}
```
It freezes the origin class of the singleton class, but I'm not sure why.
When there is no prepended modules `RCLASS_ORIGIN(klass)` just returns `klass`.
It's old code, so maybe the meaning of `RCLASS_ORIGIN` has changed?
Practically speaking not a big deal because each time one calls `.singleton_class`
it copies the frozen bit of the attached object to the singleton class.
--
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/postorius/lists/ruby-core.ml.ruby-lang.org/