1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

Add RCLASS_PARENT_SUBMODULES Macro

This commit is contained in:
Matt Valentine-House 2021-01-26 16:06:31 +00:00 committed by Aaron Patterson
parent 1cdae49d39
commit 49950266be
Notes: git 2021-02-02 01:43:32 +09:00
2 changed files with 9 additions and 8 deletions

16
class.c
View file

@ -56,11 +56,11 @@ rb_class_subclass_add(VALUE super, VALUE klass)
head = RCLASS_EXT(super)->subclasses;
if (head) {
entry->next = head;
RCLASS_EXT(head->klass)->parent_subclasses = &entry->next;
RCLASS_PARENT_SUBCLASSES(head->klass) = &entry->next;
}
RCLASS_EXT(super)->subclasses = entry;
RCLASS_EXT(klass)->parent_subclasses = &RCLASS_EXT(super)->subclasses;
RCLASS_PARENT_SUBCLASSES(klass) = &RCLASS_EXT(super)->subclasses;
}
}
@ -88,17 +88,17 @@ rb_class_remove_from_super_subclasses(VALUE klass)
{
rb_subclass_entry_t *entry;
if (RCLASS_EXT(klass)->parent_subclasses) {
entry = *RCLASS_EXT(klass)->parent_subclasses;
if (RCLASS_PARENT_SUBCLASSES(klass)) {
entry = *RCLASS_PARENT_SUBCLASSES(klass);
*RCLASS_EXT(klass)->parent_subclasses = entry->next;
*RCLASS_PARENT_SUBCLASSES(klass) = entry->next;
if (entry->next) {
RCLASS_EXT(entry->next->klass)->parent_subclasses = RCLASS_EXT(klass)->parent_subclasses;
RCLASS_PARENT_SUBCLASSES(entry->next->klass) = RCLASS_PARENT_SUBCLASSES(klass);
}
xfree(entry);
}
RCLASS_EXT(klass)->parent_subclasses = NULL;
RCLASS_PARENT_SUBCLASSES(klass) = NULL;
}
void
@ -182,7 +182,7 @@ class_alloc(VALUE flags, VALUE klass)
RCLASS_IV_INDEX_TBL(obj) = 0;
RCLASS_SET_SUPER((VALUE)obj, 0);
RCLASS_EXT(obj)->subclasses = NULL;
RCLASS_EXT(obj)->parent_subclasses = NULL;
RCLASS_PARENT_SUBCLASSES(obj) = NULL;
RCLASS_EXT(obj)->module_subclasses = NULL;
*/
RCLASS_SET_ORIGIN((VALUE)obj, (VALUE)obj);

View file

@ -92,6 +92,7 @@ typedef struct rb_classext_struct rb_classext_t;
# define RCLASS_SERIAL(c) (RCLASS_EXT(c)->class_serial)
#endif
#define RCLASS_INCLUDER(c) (RCLASS_EXT(c)->includer)
#define RCLASS_PARENT_SUBCLASSES(c) (RCLASS_EXT(c)->parent_subclasses)
#define RICLASS_IS_ORIGIN FL_USER5
#define RCLASS_CLONED FL_USER6