]> granicus.if.org Git - php/commitdiff
Reored conditions
authorDmitry Stogov <dmitry@zend.com>
Mon, 29 Dec 2014 11:20:52 +0000 (14:20 +0300)
committerDmitry Stogov <dmitry@zend.com>
Mon, 29 Dec 2014 11:20:52 +0000 (14:20 +0300)
Zend/zend_vm_def.h
Zend/zend_vm_execute.h

index e7f8300d288df711be097b4941702b6f91d895c1..f1590ad726b13312373ab43fd6b73d75266b88aa 100644 (file)
@@ -2765,7 +2765,36 @@ ZEND_VM_HANDLER(60, ZEND_DO_FCALL, ANY, ANY)
 
        LOAD_OPLINE();
 
-       if (UNEXPECTED(fbc->type == ZEND_INTERNAL_FUNCTION)) {
+       if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
+               EG(scope) = fbc->common.scope;
+               if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_GENERATOR) != 0)) {
+                       if (RETURN_VALUE_USED(opline)) {
+                               zend_generator_create_zval(call, &fbc->op_array, EX_VAR(opline->result.var));
+                       } else {
+                               zend_vm_stack_free_args(call);
+                       }
+       
+                       zend_vm_stack_free_call_frame(call);
+               } else {
+                       ret = NULL;
+                       call->symbol_table = NULL;
+                       if (RETURN_VALUE_USED(opline)) {
+                               ret = EX_VAR(opline->result.var);
+                               ZVAL_NULL(ret);
+                               Z_VAR_FLAGS_P(ret) = 0;
+                       }
+
+                       call->prev_execute_data = execute_data;
+                       i_init_func_execute_data(call, &fbc->op_array, ret);
+
+                       if (EXPECTED(zend_execute_ex == execute_ex)) {
+                               ZEND_VM_ENTER();
+                       } else {
+                               ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
+                               zend_execute_ex(call);
+                       }
+               }
+       } else if (EXPECTED(fbc->type < ZEND_USER_FUNCTION)) {
                int should_change_scope = 0;
                zval *ret;
 
@@ -2833,35 +2862,6 @@ ZEND_VM_HANDLER(60, ZEND_DO_FCALL, ANY, ANY)
                } else {
                        ZEND_VM_C_GOTO(fcall_end);
                }
-       } else if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
-               EG(scope) = fbc->common.scope;
-               if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_GENERATOR) != 0)) {
-                       if (RETURN_VALUE_USED(opline)) {
-                               zend_generator_create_zval(call, &fbc->op_array, EX_VAR(opline->result.var));
-                       } else {
-                               zend_vm_stack_free_args(call);
-                       }
-       
-                       zend_vm_stack_free_call_frame(call);
-               } else {
-                       ret = NULL;
-                       call->symbol_table = NULL;
-                       if (RETURN_VALUE_USED(opline)) {
-                               ret = EX_VAR(opline->result.var);
-                               ZVAL_NULL(ret);
-                               Z_VAR_FLAGS_P(ret) = 0;
-                       }
-
-                       call->prev_execute_data = execute_data;
-                       i_init_func_execute_data(call, &fbc->op_array, ret);
-
-                       if (EXPECTED(zend_execute_ex == execute_ex)) {
-                               ZEND_VM_ENTER();
-                       } else {
-                               ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
-                               zend_execute_ex(call);
-                       }
-               }
        } else { /* ZEND_OVERLOADED_FUNCTION */
                EG(scope) = fbc->common.scope;
 
index 7cb915fa7dd089487e41cd40291e595d28743098..c78dca8ead63082690d0b9ad0918bad963a05587 100644 (file)
@@ -513,7 +513,36 @@ static int ZEND_FASTCALL  ZEND_DO_FCALL_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 
        LOAD_OPLINE();
 
-       if (UNEXPECTED(fbc->type == ZEND_INTERNAL_FUNCTION)) {
+       if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
+               EG(scope) = fbc->common.scope;
+               if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_GENERATOR) != 0)) {
+                       if (RETURN_VALUE_USED(opline)) {
+                               zend_generator_create_zval(call, &fbc->op_array, EX_VAR(opline->result.var));
+                       } else {
+                               zend_vm_stack_free_args(call);
+                       }
+
+                       zend_vm_stack_free_call_frame(call);
+               } else {
+                       ret = NULL;
+                       call->symbol_table = NULL;
+                       if (RETURN_VALUE_USED(opline)) {
+                               ret = EX_VAR(opline->result.var);
+                               ZVAL_NULL(ret);
+                               Z_VAR_FLAGS_P(ret) = 0;
+                       }
+
+                       call->prev_execute_data = execute_data;
+                       i_init_func_execute_data(call, &fbc->op_array, ret);
+
+                       if (EXPECTED(zend_execute_ex == execute_ex)) {
+                               ZEND_VM_ENTER();
+                       } else {
+                               ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
+                               zend_execute_ex(call);
+                       }
+               }
+       } else if (EXPECTED(fbc->type < ZEND_USER_FUNCTION)) {
                int should_change_scope = 0;
                zval *ret;
 
@@ -581,35 +610,6 @@ static int ZEND_FASTCALL  ZEND_DO_FCALL_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                } else {
                        goto fcall_end;
                }
-       } else if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
-               EG(scope) = fbc->common.scope;
-               if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_GENERATOR) != 0)) {
-                       if (RETURN_VALUE_USED(opline)) {
-                               zend_generator_create_zval(call, &fbc->op_array, EX_VAR(opline->result.var));
-                       } else {
-                               zend_vm_stack_free_args(call);
-                       }
-
-                       zend_vm_stack_free_call_frame(call);
-               } else {
-                       ret = NULL;
-                       call->symbol_table = NULL;
-                       if (RETURN_VALUE_USED(opline)) {
-                               ret = EX_VAR(opline->result.var);
-                               ZVAL_NULL(ret);
-                               Z_VAR_FLAGS_P(ret) = 0;
-                       }
-
-                       call->prev_execute_data = execute_data;
-                       i_init_func_execute_data(call, &fbc->op_array, ret);
-
-                       if (EXPECTED(zend_execute_ex == execute_ex)) {
-                               ZEND_VM_ENTER();
-                       } else {
-                               ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
-                               zend_execute_ex(call);
-                       }
-               }
        } else { /* ZEND_OVERLOADED_FUNCTION */
                EG(scope) = fbc->common.scope;