diff options
author | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2019-01-09 19:11:32 +0000 |
---|---|---|
committer | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2019-01-09 19:11:32 +0000 |
commit | e3dbe84e12b3ebe95187edc3a5e9fe2f373a0388 (patch) | |
tree | 24e46c8e6f5f32db9b4aa1452bf36ff59b31bbed /hash.c | |
parent | 140f8b94ced86966fc6979e8cfc5ef3bfa68da5d (diff) |
add setter of iter_lev.
* hash.c: add special setter function (inc and dec).
* internal.h: constify RHash::iter_leve.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66765 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'hash.c')
-rw-r--r-- | hash.c | 18 |
1 files changed, 15 insertions, 3 deletions
@@ -1206,17 +1206,29 @@ hash_foreach_iter(st_data_t key, st_data_t value, st_data_t argp, int error) return ST_CHECK; } +static void +hash_iter_lev_inc(VALUE hash) +{ + *((int *)&RHASH(hash)->iter_lev) = RHASH_ITER_LEV(hash) + 1; +} + +static void +hash_iter_lev_dec(VALUE hash) +{ + *((int *)&RHASH(hash)->iter_lev) = RHASH_ITER_LEV(hash) - 1; +} + static VALUE hash_foreach_ensure_rollback(VALUE hash) { - RHASH_ITER_LEV(hash)++; + hash_iter_lev_inc(hash); return 0; } static VALUE hash_foreach_ensure(VALUE hash) { - RHASH_ITER_LEV(hash)--; + hash_iter_lev_dec(hash); return 0; } @@ -1257,7 +1269,7 @@ rb_hash_foreach(VALUE hash, int (*func)(ANYARGS), VALUE farg) if (RHASH_TABLE_EMPTY_P(hash)) return; - RHASH_ITER_LEV(hash)++; + hash_iter_lev_inc(hash); arg.hash = hash; arg.func = (rb_foreach_func *)func; arg.arg = farg; |