diff options
| author | Dmitry Stogov <dmitry@zend.com> | 2014-07-09 16:05:55 +0400 |
|---|---|---|
| committer | Dmitry Stogov <dmitry@zend.com> | 2014-07-09 16:05:55 +0400 |
| commit | 9d6e45a0ee84030f125ec6d49da07796977a2a29 (patch) | |
| tree | ea6193c52c6544f90991fc5f87f2a83507c4a5ce /Zend/zend_operators.c | |
| parent | d085f79aea4ff900592c0eada5d44bf97744efe4 (diff) | |
| download | php-git-9d6e45a0ee84030f125ec6d49da07796977a2a29.tar.gz | |
Changed zend_make_printable_zval() to return "use_copy" instead of additional reference argument.
Improved branch prediction.
Diffstat (limited to 'Zend/zend_operators.c')
| -rw-r--r-- | Zend/zend_operators.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/Zend/zend_operators.c b/Zend/zend_operators.c index b40d3b14d6..4e7b479bda 100644 --- a/Zend/zend_operators.c +++ b/Zend/zend_operators.c @@ -1546,14 +1546,15 @@ ZEND_API int concat_function(zval *result, zval *op1, zval *op2 TSRMLS_DC) /* {{ zval op1_copy, op2_copy; int use_copy1 = 0, use_copy2 = 0; - if (Z_TYPE_P(op1) != IS_STRING || Z_TYPE_P(op2) != IS_STRING) { + if (UNEXPECTED(Z_TYPE_P(op1) != IS_STRING) || + UNEXPECTED(Z_TYPE_P(op2) != IS_STRING)) { ZEND_TRY_BINARY_OBJECT_OPERATION(ZEND_CONCAT); if (Z_TYPE_P(op1) != IS_STRING) { - zend_make_printable_zval(op1, &op1_copy, &use_copy1); + use_copy1 = zend_make_printable_zval(op1, &op1_copy); } if (Z_TYPE_P(op2) != IS_STRING) { - zend_make_printable_zval(op2, &op2_copy, &use_copy2); + use_copy2 = zend_make_printable_zval(op2, &op2_copy); } } @@ -1569,6 +1570,7 @@ ZEND_API int concat_function(zval *result, zval *op1, zval *op2 TSRMLS_DC) /* {{ if (use_copy2) { op2 = &op2_copy; } + if (result==op1 && !IS_INTERNED(Z_STR_P(op1))) { /* special case, perform operations on result */ uint op1_len = Z_STRLEN_P(op1); uint op2_len = Z_STRLEN_P(op2); @@ -1592,10 +1594,10 @@ ZEND_API int concat_function(zval *result, zval *op1, zval *op2 TSRMLS_DC) /* {{ buf->val[length] = 0; ZVAL_NEW_STR(result, buf); } - if (use_copy1) { + if (UNEXPECTED(use_copy1)) { zval_dtor(op1); } - if (use_copy2) { + if (UNEXPECTED(use_copy2)) { zval_dtor(op2); } return SUCCESS; |
