cvs: php-src /ext/standard array.c /ext/standard/tests/array array_fill_keys.phpt

From: Date: Sat, 15 Jul 2006 12:06:10 +0000
Subject: cvs: php-src /ext/standard array.c /ext/standard/tests/array array_fill_keys.phpt
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-39251@lists.php.net to get a copy of this message
helly Sat Jul 15 12:06:10 2006 UTC Modified files: /php-src/ext/standard array.c /php-src/ext/standard/tests/array array_fill_keys.phpt Log: - Update array_fill_keys, better unicode support, use new param parsing API http://cvs.php.net/viewvc.cgi/php-src/ext/standard/array.c?r1=1.363&r2=1.364&diff_format=u Index: php-src/ext/standard/array.c diff -u php-src/ext/standard/array.c:1.363 php-src/ext/standard/array.c:1.364 --- php-src/ext/standard/array.c:1.363 Sat Jul 15 10:10:46 2006 +++ php-src/ext/standard/array.c Sat Jul 15 12:06:10 2006 @@ -21,7 +21,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: array.c,v 1.363 2006/07/15 10:10:46 helly Exp $ */ +/* $Id: array.c,v 1.364 2006/07/15 12:06:10 helly Exp $ */ #include "php.h" #include "php_ini.h" @@ -1646,53 +1646,43 @@ /* }}} */ -/* {{{ proto array array_fill_keys(array keys, mixed val) - Create an array using the elements of the first parameter as keys each initialized to val */ PHP_FUNCTION(array_fill_keys) { - zval **keys, **val, **entry; + zval *keys, *val, **entry; HashPosition pos; - if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &keys, &val) == FAILURE) { - WRONG_PARAM_COUNT; + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "az", &keys, &val) == FAILURE) { + return; } - if (Z_TYPE_PP(keys) != IS_ARRAY) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "First parameter must be an array"); - RETURN_FALSE; - } - /* Initialize return array */ array_init(return_value); - if (!zend_hash_num_elements(Z_ARRVAL_PP(keys))) { - return; - } - - if (PZVAL_IS_REF(*val)) { - SEPARATE_ZVAL(val); - } - - zend_hash_internal_pointer_reset_ex(Z_ARRVAL_PP(keys), &pos); - while (zend_hash_get_current_data_ex(Z_ARRVAL_PP(keys), (void **)&entry, &pos) == SUCCESS) { - zval_add_ref(val); + zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(keys), &pos); + while (zend_hash_get_current_data_ex(Z_ARRVAL_P(keys), (void **)&entry, &pos) == SUCCESS) { - if (Z_TYPE_PP(entry) == IS_STRING || Z_TYPE_PP(entry) == IS_UNICODE) { - zend_u_symtable_update(Z_ARRVAL_P(return_value), Z_TYPE_PP(entry), Z_UNIVAL_PP(entry), Z_UNILEN_PP(entry) + 1, val, sizeof(zval *), NULL); - } else if (Z_TYPE_PP(entry) == IS_LONG) { - zend_hash_index_update(Z_ARRVAL_P(return_value), Z_LVAL_PP(entry), val, sizeof(zval *), NULL); + if (Z_TYPE_PP(entry) == IS_LONG) { + zval_add_ref(&val); + zend_hash_index_update(Z_ARRVAL_P(return_value), Z_LVAL_PP(entry), &val, sizeof(zval *), NULL); } else { - zval tmpkey; + zval key, *key_ptr = *entry; - tmpkey = **entry; - zval_copy_ctor(&tmpkey); - convert_to_string(&tmpkey); + if (Z_TYPE_PP(entry) != IS_STRING && Z_TYPE_PP(entry) != IS_UNICODE) { + key = **entry; + zval_copy_ctor(&key); + convert_to_text(&key); + key_ptr = &key; + } - zend_symtable_update(Z_ARRVAL_P(return_value), Z_STRVAL(tmpkey), Z_STRLEN(tmpkey) + 1, val, sizeof(zval *), NULL); + zval_add_ref(&val); + zend_u_symtable_update(Z_ARRVAL_P(return_value), Z_TYPE_P(key_ptr), Z_UNIVAL_P(key_ptr), Z_UNILEN_P(key_ptr) + 1, &val, sizeof(zval *), NULL); - zval_dtor(&tmpkey); + if (key_ptr != *entry) { + zval_dtor(&key); + } } - zend_hash_move_forward_ex(Z_ARRVAL_PP(keys), &pos); + + zend_hash_move_forward_ex(Z_ARRVAL_P(keys), &pos); } } /* }}} */ http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/array/array_fill_keys.phpt?r1=1.1&r2=1.2&diff_format=u Index: php-src/ext/standard/tests/array/array_fill_keys.phpt diff -u php-src/ext/standard/tests/array/array_fill_keys.phpt:1.1 php-src/ext/standard/tests/array/array_fill_keys.phpt:1.2 --- php-src/ext/standard/tests/array/array_fill_keys.phpt:1.1 Sat Jul 15 10:10:47 2006 +++ php-src/ext/standard/tests/array/array_fill_keys.phpt Sat Jul 15 12:06:10 2006 @@ -10,8 +10,8 @@ ?> --EXPECTF-- -Warning: array_fill_keys(): First parameter must be an array in %s on line %d -bool(false) +Warning: array_fill_keys() expects parameter 1 to be array, string given in %s on line %d +NULL array(0) { } array(2) { @@ -42,8 +42,8 @@ } --UEXPECTF-- -Warning: array_fill_keys(): First parameter must be an array in %s on line %d -bool(false) +Warning: array_fill_keys() expects parameter 1 to be array, Unicode string given in %s on line %d +NULL array(0) { } array(2) {

« previous php.cvs (#39251) next »