felipe Sun Aug 10 17:49:30 2008 UTC Modified files: /php-src/ext/standard array.c /php-src/ext/standard/tests/array max.phpt max_error.phpt min.phpt min_error.phpt Log: - New parameter parsing API (for min() and max())
http://cvs.php.net/viewvc.cgi/php-src/ext/standard/array.c?r1=1.459&r2=1.460&diff_format=u Index: php-src/ext/standard/array.c diff -u php-src/ext/standard/array.c:1.459 php-src/ext/standard/array.c:1.460 --- php-src/ext/standard/array.c:1.459 Sat Aug 2 04:40:45 2008 +++ php-src/ext/standard/array.c Sun Aug 10 17:49:29 2008 @@ -21,7 +21,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: array.c,v 1.459 2008/08/02 04:40:45 felipe Exp $ */ +/* $Id: array.c,v 1.460 2008/08/10 17:49:29 felipe Exp $ */ #include "php.h" #include "php_ini.h" @@ -946,47 +946,48 @@ Return the lowest value in an array or a series of arguments */ PHP_FUNCTION(min) { - int argc=ZEND_NUM_ARGS(); - zval **result; + int argc; + zval ***args = NULL; - if (argc<=0) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "At least one value should be passed"); - RETURN_NULL(); + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "+", &args, &argc) == FAILURE) { + return; } + php_set_compare_func(PHP_SORT_REGULAR TSRMLS_CC); + + /* mixed min ( array $values ) */ if (argc == 1) { - zval **arr; - - if (zend_get_parameters_ex(1, &arr) == FAILURE || Z_TYPE_PP(arr) != IS_ARRAY) { - WRONG_PARAM_COUNT; - } - if (zend_hash_minmax(Z_ARRVAL_PP(arr), php_array_data_compare, 0, (void **) &result TSRMLS_CC) == SUCCESS) { - RETVAL_ZVAL(*result, 1, 0); + zval **result; + + if (Z_TYPE_PP(args[0]) != IS_ARRAY) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "When only one parameter is given, it must be an array"); + RETVAL_NULL(); } else { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Array must contain at least one element"); - RETURN_FALSE; + if (zend_hash_minmax(Z_ARRVAL_PP(args[0]), php_array_data_compare, 0, (void **) &result TSRMLS_CC) == SUCCESS) { + RETVAL_ZVAL(*result, 1, 0); + } else { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Array must contain at least one element"); + RETVAL_FALSE; + } } } else { - zval ***args = (zval ***) safe_emalloc(sizeof(zval **), ZEND_NUM_ARGS(), 0); + /* mixed min ( mixed $value1 , mixed $value2 [, mixed $value3... ] ) */ zval **min, result; int i; - if (zend_get_parameters_array_ex(ZEND_NUM_ARGS(), args)==FAILURE) { - efree(args); - WRONG_PARAM_COUNT; - } - min = args[0]; - for (i=1; i<ZEND_NUM_ARGS(); i++) { + for (i = 1; i < argc; i++) { is_smaller_function(&result, *args[i], *min TSRMLS_CC); if (Z_LVAL(result) == 1) { min = args[i]; } } - RETVAL_ZVAL(*min, 1, 0); + RETVAL_ZVAL(*min, 1, 0); + } + if (args) { efree(args); } } @@ -996,39 +997,38 @@ Return the highest value in an array or a series of arguments */ PHP_FUNCTION(max) { - int argc=ZEND_NUM_ARGS(); - zval **result; - - if (argc<=0) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "At least one value should be passed"); - RETURN_NULL(); + zval ***args = NULL; + int argc; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "+", &args, &argc) == FAILURE) { + return; } + php_set_compare_func(PHP_SORT_REGULAR TSRMLS_CC); + + /* mixed max ( array $values ) */ if (argc == 1) { - zval **arr; + zval **result; - if (zend_get_parameters_ex(1, &arr) == FAILURE || Z_TYPE_PP(arr) != IS_ARRAY) { - WRONG_PARAM_COUNT; - } - if (zend_hash_minmax(Z_ARRVAL_PP(arr), php_array_data_compare, 1, (void **) &result TSRMLS_CC) == SUCCESS) { - RETVAL_ZVAL(*result, 1, 0); + if (Z_TYPE_PP(args[0]) != IS_ARRAY) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "When only one parameter is given, it must be an array"); + RETVAL_NULL(); } else { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Array must contain at least one element"); - RETURN_FALSE; + if (zend_hash_minmax(Z_ARRVAL_PP(args[0]), php_array_data_compare, 1, (void **) &result TSRMLS_CC) == SUCCESS) { + RETVAL_ZVAL(*result, 1, 0); + } else { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Array must contain at least one element"); + RETVAL_FALSE; + } } } else { - zval ***args = (zval ***) safe_emalloc(sizeof(zval **), ZEND_NUM_ARGS(), 0); + /* mixed max ( mixed $value1 , mixed $value2 [, mixed $value3... ] ) */ zval **max, result; int i; - if (zend_get_parameters_array_ex(ZEND_NUM_ARGS(), args) == FAILURE) { - efree(args); - WRONG_PARAM_COUNT; - } - max = args[0]; - for (i=1; i<ZEND_NUM_ARGS(); i++) { + for (i = 1; i < argc; i++) { is_smaller_or_equal_function(&result, *args[i], *max TSRMLS_CC); if (Z_LVAL(result) == 0) { max = args[i]; @@ -1036,6 +1036,9 @@ } RETVAL_ZVAL(*max, 1, 0); + } + + if (args) { efree(args); } } http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/array/max.phpt?r1=1.4&r2=1.5&diff_format=u Index: php-src/ext/standard/tests/array/max.phpt diff -u php-src/ext/standard/tests/array/max.phpt:1.4 php-src/ext/standard/tests/array/max.phpt:1.5 --- php-src/ext/standard/tests/array/max.phpt:1.4 Mon May 26 23:35:49 2008 +++ php-src/ext/standard/tests/array/max.phpt Sun Aug 10 17:49:30 2008 @@ -20,16 +20,16 @@ echo "Done\n"; ?> --EXPECTF-- -Warning: max(): At least one value should be passed in %s on line %d +Warning: max() expects at least 1 parameter, 0 given in %s on line 3 NULL -Warning: Wrong parameter count for max() in %s on line %d +Warning: max(): When only one parameter is given, it must be an array in %s on line 4 NULL -Warning: max(): Array must contain at least one element in %s on line %d +Warning: max(): Array must contain at least one element in %s on line 5 bool(false) -Warning: Wrong parameter count for max() in %s on line %d +Warning: max(): When only one parameter is given, it must be an array in %s on line 6 NULL int(2) float(2.11) http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/array/max_error.phpt?r1=1.4&r2=1.5&diff_format=u Index: php-src/ext/standard/tests/array/max_error.phpt diff -u php-src/ext/standard/tests/array/max_error.phpt:1.4 php-src/ext/standard/tests/array/max_error.phpt:1.5 --- php-src/ext/standard/tests/array/max_error.phpt:1.4 Mon May 26 23:35:49 2008 +++ php-src/ext/standard/tests/array/max_error.phpt Sun Aug 10 17:49:30 2008 @@ -17,17 +17,16 @@ ?> --EXPECTF-- - *** Testing Error Conditions *** -Warning: max(): At least one %s on line %d +Warning: max() expects at least 1 parameter, 0 given in %s on line 10 NULL -Warning: Wrong parameter count for max() in %s on line %d +Warning: max(): When only one parameter is given, it must be an array in %s on line 11 NULL -Warning: max(): Array must contain at least one element in %s on line %d +Warning: max(): Array must contain at least one element in %s on line 12 bool(false) -Warning: Wrong parameter count for max() in %s on line %d +Warning: max(): When only one parameter is given, it must be an array in %s on line 13 NULL http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/array/min.phpt?r1=1.4&r2=1.5&diff_format=u Index: php-src/ext/standard/tests/array/min.phpt diff -u php-src/ext/standard/tests/array/min.phpt:1.4 php-src/ext/standard/tests/array/min.phpt:1.5 --- php-src/ext/standard/tests/array/min.phpt:1.4 Mon May 26 23:35:49 2008 +++ php-src/ext/standard/tests/array/min.phpt Sun Aug 10 17:49:30 2008 @@ -20,16 +20,16 @@ echo "Done\n"; ?> --EXPECTF-- -Warning: min(): At least one value should be passed in %s on line %d +Warning: min() expects at least 1 parameter, 0 given in %s on line 3 NULL -Warning: Wrong parameter count for min() in %s on line %d +Warning: min(): When only one parameter is given, it must be an array in %s on line 4 NULL -Warning: min(): Array must contain at least one element in %s on line %d +Warning: min(): Array must contain at least one element in %s on line 5 bool(false) -Warning: Wrong parameter count for min() in %s on line %d +Warning: min(): When only one parameter is given, it must be an array in %s on line 6 NULL int(1) float(2.09) http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/array/min_error.phpt?r1=1.4&r2=1.5&diff_format=u Index: php-src/ext/standard/tests/array/min_error.phpt diff -u php-src/ext/standard/tests/array/min_error.phpt:1.4 php-src/ext/standard/tests/array/min_error.phpt:1.5 --- php-src/ext/standard/tests/array/min_error.phpt:1.4 Mon May 26 23:35:49 2008 +++ php-src/ext/standard/tests/array/min_error.phpt Sun Aug 10 17:49:30 2008 @@ -17,17 +17,16 @@ ?> --EXPECTF-- - *** Testing Error Conditions *** -Warning: min(): At least one %s on line %d +Warning: min() expects at least 1 parameter, 0 given in %s on line 10 NULL -Warning: Wrong parameter count for min() in %s on line %d +Warning: min(): When only one parameter is given, it must be an array in %s on line 11 NULL -Warning: min(): Array must contain at least one element in %s on line %d +Warning: min(): Array must contain at least one element in %s on line 12 bool(false) -Warning: Wrong parameter count for min() in %s on line %d +Warning: min(): When only one parameter is given, it must be an array in %s on line 13 NULL
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php