@@ -47,19 +47,22 @@ static void zoi_with_current_destroy_self(zend_object_iterator *iter, zoi_with_c
4747void  zoi_with_current_dtor (zend_object_iterator *iter)
4848{
4949	zoi_with_current *zoiwc = (zoi_with_current*)iter;
50- 
50+ printf ( " zoiwc=%p \n " , zoiwc); 
5151	if  (!Z_ISUNDEF (zoiwc->wrapping_obj )) {
52+ 		printf (" not undef wrapper\n " 
5253		/*  we have to copy the pointer because zoiwc->wrapping_obj may be
5354		 * changed midway the execution of zval_ptr_dtor() */  
5455		zval *zwo = &zoiwc->wrapping_obj ;
5556
5657		/*  object is still here, we can rely on it to call this again and
5758		 * destroy this object */  
59+ 		printf (" refcount %d\n " Z_REFCOUNT_P (zwo));
5860		zval_ptr_dtor (zwo);
5961
6062		/*  We may only invalidate and destroy if this was actually the last instance.
6163		 * If it was, then IntlIterator_objects_free() will have set zwo to UNDEF. */  
6264		if  (Z_ISUNDEF_P (zwo)) {
65+ 			printf (" NOW undef wrapper\n " 
6366			zoi_with_current_destroy_self (iter, zoiwc);
6467		}
6568	} else  {
@@ -178,8 +181,11 @@ static void IntlIterator_objects_free(zend_object *object)
178181{
179182	IntlIterator_object	*ii = php_intl_iterator_fetch_object (object);
180183
184+ 	printf (" free parent\n " 
185+ 
181186	if  (ii->iterator ) {
182187		zval *wrapping_objp = &((zoi_with_current*)ii->iterator )->wrapping_obj ;
188+ 		//  zval_ptr_dtor(wrapping_objp);
183189		/*  Signal that it was the last reference that got destroyed */ 
184190		ZVAL_UNDEF (wrapping_objp);
185191		zend_iterator_dtor (ii->iterator );
@@ -198,12 +204,14 @@ static HashTable *IntlIterator_get_gc(zend_object *object, zval **table, int *n)
198204		zend_get_gc_buffer_add_obj (gc, &ii->iterator ->std );
199205		/*  current can't participate in a cycle */ 
200206		zend_get_gc_buffer_use (gc, table, n);
207+ 
208+ 		//  TODO: can be optimized
209+ 		return  zend_std_get_properties (object);
201210	} else  {
202211		*table = NULL ;
203212		*n = 0 ;
213+ 		return  zend_std_get_gc (object, table, n);
204214	}
205- 
206- 	return  zend_std_get_properties (object);
207215}
208216
209217static  zend_object_iterator *IntlIterator_get_iterator (
0 commit comments