Mercurial > vim
diff src/ex_docmd.c @ 23537:7f0fc2ab90e3 v8.2.2311
patch 8.2.2311: Vim9: cannot assign to variable that shadows command modifier
Commit: https://github.com/vim/vim/commit/17126b13969c3b91516a8e9ff80fb6a1f6924d40
Author: Bram Moolenaar <Bram@vim.org>
Date: Thu Jan 7 22:03:02 2021 +0100
patch 8.2.2311: Vim9: cannot assign to variable that shadows command modifier
Problem: Vim9: cannot assign to a variable that shadows a command modifier.
Solution: Check for assignment after possible command modifier.
(closes #7632)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Thu, 07 Jan 2021 22:15:05 +0100 |
parents | 872239543313 |
children | 4156f972efb1 |
line wrap: on
line diff
--- 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().