]> granicus.if.org Git - php/commitdiff
Fixed support for executor override
authorDmitry Stogov <dmitry@zend.com>
Tue, 22 Jul 2014 07:24:16 +0000 (11:24 +0400)
committerDmitry Stogov <dmitry@zend.com>
Tue, 22 Jul 2014 07:24:16 +0000 (11:24 +0400)
Zend/zend_vm_def.h
Zend/zend_vm_execute.h

index 618f90267fca0921e9ee1edf9a3fe8b0a24d5d09..4b8f229c8df8275abf8342398587127cdb602d99 100644 (file)
@@ -2736,12 +2736,12 @@ ZEND_VM_HANDLER(60, ZEND_DO_FCALL, ANY, ANY)
                        zend_vm_stack_free_call_frame(call TSRMLS_CC);
                } else {
                        call->prev_execute_data = execute_data;
-                       i_init_func_execute_data(call, &fbc->op_array, return_value, VM_FRAME_NESTED_FUNCTION TSRMLS_CC);
+                       i_init_func_execute_data(call, &fbc->op_array, return_value, EXPECTED(zend_execute_ex == execute_ex) ? VM_FRAME_NESTED_FUNCTION : VM_FRAME_TOP_FUNCTION TSRMLS_CC);
 
                        if (EXPECTED(zend_execute_ex == execute_ex)) {
                                ZEND_VM_ENTER();
                        } else {
-                               execute_ex(call TSRMLS_CC);
+                               zend_execute_ex(call TSRMLS_CC);
                        }
                }
        } else { /* ZEND_OVERLOADED_FUNCTION */
@@ -4231,11 +4231,11 @@ ZEND_VM_HANDLER(73, ZEND_INCLUDE_OR_EVAL, CONST|TMP|VAR|CV, ANY)
                }
 
                call->prev_execute_data = execute_data;
-           i_init_code_execute_data(call, new_op_array, return_value, VM_FRAME_NESTED_CODE TSRMLS_CC);
+           i_init_code_execute_data(call, new_op_array, return_value, EXPECTED(zend_execute_ex == execute_ex) ? VM_FRAME_NESTED_CODE : VM_FRAME_TOP_CODE TSRMLS_CC);
                if (EXPECTED(zend_execute_ex == execute_ex)) {
                        ZEND_VM_ENTER();
                } else {
-                       execute_ex(call TSRMLS_CC);
+                       zend_execute_ex(call TSRMLS_CC);
                }
 
                destroy_op_array(new_op_array TSRMLS_CC);
index c6c8f8ee38a73c2a78d9b74a835aef16af46cde6..d5bdb70762f37429ea777842aa1d146888bd0662 100644 (file)
@@ -632,12 +632,12 @@ static int ZEND_FASTCALL  ZEND_DO_FCALL_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                        zend_vm_stack_free_call_frame(call TSRMLS_CC);
                } else {
                        call->prev_execute_data = execute_data;
-                       i_init_func_execute_data(call, &fbc->op_array, return_value, VM_FRAME_NESTED_FUNCTION TSRMLS_CC);
+                       i_init_func_execute_data(call, &fbc->op_array, return_value, EXPECTED(zend_execute_ex == execute_ex) ? VM_FRAME_NESTED_FUNCTION : VM_FRAME_TOP_FUNCTION TSRMLS_CC);
 
                        if (EXPECTED(zend_execute_ex == execute_ex)) {
                                ZEND_VM_ENTER();
                        } else {
-                               execute_ex(call TSRMLS_CC);
+                               zend_execute_ex(call TSRMLS_CC);
                        }
                }
        } else { /* ZEND_OVERLOADED_FUNCTION */
@@ -3048,11 +3048,11 @@ static int ZEND_FASTCALL  ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER(ZEND_OPCODE_HA
                }
 
                call->prev_execute_data = execute_data;
-           i_init_code_execute_data(call, new_op_array, return_value, VM_FRAME_NESTED_CODE TSRMLS_CC);
+           i_init_code_execute_data(call, new_op_array, return_value, EXPECTED(zend_execute_ex == execute_ex) ? VM_FRAME_NESTED_CODE : VM_FRAME_TOP_CODE TSRMLS_CC);
                if (EXPECTED(zend_execute_ex == execute_ex)) {
                        ZEND_VM_ENTER();
                } else {
-                       execute_ex(call TSRMLS_CC);
+                       zend_execute_ex(call TSRMLS_CC);
                }
 
                destroy_op_array(new_op_array TSRMLS_CC);
@@ -8551,11 +8551,11 @@ static int ZEND_FASTCALL  ZEND_INCLUDE_OR_EVAL_SPEC_TMP_HANDLER(ZEND_OPCODE_HAND
                }
 
                call->prev_execute_data = execute_data;
-           i_init_code_execute_data(call, new_op_array, return_value, VM_FRAME_NESTED_CODE TSRMLS_CC);
+           i_init_code_execute_data(call, new_op_array, return_value, EXPECTED(zend_execute_ex == execute_ex) ? VM_FRAME_NESTED_CODE : VM_FRAME_TOP_CODE TSRMLS_CC);
                if (EXPECTED(zend_execute_ex == execute_ex)) {
                        ZEND_VM_ENTER();
                } else {
-                       execute_ex(call TSRMLS_CC);
+                       zend_execute_ex(call TSRMLS_CC);
                }
 
                destroy_op_array(new_op_array TSRMLS_CC);
@@ -13977,11 +13977,11 @@ static int ZEND_FASTCALL  ZEND_INCLUDE_OR_EVAL_SPEC_VAR_HANDLER(ZEND_OPCODE_HAND
                }
 
                call->prev_execute_data = execute_data;
-           i_init_code_execute_data(call, new_op_array, return_value, VM_FRAME_NESTED_CODE TSRMLS_CC);
+           i_init_code_execute_data(call, new_op_array, return_value, EXPECTED(zend_execute_ex == execute_ex) ? VM_FRAME_NESTED_CODE : VM_FRAME_TOP_CODE TSRMLS_CC);
                if (EXPECTED(zend_execute_ex == execute_ex)) {
                        ZEND_VM_ENTER();
                } else {
-                       execute_ex(call TSRMLS_CC);
+                       zend_execute_ex(call TSRMLS_CC);
                }
 
                destroy_op_array(new_op_array TSRMLS_CC);
@@ -31289,11 +31289,11 @@ static int ZEND_FASTCALL  ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDL
                }
 
                call->prev_execute_data = execute_data;
-           i_init_code_execute_data(call, new_op_array, return_value, VM_FRAME_NESTED_CODE TSRMLS_CC);
+           i_init_code_execute_data(call, new_op_array, return_value, EXPECTED(zend_execute_ex == execute_ex) ? VM_FRAME_NESTED_CODE : VM_FRAME_TOP_CODE TSRMLS_CC);
                if (EXPECTED(zend_execute_ex == execute_ex)) {
                        ZEND_VM_ENTER();
                } else {
-                       execute_ex(call TSRMLS_CC);
+                       zend_execute_ex(call TSRMLS_CC);
                }
 
                destroy_op_array(new_op_array TSRMLS_CC);