summaryrefslogtreecommitdiff
path: root/src/ex_docmd.c
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2021-01-07 22:03:02 +0100
committerBram Moolenaar <Bram@vim.org>2021-01-07 22:03:02 +0100
commit17126b13969c3b91516a8e9ff80fb6a1f6924d40 (patch)
treefd8b5ca5599d92409fc98d778b7bf32d1bee1eed /src/ex_docmd.c
parent43b69b39acb85a2aab2310cba5a2dbac338a4eb9 (diff)
downloadvim-git-17126b13969c3b91516a8e9ff80fb6a1f6924d40.tar.gz
patch 8.2.2311: Vim9: cannot assign to variable that shadows command modifierv8.2.2311
Problem: Vim9: cannot assign to a variable that shadows a command modifier. Solution: Check for assignment after possible command modifier. (closes #7632)
Diffstat (limited to 'src/ex_docmd.c')
-rw-r--r--src/ex_docmd.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index 5a3a37abc..9659c20b1 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -2738,6 +2738,25 @@ parse_command_modifiers(
}
p = skip_range(eap->cmd, TRUE, NULL);
+
+ // In Vim9 script a variable can shadow a command modifier:
+ // verbose = 123
+ // verbose += 123
+ // silent! verbose = func()
+ // verbose.member = 2
+ // verbose[expr] = 2
+ if (in_vim9script())
+ {
+ char_u *s;
+
+ for (s = p; ASCII_ISALPHA(*s); ++s)
+ ;
+ s = skipwhite(s);
+ if (vim_strchr((char_u *)".[=", *s) != NULL
+ || (*s != NUL && s[1] == '='))
+ break;
+ }
+
switch (*p)
{
// When adding an entry, also modify cmd_exists().