@@ -627,22 +627,27 @@ SPL_METHOD(SplFixedArray, count)
627
627
*/
628
628
SPL_METHOD (SplFixedArray , toArray )
629
629
{
630
- zval * ret , * tmp ;
631
- HashTable * ret_ht , * obj_ht ;
630
+ spl_fixedarray_object * intern ;
632
631
633
632
if (FAILURE == zend_parse_parameters (ZEND_NUM_ARGS () TSRMLS_CC , "" )) {
634
633
return ;
635
634
}
636
635
637
- ALLOC_HASHTABLE (ret_ht );
638
- zend_hash_init (ret_ht , 0 , NULL , ZVAL_PTR_DTOR , 0 );
639
- ALLOC_INIT_ZVAL (ret );
640
- Z_TYPE_P (ret ) = IS_ARRAY ;
641
- obj_ht = spl_fixedarray_object_get_properties (getThis () TSRMLS_CC );
642
- zend_hash_copy (ret_ht , obj_ht , (copy_ctor_func_t ) zval_add_ref , (void * ) & tmp , sizeof (zval * ));
643
- Z_ARRVAL_P (ret ) = ret_ht ;
636
+ intern = (spl_fixedarray_object * )zend_object_store_get_object (getThis () TSRMLS_CC );
644
637
645
- RETURN_ZVAL (ret , 1 , 1 );
638
+ array_init (return_value );
639
+ if (intern -> array ) {
640
+ int i = 0 ;
641
+ for (; i < intern -> array -> size ; i ++ ) {
642
+ if (intern -> array -> elements [i ]) {
643
+ zend_hash_index_update (Z_ARRVAL_P (return_value ), i , (void * )& intern -> array -> elements [i ], sizeof (zval * ), NULL );
644
+ Z_ADDREF_P (intern -> array -> elements [i ]);
645
+ } else {
646
+ zend_hash_index_update (Z_ARRVAL_P (return_value ), i , (void * )& EG (uninitialized_zval_ptr ), sizeof (zval * ), NULL );
647
+ Z_ADDREF_P (EG (uninitialized_zval_ptr ));
648
+ }
649
+ }
650
+ }
646
651
}
647
652
/* }}} */
648
653
0 commit comments