|
|
|
@ -573,7 +573,7 @@ void do_add_variable(znode *result, znode *op1, znode *op2 CLS_DC) |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void do_free(znode *op1 CLS_DC) |
|
|
|
void do_free(znode *op1, int is_used CLS_DC) |
|
|
|
{ |
|
|
|
if (op1->op_type==IS_TMP_VAR) { |
|
|
|
zend_op *opline = get_next_op(CG(active_op_array) CLS_CC); |
|
|
|
@ -581,14 +581,13 @@ void do_free(znode *op1 CLS_DC) |
|
|
|
opline->opcode = ZEND_FREE; |
|
|
|
opline->op1 = *op1; |
|
|
|
SET_UNUSED(opline->op2); |
|
|
|
} else if (op1->op_type==IS_VAR) { |
|
|
|
} else if (!is_used && op1->op_type==IS_VAR) { |
|
|
|
zend_op *opline = &CG(active_op_array)->opcodes[CG(active_op_array)->last-1]; |
|
|
|
|
|
|
|
if (opline->result.op_type == op1->op_type |
|
|
|
&& opline->result.u.var == op1->u.var) { |
|
|
|
opline->result.u.EA.type |= EXT_TYPE_UNUSED; |
|
|
|
} else { |
|
|
|
|
|
|
|
/* This should be an object instanciation |
|
|
|
* Find JMP_NO_CTOR, mark the preceding ASSIGN and the |
|
|
|
* proceeding INIT_FCALL_BY_NAME as unused |
|
|
|
@ -1096,7 +1095,7 @@ void do_switch_end(znode *case_list CLS_DC) |
|
|
|
CG(active_op_array)->current_brk_cont = CG(active_op_array)->brk_cont_array[CG(active_op_array)->current_brk_cont].parent; |
|
|
|
|
|
|
|
/* emit free for the switch condition*/ |
|
|
|
do_free(&switch_entry_ptr->cond CLS_CC); |
|
|
|
do_free(&switch_entry_ptr->cond, 1 CLS_CC); |
|
|
|
if (switch_entry_ptr->cond.op_type == IS_CONST) { |
|
|
|
zval_dtor(&switch_entry_ptr->cond.u.constant); |
|
|
|
} |
|
|
|
@ -1371,7 +1370,7 @@ void do_end_new_object(znode *class_name, znode *new_token, znode *argument_list |
|
|
|
zval_copy_ctor(&class_name->u.constant); |
|
|
|
} |
|
|
|
do_end_function_call(class_name, &ctor_result, argument_list, 1 CLS_CC); |
|
|
|
do_free(&ctor_result CLS_CC); |
|
|
|
do_free(&ctor_result, 0 CLS_CC); |
|
|
|
|
|
|
|
CG(active_op_array)->opcodes[new_token->u.opline_num].op2.u.opline_num = get_next_op_number(CG(active_op_array)); |
|
|
|
} |
|
|
|
@ -1768,7 +1767,7 @@ void do_foreach_cont(znode *value, znode *key, znode *as_token CLS_DC) |
|
|
|
do_assign(&dummy, key, &result_key CLS_CC); |
|
|
|
CG(active_op_array)->opcodes[CG(active_op_array)->last-1].result.u.EA.type |= EXT_TYPE_UNUSED; |
|
|
|
} |
|
|
|
do_free(as_token CLS_CC); |
|
|
|
do_free(as_token, 0 CLS_CC); |
|
|
|
|
|
|
|
do_begin_loop(CLS_C); |
|
|
|
INC_BPC(CG(active_op_array)); |
|
|
|
@ -1787,7 +1786,7 @@ void do_foreach_end(znode *foreach_token, znode *open_brackets_token CLS_DC) |
|
|
|
|
|
|
|
do_end_loop(foreach_token->u.opline_num CLS_CC); |
|
|
|
|
|
|
|
do_free(open_brackets_token CLS_CC); |
|
|
|
do_free(open_brackets_token, 0 CLS_CC); |
|
|
|
|
|
|
|
DEC_BPC(CG(active_op_array)); |
|
|
|
} |
|
|
|
|