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;