andrei          Fri Jul 14 17:35:54 2006 UTC

  Modified files:              
    /php-src    unicode-progress.txt unicode-todo.txt 
    /php-src/ext/standard       array.c 
  Log:
  - Simplify array_fill().
  - Do params API for a couple of funcs and mark them as Unicode
    compliant.
  
  
http://cvs.php.net/viewvc.cgi/php-src/unicode-progress.txt?r1=1.16&r2=1.17&diff_format=u
Index: php-src/unicode-progress.txt
diff -u php-src/unicode-progress.txt:1.16 php-src/unicode-progress.txt:1.17
--- php-src/unicode-progress.txt:1.16   Thu Jul 13 22:26:42 2006
+++ php-src/unicode-progress.txt        Fri Jul 14 17:35:53 2006
@@ -25,15 +25,9 @@
         Should work with minor cleanups provided that underlying comparison
         functions are fixed, FCI cache, test
 
-    array_fill()
-        Params API, test
-
     array_filter()
         Params API, FCI cache, test
 
-    array_flip()
-        Params API, test
-
     array_intersect(), array_uintersect()
     array_intersect_assoc(), array_uintersect_assoc(), 
array_intersect_uassoc(), array_uintersect_uassoc()
     array_intersect_key(), array_intersect_ukey()
@@ -55,9 +49,6 @@
     array_pad()
         Params API, test
 
-    array_push(), array_pop(), array_shift(), array_unshift()
-        Params API, test
-
     array_rand()
         Params API, test
 
@@ -108,9 +99,12 @@
   array.c
   -------
     array_chunk() 
+    array_fill()
+    array_flip()
     array_merge()
     array_merge_recursive()
     array_product()
+    array_push(), array_pop(), array_shift(), array_unshift()
     array_sum()
     compact()
     count()
http://cvs.php.net/viewvc.cgi/php-src/unicode-todo.txt?r1=1.15&r2=1.16&diff_format=u
Index: php-src/unicode-todo.txt
diff -u php-src/unicode-todo.txt:1.15 php-src/unicode-todo.txt:1.16
--- php-src/unicode-todo.txt:1.15       Tue Jul 11 22:42:55 2006
+++ php-src/unicode-todo.txt    Fri Jul 14 17:35:53 2006
@@ -41,3 +41,10 @@
 
 * Review the decision to coerce binary strings to Unicode when used as array
   keys.
+
+* Figure out generic approach to locale validation/fallback.
+
+* Relax requirement on mixing unicode/binary strings in parameters
+  (zend_get_unified_string_type() callers and others)
+
+* Constant registration/fetching should do identifier normalization.
http://cvs.php.net/viewvc.cgi/php-src/ext/standard/array.c?r1=1.354&r2=1.355&diff_format=u
Index: php-src/ext/standard/array.c
diff -u php-src/ext/standard/array.c:1.354 php-src/ext/standard/array.c:1.355
--- php-src/ext/standard/array.c:1.354  Thu Jul 13 22:26:42 2006
+++ php-src/ext/standard/array.c        Fri Jul 14 17:35:54 2006
@@ -21,7 +21,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: array.c,v 1.354 2006/07/13 22:26:42 andrei Exp $ */
+/* $Id: array.c,v 1.355 2006/07/14 17:35:54 andrei Exp $ */
 
 #include "php.h"
 #include "php_ini.h"
@@ -1642,50 +1642,32 @@
 }
 /* }}} */
 
-/* {{{ proto array array_fill(int start_key, int num, mixed val)
+/* {{{ proto array array_fill(int start_key, int num, mixed val) U
    Create an array containing num elements starting with index start_key each 
initialized to val */
 PHP_FUNCTION(array_fill)
 {
-       zval **start_key, **num, **val, *newval;
-       long i;
+       zval *val;
+       long start_key, num;
 
-       if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &start_key, &num, 
&val) == FAILURE) {
-               WRONG_PARAM_COUNT;
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llz", &start_key, 
&num, &val) == FAILURE) {
+               return;
        }
 
