aboutsummaryrefslogtreecommitdiffstats
path: root/awkgram.y
diff options
context:
space:
mode:
Diffstat (limited to 'awkgram.y')
-rw-r--r--awkgram.y11
1 files changed, 6 insertions, 5 deletions
diff --git a/awkgram.y b/awkgram.y
index fb917c2c..6d3f1f78 100644
--- a/awkgram.y
+++ b/awkgram.y
@@ -840,7 +840,7 @@ non_compound_stmt
error_ln($1->source_line,
_("`nextfile' used in %s action"), ruletab[rule]);
- $1->target_jmp = ip_newfile;
+ $1->target_newfile = ip_newfile;
$1->target_endfile = ip_endfile;
$$ = list_create($1);
}
@@ -2131,8 +2131,7 @@ mk_program()
if (endfile_block == NULL)
endfile_block = list_create(ip_endfile);
else {
- extern int has_endfile; /* kludge for use in inrec (io.c) */
- has_endfile = TRUE;
+ ip_rec->has_endfile = TRUE;
(void) list_prepend(endfile_block, ip_endfile);
}
@@ -2224,10 +2223,12 @@ parse_program(INSTRUCTION **pcode)
else {
ip_endfile = instruction(Op_no_op);
ip_beginfile = instruction(Op_no_op);
- ip_newfile = instruction(Op_newfile); /* target for `nextfile' */
+ ip_rec = instruction(Op_get_record); /* target for `next', also ip_newfile */
+ ip_newfile = bcalloc(Op_newfile, 2, 0); /* target for `nextfile' */
ip_newfile->target_jmp = ip_end;
ip_newfile->target_endfile = ip_endfile;
- ip_rec = instruction(Op_get_record); /* target for `next' */
+ (ip_newfile + 1)->target_get_record = ip_rec;
+ ip_rec->target_newfile = ip_newfile;
ip_atexit = instruction(Op_atexit); /* target for `exit' in END block */
}