]> granicus.if.org Git - php/commitdiff
Revert patch for bug #46701 as it introduces a BC break
authorIlia Alshanetsky <iliaa@php.net>
Sun, 15 Feb 2009 14:31:17 +0000 (14:31 +0000)
committerIlia Alshanetsky <iliaa@php.net>
Sun, 15 Feb 2009 14:31:17 +0000 (14:31 +0000)
Zend/zend_execute.c
Zend/zend_operators.c
Zend/zend_operators.h
Zend/zend_vm_def.h
Zend/zend_vm_execute.h

index 7d8fb56cedea8499146f4882c6497325340804f3..3dc4ab225370d80229779b8f6f7a19331973474a 100644 (file)
@@ -979,7 +979,7 @@ fetch_string_dim:
                                long index;
 
                                if (Z_TYPE_P(dim) == IS_DOUBLE) {
-                                       DVAL_TO_LVAL(Z_DVAL_P(dim), index);
+                                       index = (long)Z_DVAL_P(dim);
                                } else {
                                        index = Z_LVAL_P(dim);
                                }
index 6cef79691eec5fa496cd51ee3f1f676abb873a17..0d3e846fdf83cb2f22430511504846f61fb3cf3c 100644 (file)
@@ -186,6 +186,22 @@ ZEND_API void convert_scalar_to_number(zval *op TSRMLS_DC)
                }                                                                                                                                       \
        }
 
