diff --git a/Zend/zend.c b/Zend/zend.c index 7e6f5491388..029dfba69bf 100644 --- a/Zend/zend.c +++ b/Zend/zend.c @@ -594,12 +594,7 @@ ZEND_API void zend_print_zval_r_ex(zend_write_func_t write_func, zval *expr, int if (class_name.v) { efree(class_name.v); } - if (Z_OBJ_HANDLER_P(expr, get_debug_info)) { - properties = Z_OBJ_HANDLER_P(expr, get_debug_info)(expr, &is_temp TSRMLS_CC); - } else if (Z_OBJ_HANDLER_P(expr, get_properties)) { - properties = Z_OBJPROP_P(expr); - is_temp = 0; - } else { + if ((properties = Z_OBJDEBUG_P(expr, is_temp)) == NULL) { break; } if (++properties->nApplyCount>1) { diff --git a/Zend/zend_operators.h b/Zend/zend_operators.h index 85ca05f7ded..7d2404d6dc3 100644 --- a/Zend/zend_operators.h +++ b/Zend/zend_operators.h @@ -413,6 +413,7 @@ END_EXTERN_C() #define Z_RESVAL(zval) (zval).value.lval #define Z_UNIVAL(zval) (zval).value.uni.val #define Z_UNILEN(zval) (zval).value.uni.len +#define Z_OBJDEBUG(zval,is_tmp) (Z_OBJ_HANDLER((zval),get_debug_info)?Z_OBJ_HANDLER((zval),get_debug_info)(&(zval),&is_tmp TSRMLS_CC):(is_tmp=0,Z_OBJ_HANDLER((zval),get_properties)?Z_OBJPROP(zval):NULL)) #define Z_LVAL_P(zval_p) Z_LVAL(*zval_p) #define Z_BVAL_P(zval_p) Z_BVAL(*zval_p) @@ -432,6 +433,7 @@ END_EXTERN_C() #define Z_OBJ_HANDLER_P(zval_p, h) Z_OBJ_HANDLER(*zval_p, h) #define Z_UNIVAL_P(zval_p) Z_UNIVAL(*zval_p) #define Z_UNILEN_P(zval_p) Z_UNILEN(*zval_p) +#define Z_OBJDEBUG_P(zval_p,is_tmp) Z_OBJDEBUG(*zval_p,is_tmp) #define Z_LVAL_PP(zval_pp) Z_LVAL(**zval_pp) #define Z_BVAL_PP(zval_pp) Z_BVAL(**zval_pp) @@ -451,6 +453,7 @@ END_EXTERN_C() #define Z_OBJ_HANDLER_PP(zval_p, h) Z_OBJ_HANDLER(**zval_p, h) #define Z_UNIVAL_PP(zval_pp) Z_UNIVAL(**zval_pp) #define Z_UNILEN_PP(zval_pp) Z_UNILEN(**zval_pp) +#define Z_OBJDEBUG_PP(zval_pp,is_tmp) Z_OBJDEBUG(**zval_pp,is_tmp) #define Z_TYPE(zval) (zval).type #define Z_TYPE_P(zval_p) Z_TYPE(*zval_p)