mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
Add PARENT_MODULE_SUBCLASSES Macro
This commit is contained in:
parent
49950266be
commit
6edd425674
Notes:
git
2021-02-02 01:43:31 +09:00
2 changed files with 9 additions and 8 deletions
16
class.c
16
class.c
|
@ -76,11 +76,11 @@ rb_module_add_to_subclasses_list(VALUE module, VALUE iclass)
|
||||||
head = RCLASS_EXT(module)->subclasses;
|
head = RCLASS_EXT(module)->subclasses;
|
||||||
if (head) {
|
if (head) {
|
||||||
entry->next = head;
|
entry->next = head;
|
||||||
RCLASS_EXT(head->klass)->module_subclasses = &entry->next;
|
RCLASS_MODULE_SUBCLASSES(head->klass) = &entry->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
RCLASS_EXT(module)->subclasses = entry;
|
RCLASS_EXT(module)->subclasses = entry;
|
||||||
RCLASS_EXT(iclass)->module_subclasses = &RCLASS_EXT(module)->subclasses;
|
RCLASS_MODULE_SUBCLASSES(iclass) = &RCLASS_EXT(module)->subclasses;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -106,18 +106,18 @@ rb_class_remove_from_module_subclasses(VALUE klass)
|
||||||
{
|
{
|
||||||
rb_subclass_entry_t *entry;
|
rb_subclass_entry_t *entry;
|
||||||
|
|
||||||
if (RCLASS_EXT(klass)->module_subclasses) {
|
if (RCLASS_MODULE_SUBCLASSES(klass)) {
|
||||||
entry = *RCLASS_EXT(klass)->module_subclasses;
|
entry = *RCLASS_MODULE_SUBCLASSES(klass);
|
||||||
*RCLASS_EXT(klass)->module_subclasses = entry->next;
|
*RCLASS_MODULE_SUBCLASSES(klass) = entry->next;
|
||||||
|
|
||||||
if (entry->next) {
|
if (entry->next) {
|
||||||
RCLASS_EXT(entry->next->klass)->module_subclasses = RCLASS_EXT(klass)->module_subclasses;
|
RCLASS_MODULE_SUBCLASSES(entry->next->klass) = RCLASS_MODULE_SUBCLASSES(klass);
|
||||||
}
|
}
|
||||||
|
|
||||||
xfree(entry);
|
xfree(entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
RCLASS_EXT(klass)->module_subclasses = NULL;
|
RCLASS_MODULE_SUBCLASSES(klass) = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -183,7 +183,7 @@ class_alloc(VALUE flags, VALUE klass)
|
||||||
RCLASS_SET_SUPER((VALUE)obj, 0);
|
RCLASS_SET_SUPER((VALUE)obj, 0);
|
||||||
RCLASS_EXT(obj)->subclasses = NULL;
|
RCLASS_EXT(obj)->subclasses = NULL;
|
||||||
RCLASS_PARENT_SUBCLASSES(obj) = NULL;
|
RCLASS_PARENT_SUBCLASSES(obj) = NULL;
|
||||||
RCLASS_EXT(obj)->module_subclasses = NULL;
|
RCLASS_MODULE_SUBCLASSES(obj) = NULL;
|
||||||
*/
|
*/
|
||||||
RCLASS_SET_ORIGIN((VALUE)obj, (VALUE)obj);
|
RCLASS_SET_ORIGIN((VALUE)obj, (VALUE)obj);
|
||||||
RCLASS_SERIAL(obj) = rb_next_class_serial();
|
RCLASS_SERIAL(obj) = rb_next_class_serial();
|
||||||
|
|
|
@ -93,6 +93,7 @@ typedef struct rb_classext_struct rb_classext_t;
|
||||||
#endif
|
#endif
|
||||||
#define RCLASS_INCLUDER(c) (RCLASS_EXT(c)->includer)
|
#define RCLASS_INCLUDER(c) (RCLASS_EXT(c)->includer)
|
||||||
#define RCLASS_PARENT_SUBCLASSES(c) (RCLASS_EXT(c)->parent_subclasses)
|
#define RCLASS_PARENT_SUBCLASSES(c) (RCLASS_EXT(c)->parent_subclasses)
|
||||||
|
#define RCLASS_MODULE_SUBCLASSES(c) (RCLASS_EXT(c)->module_subclasses)
|
||||||
|
|
||||||
#define RICLASS_IS_ORIGIN FL_USER5
|
#define RICLASS_IS_ORIGIN FL_USER5
|
||||||
#define RCLASS_CLONED FL_USER6
|
#define RCLASS_CLONED FL_USER6
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue