@@ -627,22 +627,27 @@ SPL_METHOD(SplFixedArray, count)
627627*/
628628SPL_METHOD (SplFixedArray , toArray )
629629{
630- zval * ret , * tmp ;
631- HashTable * ret_ht , * obj_ht ;
630+ spl_fixedarray_object * intern ;
632631
633632 if (FAILURE == zend_parse_parameters (ZEND_NUM_ARGS () TSRMLS_CC , "" )) {
634633 return ;
635634 }
636635
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 );
644637
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+ }
646651}
647652/* }}} */
648653
0 commit comments