bc: fix "print 1,2,3" parsing
function old new delta zbc_parse_stmt_possibly_auto 2245 2180 -65 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-65) Total: -65 bytes text data bss dec hex filename 982237 485 7296 990018 f1b42 busybox_old 982152 485 7296 989933 f1aed busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
cb18b546f7
commit
5d18f6be90
@ -4048,38 +4048,23 @@ static BC_STATUS zbc_parse_print(BcParse *p)
|
||||
{
|
||||
BcStatus s;
|
||||
BcLexType type;
|
||||
bool comma;
|
||||
|
||||
for (;;) {
|
||||
s = zbc_lex_next(&p->l);
|
||||
if (s) RETURN_STATUS(s);
|
||||
|
||||
type = p->l.t.t;
|
||||
|
||||
if (type == BC_LEX_SCOLON || type == BC_LEX_NLINE)
|
||||
RETURN_STATUS(bc_error("bad print statement"));
|
||||
|
||||
comma = false;
|
||||
while (type != BC_LEX_SCOLON && type != BC_LEX_NLINE) {
|
||||
if (type == BC_LEX_STR) {
|
||||
s = zbc_parse_string(p, BC_INST_PRINT_POP);
|
||||
if (s) RETURN_STATUS(s);
|
||||
} else {
|
||||
s = zbc_parse_expr(p, 0, bc_parse_next_print);
|
||||
if (s) RETURN_STATUS(s);
|
||||
bc_parse_push(p, BC_INST_PRINT_POP);
|
||||
}
|
||||
|
||||
comma = p->l.t.t == BC_LEX_COMMA;
|
||||
if (comma) {
|
||||
s = zbc_lex_next(&p->l);
|
||||
if (s) RETURN_STATUS(s);
|
||||
}
|
||||
type = p->l.t.t;
|
||||
if (p->l.t.t != BC_LEX_COMMA)
|
||||
break;
|
||||
}
|
||||
|
||||
if (comma) RETURN_STATUS(bc_error_bad_token());
|
||||
|
||||
RETURN_STATUS(zbc_lex_next(&p->l));
|
||||
RETURN_STATUS(s);
|
||||
}
|
||||
#if ERRORS_ARE_FATAL
|
||||
# define zbc_parse_print(...) (zbc_parse_print(__VA_ARGS__), BC_STATUS_SUCCESS)
|
||||
|
@ -71,6 +71,11 @@ testing "bc while(cond)<NL>" \
|
||||
"8\n7\n6\n5\n4\n3\n2\n1\n9\n" \
|
||||
"" "i=9;while(--i)\ni\n9"
|
||||
|
||||
testing "bc print 1,2,3" \
|
||||
"bc" \
|
||||
"123" \
|
||||
"" "print 1,2,3"
|
||||
|
||||
tar xJf bc_large.tar.xz
|
||||
|
||||
for f in bc*.bc; do
|
||||
|
Loading…
Reference in New Issue
Block a user