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

ruby-changes:36343

From: ko1 <ko1@a...>
Date: Fri, 14 Nov 2014 16:35:20 +0900 (JST)
Subject: [ruby-changes:36343] ko1:r48424 (trunk): * gc.c (gc_stat_internal): support comatible layer for

ko1	2014-11-14 16:35:05 +0900 (Fri, 14 Nov 2014)

  New Revision: 48424

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

  Log:
    * gc.c (gc_stat_internal): support comatible layer for
      GC.stat(symbol) type acess.

  Modified files:
    trunk/ChangeLog
    trunk/gc.c
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 48423)
+++ ChangeLog	(revision 48424)
@@ -1,3 +1,8 @@ https://github.com/ruby/ruby/blob/trunk/ChangeLog#L1
+Fri Nov 14 16:33:06 2014  Koichi Sasada  <ko1@a...>
+
+	* gc.c (gc_stat_internal): support comatible layer for
+	  GC.stat(symbol) type acess.
+
 Fri Nov 14 16:19:08 2014  Koichi Sasada  <ko1@a...>
 
 	* gc.c (gc_stat_internal): add compatible layer.
Index: gc.c
===================================================================
--- gc.c	(revision 48423)
+++ gc.c	(revision 48424)
@@ -6513,12 +6513,11 @@ setup_gc_stat_symbols(void) https://github.com/ruby/ruby/blob/trunk/gc.c#L6513
 }
 
 static VALUE
-default_proc_for_compat_func(VALUE hash, VALUE dmy, int argc, VALUE *argv)
+compat_key(VALUE key)
 {
-    VALUE key = argv[1];
-    VALUE new_key = Qnil;
+    VALUE new_key = rb_hash_aref(gc_stat_compat_table, key);
 
-    if ((new_key = rb_hash_aref(gc_stat_compat_table, key)) != Qnil) {
+    if (!NIL_P(new_key)) {
 	static int warned = 0;
 	if (warned == 0) {
 	    rb_warn("GC.stat keys were changed from Ruby 2.1. "
@@ -6527,6 +6526,18 @@ default_proc_for_compat_func(VALUE hash, https://github.com/ruby/ruby/blob/trunk/gc.c#L6526
 		    key, new_key);
 	    warned = 1;
 	}
+    }
+
+    return new_key;
+}
+
+static VALUE
+default_proc_for_compat_func(VALUE hash, VALUE dmy, int argc, VALUE *argv)
+{
+    VALUE key = argv[1];
+    VALUE new_key = Qnil;
+
+    if ((new_key = compat_key(key)) != Qnil) {
 	return rb_hash_aref(hash, new_key);
     }
 
@@ -6566,6 +6577,7 @@ gc_stat_internal(VALUE hash_or_sym) https://github.com/ruby/ruby/blob/trunk/gc.c#L6577
     else if (hash != Qnil) \
 	rb_hash_aset(hash, gc_stat_symbols[gc_stat_sym_##name], SIZET2NUM(attr));
 
+  again:
     SET(count, objspace->profile.count);
 
     /* implementation dependent counters */
@@ -6610,6 +6622,11 @@ gc_stat_internal(VALUE hash_or_sym) https://github.com/ruby/ruby/blob/trunk/gc.c#L6622
 #undef SET
 
     if (!NIL_P(key)) { /* matched key should return above */
+	VALUE new_key;
+	if ((new_key = compat_key(key)) != Qnil) {
+	    key = new_key;
+	    goto again;
+	}
 	rb_raise(rb_eArgError, "unknown key: %"PRIsVALUE, rb_sym2str(key));
     }
 

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

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