ruby-changes:74210
From: S.H <ko1@a...>
Date: Sun, 23 Oct 2022 16:17:42 +0900 (JST)
Subject: [ruby-changes:74210] c8c136265c (master): Introduce `hash_iter_status_check` function
https://git.ruby-lang.org/ruby.git/commit/?id=c8c136265c From c8c136265c6dd343990293016eb9904aa78a0412 Mon Sep 17 00:00:00 2001 From: "S.H" <gamelinks007@g...> Date: Sun, 23 Oct 2022 16:17:24 +0900 Subject: Introduce `hash_iter_status_check` function --- hash.c | 33 +++++++++++++++------------------ 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/hash.c b/hash.c index 9218b17421..37c32af3ba 100644 --- a/hash.c +++ b/hash.c @@ -1346,15 +1346,8 @@ struct hash_foreach_arg { https://github.com/ruby/ruby/blob/trunk/hash.c#L1346 }; static int -hash_ar_foreach_iter(st_data_t key, st_data_t value, st_data_t argp, int error) +hash_iter_status_check(int status) { - struct hash_foreach_arg *arg = (struct hash_foreach_arg *)argp; - - if (error) return ST_STOP; - - int status = (*arg->func)((VALUE)key, (VALUE)value, arg->arg); - /* TODO: rehash check? rb_raise(rb_eRuntimeError, "rehash occurred during iteration"); */ - switch (status) { case ST_DELETE: return ST_DELETE; @@ -1367,6 +1360,19 @@ hash_ar_foreach_iter(st_data_t key, st_data_t value, st_data_t argp, int error) https://github.com/ruby/ruby/blob/trunk/hash.c#L1360 return ST_CHECK; } +static int +hash_ar_foreach_iter(st_data_t key, st_data_t value, st_data_t argp, int error) +{ + struct hash_foreach_arg *arg = (struct hash_foreach_arg *)argp; + + if (error) return ST_STOP; + + int status = (*arg->func)((VALUE)key, (VALUE)value, arg->arg); + /* TODO: rehash check? rb_raise(rb_eRuntimeError, "rehash occurred during iteration"); */ + + return hash_iter_status_check(status); +} + static int hash_foreach_iter(st_data_t key, st_data_t value, st_data_t argp, int error) { @@ -1381,16 +1387,7 @@ hash_foreach_iter(st_data_t key, st_data_t value, st_data_t argp, int error) https://github.com/ruby/ruby/blob/trunk/hash.c#L1387 rb_raise(rb_eRuntimeError, "rehash occurred during iteration"); } - switch (status) { - case ST_DELETE: - return ST_DELETE; - case ST_CONTINUE: - break; - case ST_STOP: - return ST_STOP; - } - - return ST_CHECK; + return hash_iter_status_check(status); } static int -- cgit v1.2.3 -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/