From aa1959bd5e82350bb4a82d9a5188c29d70706ec4 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Thu, 15 Apr 2021 22:13:39 +0200 Subject: [PATCH] patch 8.2.2771: Vim9: assignment not recognized if declaration was skipped Problem: Vim9: assignment not recognized if declaration was skipped. Solution: Also recognized an assignment if the variable does not exist. (closes #8108) --- src/ex_docmd.c | 4 +++- src/testdir/test_vim9_assign.vim | 12 ++++++++++++ src/version.c | 2 ++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/ex_docmd.c b/src/ex_docmd.c index 83f49d0d3..db7bb931f 100644 --- a/src/ex_docmd.c +++ b/src/ex_docmd.c @@ -3483,7 +3483,8 @@ find_ex_command( // Recognize an assignment if we recognize the variable name: // "g:var = expr" - // "var = expr" where "var" is a variable name. + // "var = expr" where "var" is a variable name or we are skipping + // (variable declaration might have been skipped). if (*eap->cmd == '@') p = eap->cmd + 2; oplen = assignment_len(skipwhite(p), &heredoc); @@ -3493,6 +3494,7 @@ find_ex_command( || *eap->cmd == '&' || *eap->cmd == '$' || *eap->cmd == '@' + || eap->skip || lookup(eap->cmd, p - eap->cmd, TRUE, cctx) == OK) { eap->cmdidx = CMD_var; diff --git a/src/testdir/test_vim9_assign.vim b/src/testdir/test_vim9_assign.vim index 958b7b980..ad942a8f1 100644 --- a/src/testdir/test_vim9_assign.vim +++ b/src/testdir/test_vim9_assign.vim @@ -249,6 +249,18 @@ def Test_assignment() END enddef +def Test_skipped_assignment() + var lines =<< trim END + for x in [] + var i: number = 1 + while false + i += 1 + endwhile + endfor + END + CheckDefAndScriptSuccess(lines) +enddef + def Test_assign_unpack() var lines =<< trim END var v1: number diff --git a/src/version.c b/src/version.c index 8cbe3d36d..44cf5ffd0 100644 --- a/src/version.c +++ b/src/version.c @@ -750,6 +750,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 2771, /**/ 2770, /**/ -- 2.40.0