]> granicus.if.org Git - vim/commitdiff
patch 8.2.3126: Vim9: for loop error reports wrong line number v8.2.3126
authorBram Moolenaar <Bram@vim.org>
Thu, 8 Jul 2021 17:22:12 +0000 (19:22 +0200)
committerBram Moolenaar <Bram@vim.org>
Thu, 8 Jul 2021 17:22:12 +0000 (19:22 +0200)
Problem:    Vim9: for loop error reports wrong line number.
Solution:   Save and restore the line number when evaluating the expression.
            (closes #8514)

src/ex_eval.c
src/testdir/test_vim9_script.vim
src/version.c

index dac70ab3ace06329d7385757e059322fb0b4f54a..b504763dfccfe533bf821401e25509945788080e 100644 (file)
@@ -1225,9 +1225,14 @@ ex_while(exarg_T *eap)
            }
            else
            {
+               long save_lnum = SOURCING_LNUM;
+
                // Evaluate the argument and get the info in a structure.
                fi = eval_for_line(eap->arg, &error, eap, &evalarg);
                cstack->cs_forinfo[cstack->cs_idx] = fi;
+
+               // Errors should use the first line number.
+               SOURCING_LNUM = save_lnum;
            }
 
            // use the element at the start of the list and advance
index a7e141e254cc059b2ff44c89265c0edaab9a15ee..cde3e7c636dd81311c90c9dc9e5cb5eb8d07c11d 100644 (file)
@@ -2545,6 +2545,7 @@ def Test_for_loop_fails()
   CheckDefAndScriptFailure(['for # in range(5)'], 'E690:')
   CheckDefAndScriptFailure(['for i In range(5)'], 'E690:')
   CheckDefAndScriptFailure2(['var x = 5', 'for x in range(5)', 'endfor'], 'E1017:', 'E1041:')
+  CheckScriptFailure(['vim9script', 'var x = 5', 'for x in range(5)', '# comment', 'endfor'], 'E1041:', 3)
   CheckScriptFailure(['def Func(arg: any)', 'for arg in range(5)', 'enddef', 'defcompile'], 'E1006:')
   delfunc! g:Func
   CheckDefFailure(['for i in xxx'], 'E1001:')
index 117051ffbbccd6c0ebde7eabfbb26e20fe3783da..ff1bb4349498a0a4754d9e3ac392dc239f1ce304 100644 (file)
@@ -755,6 +755,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    3126,
 /**/
     3125,
 /**/