diff options
| author | Dmitry Stogov <dmitry@zend.com> | 2014-09-25 13:42:46 +0400 |
|---|---|---|
| committer | Dmitry Stogov <dmitry@zend.com> | 2014-09-25 13:42:46 +0400 |
| commit | 8b034ec69a434f179275f21b2e29492df1d74669 (patch) | |
| tree | e5bfe814cc38c5d8822e24620a21342a774536be /Zend/zend_operators.c | |
| parent | 6a09bdff6a9ec30f744fa12aeb2875a764fc34c5 (diff) | |
| download | php-git-8b034ec69a434f179275f21b2e29492df1d74669.tar.gz | |
Optimized (PRE|POST)_(INC|DEC) handlers. Moved proxy object handling into helper function.
Diffstat (limited to 'Zend/zend_operators.c')
| -rw-r--r-- | Zend/zend_operators.c | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/Zend/zend_operators.c b/Zend/zend_operators.c index f3e0680f9e..446e4f9138 100644 --- a/Zend/zend_operators.c +++ b/Zend/zend_operators.c @@ -2159,7 +2159,16 @@ try_again: } break; case IS_OBJECT: - if (Z_OBJ_HANDLER_P(op1, do_operation)) { + if (Z_OBJ_HANDLER_P(op1, get) + && Z_OBJ_HANDLER_P(op1, set)) { + /* proxy object */ + zval rv; + zval *val = Z_OBJ_HANDLER_P(op1, get)(op1, &rv TSRMLS_CC); + Z_ADDREF_P(val); + fast_increment_function(val); + Z_OBJ_HANDLER_P(op1, set)(op1, val TSRMLS_CC); + zval_ptr_dtor(val); + } else if (Z_OBJ_HANDLER_P(op1, do_operation)) { zval op2; int res; TSRMLS_FETCH(); @@ -2222,7 +2231,16 @@ try_again: } break; case IS_OBJECT: - if (Z_OBJ_HANDLER_P(op1, do_operation)) { + if (Z_OBJ_HANDLER_P(op1, get) + && Z_OBJ_HANDLER_P(op1, set)) { + /* proxy object */ + zval rv; + zval *val = Z_OBJ_HANDLER_P(op1, get)(op1, &rv TSRMLS_CC); + Z_ADDREF_P(val); + fast_decrement_function(val); + Z_OBJ_HANDLER_P(op1, set)(op1, val TSRMLS_CC); + zval_ptr_dtor(val); + } else if (Z_OBJ_HANDLER_P(op1, do_operation)) { zval op2; int res; TSRMLS_FETCH(); |
