diff options
author | Samuel Williams <samuel.williams@oriontransfer.co.nz> | 2022-10-22 23:34:00 +1300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-10-22 23:34:00 +1300 |
commit | 8dfe3bdf48ff73052de1262e4644c08742abd8e6 (patch) | |
tree | a437087830abc278c78163c69ff48da21d8e078f /hash.c | |
parent | 420bdba1397b355aec773688487229c20a1e7759 (diff) |
Improved formatting of `hash_foreach_iter` functions. (#6615)
Notes
Notes:
Merged-By: ioquatix <samuel@codeotaku.com>
Diffstat (limited to 'hash.c')
-rw-r--r-- | hash.c | 17 |
1 files changed, 10 insertions, 7 deletions
@@ -1349,10 +1349,10 @@ 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; - int status; if (error) return ST_STOP; - status = (*arg->func)((VALUE)key, (VALUE)value, arg->arg); + + int status = (*arg->func)((VALUE)key, (VALUE)value, arg->arg); /* TODO: rehash check? rb_raise(rb_eRuntimeError, "rehash occurred during iteration"); */ switch (status) { @@ -1363,6 +1363,7 @@ hash_ar_foreach_iter(st_data_t key, st_data_t value, st_data_t argp, int error) case ST_STOP: return ST_STOP; } + return ST_CHECK; } @@ -1370,15 +1371,16 @@ 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; - int status; - st_table *tbl; if (error) return ST_STOP; - tbl = RHASH_ST_TABLE(arg->hash); - status = (*arg->func)((VALUE)key, (VALUE)value, arg->arg); + + st_table *tbl = RHASH_ST_TABLE(arg->hash); + int status = (*arg->func)((VALUE)key, (VALUE)value, arg->arg); + if (RHASH_ST_TABLE(arg->hash) != tbl) { - rb_raise(rb_eRuntimeError, "rehash occurred during iteration"); + rb_raise(rb_eRuntimeError, "rehash occurred during iteration"); } + switch (status) { case ST_DELETE: return ST_DELETE; @@ -1387,6 +1389,7 @@ hash_foreach_iter(st_data_t key, st_data_t value, st_data_t argp, int error) case ST_STOP: return ST_STOP; } + return ST_CHECK; } |