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/