@@ -487,7 +487,9 @@ static void spl_recursive_it_it_construct(INTERNAL_FUNCTION_PARAMETERS, zend_cla
487
487
488
488
zend_replace_error_handling (EH_THROW , spl_ce_InvalidArgumentException , & error_handling );
489
489
if (instanceof_function (Z_OBJCE_P (iterator ), zend_ce_aggregate )) {
490
- zend_call_method_with_0_params (Z_OBJ_P (iterator ), Z_OBJCE_P (iterator ), & Z_OBJCE_P (iterator )-> iterator_funcs_ptr -> zf_new_iterator , "getiterator" , & aggregate_retval );
490
+ zend_function * * getiterator_cache = Z_OBJCE_P (iterator )-> iterator_funcs_ptr
491
+ ? & Z_OBJCE_P (iterator )-> iterator_funcs_ptr -> zf_new_iterator : NULL ;
492
+ zend_call_method_with_0_params (Z_OBJ_P (iterator ), Z_OBJCE_P (iterator ), getiterator_cache , "getiterator" , & aggregate_retval );
491
493
iterator = & aggregate_retval ;
492
494
} else {
493
495
Z_ADDREF_P (iterator );
@@ -510,7 +512,9 @@ static void spl_recursive_it_it_construct(INTERNAL_FUNCTION_PARAMETERS, zend_cla
510
512
511
513
zend_replace_error_handling (EH_THROW , spl_ce_InvalidArgumentException , & error_handling );
512
514
if (instanceof_function (Z_OBJCE_P (iterator ), zend_ce_aggregate )) {
513
- zend_call_method_with_0_params (Z_OBJ_P (iterator ), Z_OBJCE_P (iterator ), & Z_OBJCE_P (iterator )-> iterator_funcs_ptr -> zf_new_iterator , "getiterator" , & aggregate_retval );
515
+ zend_function * * getiterator_cache = Z_OBJCE_P (iterator )-> iterator_funcs_ptr
516
+ ? & Z_OBJCE_P (iterator )-> iterator_funcs_ptr -> zf_new_iterator : NULL ;
517
+ zend_call_method_with_0_params (Z_OBJ_P (iterator ), Z_OBJCE_P (iterator ), getiterator_cache , "getiterator" , & aggregate_retval );
514
518
iterator = & aggregate_retval ;
515
519
} else {
516
520
Z_ADDREF_P (iterator );
@@ -1362,7 +1366,9 @@ static spl_dual_it_object* spl_dual_it_construct(INTERNAL_FUNCTION_PARAMETERS, z
1362
1366
ce = ce_cast ;
1363
1367
}
1364
1368
if (instanceof_function (ce , zend_ce_aggregate )) {
1365
- zend_call_method_with_0_params (Z_OBJ_P (zobject ), ce , & ce -> iterator_funcs_ptr -> zf_new_iterator , "getiterator" , & retval );
1369
+ zend_function * * getiterator_cache =
1370
+ ce -> iterator_funcs_ptr ? & ce -> iterator_funcs_ptr -> zf_new_iterator : NULL ;
1371
+ zend_call_method_with_0_params (Z_OBJ_P (zobject ), ce , getiterator_cache , "getiterator" , & retval );
1366
1372
if (EG (exception )) {
1367
1373
zval_ptr_dtor (& retval );
1368
1374
return NULL ;
0 commit comments