1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2025-09-23 17:01:05 +02:00

37468: allow line breaks in more places in [[ ... ]]

This commit is contained in:
Barton E. Schaefer 2015-12-31 12:41:50 -08:00
parent 15b73ea99b
commit 0504dafa6e
2 changed files with 14 additions and 8 deletions

View file

@ -1,5 +1,7 @@
2015-12-31 Barton E. Schaefer <schaefer@zsh.org> 2015-12-31 Barton E. Schaefer <schaefer@zsh.org>
* 37468: Src/parse.c: allow line breaks in more places in [[ ... ]]
* 37467: Doc/Zsh/builtins.yo, Src/builtin.c, Test/B03print.ztst: * 37467: Doc/Zsh/builtins.yo, Src/builtin.c, Test/B03print.ztst:
add "print -v var" / "printf -v var" add "print -v var" / "printf -v var"

View file

@ -2348,7 +2348,9 @@ par_cond_2(void)
* We fall through here on any non-numeric infix operator * We fall through here on any non-numeric infix operator
* or any other time there are at least two arguments. * or any other time there are at least two arguments.
*/ */
} } else
while (tok == SEPER)
condlex();
if (tok == BANG) { if (tok == BANG) {
/* /*
* In "test" compatibility mode, "! -a ..." and "! -o ..." * In "test" compatibility mode, "! -a ..." and "! -o ..."
@ -2385,7 +2387,7 @@ par_cond_2(void)
/* Check first argument for [[ STRING ]] re-interpretation */ /* Check first argument for [[ STRING ]] re-interpretation */
if (s1 /* tok != DOUTBRACK && tok != DAMPER && tok != DBAR */ if (s1 /* tok != DOUTBRACK && tok != DAMPER && tok != DBAR */
&& tok != LEXERR && (!dble || n_testargs)) { && tok != LEXERR && (!dble || n_testargs)) {
condlex(); do condlex(); while (tok == SEPER && condlex != testlex);
return par_cond_double(dupstring("-n"), s1); return par_cond_double(dupstring("-n"), s1);
} else } else
YYERROR(ecused); YYERROR(ecused);
@ -2398,14 +2400,16 @@ par_cond_2(void)
* checked it does have a string representation). * checked it does have a string representation).
*/ */
tok = STRING; tok = STRING;
} } else
while (tok == SEPER && condlex != testlex)
condlex();
if (tok == INANG || tok == OUTANG) { if (tok == INANG || tok == OUTANG) {
enum lextok xtok = tok; enum lextok xtok = tok;
condlex(); do condlex(); while (tok == SEPER && condlex != testlex);
if (tok != STRING) if (tok != STRING)
YYERROR(ecused); YYERROR(ecused);
s3 = tokstr; s3 = tokstr;
condlex(); do condlex(); while (tok == SEPER && condlex != testlex);
ecadd(WCB_COND((xtok == INANG ? COND_STRLT : COND_STRGTR), 0)); ecadd(WCB_COND((xtok == INANG ? COND_STRLT : COND_STRGTR), 0));
ecstr(s1); ecstr(s1);
ecstr(s3); ecstr(s3);
@ -2428,11 +2432,11 @@ par_cond_2(void)
if (!n_testargs) if (!n_testargs)
dble = (s2 && *s2 == '-' && !s2[2]); dble = (s2 && *s2 == '-' && !s2[2]);
incond++; /* parentheses do globbing */ incond++; /* parentheses do globbing */
condlex(); do condlex(); while (tok == SEPER && condlex != testlex);
incond--; /* parentheses do grouping */ incond--; /* parentheses do grouping */
if (tok == STRING && !dble) { if (tok == STRING && !dble) {
s3 = tokstr; s3 = tokstr;
condlex(); do condlex(); while (tok == SEPER && condlex != testlex);
if (tok == STRING) { if (tok == STRING) {
LinkList l = newlinklist(); LinkList l = newlinklist();
@ -2441,7 +2445,7 @@ par_cond_2(void)
while (tok == STRING) { while (tok == STRING) {
addlinknode(l, tokstr); addlinknode(l, tokstr);
condlex(); do condlex(); while (tok == SEPER && condlex != testlex);
} }
return par_cond_multi(s1, l); return par_cond_multi(s1, l);
} else } else