Page MenuHomeFreeBSD

D32628.diff
No OneTemporary

D32628.diff

diff --git a/bin/sh/parser.c b/bin/sh/parser.c
--- a/bin/sh/parser.c
+++ b/bin/sh/parser.c
@@ -480,9 +480,9 @@
n1 = (union node *)stalloc(sizeof (struct nfor));
n1->type = NFOR;
n1->nfor.var = wordtext;
- while (readtoken() == TNL)
- ;
- if (lasttoken == TWORD && ! quoteflag && equal(wordtext, "in")) {
+ checkkwd = CHKNL;
+ if (readtoken() == TWORD && !quoteflag &&
+ equal(wordtext, "in")) {
app = ≈
while (readtoken() == TWORD) {
n2 = makename();
@@ -491,7 +491,9 @@
}
*app = NULL;
n1->nfor.args = ap;
- if (lasttoken != TNL && lasttoken != TSEMI)
+ if (lasttoken == TNL)
+ tokpushback++;
+ else if (lasttoken != TSEMI)
synexpect(-1);
} else {
static char argvars[5] = {
@@ -507,7 +509,7 @@
* Newline or semicolon here is optional (but note
* that the original Bourne shell only allowed NL).
*/
- if (lasttoken != TNL && lasttoken != TSEMI)
+ if (lasttoken != TSEMI)
tokpushback++;
}
checkkwd = CHKNL | CHKKWD | CHKALIAS;
@@ -526,8 +528,8 @@
n1->type = NCASE;
consumetoken(TWORD);
n1->ncase.expr = makename();
- while (readtoken() == TNL);
- if (lasttoken != TWORD || ! equal(wordtext, "in"))
+ checkkwd = CHKNL;
+ if (readtoken() != TWORD || ! equal(wordtext, "in"))
synerror("expecting \"in\"");
cpp = &n1->ncase.cases;
checkkwd = CHKNL | CHKKWD, readtoken();
diff --git a/bin/sh/tests/parser/Makefile b/bin/sh/tests/parser/Makefile
--- a/bin/sh/tests/parser/Makefile
+++ b/bin/sh/tests/parser/Makefile
@@ -65,6 +65,9 @@
${PACKAGE}FILES+= heredoc11.0
${PACKAGE}FILES+= heredoc12.0
${PACKAGE}FILES+= heredoc13.0
+${PACKAGE}FILES+= heredoc14.0
+${PACKAGE}FILES+= heredoc15.0
+${PACKAGE}FILES+= heredoc16.0
${PACKAGE}FILES+= line-cont1.0
${PACKAGE}FILES+= line-cont2.0
${PACKAGE}FILES+= line-cont3.0
diff --git a/bin/sh/tests/parser/heredoc14.0 b/bin/sh/tests/parser/heredoc14.0
new file mode 100644
--- /dev/null
+++ b/bin/sh/tests/parser/heredoc14.0
@@ -0,0 +1,8 @@
+#
+read x <<EOF; for i in "$x"
+value
+EOF
+do
+ x=$x.$i
+done
+[ "$x" = value.value ]
diff --git a/bin/sh/tests/parser/heredoc15.0 b/bin/sh/tests/parser/heredoc15.0
new file mode 100644
--- /dev/null
+++ b/bin/sh/tests/parser/heredoc15.0
@@ -0,0 +1,9 @@
+#
+set -- dummy
+read x <<EOF; for i
+value
+EOF
+do
+ x=$x.$i
+done
+[ "$x" = value.dummy ]
diff --git a/bin/sh/tests/parser/heredoc16.0 b/bin/sh/tests/parser/heredoc16.0
new file mode 100644
--- /dev/null
+++ b/bin/sh/tests/parser/heredoc16.0
@@ -0,0 +1,8 @@
+#
+read x <<EOF; case $x
+value
+EOF
+in
+ value) x=$x.extended
+esac
+[ "$x" = value.extended ]

File Metadata

Mime Type
text/plain
Expires
Tue, Feb 11, 12:38 PM (12 h, 6 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
16595146
Default Alt Text
D32628.diff (2 KB)

Event Timeline