summaryrefslogtreecommitdiff
path: root/Zend/zend_operators.h
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2015-10-06 23:48:12 +0300
committerDmitry Stogov <dmitry@zend.com>2015-10-06 23:48:12 +0300
commit24e88348f33bec31b0fcbcedd974ce06f1b37fdc (patch)
tree491f882a6001608d1e85ba64e327689d8c8502c0 /Zend/zend_operators.h
parent524d00e005dd730454709060e30b43d97c3a06c6 (diff)
downloadphp-git-24e88348f33bec31b0fcbcedd974ce06f1b37fdc.tar.gz
Revert "Merge branch 'array_keys_strict_refs' of https://github.com/tony2001/php-src"
This reverts commit a6be0f3fd6cdd59ac00ecd76630c6c04fee03417.
Diffstat (limited to 'Zend/zend_operators.h')
-rw-r--r--Zend/zend_operators.h74
1 files changed, 6 insertions, 68 deletions
diff --git a/Zend/zend_operators.h b/Zend/zend_operators.h
index 17ae18cdd9..f8c155d2d2 100644
--- a/Zend/zend_operators.h
+++ b/Zend/zend_operators.h
@@ -729,86 +729,24 @@ static zend_always_inline int fast_equal_check_string(zval *op1, zval *op2)
return Z_LVAL(result) == 0;
}
-static int hash_zval_identical_function(zval *op1, zval *op2);
-
-static inline int zend_is_same_type_identical(zval *op1, zval *op2)
-{
- switch (Z_TYPE_P(op1)) {
- case IS_NULL:
- case IS_FALSE:
- case IS_TRUE:
- return 1;
- case IS_LONG:
- return (Z_LVAL_P(op1) == Z_LVAL_P(op2));
- case IS_RESOURCE:
- return (Z_RES_P(op1) == Z_RES_P(op2));
- case IS_DOUBLE:
- return (Z_DVAL_P(op1) == Z_DVAL_P(op2));
- case IS_STRING:
- return (Z_STR_P(op1) == Z_STR_P(op2) ||
- (Z_STRLEN_P(op1) == Z_STRLEN_P(op2) &&
- memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) == 0));
- case IS_ARRAY:
- return (Z_ARRVAL_P(op1) == Z_ARRVAL_P(op2) ||
- zend_hash_compare(Z_ARRVAL_P(op1), Z_ARRVAL_P(op2), (compare_func_t) hash_zval_identical_function, 1) == 0);
- case IS_OBJECT:
- return (Z_OBJ_P(op1) == Z_OBJ_P(op2) && Z_OBJ_HT_P(op1) == Z_OBJ_HT_P(op2));
- case IS_REFERENCE:
- return zend_is_identical(Z_REFVAL_P(op1), Z_REFVAL_P(op2));
- default:
- return 0;
- }
-}
-
static zend_always_inline int fast_is_identical_function(zval *op1, zval *op2)
{
if (Z_TYPE_P(op1) != Z_TYPE_P(op2)) {
- if (EXPECTED(Z_TYPE_P(op1) != IS_REFERENCE)) {
- if (EXPECTED(Z_TYPE_P(op2) != IS_REFERENCE)) {
- return 0;
- } else {
- op2 = Z_REFVAL_P(op2);
- }
- } else {
- op1 = Z_REFVAL_P(op1);
- }
- if (Z_TYPE_P(op1) != Z_TYPE_P(op2)) {
- return 0;
- }
- }
-
- if (Z_TYPE_P(op1) <= IS_TRUE) {
+ return 0;
+ } else if (Z_TYPE_P(op1) <= IS_TRUE) {
return 1;
}
- return zend_is_same_type_identical(op1, op2);
+ return zend_is_identical(op1, op2);
}
static zend_always_inline int fast_is_not_identical_function(zval *op1, zval *op2)
{
if (Z_TYPE_P(op1) != Z_TYPE_P(op2)) {
- if (EXPECTED(Z_TYPE_P(op1) != IS_REFERENCE)) {
- if (EXPECTED(Z_TYPE_P(op2) != IS_REFERENCE)) {
- return 1;
- } else {
- op2 = Z_REFVAL_P(op2);
- }
- } else {
- op1 = Z_REFVAL_P(op1);
- }
- if (Z_TYPE_P(op1) != Z_TYPE_P(op2)) {
- return 1;
- }
- }
-
- if (Z_TYPE_P(op1) <= IS_TRUE) {
+ return 1;
+ } else if (Z_TYPE_P(op1) <= IS_TRUE) {
return 0;
}
- return !zend_is_same_type_identical(op1, op2);
-}
-
-static int hash_zval_identical_function(zval *op1, zval *op2)
-{
- return !fast_is_identical_function(op1, op2);
+ return !zend_is_identical(op1, op2);
}
#define ZEND_TRY_BINARY_OP1_OBJECT_OPERATION(opcode, binary_op) \