]> granicus.if.org Git - php/commitdiff
- Remove duplicate code and do a tiny optimization in DO_FCALL
authorAndi Gutmans <andi@php.net>
Fri, 9 Feb 2001 12:47:57 +0000 (12:47 +0000)
committerAndi Gutmans <andi@php.net>
Fri, 9 Feb 2001 12:47:57 +0000 (12:47 +0000)
Zend/zend_execute.c

index 03bb80c18b511732e358153635b75bc1861a03ce..feae9a81bc474d54414b81835289ae704470b464 100644 (file)
@@ -1298,38 +1298,32 @@ binary_assign_op_addr: {
                                        zend_op *original_opline = opline;
                                        int retval = zend_is_true(get_zval_ptr(&original_opline->op1, Ts, &EG(free_op1), BP_VAR_R));
                                        
+                                       FREE_OP(&original_opline->op1, EG(free_op1));
+                                       Ts[original_opline->result.u.var].tmp_var.value.lval = retval;
+                                       Ts[original_opline->result.u.var].tmp_var.type = IS_LONG;
                                        if (!retval) {
 #if DEBUG_ZEND>=2
                                                printf("Conditional jmp to %d\n", opline->op2.u.opline_num);
 #endif
                                                opline = &op_array->opcodes[opline->op2.u.opline_num];
-                                               FREE_OP(&original_opline->op1, EG(free_op1));
-                                               Ts[original_opline->result.u.var].tmp_var.value.lval = retval;
-                                               Ts[original_opline->result.u.var].tmp_var.type = IS_LONG;
                                                continue;
                                        }
-                                       FREE_OP(&original_opline->op1, EG(free_op1));
-                                       Ts[original_opline->result.u.var].tmp_var.value.lval = retval;
-                                       Ts[original_opline->result.u.var].tmp_var.type = IS_LONG;
                                }
                                NEXT_OPCODE();
                        case ZEND_JMPNZ_EX: {
                                        zend_op *original_opline = opline;
                                        int retval = zend_is_true(get_zval_ptr(&original_opline->op1, Ts, &EG(free_op1), BP_VAR_R));
                                        
+                                       FREE_OP(&original_opline->op1, EG(free_op1));
+                                       Ts[original_opline->result.u.var].tmp_var.value.lval = retval;
+                                       Ts[original_opline->result.u.var].tmp_var.type = IS_LONG;
                                        if (retval) {
 #if DEBUG_ZEND>=2
                                                printf("Conditional jmp to %d\n", opline->op2.u.opline_num);
 #endif
                                                opline = &op_array->opcodes[opline->op2.u.opline_num];
-                                               FREE_OP(&original_opline->op1, EG(free_op1));
-                                               Ts[original_opline->result.u.var].tmp_var.value.lval = retval;
-                                               Ts[original_opline->result.u.var].tmp_var.type = IS_LONG;
                                                continue;
                                        }
-                                       FREE_OP(&original_opline->op1, EG(free_op1));
-                                       Ts[original_opline->result.u.var].tmp_var.value.lval = retval;
-                                       Ts[original_opline->result.u.var].tmp_var.type = IS_LONG;
                                }
                                NEXT_OPCODE();
                        case ZEND_FREE:
@@ -1560,9 +1554,10 @@ do_fcall_common:
                                                        zval_ptr_dtor(&Ts[opline->result.u.var].var.ptr);
                                                }
                                        }
-                                       object.ptr = zend_ptr_stack_pop(&EG(arg_types_stack));
                                        if (opline->opcode == ZEND_DO_FCALL_BY_NAME) {
-                                               fbc = zend_ptr_stack_pop(&EG(arg_types_stack));
+                                               zend_ptr_stack_n_pop(&EG(arg_types_stack), 2, &object.ptr, &fbc);
+                                       } else {
+                                               object.ptr = zend_ptr_stack_pop(&EG(arg_types_stack));
                                        }
                                        function_state.function = (zend_function *) op_array;
                                        EG(function_state_ptr) = &function_state;