summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--miscutils/bc.c31
-rwxr-xr-xtestsuite/bc.tests5
2 files changed, 13 insertions, 23 deletions
diff --git a/miscutils/bc.c b/miscutils/bc.c
index 2dc64db..9f40a55 100644
--- a/miscutils/bc.c
+++ b/miscutils/bc.c
@@ -4048,38 +4048,23 @@ static BC_STATUS zbc_parse_print(BcParse *p)
{
BcStatus s;
BcLexType type;
- bool comma;
- 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) {
+ for (;;) {
+ s = zbc_lex_next(&p->l);
+ if (s) RETURN_STATUS(s);
+ type = p->l.t.t;
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 (s) RETURN_STATUS(s);
+ 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)
diff --git a/testsuite/bc.tests b/testsuite/bc.tests
index 36baeea..21b2600 100755
--- a/testsuite/bc.tests
+++ b/testsuite/bc.tests
@@ -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