From: Xinchen Hui Date: Fri, 7 Mar 2014 05:48:28 +0000 (+0800) Subject: IS_REFERENCE is unfrequent X-Git-Tag: POST_PHPNG_MERGE~412^2~378 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f3a6c30ccaa72e9ab0981758853f5de76e4ce462;p=php IS_REFERENCE is unfrequent --- diff --git a/Zend/zend.c b/Zend/zend.c index 75abcf3b64..783f47cc3e 100644 --- a/Zend/zend.c +++ b/Zend/zend.c @@ -221,18 +221,12 @@ static void print_flat_hash(HashTable *ht TSRMLS_DC) /* {{{ */ ZEND_API void zend_make_printable_zval(zval *expr, zval *expr_copy, int *use_copy) /* {{{ */ { - if (Z_TYPE_P(expr)==IS_STRING) { + if (Z_TYPE_P(expr) == IS_STRING) { *use_copy = 0; return; } - if (Z_TYPE_P(expr) == IS_REFERENCE) { - expr = Z_REFVAL_P(expr); - if (Z_TYPE_P(expr) == IS_STRING) { - ZVAL_STR(expr_copy, STR_COPY(Z_STR_P(expr))); - *use_copy = 1; - return; - } - } + +again: switch (Z_TYPE_P(expr)) { case IS_NULL: Z_STR_P(expr_copy) = STR_EMPTY_ALLOC(); @@ -299,6 +293,15 @@ ZEND_API void zend_make_printable_zval(zval *expr, zval *expr_copy, int *use_cop ZVAL_DUP(expr_copy, expr); zend_locale_sprintf_double(expr_copy ZEND_FILE_LINE_CC); break; + case IS_REFERENCE: + expr = Z_REFVAL_P(expr); + if (Z_TYPE_P(expr) == IS_STRING) { + ZVAL_STR(expr_copy, STR_COPY(Z_STR_P(expr))); + *use_copy = 1; + return; + } + goto again; + break; default: ZVAL_DUP(expr_copy, expr); convert_to_string(expr_copy);