+#ifdef _WIN64
+# define DVAL_TO_LVAL(d, l) \
+       if ((d) > LONG_MAX) { \
+               (l) = (long)(unsigned long)(__int64) (d); \
+       } else { \
+               (l) = (long) (d); \
+       }
+#else
+# define DVAL_TO_LVAL(d, l) \
+       if ((d) > LONG_MAX) { \
+               (l) = (unsigned long) (d); \
+       } else { \
+               (l) = (long) (d); \
+       }
+#endif
+
 #define zendi_convert_to_long(op, holder, result)                                      \
        if (op == result) {                                                                                             \
                convert_to_long(op);                                                                            \
index 0415542fe5b6a9e9aacc4667b7c1ea9db7bb48d4..1968cb06d51f96269a8507e26c95a55c21b957e1 100644 (file)
@@ -75,22 +75,6 @@ ZEND_API zend_bool instanceof_function_ex(zend_class_entry *instance_ce, zend_cl
 ZEND_API zend_bool instanceof_function(zend_class_entry *instance_ce, zend_class_entry *ce TSRMLS_DC);
 END_EXTERN_C()
 
-#ifdef _WIN64
-# define DVAL_TO_LVAL(d, l) \
-      if ((d) > LONG_MAX) { \
-              (l) = (long)(unsigned long)(__int64) (d); \
-      } else { \
-              (l) = (long) (d); \
-      }
-#else
-# define DVAL_TO_LVAL(d, l) \
-      if ((d) > LONG_MAX) { \
-              (l) = (unsigned long) (d); \
-      } else { \
-              (l) = (long) (d); \
-      }
-#endif
-
 #define ZEND_IS_DIGIT(c) ((c) >= '0' && (c) <= '9')
 #define ZEND_IS_XDIGIT(c) (((c) >= 'A' && (c) <= 'F') || ((c) >= 'a'  && (c) <= 'f'))
 
index c734f24900498176e14078d7f964f68a03c55b7d..54064509c3a1928df219ba1aa9b93d7603b132cb 100644 (file)
@@ -2726,11 +2726,9 @@ ZEND_VM_HANDLER(72, ZEND_ADD_ARRAY_ELEMENT, CONST|TMP|VAR|CV, CONST|TMP|VAR|UNUS
                }
        }
        if (offset) {
-               long l;
                switch (Z_TYPE_P(offset)) {
                        case IS_DOUBLE:
-                               DVAL_TO_LVAL(Z_DVAL_P(offset), l);
-                               zend_hash_index_update(Z_ARRVAL_P(array_ptr), l, &expr_ptr, sizeof(zval *), NULL);
+                               zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL);
                                break;
                        case IS_LONG:
                        case IS_BOOL:
index 4ae2cffb3e9add330c3f86dd2b448185dcee4bd9..50176ad13a294db66e8b18e6f71450a3dba85f58 100644 (file)
@@ -2810,11 +2810,9 @@ static int ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_A
                }
        }
        if (offset) {
-               long l;
                switch (Z_TYPE_P(offset)) {
                        case IS_DOUBLE:
-                               DVAL_TO_LVAL(Z_DVAL_P(offset), l);
-                               zend_hash_index_update(Z_ARRVAL_P(array_ptr), l, &expr_ptr, sizeof(zval *), NULL);
+                               zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL);
                                break;
                        case IS_LONG:
                        case IS_BOOL:
@@ -3171,11 +3169,9 @@ static int ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARG
                }
        }
        if (offset) {
-               long l;
                switch (Z_TYPE_P(offset)) {
                        case IS_DOUBLE:
-                               DVAL_TO_LVAL(Z_DVAL_P(offset), l);
-                               zend_hash_index_update(Z_ARRVAL_P(array_ptr), l, &expr_ptr, sizeof(zval *), NULL);
+                               zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL);
                                break;
                        case IS_LONG:
                        case IS_BOOL:
@@ -3532,11 +3528,9 @@ static int ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARG
                }
        }
        if (offset) {
-               long l;
                switch (Z_TYPE_P(offset)) {
                        case IS_DOUBLE:
-                               DVAL_TO_LVAL(Z_DVAL_P(offset), l);
-                               zend_hash_index_update(Z_ARRVAL_P(array_ptr), l, &expr_ptr, sizeof(zval *), NULL);
+                               zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL);
                                break;
                        case IS_LONG:
                        case IS_BOOL:
@@ -3627,11 +3621,9 @@ static int ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_
                }
        }
        if (offset) {
-               long l;
                switch (Z_TYPE_P(offset)) {
                        case IS_DOUBLE:
-                               DVAL_TO_LVAL(Z_DVAL_P(offset), l);
-                               zend_hash_index_update(Z_ARRVAL_P(array_ptr), l, &expr_ptr, sizeof(zval *), NULL);
+                               zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL);
                                break;
                        case IS_LONG:
                        case IS_BOOL:
@@ -3987,11 +3979,9 @@ static int ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS
                }
        }
        if (offset) {
-               long l;
                switch (Z_TYPE_P(offset)) {
                        case IS_DOUBLE:
-                               DVAL_TO_LVAL(Z_DVAL_P(offset), l);
-                               zend_hash_index_update(Z_ARRVAL_P(array_ptr), l, &expr_ptr, sizeof(zval *), NULL);
+                               zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL);
                                break;
                        case IS_LONG:
                        case IS_BOOL:
@@ -5450,11 +5440,9 @@ static int ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARG
                }
        }
        if (offset) {
-               long l;
                switch (Z_TYPE_P(offset)) {
                        case IS_DOUBLE:
-                               DVAL_TO_LVAL(Z_DVAL_P(offset), l);
-                               zend_hash_index_update(Z_ARRVAL_P(array_ptr), l, &expr_ptr, sizeof(zval *), NULL);
+                               zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL);
                                break;
                        case IS_LONG:
                        case IS_BOOL:
@@ -5897,11 +5885,9 @@ static int ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                }
        }
        if (offset) {
-               long l;
                switch (Z_TYPE_P(offset)) {
                        case IS_DOUBLE:
-                               DVAL_TO_LVAL(Z_DVAL_P(offset), l);
-                               zend_hash_index_update(Z_ARRVAL_P(array_ptr), l, &expr_ptr, sizeof(zval *), NULL);
+                               zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL);
                                break;
                        case IS_LONG:
                        case IS_BOOL:
@@ -6344,11 +6330,9 @@ static int ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                }
        }
        if (offset) {
-               long l;
                switch (Z_TYPE_P(offset)) {
                        case IS_DOUBLE:
-                               DVAL_TO_LVAL(Z_DVAL_P(offset), l);
-                               zend_hash_index_update(Z_ARRVAL_P(array_ptr), l, &expr_ptr, sizeof(zval *), NULL);
+                               zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL);
                                break;
                        case IS_LONG:
                        case IS_BOOL:
@@ -6439,11 +6423,9 @@ static int ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_AR
                }
        }
        if (offset) {
-               long l;
                switch (Z_TYPE_P(offset)) {
                        case IS_DOUBLE:
-                               DVAL_TO_LVAL(Z_DVAL_P(offset), l);
-                               zend_hash_index_update(Z_ARRVAL_P(array_ptr), l, &expr_ptr, sizeof(zval *), NULL);
+                               zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL);
                                break;
                        case IS_LONG:
                        case IS_BOOL:
@@ -6883,11 +6865,9 @@ static int ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                }
        }
        if (offset) {
-               long l;
                switch (Z_TYPE_P(offset)) {
                        case IS_DOUBLE:
-                               DVAL_TO_LVAL(Z_DVAL_P(offset), l);
-                               zend_hash_index_update(Z_ARRVAL_P(array_ptr), l, &expr_ptr, sizeof(zval *), NULL);
+                               zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL);
                                break;
                        case IS_LONG:
                        case IS_BOOL:
@@ -9535,11 +9515,9 @@ static int ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARG
                }
        }
        if (offset) {
-               long l;
                switch (Z_TYPE_P(offset)) {
                        case IS_DOUBLE:
-                               DVAL_TO_LVAL(Z_DVAL_P(offset), l);
-                               zend_hash_index_update(Z_ARRVAL_P(array_ptr), l, &expr_ptr, sizeof(zval *), NULL);
+                               zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL);
                                break;
                        case IS_LONG:
                        case IS_BOOL:
@@ -11058,11 +11036,9 @@ static int ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                }
        }
        if (offset) {
-               long l;
                switch (Z_TYPE_P(offset)) {
                        case IS_DOUBLE:
-                               DVAL_TO_LVAL(Z_DVAL_P(offset), l);
-                               zend_hash_index_update(Z_ARRVAL_P(array_ptr), l, &expr_ptr, sizeof(zval *), NULL);
+                               zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL);
                                break;
                        case IS_LONG:
                        case IS_BOOL:
@@ -12629,11 +12605,9 @@ static int ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                }
        }
        if (offset) {
-               long l;
                switch (Z_TYPE_P(offset)) {
                        case IS_DOUBLE:
-                               DVAL_TO_LVAL(Z_DVAL_P(offset), l);
-                               zend_hash_index_update(Z_ARRVAL_P(array_ptr), l, &expr_ptr, sizeof(zval *), NULL);
+                               zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL);
                                break;
                        case IS_LONG:
                        case IS_BOOL:
@@ -13340,11 +13314,9 @@ static int ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_AR
                }
        }
        if (offset) {
-               long l;
                switch (Z_TYPE_P(offset)) {
                        case IS_DOUBLE:
-                               DVAL_TO_LVAL(Z_DVAL_P(offset), l);
-                               zend_hash_index_update(Z_ARRVAL_P(array_ptr), l, &expr_ptr, sizeof(zval *), NULL);
+                               zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL);
                                break;
                        case IS_LONG:
                        case IS_BOOL:
@@ -14643,11 +14615,9 @@ static int ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                }
        }
        if (offset) {
-               long l;
                switch (Z_TYPE_P(offset)) {
                        case IS_DOUBLE:
-                               DVAL_TO_LVAL(Z_DVAL_P(offset), l);
-                               zend_hash_index_update(Z_ARRVAL_P(array_ptr), l, &expr_ptr, sizeof(zval *), NULL);
+                               zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL);
                                break;
                        case IS_LONG:
                        case IS_BOOL:
@@ -21699,11 +21669,9 @@ static int ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS
                }
        }
        if (offset) {
-               long l;
                switch (Z_TYPE_P(offset)) {
                        case IS_DOUBLE:
-                               DVAL_TO_LVAL(Z_DVAL_P(offset), l);
-                               zend_hash_index_update(Z_ARRVAL_P(array_ptr), l, &expr_ptr, sizeof(zval *), NULL);
+                               zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL);
                                break;
                        case IS_LONG:
                        case IS_BOOL:
@@ -23214,11 +23182,9 @@ static int ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                }
        }
        if (offset) {
-               long l;
                switch (Z_TYPE_P(offset)) {
                        case IS_DOUBLE:
-                               DVAL_TO_LVAL(Z_DVAL_P(offset), l);
-                               zend_hash_index_update(Z_ARRVAL_P(array_ptr), l, &expr_ptr, sizeof(zval *), NULL);
+                               zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL);
                                break;
                        case IS_LONG:
                        case IS_BOOL:
@@ -24776,11 +24742,9 @@ static int ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                }
        }
        if (offset) {
-               long l;
                switch (Z_TYPE_P(offset)) {
                        case IS_DOUBLE:
-                               DVAL_TO_LVAL(Z_DVAL_P(offset), l);
-                               zend_hash_index_update(Z_ARRVAL_P(array_ptr), l, &expr_ptr, sizeof(zval *), NULL);
+                               zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL);
                                break;
                        case IS_LONG:
                        case IS_BOOL:
@@ -25482,11 +25446,9 @@ static int ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARG
                }
        }
        if (offset) {
-               long l;
                switch (Z_TYPE_P(offset)) {
                        case IS_DOUBLE:
-                               DVAL_TO_LVAL(Z_DVAL_P(offset), l);
-                               zend_hash_index_update(Z_ARRVAL_P(array_ptr), l, &expr_ptr, sizeof(zval *), NULL);
+                               zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL);
                                break;
                        case IS_LONG:
                        case IS_BOOL:
@@ -26780,11 +26742,9 @@ static int ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                }
        }
        if (offset) {
-               long l;
                switch (Z_TYPE_P(offset)) {
                        case IS_DOUBLE:
-                               DVAL_TO_LVAL(Z_DVAL_P(offset), l);
-                               zend_hash_index_update(Z_ARRVAL_P(array_ptr), l, &expr_ptr, sizeof(zval *), NULL);
+                               zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL);
                                break;
                        case IS_LONG:
                        case IS_BOOL: