]> granicus.if.org Git - php/commitdiff
- Preliminary submit of Thie's patch. Will fix the rest on Windows
authorAndi Gutmans <andi@php.net>
Tue, 19 Oct 1999 13:33:17 +0000 (13:33 +0000)
committerAndi Gutmans <andi@php.net>
Tue, 19 Oct 1999 13:33:17 +0000 (13:33 +0000)
  as this was added on UNIX with patch. Changed IS_SAME -> IS_IDENTICAL

Zend/zend-parser.y
Zend/zend-scanner.l
Zend/zend_compile.h
Zend/zend_execute.c
Zend/zend_opcode.c
Zend/zend_operators.c
Zend/zend_operators.h

index 7081b4c3d426c8efc504402a65caee4eb49404be..e2461a39626ea1c4ebf1630f7b74bd7dad512db0 100644 (file)
@@ -56,7 +56,7 @@
 %left '|'
 %left '^'
 %left '&'
-%nonassoc T_IS_EQUAL T_IS_NOT_EQUAL
+%nonassoc T_IS_EQUAL T_IS_NOT_EQUAL T_IS_IDENTICAL
 %nonassoc '<' T_IS_SMALLER_OR_EQUAL '>' T_IS_GREATER_OR_EQUAL
 %left T_SL T_SR
 %left '+' '-' '.'
@@ -406,6 +406,7 @@ expr_without_variable:
        |       '-' expr { $1.u.constant.value.lval=0; $1.u.constant.type=IS_LONG; $1.op_type = IS_CONST; INIT_PZVAL(&$1.u.constant); do_binary_op(ZEND_SUB, &$$, &$1, &$2 CLS_CC); }
        |       '!' expr { do_unary_op(ZEND_BOOL_NOT, &$$, &$2 CLS_CC); }
        |       '~' expr { do_unary_op(ZEND_BW_NOT, &$$, &$2 CLS_CC); }
+       |       expr T_IS_IDENTICAL expr                                { do_binary_op(ZEND_IS_IDENTICAL, &$$, &$1, &$3 CLS_CC); }
        |       expr T_IS_EQUAL expr                            { do_binary_op(ZEND_IS_EQUAL, &$$, &$1, &$3 CLS_CC); }
        |       expr T_IS_NOT_EQUAL expr                        { do_binary_op(ZEND_IS_NOT_EQUAL, &$$, &$1, &$3 CLS_CC); }
        |       expr '<' expr                                   { do_binary_op(ZEND_IS_SMALLER, &$$, &$1, &$3 CLS_CC); }
index 7ff84863437fb36c934c9d4c864b2340662be400..15d0f1abf4c4466b8ef75a918f96a3a1482e9b02 100644 (file)
@@ -823,6 +823,10 @@ ESCAPED_AND_WHITESPACE [\n\t\r #'.:;,()|^&+-/*=%!~<>?@]+
        return T_DEC;
 }
 
+<ST_IN_SCRIPTING>"===" {
+       return T_IS_IDENTICAL;
+}
+
 <ST_IN_SCRIPTING>"==" {
        return T_IS_EQUAL;
 }
index c63405b2fa8f506fa419523df86a783fdcf2a267..7f7efdc02ad3454001d54b4dc9c45793599fe595 100644 (file)
@@ -504,6 +504,7 @@ int zendlex(znode *zendlval CLS_DC);
 #define ZEND_EXT_FCALL_END                     98
 #define ZEND_EXT_NOP                           99
 
+#define ZEND_IS_IDENTICAL                              100
 /* end of block */
 
 
index 0acb5f157eba7b48ee5bd34408f3a607c8449974..129083f1c978f3aec3b0fb291ba87d66503b60fd 100644 (file)
@@ -970,6 +970,9 @@ void execute(zend_op_array *op_array ELS_DC)
                        case ZEND_CONCAT:
                                EG(binary_op) = concat_function;
                                goto binary_op_addr;
+                       case ZEND_IS_IDENTICAL:
+                               EG(binary_op) = is_identical_function;
+                               goto binary_op_addr;
                        case ZEND_IS_EQUAL:
                                EG(binary_op) = is_equal_function;
                                goto binary_op_addr;
index 8c2444659f36218b155313d6fb49ec3c7c1261d1..5aa107305ba7b957ba764a4af70756ea5292b244 100644 (file)
@@ -380,6 +380,9 @@ ZEND_API void *get_binary_op(int opcode)
                case ZEND_ASSIGN_CONCAT:
                        return (void *) concat_function;
                        break;
+               case ZEND_IS_IDENTICAL:
+                       return (void *) is_identical_function;
+                       break;
                case ZEND_IS_EQUAL:
                        return (void *) is_equal_function;
                        break;
index 69570054e18fb6992c72fdef190946b2a9bdaeb9..2ef03fc2a557dcebc290d611ca4059c17dac7b32 100644 (file)
@@ -914,6 +914,25 @@ ZEND_API int compare_function(zval *result, zval *op1, zval *op2)
 }
 
 
+ZEND_API int is_identical_function(zval *result, zval *op1, zval *op2)
+{
+       if (op1->type != op2->type) {
+               convert_to_boolean(result);
+               result->value.lval = 0;
+               return SUCCESS;
+       }
+       if (compare_function(result, op1, op2) == FAILURE) {
+               return FAILURE;
+       }
+       convert_to_boolean(result);
+       if (result->value.lval == 0) {
+               result->value.lval = 1;
+       } else {
+               result->value.lval = 0;
+       }
+       return SUCCESS;
+}
+
 ZEND_API int is_equal_function(zval *result, zval *op1, zval *op2)
 {
        if (compare_function(result, op1, op2) == FAILURE) {
index 2458b14fed6b9c08b9c7b0a0fcd64539ccc0b3a4..727d1c9d21feace283cdfe6cff499fe14141990c 100644 (file)
@@ -42,6 +42,7 @@ ZEND_API int shift_right_function(zval *result, zval *op1, zval *op2);
 ZEND_API int concat_function(zval *result, zval *op1, zval *op2);
 
 ZEND_API int is_equal_function(zval *result, zval *op1, zval *op2);
+ZEND_API int is_identical_function(zval *result, zval *op1, zval *op2);
 ZEND_API int is_not_equal_function(zval *result, zval *op1, zval *op2);
 ZEND_API int is_smaller_function(zval *result, zval *op1, zval *op2);
 ZEND_API int is_smaller_or_equal_function(zval *result, zval *op1, zval *op2);