summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Zend/zend_compile.c22
1 files changed, 7 insertions, 15 deletions
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c
index 827abd33b0..9d592d47bc 100644
--- a/Zend/zend_compile.c
+++ b/Zend/zend_compile.c
@@ -633,20 +633,17 @@ void do_add_variable(znode *result, znode *op1, znode *op2 CLS_DC)
void do_free(znode *op1 CLS_DC)
{
if (op1->op_type==IS_TMP_VAR) {
- zend_op *last_opline = &CG(active_op_array)->opcodes[CG(active_op_array)->last-1];
-
- if ((last_opline->opcode == ZEND_DO_FCALL) || (last_opline->opcode == ZEND_DO_FCALL_BY_NAME)) {
- last_opline->result.u.EA.type |= EXT_TYPE_UNUSED;
- } else {
- zend_op *opline = get_next_op(CG(active_op_array) CLS_CC);
+ zend_op *opline = get_next_op(CG(active_op_array) CLS_CC);
- opline->opcode = ZEND_FREE;
- opline->op1 = *op1;
- SET_UNUSED(opline->op2);
- }
+ opline->opcode = ZEND_FREE;
+ opline->op1 = *op1;
+ SET_UNUSED(opline->op2);
} else if (op1->op_type==IS_VAR) {
zend_op *opline = &CG(active_op_array)->opcodes[CG(active_op_array)->last-1];
+ if (opline->opcode == ZEND_END_SILENCE) {
+ opline--;
+ }
if (opline->result.op_type == op1->op_type
&& opline->result.u.var == op1->u.var) {
opline->result.u.EA.type |= EXT_TYPE_UNUSED;
@@ -2060,13 +2057,8 @@ void do_begin_silence(znode *strudel_token CLS_DC)
void do_end_silence(znode *strudel_token CLS_DC)
{
- zend_op *last_opline = &CG(active_op_array)->opcodes[CG(active_op_array)->last-1];
zend_op *opline = get_next_op(CG(active_op_array) CLS_CC);
- if ((last_opline->opcode == ZEND_DO_FCALL) || (last_opline->opcode == ZEND_DO_FCALL_BY_NAME)) {
- last_opline->result.u.EA.type |= EXT_TYPE_UNUSED;
- }
-
opline->opcode = ZEND_END_SILENCE;
opline->op1 = *strudel_token;
SET_UNUSED(opline->op2);