[git commit branch/1_30_stable] bc: fix "...; return}" to work, disallow "return ()"
Denys Vlasenko
vda.linux at googlemail.com
Thu Feb 14 13:40:57 UTC 2019
commit: https://git.busybox.net/busybox/commit/?id=56e09e93bd9e4cdc75c77d9e7c8db3548bdbf089
branch: https://git.busybox.net/busybox/commit/?id=refs/heads/1_30_stable
function old new delta
zbc_parse_expr 24 1865 +1841
zbc_parse_stmt_possibly_auto 1425 1413 -12
bc_parse_expr_empty_ok 1843 - -1843
------------------------------------------------------------------------------
(add/remove: 0/1 grow/shrink: 1/1 up/down: 1841/-1855) Total: -14 bytes
Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
miscutils/bc.c | 13 +++++--------
testsuite/bc.tests | 5 +++++
testsuite/bc_misc1.bc | 4 +---
3 files changed, 11 insertions(+), 11 deletions(-)
diff --git a/miscutils/bc.c b/miscutils/bc.c
index e5726ca40..6d8e2d991 100644
--- a/miscutils/bc.c
+++ b/miscutils/bc.c
@@ -4121,18 +4121,15 @@ static BC_STATUS zbc_parse_return(void)
if (s) RETURN_STATUS(s);
t = p->lex;
- if (t == XC_LEX_NLINE || t == BC_LEX_SCOLON)
+ if (t == XC_LEX_NLINE || t == BC_LEX_SCOLON || t == BC_LEX_RBRACE)
xc_parse_push(BC_INST_RET0);
else {
- bool paren = (t == BC_LEX_LPAREN);
- s = bc_parse_expr_empty_ok(0);
- if (s == BC_STATUS_PARSE_EMPTY_EXP) {
- xc_parse_push(BC_INST_RET0);
- s = zxc_lex_next();
- }
+ s = zbc_parse_expr(0);
if (s) RETURN_STATUS(s);
- if (!paren || p->lex_last != BC_LEX_RPAREN) {
+ if (t != BC_LEX_LPAREN // "return EXPR", no ()
+ || p->lex_last != BC_LEX_RPAREN // example: "return (a) + b"
+ ) {
s = zbc_POSIX_requires("parentheses around return expressions");
if (s) RETURN_STATUS(s);
}
diff --git a/testsuite/bc.tests b/testsuite/bc.tests
index 7795183a7..0a8222be6 100755
--- a/testsuite/bc.tests
+++ b/testsuite/bc.tests
@@ -103,6 +103,11 @@ testing "bc for (;;) {break}" \
"2\n9\n" \
"" "for (;;) {2;break}; 9"
+testing "bc define {return}" \
+ "bc" \
+ "0\n9\n" \
+ "" "define w() {return}\nw();9"
+
testing "bc define auto" \
"bc" \
"8\n9\n" \
diff --git a/testsuite/bc_misc1.bc b/testsuite/bc_misc1.bc
index 7e9d96604..f666d701a 100644
--- a/testsuite/bc_misc1.bc
+++ b/testsuite/bc_misc1.bc
@@ -4,9 +4,7 @@ define x(x) {
define y() {
return;
}
-define z() {
- return ();
-}
+define z() {return}
scale = 0
x=2
x[0]=3
More information about the busybox-cvs
mailing list