summaryrefslogtreecommitdiff
path: root/ext/spl/spl_fixedarray.c
diff options
context:
space:
mode:
authorXinchen Hui <laruence@php.net>2013-02-24 12:59:10 +0800
committerXinchen Hui <laruence@php.net>2013-02-24 12:59:10 +0800
commite75804c34ef60e22db79850dc1f77948e6b51ea3 (patch)
tree0e046c847dc7dc2cef65dddd5e8fd39cffd150c0 /ext/spl/spl_fixedarray.c
parent59ec22b370a74e9af62fdea68550feade6f36c81 (diff)
parentd24ac6953ec8ca147243363eeacc8772d265b6cc (diff)
downloadphp-git-e75804c34ef60e22db79850dc1f77948e6b51ea3.tar.gz
Merge branch 'PHP-5.4' into PHP-5.5
Diffstat (limited to 'ext/spl/spl_fixedarray.c')
-rw-r--r--ext/spl/spl_fixedarray.c25
1 files changed, 15 insertions, 10 deletions
diff --git a/ext/spl/spl_fixedarray.c b/ext/spl/spl_fixedarray.c
index c9aec753c8..fec7e2c4ac 100644
--- a/ext/spl/spl_fixedarray.c
+++ b/ext/spl/spl_fixedarray.c
@@ -659,22 +659,27 @@ SPL_METHOD(SplFixedArray, count)
*/
SPL_METHOD(SplFixedArray, toArray)
{
- zval *ret, *tmp;
- HashTable *ret_ht, *obj_ht;
+ spl_fixedarray_object *intern;
if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "")) {
return;
}
- ALLOC_HASHTABLE(ret_ht);
- zend_hash_init(ret_ht, 0, NULL, ZVAL_PTR_DTOR, 0);
- ALLOC_INIT_ZVAL(ret);
- Z_TYPE_P(ret) = IS_ARRAY;
- obj_ht = spl_fixedarray_object_get_properties(getThis() TSRMLS_CC);
- zend_hash_copy(ret_ht, obj_ht, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *));
- Z_ARRVAL_P(ret) = ret_ht;
+ intern = (spl_fixedarray_object *)zend_object_store_get_object(getThis() TSRMLS_CC);
- RETURN_ZVAL(ret, 1, 1);
+ array_init(return_value);
+ if (intern->array) {
+ int i = 0;
+ for (; i < intern->array->size; i++) {
+ if (intern->array->elements[i]) {
+ zend_hash_index_update(Z_ARRVAL_P(return_value), i, (void *)&intern->array->elements[i], sizeof(zval *), NULL);
+ Z_ADDREF_P(intern->array->elements[i]);
+ } else {
+ zend_hash_index_update(Z_ARRVAL_P(return_value), i, (void *)&EG(uninitialized_zval_ptr), sizeof(zval *), NULL);
+ Z_ADDREF_P(EG(uninitialized_zval_ptr));
+ }
+ }
+ }
}
/* }}} */