diff options
author | Dmitry Stogov <dmitry@zend.com> | 2015-04-29 16:43:23 +0300 |
---|---|---|
committer | Dmitry Stogov <dmitry@zend.com> | 2015-04-29 16:43:23 +0300 |
commit | d880ead8a733202be2f74228339390e81ab824b5 (patch) | |
tree | 1366e1825e9ff34b9df1afed86f101b1de315194 /Zend/zend_operators.h | |
parent | 1d718fe859b61463f82105d12abe1e336c83172b (diff) | |
download | php-git-d880ead8a733202be2f74228339390e81ab824b5.tar.gz |
Improve fast_is_[not_]identical() functions to teturn value instead of takeing additional arguments.
Pair INSTANCEOF with the following JMPZ/JMPNZ.
Diffstat (limited to 'Zend/zend_operators.h')
-rw-r--r-- | Zend/zend_operators.h | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/Zend/zend_operators.h b/Zend/zend_operators.h index 2625cda27f..5e16bf87f4 100644 --- a/Zend/zend_operators.h +++ b/Zend/zend_operators.h @@ -60,6 +60,8 @@ ZEND_API int ZEND_FASTCALL shift_left_function(zval *result, zval *op1, zval *op ZEND_API int ZEND_FASTCALL shift_right_function(zval *result, zval *op1, zval *op2); ZEND_API int ZEND_FASTCALL concat_function(zval *result, zval *op1, zval *op2); +ZEND_API int ZEND_FASTCALL zend_is_identical(zval *op1, zval *op2); + ZEND_API int ZEND_FASTCALL is_equal_function(zval *result, zval *op1, zval *op2); ZEND_API int ZEND_FASTCALL is_identical_function(zval *result, zval *op1, zval *op2); ZEND_API int ZEND_FASTCALL is_not_identical_function(zval *result, zval *op1, zval *op2); @@ -842,23 +844,20 @@ static zend_always_inline int fast_equal_check_string(zval *op1, zval *op2) return Z_LVAL(result) == 0; } -static zend_always_inline void fast_is_identical_function(zval *result, zval *op1, zval *op2) +static zend_always_inline int fast_is_identical_function(zval *op1, zval *op2) { if (Z_TYPE_P(op1) != Z_TYPE_P(op2)) { - ZVAL_FALSE(result); - return; + return 0; } - is_identical_function(result, op1, op2); + return zend_is_identical(op1, op2); } -static zend_always_inline void fast_is_not_identical_function(zval *result, zval *op1, zval *op2) +static zend_always_inline int fast_is_not_identical_function(zval *op1, zval *op2) { if (Z_TYPE_P(op1) != Z_TYPE_P(op2)) { - ZVAL_TRUE(result); - return; + return 1; } - is_identical_function(result, op1, op2); - ZVAL_BOOL(result, Z_TYPE_P(result) != IS_TRUE); + return !zend_is_identical(op1, op2); } #define ZEND_TRY_BINARY_OP1_OBJECT_OPERATION(opcode, binary_op) \ |