]> granicus.if.org Git - php/commitdiff
Support for optimization introduced in DFA pass (it may change type of instruction...
authorDmitry Stogov <dmitry@zend.com>
Wed, 23 Dec 2015 16:02:14 +0000 (19:02 +0300)
committerDmitry Stogov <dmitry@zend.com>
Wed, 23 Dec 2015 16:02:14 +0000 (19:02 +0300)
Zend/zend_vm_def.h
Zend/zend_vm_execute.h

index b3e3a35d7a2ae7855d4433a8ce2da64fbb82b189..263e2fa756716939c47cb118e53fde9cb1f7d5d9 100644 (file)
@@ -6021,7 +6021,7 @@ ZEND_VM_HANDLER(78, ZEND_FE_FETCH_R, VAR, ANY, JMP_ADDR)
                        break;
                }
                Z_FE_POS_P(array) = pos + 1;
-               if (opline->result_type == IS_TMP_VAR) {
+               if (opline->result_type & (IS_TMP_VAR|IS_CV)) {
                        if (!p->key) {
                                ZVAL_LONG(EX_VAR(opline->result.var), p->h);
                        } else {
@@ -6065,7 +6065,7 @@ ZEND_VM_HANDLER(78, ZEND_FE_FETCH_R, VAR, ANY, JMP_ADDR)
                                pos++;
                                p++;
                        }
-                       if (opline->result_type == IS_TMP_VAR) {
+                       if (opline->result_type & (IS_TMP_VAR|IS_CV)) {
                                if (UNEXPECTED(!p->key)) {
                                        ZVAL_LONG(EX_VAR(opline->result.var), p->h);
                                } else if (ZSTR_VAL(p->key)[0]) {
@@ -6118,7 +6118,7 @@ ZEND_VM_HANDLER(78, ZEND_FE_FETCH_R, VAR, ANY, JMP_ADDR)
                                /* failure in get_current_data */
                                ZEND_VM_C_GOTO(fe_fetch_r_exit);
                        }
-                       if (opline->result_type == IS_TMP_VAR) {
+                       if (opline->result_type & (IS_TMP_VAR|IS_CV)) {
                                if (iter->funcs->get_current_key) {
                                        iter->funcs->get_current_key(iter, EX_VAR(opline->result.var));
                                        if (UNEXPECTED(EG(exception) != NULL)) {
@@ -6195,7 +6195,7 @@ ZEND_VM_HANDLER(126, ZEND_FE_FETCH_RW, VAR, ANY, JMP_ADDR)
                        }
                        break;
                }
-               if (opline->result_type == IS_TMP_VAR) {
+               if (opline->result_type & (IS_TMP_VAR|IS_CV)) {
                        if (!p->key) {
                                ZVAL_LONG(EX_VAR(opline->result.var), p->h);
                        } else {
@@ -6253,7 +6253,7 @@ ZEND_VM_HANDLER(126, ZEND_FE_FETCH_RW, VAR, ANY, JMP_ADDR)
                                pos++;
                                p++;
                        }
-                       if (opline->result_type == IS_TMP_VAR) {
+                       if (opline->result_type & (IS_TMP_VAR|IS_CV)) {
                                if (UNEXPECTED(!p->key)) {
                                        ZVAL_LONG(EX_VAR(opline->result.var), p->h);
                                } else if (ZSTR_VAL(p->key)[0]) {
@@ -6306,7 +6306,7 @@ ZEND_VM_HANDLER(126, ZEND_FE_FETCH_RW, VAR, ANY, JMP_ADDR)
                                /* failure in get_current_data */
                                ZEND_VM_C_GOTO(fe_fetch_w_exit);
                        }
-                       if (opline->result_type == IS_TMP_VAR) {
+                       if (opline->result_type & (IS_TMP_VAR|IS_CV)) {
                                if (iter->funcs->get_current_key) {
                                        iter->funcs->get_current_key(iter, EX_VAR(opline->result.var));
                                        if (UNEXPECTED(EG(exception) != NULL)) {
index 975dbc7db48919036ee788f168989b6a40690dc2..a923dffd9cf5977b3f11ce79f60fc4aab799245d 100644 (file)
@@ -15583,7 +15583,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_R_SPEC_VAR_HANDLER(ZE
                        break;
                }
                Z_FE_POS_P(array) = pos + 1;
-               if (opline->result_type == IS_TMP_VAR) {
+               if (opline->result_type & (IS_TMP_VAR|IS_CV)) {
                        if (!p->key) {
                                ZVAL_LONG(EX_VAR(opline->result.var), p->h);
                        } else {
@@ -15627,7 +15627,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_R_SPEC_VAR_HANDLER(ZE
                                pos++;
                                p++;
                        }
-                       if (opline->result_type == IS_TMP_VAR) {
+                       if (opline->result_type & (IS_TMP_VAR|IS_CV)) {
                                if (UNEXPECTED(!p->key)) {
                                        ZVAL_LONG(EX_VAR(opline->result.var), p->h);
                                } else if (ZSTR_VAL(p->key)[0]) {
@@ -15680,7 +15680,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_R_SPEC_VAR_HANDLER(ZE
                                /* failure in get_current_data */
                                goto fe_fetch_r_exit;
                        }
-                       if (opline->result_type == IS_TMP_VAR) {
+                       if (opline->result_type & (IS_TMP_VAR|IS_CV)) {
                                if (iter->funcs->get_current_key) {
                                        iter->funcs->get_current_key(iter, EX_VAR(opline->result.var));
                                        if (UNEXPECTED(EG(exception) != NULL)) {
@@ -15757,7 +15757,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER(Z
                        }
                        break;
                }
-               if (opline->result_type == IS_TMP_VAR) {
+               if (opline->result_type & (IS_TMP_VAR|IS_CV)) {
                        if (!p->key) {
                                ZVAL_LONG(EX_VAR(opline->result.var), p->h);
                        } else {
@@ -15815,7 +15815,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER(Z
                                pos++;
                                p++;
                        }
-                       if (opline->result_type == IS_TMP_VAR) {
+                       if (opline->result_type & (IS_TMP_VAR|IS_CV)) {
                                if (UNEXPECTED(!p->key)) {
                                        ZVAL_LONG(EX_VAR(opline->result.var), p->h);
                                } else if (ZSTR_VAL(p->key)[0]) {
@@ -15868,7 +15868,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER(Z
                                /* failure in get_current_data */
                                goto fe_fetch_w_exit;
                        }
-                       if (opline->result_type == IS_TMP_VAR) {
+                       if (opline->result_type & (IS_TMP_VAR|IS_CV)) {
                                if (iter->funcs->get_current_key) {
                                        iter->funcs->get_current_key(iter, EX_VAR(opline->result.var));
                                        if (UNEXPECTED(EG(exception) != NULL)) {