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 = ≈

Reply via email to