Issue #18059 has been updated by Eregon (Benoit Daloze).


Those specs were added because gems rely on it (https://github.com/oracle/truffleruby/issues/1884).
`rbtree3` is an example: https://github.com/kyrylo/rbtree3/blob/850e9d76c22b0766bc2bc36987b11aed05eb2bb4/rbtree.c#L19
`gem-codesearch '\bFL_SET\b' | grep -v vendor | grep -v '/ruby/'` gives:
https://gist.github.com/eregon/efb1cb7c9ec88dba1cc6ebcfeb24288a
Some of them are from internal Ruby headers, but not all.

Also the terminology "FL_USER" intuitively indicates it is meant for gem-specific flags.
And of course the fact that `RB_FL_ABLE`/`RB_FL_TEST`/`RB_FL_SET`/`RB_FL_UNSET`/etc are exposed.

> My guess is these flags are available for T_DATA classes, but not for T_OBJECT.

That seems reasonable to me.
I think it should be reflected in `RB_FL_ABLE` then, and internally some other macros should be used to deal with non-T_DATA (e.g., T_STRING, T_ARRAY, etc).

----------------------------------------
Misc #18059: Which FL_USERx are open to extension libraries?
https://bugs.ruby-lang.org/issues/18059#change-93100

* Author: nobu (Nobuyoshi Nakada)
* Status: Open
* Priority: Normal
----------------------------------------
Often the following failure occurs in `test-spec`.

```
RBasic support for regular objects supports copying the flags from one object over to the other FAILED
Expected 81920 == 33636352
to be truthy but was false
/tmp/ruby/v3/src/trunk/spec/ruby/optional/capi/shared/rbasic.rb:71:in `block (2 levels) in <top (required)>'
/tmp/ruby/v3/src/trunk/spec/ruby/optional/capi/rbasic_spec.rb:8:in `<top (required)>'
```

`81920    ==   0x14000`
`33636352 == 0x2014000`
The difference `0x2000000` is `FL_USER13`, which is used as `ROBJECT_TRANSIENT_FLAG`.
This flag is set when any `Object` instance has some amount of instance variables.

In this particular case, it is possible to fix just by excluding the bit.
But, the question is which flags are open to extension libraries.

My guess is these flags are available for `T_DATA` classes, but not for `T_OBJECT`.
Any thoughts?



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>