convert_to_double(&op1_copy);
convert_to_double(&op2_copy);
- Z_LVAL_P(result) = ZEND_NORMALIZE_BOOL(Z_DVAL(op1_copy)-Z_DVAL(op2_copy));
- Z_TYPE_P(result) = IS_LONG;
+ ZVAL_LONG(result, ZEND_NORMALIZE_BOOL(Z_DVAL(op1_copy)-Z_DVAL(op2_copy)));
return SUCCESS;
}
int op2_obj = Z_TYPE_P(op2) == IS_OBJECT;
if (op1_obj) {
- if (Z_OBJ_HT_P(op1)->get) {
+ if (Z_TYPE_P(op2) == IS_NULL) {
+ ZVAL_LONG(result, 1);
+ return SUCCESS;
+ } else if (Z_OBJ_HT_P(op1)->get) {
op1 = op1_free = Z_OBJ_HT_P(op1)->get(op1 TSRMLS_CC);
} else if (!op2_obj && Z_OBJ_HT_P(op1)->cast_object) {
ALLOC_INIT_ZVAL(op1_free);
if (Z_OBJ_HT_P(op1)->cast_object(op1, op1_free, Z_TYPE_P(op2) TSRMLS_CC) == FAILURE) {
op2_free = NULL;
- ZVAL_BOOL(result, 0);
- COMPARE_RETURN_AND_FREE(FAILURE);
+ ZVAL_LONG(result, 1);
+ COMPARE_RETURN_AND_FREE(SUCCESS);
}
op1 = op1_free;
} else {
op1_free = NULL;
}
if (op2_obj) {
- if (Z_OBJ_HT_P(op2)->get) {
+ if (Z_TYPE_P(op1) == IS_NULL) {
+ op2_free = NULL;
+ ZVAL_LONG(result, -1);
+ COMPARE_RETURN_AND_FREE(SUCCESS);
+ } else if (Z_OBJ_HT_P(op2)->get) {
op2 = op2_free = Z_OBJ_HT_P(op2)->get(op2 TSRMLS_CC);
} else if (!op1_obj && Z_OBJ_HT_P(op2)->cast_object) {
ALLOC_INIT_ZVAL(op2_free);
if (Z_OBJ_HT_P(op2)->cast_object(op2, op2_free, Z_TYPE_P(op1) TSRMLS_CC) == FAILURE) {
- ZVAL_BOOL(result, 0);
- COMPARE_RETURN_AND_FREE(FAILURE);
+ ZVAL_LONG(result, -1);
+ COMPARE_RETURN_AND_FREE(SUCCESS);
}
op2 = op2_free;
} else {
if ((Z_TYPE_P(op1) == IS_NULL && Z_TYPE_P(op2) == IS_STRING)
|| (Z_TYPE_P(op2) == IS_NULL && Z_TYPE_P(op1) == IS_STRING)) {
if (Z_TYPE_P(op1) == IS_NULL) {
- Z_TYPE_P(result) = IS_LONG;
- Z_LVAL_P(result) = zend_binary_strcmp("", 0, Z_STRVAL_P(op2), Z_STRLEN_P(op2));
+ ZVAL_LONG(result, zend_binary_strcmp("", 0, Z_STRVAL_P(op2), Z_STRLEN_P(op2)));
COMPARE_RETURN_AND_FREE(SUCCESS);
} else {
- Z_TYPE_P(result) = IS_LONG;
- Z_LVAL_P(result) = zend_binary_strcmp(Z_STRVAL_P(op1), Z_STRLEN_P(op1), "", 0);
+ ZVAL_LONG(result, zend_binary_strcmp(Z_STRVAL_P(op1), Z_STRLEN_P(op1), "", 0));
COMPARE_RETURN_AND_FREE(SUCCESS);
}
}
* Will we ever get here? This might be dead code.
*/
Z_LVAL_P(result) = zend_binary_zval_strcmp(op1, op2);
- Z_LVAL_P(result) = ZEND_NORMALIZE_BOOL(Z_LVAL_P(result));
- Z_TYPE_P(result) = IS_LONG;
+ ZVAL_LONG(result, ZEND_NORMALIZE_BOOL(Z_LVAL_P(result)));
}
COMPARE_RETURN_AND_FREE(SUCCESS);
}
|| Z_TYPE_P(op1) == IS_NULL || Z_TYPE_P(op2) == IS_NULL) {
zendi_convert_to_boolean(op1, op1_copy, result);
zendi_convert_to_boolean(op2, op2_copy, result);
- Z_TYPE_P(result) = IS_LONG;
- Z_LVAL_P(result) = ZEND_NORMALIZE_BOOL(Z_LVAL_P(op1) - Z_LVAL_P(op2));
+ ZVAL_LONG(result, ZEND_NORMALIZE_BOOL(Z_LVAL_P(op1) - Z_LVAL_P(op2)));
COMPARE_RETURN_AND_FREE(SUCCESS);
}
zendi_convert_scalar_to_number(op2, op2_copy, result);
if (Z_TYPE_P(op1) == IS_LONG && Z_TYPE_P(op2) == IS_LONG) {
- Z_TYPE_P(result) = IS_LONG;
- Z_LVAL_P(result) = Z_LVAL_P(op1)>Z_LVAL_P(op2)?1:(Z_LVAL_P(op1)<Z_LVAL_P(op2)?-1:0);
+ ZVAL_LONG(result, Z_LVAL_P(op1)>Z_LVAL_P(op2)?1:(Z_LVAL_P(op1)<Z_LVAL_P(op2)?-1:0));
COMPARE_RETURN_AND_FREE(SUCCESS);
}
if ((Z_TYPE_P(op1) == IS_DOUBLE || Z_TYPE_P(op1) == IS_LONG)
&& (Z_TYPE_P(op2) == IS_DOUBLE || Z_TYPE_P(op2) == IS_LONG)) {
Z_DVAL_P(result) = (Z_TYPE_P(op1) == IS_LONG ? (double) Z_LVAL_P(op1) : Z_DVAL_P(op1)) - (Z_TYPE_P(op2) == IS_LONG ? (double) Z_LVAL_P(op2) : Z_DVAL_P(op2));
- Z_LVAL_P(result) = ZEND_NORMALIZE_BOOL(Z_DVAL_P(result));
- Z_TYPE_P(result) = IS_LONG;
+ ZVAL_LONG(result, ZEND_NORMALIZE_BOOL(Z_DVAL_P(result)));
COMPARE_RETURN_AND_FREE(SUCCESS);
}
if (Z_TYPE_P(op1)==IS_ARRAY && Z_TYPE_P(op2)==IS_ARRAY) {
}
if (Z_TYPE_P(op1)==IS_ARRAY) {
- Z_LVAL_P(result) = 1;
- Z_TYPE_P(result) = IS_LONG;
+ ZVAL_LONG(result, 1);
COMPARE_RETURN_AND_FREE(SUCCESS);
}
if (Z_TYPE_P(op2)==IS_ARRAY) {
- Z_LVAL_P(result) = -1;
- Z_TYPE_P(result) = IS_LONG;
+ ZVAL_LONG(result, -1);
COMPARE_RETURN_AND_FREE(SUCCESS);
}
if (Z_TYPE_P(op1)==IS_OBJECT) {
- Z_LVAL_P(result) = 1;
- Z_TYPE_P(result) = IS_LONG;
+ ZVAL_LONG(result, 1);
COMPARE_RETURN_AND_FREE(SUCCESS);
}
if (Z_TYPE_P(op2)==IS_OBJECT) {
- Z_LVAL_P(result) = -1;
- Z_TYPE_P(result) = IS_LONG;
+ ZVAL_LONG(result, -1);
COMPARE_RETURN_AND_FREE(SUCCESS);
}