mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
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
3 changed files with 20 additions and 8 deletions
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…
Add table
Add a link
Reference in a new issue