Module Name: src
Committed By: kre
Date: Tue Nov 16 11:25:44 UTC 2021
Modified Files:
src/bin/sh: eval.c nodetypes parser.c
Log Message:
Fix value of ${LINENO} in "for" commands.
This affects (as best I can tell) only uses of ${LINENO} in PS4
when -x is enabled (and perhaps only when the list contains no
expansions). "for" like "case" (which was already handled) is
special in that it generates trace output before actually executing
any kind of simple command.
To generate a diff of this commit:
cvs rdiff -u -r1.183 -r1.184 src/bin/sh/eval.c
cvs rdiff -u -r1.18 -r1.19 src/bin/sh/nodetypes
cvs rdiff -u -r1.174 -r1.175 src/bin/sh/parser.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/bin/sh/eval.c
diff -u src/bin/sh/eval.c:1.183 src/bin/sh/eval.c:1.184
--- src/bin/sh/eval.c:1.183 Wed Nov 10 15:26:34 2021
+++ src/bin/sh/eval.c Tue Nov 16 11:25:44 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: eval.c,v 1.183 2021/11/10 15:26:34 kre Exp $ */
+/* $NetBSD: eval.c,v 1.184 2021/11/16 11:25:44 kre Exp $ */
/*-
* Copyright (c) 1993
@@ -37,7 +37,7 @@
#if 0
static char sccsid[] = "@(#)eval.c 8.9 (Berkeley) 6/8/95";
#else
-__RCSID("$NetBSD: eval.c,v 1.183 2021/11/10 15:26:34 kre Exp $");
+__RCSID("$NetBSD: eval.c,v 1.184 2021/11/16 11:25:44 kre Exp $");
#endif
#endif /* not lint */
@@ -469,6 +469,7 @@ evalfor(union node *n, int flags)
loopnest++;
for (sp = arglist.list ; sp ; sp = sp->next) {
+ line_number = n->nfor.lineno;
if (xflag) {
outxstr(expandstr(ps4val(), line_number));
outxstr("for ");
Index: src/bin/sh/nodetypes
diff -u src/bin/sh/nodetypes:1.18 src/bin/sh/nodetypes:1.19
--- src/bin/sh/nodetypes:1.18 Thu Jun 8 13:12:17 2017
+++ src/bin/sh/nodetypes Tue Nov 16 11:25:44 2021
@@ -1,4 +1,4 @@
-# $NetBSD: nodetypes,v 1.18 2017/06/08 13:12:17 kre Exp $
+# $NetBSD: nodetypes,v 1.19 2021/11/16 11:25:44 kre Exp $
# Copyright (c) 1991, 1993
# The Regents of the University of California. All rights reserved.
#
@@ -90,6 +90,7 @@ NFOR nfor # the for statement
args nodeptr # for var in args
body nodeptr # do body; done
var string # the for variable
+ lineno int
NCASE ncase # a case statement
type int
Index: src/bin/sh/parser.c
diff -u src/bin/sh/parser.c:1.174 src/bin/sh/parser.c:1.175
--- src/bin/sh/parser.c:1.174 Wed Sep 15 18:29:45 2021
+++ src/bin/sh/parser.c Tue Nov 16 11:25:44 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: parser.c,v 1.174 2021/09/15 18:29:45 kre Exp $ */
+/* $NetBSD: parser.c,v 1.175 2021/11/16 11:25:44 kre Exp $ */
/*-
* Copyright (c) 1991, 1993
@@ -37,7 +37,7 @@
#if 0
static char sccsid[] = "@(#)parser.c 8.7 (Berkeley) 5/16/95";
#else
-__RCSID("$NetBSD: parser.c,v 1.174 2021/09/15 18:29:45 kre Exp $");
+__RCSID("$NetBSD: parser.c,v 1.175 2021/11/16 11:25:44 kre Exp $");
#endif
#endif /* not lint */
@@ -411,6 +411,7 @@ command(void)
n1 = stalloc(sizeof(struct nfor));
n1->type = NFOR;
n1->nfor.var = wordtext;
+ n1->nfor.lineno = startlinno;
linebreak();
if (lasttoken==TWORD && !quoteflag && equal(wordtext,"in")) {
app = ≈