[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]