diff options
-rw-r--r-- | Zend/zend_language_scanner.l | 2 | ||||
-rw-r--r-- | Zend/zend_opcode.c | 7 |
2 files changed, 4 insertions, 5 deletions
diff --git a/Zend/zend_language_scanner.l b/Zend/zend_language_scanner.l index 8b3d8ea5da..5153276089 100644 --- a/Zend/zend_language_scanner.l +++ b/Zend/zend_language_scanner.l @@ -475,7 +475,6 @@ zend_op_array *compile_string(zval *source_string, char *filename CLS_DC) CG(ZFL)->BeginState(ST_IN_SCRIPTING); #endif compiler_result = zendparse(CLS_C); - restore_lexical_state(&original_lex_state CLS_CC); if (compiler_result==1) { CG(active_op_array) = original_active_op_array; @@ -487,6 +486,7 @@ zend_op_array *compile_string(zval *source_string, char *filename CLS_DC) pass_two(op_array); retval = op_array; } + restore_lexical_state(&original_lex_state CLS_CC); } #ifdef ZTS delete input_stream; diff --git a/Zend/zend_opcode.c b/Zend/zend_opcode.c index ca1fc546e9..793124524e 100644 --- a/Zend/zend_opcode.c +++ b/Zend/zend_opcode.c @@ -251,7 +251,9 @@ static void zend_update_extended_info(zend_op_array *op_array CLS_DC) opline++; continue; } - opline->lineno = (opline+1)->lineno; + if (opline+1<end) { + opline->lineno = (opline+1)->lineno; + } } else { opline->opcode = ZEND_NOP; } @@ -262,9 +264,6 @@ static void zend_update_extended_info(zend_op_array *op_array CLS_DC) opline->opcode = ZEND_EXT_STMT; SET_UNUSED(opline->op1); SET_UNUSED(opline->op2); - if (op_array->last>0) { - opline->lineno= op_array->opcodes[op_array->last-2].lineno; - } } |