diff options
author | S.H <gamelinks007@gmail.com> | 2022-10-23 16:17:24 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-10-23 16:17:24 +0900 |
commit | c8c136265c6dd343990293016eb9904aa78a0412 (patch) | |
tree | 8b2e525580f3aac8ecbf27cd0b11da7f6d23cb72 /hash.c | |
parent | 54cad3123a07583c90e85bcfc55ebd87124c1250 (diff) |
Introduce `hash_iter_status_check` function
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/6564
Merged-By: nobu <nobu@ruby-lang.org>
Diffstat (limited to 'hash.c')
-rw-r--r-- | hash.c | 33 |
1 files changed, 15 insertions, 18 deletions
@@ -1346,15 +1346,8 @@ struct hash_foreach_arg { }; 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; @@ -1368,6 +1361,19 @@ hash_ar_foreach_iter(st_data_t key, st_data_t value, st_data_t argp, int error) } 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) { struct hash_foreach_arg *arg = (struct hash_foreach_arg *)argp; @@ -1381,16 +1387,7 @@ hash_foreach_iter(st_data_t key, st_data_t value, st_data_t argp, int error) 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 |