felipe Sun Aug 10 17:50:45 2008 UTC
Modified files: (Branch: PHP_5_3)
/php-src/ext/standard array.c
/php-src/ext/standard/tests/array max.phpt max_error.phpt min.phpt
min_error.phpt
Log:
- MFH: New parameter parsing API (for min() and max())
http://cvs.php.net/viewvc.cgi/php-src/ext/standard/array.c?r1=1.308.2.21.2.37.2.39&r2=1.308.2.21.2.37.2.40&diff_format=u
Index: php-src/ext/standard/array.c
diff -u php-src/ext/standard/array.c:1.308.2.21.2.37.2.39
php-src/ext/standard/array.c:1.308.2.21.2.37.2.40
--- php-src/ext/standard/array.c:1.308.2.21.2.37.2.39 Sat Aug 2 04:46:06 2008
+++ php-src/ext/standard/array.c Sun Aug 10 17:50:44 2008
@@ -21,7 +21,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: array.c,v 1.308.2.21.2.37.2.39 2008/08/02 04:46:06 felipe Exp $ */
+/* $Id: array.c,v 1.308.2.21.2.37.2.40 2008/08/10 17:50:44 felipe Exp $ */
#include "php.h"
#include "php_ini.h"
@@ -923,47 +923,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);
}
}
@@ -973,39 +974,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];
@@ -1013,6 +1013,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.1.2.3.2.1&r2=1.1.2.3.2.2&diff_format=u
Index: php-src/ext/standard/tests/array/max.phpt
diff -u php-src/ext/standard/tests/array/max.phpt:1.1.2.3.2.1
php-src/ext/standard/tests/array/max.phpt:1.1.2.3.2.2
--- php-src/ext/standard/tests/array/max.phpt:1.1.2.3.2.1 Wed Oct 31
13:39:26 2007
+++ php-src/ext/standard/tests/array/max.phpt Sun Aug 10 17:50:44 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.1.2.5&r2=1.1.2.6&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.1.2.5
php-src/ext/standard/tests/array/max_error.phpt:1.1.2.6
--- php-src/ext/standard/tests/array/max_error.phpt:1.1.2.5 Fri Nov 2
19:41:11 2007
+++ php-src/ext/standard/tests/array/max_error.phpt Sun Aug 10 17:50:44 2008
@@ -17,17 +17,16 @@
?>
--EXPECTF--
-
*** Testing Error Conditions ***
-Warning: max(): At%seast 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%seast 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.1.2.3.2.1&r2=1.1.2.3.2.2&diff_format=u
Index: php-src/ext/standard/tests/array/min.phpt
diff -u php-src/ext/standard/tests/array/min.phpt:1.1.2.3.2.1
php-src/ext/standard/tests/array/min.phpt:1.1.2.3.2.2
--- php-src/ext/standard/tests/array/min.phpt:1.1.2.3.2.1 Wed Oct 31
13:39:26 2007
+++ php-src/ext/standard/tests/array/min.phpt Sun Aug 10 17:50:44 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.1.2.5&r2=1.1.2.6&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.1.2.5
php-src/ext/standard/tests/array/min_error.phpt:1.1.2.6
--- php-src/ext/standard/tests/array/min_error.phpt:1.1.2.5 Fri Nov 2
19:41:11 2007
+++ php-src/ext/standard/tests/array/min_error.phpt Sun Aug 10 17:50:44 2008
@@ -17,17 +17,16 @@
?>
--EXPECTF--
-
*** Testing Error Conditions ***
-Warning: min(): At%seast 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%seast 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