Mercurial > vim
comparison 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 |
comparison
equal
deleted
inserted
replaced
23536:708e07fe1fb4 | 23537:7f0fc2ab90e3 |
---|---|
2736 ex_pressedreturn = TRUE; | 2736 ex_pressedreturn = TRUE; |
2737 return FAIL; | 2737 return FAIL; |
2738 } | 2738 } |
2739 | 2739 |
2740 p = skip_range(eap->cmd, TRUE, NULL); | 2740 p = skip_range(eap->cmd, TRUE, NULL); |
2741 | |
2742 // In Vim9 script a variable can shadow a command modifier: | |
2743 // verbose = 123 | |
2744 // verbose += 123 | |
2745 // silent! verbose = func() | |
2746 // verbose.member = 2 | |
2747 // verbose[expr] = 2 | |
2748 if (in_vim9script()) | |
2749 { | |
2750 char_u *s; | |
2751 | |
2752 for (s = p; ASCII_ISALPHA(*s); ++s) | |
2753 ; | |
2754 s = skipwhite(s); | |
2755 if (vim_strchr((char_u *)".[=", *s) != NULL | |
2756 || (*s != NUL && s[1] == '=')) | |
2757 break; | |
2758 } | |
2759 | |
2741 switch (*p) | 2760 switch (*p) |
2742 { | 2761 { |
2743 // When adding an entry, also modify cmd_exists(). | 2762 // When adding an entry, also modify cmd_exists(). |
2744 case 'a': if (!checkforcmd(&eap->cmd, "aboveleft", 3)) | 2763 case 'a': if (!checkforcmd(&eap->cmd, "aboveleft", 3)) |
2745 break; | 2764 break; |