diff options
author | Jean Boussier <[email protected]> | 2024-03-06 11:04:22 -0500 |
---|---|---|
committer | Peter Zhu <[email protected]> | 2024-03-06 13:11:41 -0500 |
commit | b4a69351ec7d6f0a5e34e3bb586053814be352c0 (patch) | |
tree | 7d413d26f6bcb60e98d3b353037c2406bc54c612 /internal/class.h | |
parent | b88973165a9e970793eb187a4223d7521031ebc3 (diff) |
Move FL_SINGLETON to FL_USER1
This frees FL_USER0 on both T_MODULE and T_CLASS.
Note: prior to this, FL_SINGLETON was never set on T_MODULE,
so checking for `FL_SINGLETON` without first checking that
`FL_TYPE` was `T_CLASS` was valid. That's no longer the case.
Diffstat (limited to 'internal/class.h')
-rw-r--r-- | internal/class.h | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/internal/class.h b/internal/class.h index 594f1daea7..7f700c675c 100644 --- a/internal/class.h +++ b/internal/class.h @@ -195,10 +195,16 @@ static inline void RCLASS_SET_INCLUDER(VALUE iclass, VALUE klass); VALUE rb_class_inherited(VALUE, VALUE); VALUE rb_keyword_error_new(const char *, VALUE); +static inline bool +RCLASS_SINGLETON_P(VALUE klass) +{ + return RB_TYPE_P(klass, T_CLASS) && FL_TEST_RAW(klass, FL_SINGLETON); +} + static inline rb_alloc_func_t RCLASS_ALLOCATOR(VALUE klass) { - if (FL_TEST_RAW(klass, FL_SINGLETON)) { + if (RCLASS_SINGLETON_P(klass)) { return 0; } return RCLASS_EXT(klass)->as.class.allocator; @@ -207,7 +213,7 @@ RCLASS_ALLOCATOR(VALUE klass) static inline void RCLASS_SET_ALLOCATOR(VALUE klass, rb_alloc_func_t allocator) { - assert(!FL_TEST(klass, FL_SINGLETON)); + assert(!RCLASS_SINGLETON_P(klass)); RCLASS_EXT(klass)->as.class.allocator = allocator; } @@ -267,8 +273,7 @@ RCLASS_SET_CLASSPATH(VALUE klass, VALUE classpath, bool permanent) static inline VALUE RCLASS_SET_ATTACHED_OBJECT(VALUE klass, VALUE attached_object) { - assert(BUILTIN_TYPE(klass) == T_CLASS); - assert(FL_TEST_RAW(klass, FL_SINGLETON)); + assert(RCLASS_SINGLETON_P(klass)); RB_OBJ_WRITE(klass, &RCLASS_EXT(klass)->as.singleton_class.attached_object, attached_object); return attached_object; |