@@ -880,7 +880,7 @@ ar_general_foreach(VALUE hash, st_foreach_check_callback_func *func, st_update_c
880880 return 0 ;
881881 case ST_REPLACE :
882882 if (replace ) {
883- (* replace )(& key , & val , arg , TRUE);
883+ retval = (* replace )(& key , & val , arg , TRUE);
884884
885885 // TODO: pair should be same as pair before.
886886 pair = RHASH_AR_TABLE_REF (hash , i );
@@ -1404,84 +1404,26 @@ hash_foreach_ensure(VALUE hash)
14041404 return 0 ;
14051405}
14061406
1407- struct hash_stlike_foreach_arg {
1408- VALUE hash ;
1409- st_foreach_callback_func * func ;
1410- VALUE arg ;
1411- };
1412-
1413- static VALUE
1414- hash_stlike_foreach_call (VALUE args )
1407+ int
1408+ rb_hash_stlike_foreach (VALUE hash , st_foreach_callback_func * func , st_data_t arg )
14151409{
1416- struct hash_stlike_foreach_arg * argp = (void * )args ;
1417- VALUE hash = argp -> hash ;
1418- st_foreach_callback_func * func = argp -> func ;
1419- VALUE arg = argp -> arg ;
1420- int ret ;
1421-
14221410 if (RHASH_AR_TABLE_P (hash )) {
1423- ret = ar_foreach (hash , func , arg );
1411+ return ar_foreach (hash , func , arg );
14241412 }
14251413 else {
1426- ret = st_foreach (RHASH_ST_TABLE (hash ), func , arg );
1414+ return st_foreach (RHASH_ST_TABLE (hash ), func , arg );
14271415 }
1428- return (VALUE )ret ;
14291416}
14301417
14311418int
1432- rb_hash_stlike_foreach (VALUE hash , st_foreach_callback_func * func , st_data_t arg )
1419+ rb_hash_stlike_foreach_with_replace (VALUE hash , st_foreach_check_callback_func * func , st_update_callback_func * replace , st_data_t arg )
14331420{
1434- struct hash_stlike_foreach_arg args = {
1435- .hash = hash ,
1436- .func = func ,
1437- .arg = arg ,
1438- };
1439- hash_iter_lev_inc (hash );
1440- VALUE ret = rb_ensure (hash_stlike_foreach_call , (VALUE )& args ,
1441- hash_foreach_ensure , hash );
1442- return (int )ret ;
1443- }
1444-
1445- struct hash_stlike_foreach_with_replace_arg {
1446- VALUE hash ;
1447- st_foreach_check_callback_func * func ;
1448- st_update_callback_func * replace ;
1449- VALUE arg ;
1450- };
1451-
1452- static VALUE
1453- hash_stlike_foreach_with_replace_call (VALUE args )
1454- {
1455- struct hash_stlike_foreach_with_replace_arg * argp = (void * )args ;
1456- VALUE hash = argp -> hash ;
1457- st_foreach_check_callback_func * func = argp -> func ;
1458- st_update_callback_func * replace = argp -> replace ;
1459- VALUE arg = argp -> arg ;
1460- int ret ;
1461-
14621421 if (RHASH_AR_TABLE_P (hash )) {
1463- ret = ar_foreach_with_replace (hash , func , replace , arg );
1422+ return ar_foreach_with_replace (hash , func , replace , arg );
14641423 }
14651424 else {
1466- ret = st_foreach_with_replace (RHASH_ST_TABLE (hash ), func , replace , arg );
1425+ return st_foreach_with_replace (RHASH_ST_TABLE (hash ), func , replace , arg );
14671426 }
1468- return (VALUE )ret ;
1469- }
1470-
1471- int
1472- rb_hash_stlike_foreach_with_replace (VALUE hash , st_foreach_check_callback_func * func ,
1473- st_update_callback_func * replace , st_data_t arg )
1474- {
1475- struct hash_stlike_foreach_with_replace_arg args = {
1476- .hash = hash ,
1477- .func = func ,
1478- .replace = replace ,
1479- .arg = arg ,
1480- };
1481- hash_iter_lev_inc (hash );
1482- VALUE ret = rb_ensure (hash_stlike_foreach_with_replace_call , (VALUE )& args ,
1483- hash_foreach_ensure , hash );
1484- return (int )ret ;
14851427}
14861428
14871429static VALUE
0 commit comments