diff options
author | Bram Moolenaar <Bram@vim.org> | 2021-01-07 22:03:02 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2021-01-07 22:03:02 +0100 |
commit | 17126b13969c3b91516a8e9ff80fb6a1f6924d40 (patch) | |
tree | fd8b5ca5599d92409fc98d778b7bf32d1bee1eed /src/ex_docmd.c | |
parent | 43b69b39acb85a2aab2310cba5a2dbac338a4eb9 (diff) | |
download | vim-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.c | 19 |
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(). |