bug-bash
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Incorrect LINENO with exported nested functions with loops


From: Tom Coleman
Subject: Re: Incorrect LINENO with exported nested functions with loops
Date: Thu, 7 Oct 2021 15:58:04 +1100

I did some experimenting and am confident on the fix. I don't know how to
supply a patch suggestion officially, but have pasted it below. Four lines
in parse.y need deleting. Arithmetic for loops should NOT be decrementing
the 'word_top' variable, they do not make use of it. This also has flow on
to select statements with nested arithmetic for loops, perhaps other
statements too, I didn't look any further. My (albeit limited) testing has
shown this fixes the line numbers for case statements and for loops.

diff --git a/parse.y b/parse.y
index df1231da..3cf2c37f 100644
--- a/parse.y
+++ b/parse.y
@@ -843,25 +843,21 @@ arith_for_command:        FOR ARITH_FOR_EXPRS
list_terminator newline_list DO compound_
                                {
                                  $$ = make_arith_for_command ($2, $6,
arith_for_lineno);
                                  if ($$ == 0) YYERROR;
-                                 if (word_top > 0) word_top--;
                                }
        |               FOR ARITH_FOR_EXPRS list_terminator newline_list
'{' compound_list '}'
                                {
                                  $$ = make_arith_for_command ($2, $6,
arith_for_lineno);
                                  if ($$ == 0) YYERROR;
-                                 if (word_top > 0) word_top--;
                                }
        |               FOR ARITH_FOR_EXPRS DO compound_list DONE
                                {
                                  $$ = make_arith_for_command ($2, $4,
arith_for_lineno);
                                  if ($$ == 0) YYERROR;
-                                 if (word_top > 0) word_top--;
                                }
        |               FOR ARITH_FOR_EXPRS '{' compound_list '}'
                                {
                                  $$ = make_arith_for_command ($2, $4,
arith_for_lineno);
                                  if ($$ == 0) YYERROR;
-                                 if (word_top > 0) word_top--;
                                }
        ;


reply via email to

[Prev in Thread] Current Thread [Next in Thread]