]> granicus.if.org Git - php/commitdiff
Fixed support for references
authorDmitry Stogov <dmitry@zend.com>
Thu, 14 Aug 2014 18:44:25 +0000 (22:44 +0400)
committerDmitry Stogov <dmitry@zend.com>
Thu, 14 Aug 2014 18:44:25 +0000 (22:44 +0400)
Zend/zend_vm_def.h
Zend/zend_vm_execute.h

index 23e2254ea16bf67cdde84c2d46fa3f7d6db0c4ce..7749197a7494b72b8627c530c53a7b77719dc869 100644 (file)
@@ -4924,7 +4924,8 @@ ZEND_VM_C_LABEL(num_index_prop):
 
                if (opline->extended_value & ZEND_ISSET) {
                        /* > IS_NULL means not IS_UNDEF and not IS_NULL */
-                       result = (value != NULL && Z_TYPE_P(value) > IS_NULL);
+                       result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
+                           (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
                } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
                        result = (value == NULL || !i_zend_is_true(value TSRMLS_CC));
                }
index 65ad7b29f339393fdb6ec7bb45e6d38ad0577850..c2e59c14411f7145850ae6d26243155798bf612d 100644 (file)
@@ -16724,7 +16724,8 @@ num_index_prop:
 
                if (opline->extended_value & ZEND_ISSET) {
                        /* > IS_NULL means not IS_UNDEF and not IS_NULL */
-                       result = (value != NULL && Z_TYPE_P(value) > IS_NULL);
+                       result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
+                           (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
                } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
                        result = (value == NULL || !i_zend_is_true(value TSRMLS_CC));
                }
@@ -18710,7 +18711,8 @@ num_index_prop:
 
                if (opline->extended_value & ZEND_ISSET) {
                        /* > IS_NULL means not IS_UNDEF and not IS_NULL */
-                       result = (value != NULL && Z_TYPE_P(value) > IS_NULL);
+                       result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
+                           (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
                } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
                        result = (value == NULL || !i_zend_is_true(value TSRMLS_CC));
                }
@@ -21067,7 +21069,8 @@ num_index_prop:
 
                if (opline->extended_value & ZEND_ISSET) {
                        /* > IS_NULL means not IS_UNDEF and not IS_NULL */
-                       result = (value != NULL && Z_TYPE_P(value) > IS_NULL);
+                       result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
+                           (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
                } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
                        result = (value == NULL || !i_zend_is_true(value TSRMLS_CC));
                }
@@ -24297,7 +24300,8 @@ num_index_prop:
 
                if (opline->extended_value & ZEND_ISSET) {
                        /* > IS_NULL means not IS_UNDEF and not IS_NULL */
-                       result = (value != NULL && Z_TYPE_P(value) > IS_NULL);
+                       result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
+                           (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
                } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
                        result = (value == NULL || !i_zend_is_true(value TSRMLS_CC));
                }
@@ -25757,7 +25761,8 @@ num_index_prop:
 
                if (opline->extended_value & ZEND_ISSET) {
                        /* > IS_NULL means not IS_UNDEF and not IS_NULL */
-                       result = (value != NULL && Z_TYPE_P(value) > IS_NULL);
+                       result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
+                           (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
                } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
                        result = (value == NULL || !i_zend_is_true(value TSRMLS_CC));
                }
@@ -27036,7 +27041,8 @@ num_index_prop:
 
                if (opline->extended_value & ZEND_ISSET) {
                        /* > IS_NULL means not IS_UNDEF and not IS_NULL */
-                       result = (value != NULL && Z_TYPE_P(value) > IS_NULL);
+                       result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
+                           (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
                } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
                        result = (value == NULL || !i_zend_is_true(value TSRMLS_CC));
                }
@@ -28317,7 +28323,8 @@ num_index_prop:
 
                if (opline->extended_value & ZEND_ISSET) {
                        /* > IS_NULL means not IS_UNDEF and not IS_NULL */
-                       result = (value != NULL && Z_TYPE_P(value) > IS_NULL);
+                       result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
+                           (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
                } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
                        result = (value == NULL || !i_zend_is_true(value TSRMLS_CC));
                }
@@ -30107,7 +30114,8 @@ num_index_prop:
 
                if (opline->extended_value & ZEND_ISSET) {
                        /* > IS_NULL means not IS_UNDEF and not IS_NULL */
-                       result = (value != NULL && Z_TYPE_P(value) > IS_NULL);
+                       result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
+                           (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
                } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
                        result = (value == NULL || !i_zend_is_true(value TSRMLS_CC));
                }
@@ -33709,7 +33717,8 @@ num_index_prop:
 
                if (opline->extended_value & ZEND_ISSET) {
                        /* > IS_NULL means not IS_UNDEF and not IS_NULL */
-                       result = (value != NULL && Z_TYPE_P(value) > IS_NULL);
+                       result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
+                           (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
                } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
                        result = (value == NULL || !i_zend_is_true(value TSRMLS_CC));
                }
@@ -35606,7 +35615,8 @@ num_index_prop:
 
                if (opline->extended_value & ZEND_ISSET) {
                        /* > IS_NULL means not IS_UNDEF and not IS_NULL */
-                       result = (value != NULL && Z_TYPE_P(value) > IS_NULL);
+                       result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
+                           (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
                } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
                        result = (value == NULL || !i_zend_is_true(value TSRMLS_CC));
                }
@@ -37843,7 +37853,8 @@ num_index_prop:
 
                if (opline->extended_value & ZEND_ISSET) {
                        /* > IS_NULL means not IS_UNDEF and not IS_NULL */
-                       result = (value != NULL && Z_TYPE_P(value) > IS_NULL);
+                       result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
+                           (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
                } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
                        result = (value == NULL || !i_zend_is_true(value TSRMLS_CC));
                }
@@ -40817,7 +40828,8 @@ num_index_prop:
 
                if (opline->extended_value & ZEND_ISSET) {
                        /* > IS_NULL means not IS_UNDEF and not IS_NULL */
-                       result = (value != NULL && Z_TYPE_P(value) > IS_NULL);
+                       result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
+                           (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
                } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
                        result = (value == NULL || !i_zend_is_true(value TSRMLS_CC));
                }