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

Reply via email to