[前][次][番号順一覧][スレッド一覧]

ruby-changes:37254

From: nobu <ko1@a...>
Date: Mon, 19 Jan 2015 23:09:37 +0900 (JST)
Subject: [ruby-changes:37254] nobu:r49335 (trunk): class.c: add callback argument

nobu	2015-01-19 23:09:20 +0900 (Mon, 19 Jan 2015)

  New Revision: 49335

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=49335

  Log:
    class.c: add callback argument
    
    * class.c (rb_class_foreach_subclass): add argument for callback
      function.

  Modified files:
    trunk/class.c
    trunk/internal.h
    trunk/vm_method.c
Index: vm_method.c
===================================================================
--- vm_method.c	(revision 49334)
+++ vm_method.c	(revision 49335)
@@ -61,10 +61,10 @@ static struct { https://github.com/ruby/ruby/blob/trunk/vm_method.c#L61
 /* int ruby_running = 0; */
 
 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();
-    rb_class_foreach_subclass(klass, rb_class_clear_method_cache);
+    rb_class_foreach_subclass(klass, rb_class_clear_method_cache, arg);
 }
 
 void
@@ -95,7 +95,7 @@ rb_clear_method_cache_by_class(VALUE kla https://github.com/ruby/ruby/blob/trunk/vm_method.c#L95
 	    INC_GLOBAL_METHOD_STATE();
 	}
 	else {
-	    rb_class_clear_method_cache(klass);
+	    rb_class_clear_method_cache(klass, Qnil);
 	}
     }
 }
Index: class.c
===================================================================
--- class.c	(revision 49334)
+++ class.c	(revision 49335)
@@ -110,7 +110,7 @@ rb_class_remove_from_module_subclasses(V https://github.com/ruby/ruby/blob/trunk/class.c#L110
 }
 
 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;
 
@@ -119,20 +119,32 @@ rb_class_foreach_subclass(VALUE klass, v https://github.com/ruby/ruby/blob/trunk/class.c#L119
     while (cur) {
 	VALUE curklass = cur->klass;
 	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
 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
 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);
 }
 
 /**
Index: internal.h
===================================================================
--- internal.h	(revision 49334)
+++ internal.h	(revision 49335)
@@ -542,7 +542,7 @@ VALUE rb_integer_float_cmp(VALUE x, VALU https://github.com/ruby/ruby/blob/trunk/internal.h#L542
 VALUE rb_integer_float_eq(VALUE x, VALUE y);
 
 /* 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_module_subclasses(VALUE);
 void rb_class_remove_from_module_subclasses(VALUE);

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]