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