Skip to content

Commit e938ce9

Browse files
[ext/standard] Simplify array_sum/product iteration
1 parent c371d94 commit e938ce9

1 file changed

Lines changed: 24 additions & 58 deletions

File tree

ext/standard/array.c

Lines changed: 24 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -6371,69 +6371,35 @@ static void php_array_binop(INTERNAL_FUNCTION_PARAMETERS, const char *op_name, b
63716371

63726372
if (op == add_function) {
63736373
zval *entry;
6374-
if (HT_IS_PACKED(input)) {
6375-
ZEND_HASH_PACKED_FOREACH_VAL(input, entry) {
6376-
if (EXPECTED(Z_TYPE_P(entry) == IS_LONG) && EXPECTED(Z_TYPE_P(return_value) == IS_LONG)) {
6377-
fast_long_add_function(return_value, return_value, entry);
6378-
continue;
6379-
}
6380-
php_array_binop_apply(return_value, entry, op_name, op);
6381-
} ZEND_HASH_FOREACH_END();
6382-
} else {
6383-
ZEND_HASH_MAP_FOREACH_VAL(input, entry) {
6384-
if (EXPECTED(Z_TYPE_P(entry) == IS_LONG) && EXPECTED(Z_TYPE_P(return_value) == IS_LONG)) {
6385-
fast_long_add_function(return_value, return_value, entry);
6386-
continue;
6387-
}
6388-
php_array_binop_apply(return_value, entry, op_name, op);
6389-
} ZEND_HASH_FOREACH_END();
6390-
}
6374+
ZEND_HASH_FOREACH_VAL(input, entry) {
6375+
if (EXPECTED(Z_TYPE_P(entry) == IS_LONG) && EXPECTED(Z_TYPE_P(return_value) == IS_LONG)) {
6376+
fast_long_add_function(return_value, return_value, entry);
6377+
continue;
6378+
}
6379+
php_array_binop_apply(return_value, entry, op_name, op);
6380+
} ZEND_HASH_FOREACH_END();
63916381
} else if (op == mul_function) {
63926382
zval *entry;
6393-
if (HT_IS_PACKED(input)) {
6394-
ZEND_HASH_PACKED_FOREACH_VAL(input, entry) {
6395-
if (EXPECTED(Z_TYPE_P(entry) == IS_LONG) && EXPECTED(Z_TYPE_P(return_value) == IS_LONG)) {
6396-
zend_long lval;
6397-
double dval;
6398-
int overflow;
6399-
ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(return_value), Z_LVAL_P(entry), lval, dval, overflow);
6400-
if (UNEXPECTED(overflow)) {
6401-
ZVAL_DOUBLE(return_value, dval);
6402-
} else {
6403-
Z_LVAL_P(return_value) = lval;
6404-
}
6405-
continue;
6406-
}
6407-
php_array_binop_apply(return_value, entry, op_name, op);
6408-
} ZEND_HASH_FOREACH_END();
6409-
} else {
6410-
ZEND_HASH_MAP_FOREACH_VAL(input, entry) {
6411-
if (EXPECTED(Z_TYPE_P(entry) == IS_LONG) && EXPECTED(Z_TYPE_P(return_value) == IS_LONG)) {
6412-
zend_long lval;
6413-
double dval;
6414-
int overflow;
6415-
ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(return_value), Z_LVAL_P(entry), lval, dval, overflow);
6416-
if (UNEXPECTED(overflow)) {
6417-
ZVAL_DOUBLE(return_value, dval);
6418-
} else {
6419-
Z_LVAL_P(return_value) = lval;
6420-
}
6421-
continue;
6383+
ZEND_HASH_FOREACH_VAL(input, entry) {
6384+
if (EXPECTED(Z_TYPE_P(entry) == IS_LONG) && EXPECTED(Z_TYPE_P(return_value) == IS_LONG)) {
6385+
zend_long lval;
6386+
double dval;
6387+
int overflow;
6388+
ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(return_value), Z_LVAL_P(entry), lval, dval, overflow);
6389+
if (UNEXPECTED(overflow)) {
6390+
ZVAL_DOUBLE(return_value, dval);
6391+
} else {
6392+
Z_LVAL_P(return_value) = lval;
64226393
}
6423-
php_array_binop_apply(return_value, entry, op_name, op);
6424-
} ZEND_HASH_FOREACH_END();
6425-
}
6394+
continue;
6395+
}
6396+
php_array_binop_apply(return_value, entry, op_name, op);
6397+
} ZEND_HASH_FOREACH_END();
64266398
} else {
64276399
zval *entry;
6428-
if (HT_IS_PACKED(input)) {
6429-
ZEND_HASH_PACKED_FOREACH_VAL(input, entry) {
6430-
php_array_binop_apply(return_value, entry, op_name, op);
6431-
} ZEND_HASH_FOREACH_END();
6432-
} else {
6433-
ZEND_HASH_MAP_FOREACH_VAL(input, entry) {
6434-
php_array_binop_apply(return_value, entry, op_name, op);
6435-
} ZEND_HASH_FOREACH_END();
6436-
}
6400+
ZEND_HASH_FOREACH_VAL(input, entry) {
6401+
php_array_binop_apply(return_value, entry, op_name, op);
6402+
} ZEND_HASH_FOREACH_END();
64376403
}
64386404
}
64396405

0 commit comments

Comments
 (0)