summaryrefslogtreecommitdiff
path: root/Zend/zend_operators.c
diff options
context:
space:
mode:
authorAndi Gutmans <andi@php.net>2000-05-17 18:55:22 +0000
committerAndi Gutmans <andi@php.net>2000-05-17 18:55:22 +0000
commit0aefa3e03709393e46d78c93377908dfab7eb105 (patch)
treeecc7eaa1230f69b632f9eeba501ff1d01739e384 /Zend/zend_operators.c
parent7dd8b901e62d34f3b9cd58b0ec0c2e949bdeee3b (diff)
downloadphp-git-0aefa3e03709393e46d78c93377908dfab7eb105.tar.gz
- Add support for string_compare_function() and number_compare_function().
UNTESTED!
Diffstat (limited to 'Zend/zend_operators.c')
-rw-r--r--Zend/zend_operators.c46
1 files changed, 46 insertions, 0 deletions
diff --git a/Zend/zend_operators.c b/Zend/zend_operators.c
index f8357a900d..8707f3f29b 100644
--- a/Zend/zend_operators.c
+++ b/Zend/zend_operators.c
@@ -948,6 +948,52 @@ ZEND_API int concat_function(zval *result, zval *op1, zval *op2)
}
+ZEND_API int string_compare_function(zval *result, zval *op1, zval *op2)
+{
+ zval op1_copy, op2_copy;
+ int use_copy1, use_copy2;
+
+ zend_make_printable_zval(op1, &op1_copy, &use_copy1);
+ zend_make_printable_zval(op2, &op2_copy, &use_copy2);
+
+ if (use_copy1) {
+ op1 = &op1_copy;
+ }
+ if (use_copy2) {
+ op2 = &op2_copy;
+ }
+
+ result->value.lval = zend_binary_zval_strcmp(op1, op2);
+ result->type = IS_LONG;
+
+ if (use_copy1) {
+ zval_dtor(op1);
+ }
+ if (use_copy2) {
+ zval_dtor(op2);
+ }
+ return SUCCESS;
+}
+
+ZEND_API int numeric_compare_function(zval *result, zval *op1, zval *op2)
+{
+ zval op1_copy, op2_copy;
+
+ op1_copy = *op1;
+ zval_copy_ctor(&op1_copy);
+
+ op2_copy = *op2;
+ zval_copy_ctor(&op2_copy);
+
+ convert_to_double(&op1_copy);
+ convert_to_double(&op2_copy);
+
+ result->value.lval = NORMALIZE_BOOL(op2_copy.value.dval-op1_copy.value.dval);
+ result->type = IS_LONG;
+
+ return SUCCESS;
+}
+
ZEND_API int compare_function(zval *result, zval *op1, zval *op2)
{
zval op1_copy, op2_copy;