bc: fix empty lines in dc generating "bad token" message

function                                             old     new   delta
zdc_program_asciify                                    -     370    +370
zbc_program_pushArray                                  -     147    +147
zbc_vm_process                                       824     828      +4
zbc_program_exec                                    4182    4046    -136
zdc_program_printStream                              146       -    -146
zbc_program_read                                     268       -    -268
------------------------------------------------------------------------------
(add/remove: 2/2 grow/shrink: 1/1 up/down: 521/-550)          Total: -29 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2018-12-23 00:13:15 +01:00
parent 01eb5e9da1
commit 9471bd4660

View File

@ -6695,9 +6695,18 @@ static BC_STATUS zbc_vm_process(const char *text)
// "print 1" part. // "print 1" part.
IF_BC(s = zbc_parse_stmt_or_funcdef(&G.prs)); IF_BC(s = zbc_parse_stmt_or_funcdef(&G.prs));
} else { } else {
// Most of dc parsing assumes all whitespace,
// including '\n', is eaten.
while (G.prs.l.t.t == BC_LEX_NLINE) {
s = zbc_lex_next(&G.prs.l);
if (s) goto err;
if (G.prs.l.t.t == BC_LEX_EOF)
goto done;
}
IF_DC(s = zdc_parse_expr(&G.prs)); IF_DC(s = zdc_parse_expr(&G.prs));
} }
if (s || G_interrupt) { if (s || G_interrupt) {
err:
bc_parse_reset(&G.prs); // includes bc_program_reset() bc_parse_reset(&G.prs); // includes bc_program_reset()
RETURN_STATUS(BC_STATUS_FAILURE); RETURN_STATUS(BC_STATUS_FAILURE);
} }
@ -6735,13 +6744,6 @@ static BC_STATUS zbc_vm_process(const char *text)
IF_BC(bc_vec_pop_all(&f->strs);) IF_BC(bc_vec_pop_all(&f->strs);)
IF_BC(bc_vec_pop_all(&f->consts);) IF_BC(bc_vec_pop_all(&f->consts);)
} else { } else {
// Most of dc parsing assumes all whitespace,
// including '\n', is eaten.
if (G.prs.l.t.t == BC_LEX_NLINE) {
s = zbc_lex_next(&G.prs.l);
if (s) RETURN_STATUS(s);
}
if (G.prog.results.len == 0 if (G.prog.results.len == 0
&& G.prog.vars.len == 0 && G.prog.vars.len == 0
) { ) {
@ -6762,7 +6764,7 @@ static BC_STATUS zbc_vm_process(const char *text)
bc_vec_pop_all(&f->code); bc_vec_pop_all(&f->code);
ip->inst_idx = 0; ip->inst_idx = 0;
} }
done:
dbg_lex_done("%s:%d done", __func__, __LINE__); dbg_lex_done("%s:%d done", __func__, __LINE__);
RETURN_STATUS(s); RETURN_STATUS(s);
} }