summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-11-14 07:35:05 +0000
committerko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-11-14 07:35:05 +0000
commita84b2a6afd1557829cd30843e0bee27e960adbe8 (patch)
tree32e9381780c59660e52a07bc639a34c261546391
parent5d5c95f28e9f40bbe867ce05feaa351d76fd53dd (diff)
* gc.c (gc_stat_internal): support comatible layer for
GC.stat(symbol) type acess. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48424 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog5
-rw-r--r--gc.c25
2 files changed, 26 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index a563cee61a..03b6587612 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Fri Nov 14 16:33:06 2014 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (gc_stat_internal): support comatible layer for
+ GC.stat(symbol) type acess.
+
Fri Nov 14 16:19:08 2014 Koichi Sasada <ko1@atdot.net>
* gc.c (gc_stat_internal): add compatible layer.
diff --git a/gc.c b/gc.c
index 8719dbb0d8..ef8b3441f7 100644
--- a/gc.c
+++ b/gc.c
@@ -6513,12 +6513,11 @@ setup_gc_stat_symbols(void)
}
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, VALUE dmy, int argc, VALUE *argv)
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)
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)
#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));
}