class.c: add callback argument
* class.c (rb_class_foreach_subclass): add argument for callback function. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49335 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
97d71ce8f0
commit
0fb2cd458b
20
class.c
20
class.c
@ -110,7 +110,7 @@ rb_class_remove_from_module_subclasses(VALUE klass)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
rb_class_foreach_subclass(VALUE klass, void(*f)(VALUE))
|
rb_class_foreach_subclass(VALUE klass, void (*f)(VALUE, VALUE), VALUE arg)
|
||||||
{
|
{
|
||||||
rb_subclass_entry_t *cur = RCLASS_EXT(klass)->subclasses;
|
rb_subclass_entry_t *cur = RCLASS_EXT(klass)->subclasses;
|
||||||
|
|
||||||
@ -119,20 +119,32 @@ rb_class_foreach_subclass(VALUE klass, void(*f)(VALUE))
|
|||||||
while (cur) {
|
while (cur) {
|
||||||
VALUE curklass = cur->klass;
|
VALUE curklass = cur->klass;
|
||||||
cur = cur->next;
|
cur = cur->next;
|
||||||
f(curklass);
|
f(curklass, arg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
class_detach_subclasses(VALUE klass, VALUE arg)
|
||||||
|
{
|
||||||
|
rb_class_remove_from_super_subclasses(klass);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
rb_class_detach_subclasses(VALUE klass)
|
rb_class_detach_subclasses(VALUE klass)
|
||||||
{
|
{
|
||||||
rb_class_foreach_subclass(klass, rb_class_remove_from_super_subclasses);
|
rb_class_foreach_subclass(klass, class_detach_subclasses, Qnil);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
class_detach_module_subclasses(VALUE klass, VALUE arg)
|
||||||
|
{
|
||||||
|
rb_class_remove_from_module_subclasses(klass);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
rb_class_detach_module_subclasses(VALUE klass)
|
rb_class_detach_module_subclasses(VALUE klass)
|
||||||
{
|
{
|
||||||
rb_class_foreach_subclass(klass, rb_class_remove_from_module_subclasses);
|
rb_class_foreach_subclass(klass, class_detach_module_subclasses, Qnil);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -542,7 +542,7 @@ VALUE rb_integer_float_cmp(VALUE x, VALUE y);
|
|||||||
VALUE rb_integer_float_eq(VALUE x, VALUE y);
|
VALUE rb_integer_float_eq(VALUE x, VALUE y);
|
||||||
|
|
||||||
/* class.c */
|
/* class.c */
|
||||||
void rb_class_foreach_subclass(VALUE klass, void(*f)(VALUE));
|
void rb_class_foreach_subclass(VALUE klass, void (*f)(VALUE, VALUE), VALUE);
|
||||||
void rb_class_detach_subclasses(VALUE);
|
void rb_class_detach_subclasses(VALUE);
|
||||||
void rb_class_detach_module_subclasses(VALUE);
|
void rb_class_detach_module_subclasses(VALUE);
|
||||||
void rb_class_remove_from_module_subclasses(VALUE);
|
void rb_class_remove_from_module_subclasses(VALUE);
|
||||||
|
@ -61,10 +61,10 @@ static struct {
|
|||||||
/* int ruby_running = 0; */
|
/* int ruby_running = 0; */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
rb_class_clear_method_cache(VALUE klass)
|
rb_class_clear_method_cache(VALUE klass, VALUE arg)
|
||||||
{
|
{
|
||||||
RCLASS_SERIAL(klass) = rb_next_class_serial();
|
RCLASS_SERIAL(klass) = rb_next_class_serial();
|
||||||
rb_class_foreach_subclass(klass, rb_class_clear_method_cache);
|
rb_class_foreach_subclass(klass, rb_class_clear_method_cache, arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -95,7 +95,7 @@ rb_clear_method_cache_by_class(VALUE klass)
|
|||||||
INC_GLOBAL_METHOD_STATE();
|
INC_GLOBAL_METHOD_STATE();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
rb_class_clear_method_cache(klass);
|
rb_class_clear_method_cache(klass, Qnil);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user