summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZeev Suraski <zeev@php.net>2000-03-13 14:15:23 +0000
committerZeev Suraski <zeev@php.net>2000-03-13 14:15:23 +0000
commitea033715a9020b200997ccc3682c2658b16de14e (patch)
tree0419f9382ecb1f0f0d8f0e2cc7b9bf4ffb0b1a2a
parent9c146016d3e1b6c66db29a96ff0f64c9214bb72a (diff)
downloadphp-git-ea033715a9020b200997ccc3682c2658b16de14e.tar.gz
- Fix filename/lineno initialization for do_return
-rw-r--r--Zend/zend-scanner.l18
1 files changed, 10 insertions, 8 deletions
diff --git a/Zend/zend-scanner.l b/Zend/zend-scanner.l
index a4bb456356..538a85e2ff 100644
--- a/Zend/zend-scanner.l
+++ b/Zend/zend-scanner.l
@@ -338,8 +338,15 @@ ZEND_API zend_op_array *v_compile_files(int mark_as_ref CLS_DC, int file_count,
int i;
int compiler_result;
int compiled_files=0;
+ znode retval_znode;
zend_bool original_in_compilation = CG(in_compilation);
+ retval_znode.op_type = IS_CONST;
+ retval_znode.u.constant.type = IS_LONG;
+ retval_znode.u.constant.value.lval = 1;
+ retval_znode.u.constant.is_ref = 0;
+ retval_znode.u.constant.refcount = 1;
+
init_op_array(op_array, INITIAL_OP_ARRAY_SIZE);
save_lexical_state(&original_lex_state CLS_CC);
@@ -356,6 +363,9 @@ ZEND_API zend_op_array *v_compile_files(int mark_as_ref CLS_DC, int file_count,
CG(active_op_array) = op_array;
compiler_result = zendparse(CLS_C);
zend_close_file_handle(file_handle CLS_CC);
+ if (i == file_count-1) {
+ do_return(&retval_znode, 0 CLS_CC);
+ }
restore_lexical_state(&original_lex_state CLS_CC);
CG(in_compilation) = original_in_compilation;
if (compiler_result==1) { /* parser error */
@@ -369,14 +379,6 @@ ZEND_API zend_op_array *v_compile_files(int mark_as_ref CLS_DC, int file_count,
if (retval) {
if (compiled_files>0) {
- znode retval_znode;
-
- retval_znode.op_type = IS_CONST;
- retval_znode.u.constant.type = IS_LONG;
- retval_znode.u.constant.value.lval = 1;
- retval_znode.u.constant.is_ref = 0;
- retval_znode.u.constant.refcount = 1;
- do_return(&retval_znode, 0 CLS_CC);
CG(active_op_array) = original_active_op_array;
pass_two(op_array);
if (mark_as_ref) {