diff options
Diffstat (limited to 'awkgram.y')
-rw-r--r-- | awkgram.y | 11 |
1 files changed, 6 insertions, 5 deletions
@@ -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 */ } |