@@ -659,22 +659,27 @@ SPL_METHOD(SplFixedArray, count)
659
659
*/
660
660
SPL_METHOD (SplFixedArray , toArray )
661
661
{
662
- zval * ret , * tmp ;
663
- HashTable * ret_ht , * obj_ht ;
662
+ spl_fixedarray_object * intern ;
664
663
665
664
if (FAILURE == zend_parse_parameters (ZEND_NUM_ARGS () TSRMLS_CC , "" )) {
666
665
return ;
667
666
}
668
667
669
- ALLOC_HASHTABLE (ret_ht );
670
- zend_hash_init (ret_ht , 0 , NULL , ZVAL_PTR_DTOR , 0 );
671
- ALLOC_INIT_ZVAL (ret );
672
- Z_TYPE_P (ret ) = IS_ARRAY ;
673
- obj_ht = spl_fixedarray_object_get_properties (getThis () TSRMLS_CC );
674
- zend_hash_copy (ret_ht , obj_ht , (copy_ctor_func_t ) zval_add_ref , (void * ) & tmp , sizeof (zval * ));
675
- Z_ARRVAL_P (ret ) = ret_ht ;
668
+ intern = (spl_fixedarray_object * )zend_object_store_get_object (getThis () TSRMLS_CC );
676
669
677
- RETURN_ZVAL (ret , 1 , 1 );
670
+ array_init (return_value );
671
+ if (intern -> array ) {
672
+ int i = 0 ;
673
+ for (; i < intern -> array -> size ; i ++ ) {
674
+ if (intern -> array -> elements [i ]) {
675
+ zend_hash_index_update (Z_ARRVAL_P (return_value ), i , (void * )& intern -> array -> elements [i ], sizeof (zval * ), NULL );
676
+ Z_ADDREF_P (intern -> array -> elements [i ]);
677
+ } else {
678
+ zend_hash_index_update (Z_ARRVAL_P (return_value ), i , (void * )& EG (uninitialized_zval_ptr ), sizeof (zval * ), NULL );
679
+ Z_ADDREF_P (EG (uninitialized_zval_ptr ));
680
+ }
681
+ }
682
+ }
678
683
}
679
684
/* }}} */
680
685
0 commit comments