summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Zend/zend_language_scanner.l2
-rw-r--r--Zend/zend_opcode.c7
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;
- }
}