diff options
author | Zeev Suraski <zeev@php.net> | 1999-12-20 20:01:19 +0000 |
---|---|---|
committer | Zeev Suraski <zeev@php.net> | 1999-12-20 20:01:19 +0000 |
commit | a2cc070fc2c99174bcf6bb002b03658f9e554504 (patch) | |
tree | 2b4c49beff5f0991ed4fdbea23cdb76a9325aa25 | |
parent | 1ad5180f2819b286c7194044c27babbebddb8035 (diff) | |
download | php-git-a2cc070fc2c99174bcf6bb002b03658f9e554504.tar.gz |
- Fix @expr
-rw-r--r-- | Zend/zend_compile.c | 22 |
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); |