-       switch (Z_TYPE_PP(start_key)) {
-               case IS_STRING:
-               case IS_UNICODE:
-               case IS_LONG:
-               case IS_DOUBLE:
-                       /* allocate an array for return */
-                       array_init(return_value);
-                       
-                       if (PZVAL_IS_REF(*val)) {
-                               SEPARATE_ZVAL(val);
-                       }
-                       convert_to_long_ex(start_key);
-                       zval_add_ref(val);
-                       zend_hash_index_update(Z_ARRVAL_P(return_value), 
Z_LVAL_PP(start_key), val, sizeof(val), NULL);
-                       break;
-               default:
-                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "Wrong data 
type for start key");
-                       RETURN_FALSE;
-                       break;
-       }       
-
-       convert_to_long_ex(num);
-       i = Z_LVAL_PP(num) - 1; 
-       if (i < 0) {
-               zend_hash_destroy(Z_ARRVAL_P(return_value));
-               efree(Z_ARRVAL_P(return_value));
+       num--;
+       if (num < 0) {
                php_error_docref(NULL TSRMLS_CC, E_WARNING, "Number of elements 
must be positive");
                RETURN_FALSE;
        }
-       newval = *val;
-       while (i--) {
-               zval_add_ref(&newval);
-               zend_hash_next_index_insert(Z_ARRVAL_P(return_value), &newval, 
sizeof(zval *), NULL);
+
+       /* allocate an array for return */
+       array_init(return_value);
+
+       zval_add_ref(&val);
+       zend_hash_index_update(Z_ARRVAL_P(return_value), start_key, &val, 
sizeof(zval *), NULL);
+
+       while (num--) {
+               zval_add_ref(&val);
+               zend_hash_next_index_insert(Z_ARRVAL_P(return_value), &val, 
sizeof(zval *), NULL);
        }
 }
 /* }}} */
@@ -2065,15 +2047,15 @@
 /* }}} */
 
 
-/* {{{ proto int array_push(array stack, mixed var [, mixed ...])
+/* {{{ proto int array_push(array stack, mixed var [, mixed ...]) U
    Pushes elements onto the end of the array */
 PHP_FUNCTION(array_push)
 {
-       zval      ***args,              /* Function arguments array */
-                   *stack,             /* Input array */
-                   *new_var;           /* Variable to be pushed */
-       int          i,                 /* Loop counter */
-                    argc;              /* Number of function arguments */
+       zval    ***args,        /* Function arguments array */
+                         *stack,       /* Input array */
+                         *new_var;     /* Variable to be pushed */
+       int        i,           /* Loop counter */
+                          argc;        /* Number of function arguments */
 
        /* Get the argument count and check it */
        argc = ZEND_NUM_ARGS();
@@ -2111,53 +2093,47 @@
 /* }}} */
 
 
-/* {{{ void _phpi_pop(INTERNAL_FUNCTION_PARAMETERS, int which_end) */
+/* {{{ void _phpi_pop(INTERNAL_FUNCTION_PARAMETERS, int off_the_end) */
 static void _phpi_pop(INTERNAL_FUNCTION_PARAMETERS, int off_the_end)
 {
-       zval **stack,                   /* Input stack */
+       zval *stack,            /* Input stack */
             **val;                     /* Value to be popped */
        zstr key = NULL_ZSTR;
        uint key_len = 0;
        ulong index;
        zend_uchar key_type;
        
-       /* Get the arguments and do error-checking */
-       if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &stack) == 
FAILURE) {
-               WRONG_PARAM_COUNT;
-       }
-       
-       if (Z_TYPE_PP(stack) != IS_ARRAY) {
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "The argument 
should be an array");
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a", &stack) == 
FAILURE) {
                return;
        }
 
-       if (zend_hash_num_elements(Z_ARRVAL_PP(stack)) == 0) {
+       if (zend_hash_num_elements(Z_ARRVAL_P(stack)) == 0) {
                return;
        }
                
        /* Get the first or last value and copy it into the return value */
        if (off_the_end)
-               zend_hash_internal_pointer_end(Z_ARRVAL_PP(stack));
+               zend_hash_internal_pointer_end(Z_ARRVAL_P(stack));
        else
-               zend_hash_internal_pointer_reset(Z_ARRVAL_PP(stack));
-       zend_hash_get_current_data(Z_ARRVAL_PP(stack), (void **)&val);
+               zend_hash_internal_pointer_reset(Z_ARRVAL_P(stack));
+       zend_hash_get_current_data(Z_ARRVAL_P(stack), (void **)&val);
        RETVAL_ZVAL(*val, 1, 0);
        
        /* Delete the first or last value */
-       key_type = zend_hash_get_current_key_ex(Z_ARRVAL_PP(stack), &key, 
&key_len, &index, 0, NULL);
-       if (key.v && Z_ARRVAL_PP(stack) == &EG(symbol_table)) {
+       key_type = zend_hash_get_current_key_ex(Z_ARRVAL_P(stack), &key, 
&key_len, &index, 0, NULL);
+       if (key.v && Z_ARRVAL_P(stack) == &EG(symbol_table)) {
                if (key_type == HASH_KEY_IS_UNICODE) key_type = IS_UNICODE;
                else key_type = IS_STRING;
                zend_u_delete_global_variable(key_type, key, key_len-1 
TSRMLS_CC);
        } else {
-               zend_u_hash_del_key_or_index(Z_ARRVAL_PP(stack), key_type, key, 
key_len, index, (key.v) ? HASH_DEL_KEY : HASH_DEL_INDEX);
+               zend_u_hash_del_key_or_index(Z_ARRVAL_P(stack), key_type, key, 
key_len, index, (key.v) ? HASH_DEL_KEY : HASH_DEL_INDEX);
        }
        
        /* If we did a shift... re-index like it did before */
        if (!off_the_end) {
                unsigned int k = 0;
                int should_rehash = 0;
-               Bucket *p = Z_ARRVAL_PP(stack)->pListHead;
+               Bucket *p = Z_ARRVAL_P(stack)->pListHead;
                while (p != NULL) {
                        if (p->nKeyLength == 0) {
                                if (p->h != k) {
@@ -2169,19 +2145,19 @@
                        }
                        p = p->pListNext;
                }
-               Z_ARRVAL_PP(stack)->nNextFreeElement = k;
+               Z_ARRVAL_P(stack)->nNextFreeElement = k;
                if (should_rehash) {
-                       zend_hash_rehash(Z_ARRVAL_PP(stack));
+                       zend_hash_rehash(Z_ARRVAL_P(stack));
                }
        } else if (!key_len) {
-               Z_ARRVAL_PP(stack)->nNextFreeElement = 
Z_ARRVAL_PP(stack)->nNextFreeElement - 1;
+               Z_ARRVAL_P(stack)->nNextFreeElement = 
Z_ARRVAL_P(stack)->nNextFreeElement - 1;
        }
 
-       zend_hash_internal_pointer_reset(Z_ARRVAL_PP(stack));
+       zend_hash_internal_pointer_reset(Z_ARRVAL_P(stack));
 }
 /* }}} */
 
-/* {{{ proto mixed array_pop(array stack)
+/* {{{ proto mixed array_pop(array stack) U
    Pops an element off the end of the array */
 PHP_FUNCTION(array_pop)
 {
@@ -2190,7 +2166,7 @@
 /* }}} */
 
 
-/* {{{ proto mixed array_shift(array stack)
+/* {{{ proto mixed array_shift(array stack) U
    Pops an element off the beginning of the array */
 PHP_FUNCTION(array_shift)
 {
@@ -2199,14 +2175,14 @@
 /* }}} */
 
 
-/* {{{ proto int array_unshift(array stack, mixed var [, mixed ...])
+/* {{{ proto int array_unshift(array stack, mixed var [, mixed ...]) U
    Pushes elements onto the beginning of the array */
 PHP_FUNCTION(array_unshift)
 {
-       zval      ***args,              /* Function arguments array */
-                   *stack;             /* Input stack */
-       HashTable   *new_hash;          /* New hashtable for the stack */
-       int          argc;              /* Number of function arguments */
+       zval     ***args,      /* Function arguments array */
+                          *stack;     /* Input stack */
+       HashTable  *new_hash;  /* New hashtable for the stack */
+       int         argc;      /* Number of function arguments */
        
 
        /* Get the argument count and check it */       
@@ -2886,27 +2862,22 @@
 }
 /* }}} */
 
-/* {{{ proto array array_flip(array input)
+/* {{{ proto array array_flip(array input) U
    Return array with key <-> value flipped */
 PHP_FUNCTION(array_flip)
 {
-       zval **array, **entry, *data;
+       zval *array, **entry, *data;
        HashTable *target_hash;
        zstr string_key;
        uint str_key_len;
        ulong num_key;
        HashPosition pos;
                                        
-       if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &array) == 
FAILURE) {
-               WRONG_PARAM_COUNT;
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a", &array) == 
FAILURE) {
+               return;
        }
 
-       target_hash = HASH_OF(*array);
-       if (!target_hash) {
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "The argument 
should be an array");
-               RETURN_FALSE;
-       }
-       
+       target_hash = HASH_OF(array);
        array_init(return_value);
 
        zend_hash_internal_pointer_reset_ex(target_hash, &pos);

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to