changeset 27499:df414fc12eed v8.2.4277

patch 8.2.4277: Vim9: an import does not shadow a command modifier Commit: https://github.com/vim/vim/commit/68854a82fdedebf6ee0675d1abeae6fc627ff6bb Author: Bram Moolenaar <Bram@vim.org> Date: Mon Jan 31 18:59:13 2022 +0000 patch 8.2.4277: Vim9: an import does not shadow a command modifier Problem: Vim9: an import does not shadow a command modifier. Solution: Do not accept a command modifier followed by a dot.
author Bram Moolenaar <Bram@vim.org>
date Mon, 31 Jan 2022 20:00:06 +0100
parents 12b8870b9181
children 0fb94e0df02d
files src/ex_docmd.c src/testdir/test_vim9_import.vim src/version.c
diffstat 3 files changed, 14 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -2709,7 +2709,7 @@ ex_range_without_command(exarg_T *eap)
 /*
  * Check for an Ex command with optional tail.
  * If there is a match advance "pp" to the argument and return TRUE.
- * If "noparen" is TRUE do not recognize the command followed by "(".
+ * If "noparen" is TRUE do not recognize the command followed by "(" or ".".
  */
     static int
 checkforcmd_opt(
@@ -2723,8 +2723,8 @@ checkforcmd_opt(
     for (i = 0; cmd[i] != NUL; ++i)
 	if (((char_u *)cmd)[i] != (*pp)[i])
 	    break;
-    if (i >= len && !isalpha((*pp)[i])
-			   && (*pp)[i] != '_' && (!noparen || (*pp)[i] != '('))
+    if (i >= len && !isalpha((*pp)[i]) && (*pp)[i] != '_'
+			 && (!noparen || ((*pp)[i] != '(' && (*pp)[i] != '.')))
     {
 	*pp = skipwhite(*pp + i);
 	return TRUE;
@@ -2746,7 +2746,7 @@ checkforcmd(
 }
 
 /*
- * Check for an Ex command with optional tail, not followed by "(".
+ * Check for an Ex command with optional tail, not followed by "(" or ".".
  * If there is a match advance "pp" to the argument and return TRUE.
  */
     int
--- a/src/testdir/test_vim9_import.vim
+++ b/src/testdir/test_vim9_import.vim
@@ -142,6 +142,14 @@ def Test_vim9_import_export()
   unlet g:imported_func
   delete('Ximport_lbr.vim')
 
+  var import_shadows_cmdmod_lines =<< trim END
+      vim9script
+      import './Xexport.vim' as vim9
+      vim9.exp_name = 'Shadow'
+      assert_equal('Shadow', vim9.exp_name)
+  END
+  v9.CheckScriptSuccess(import_shadows_cmdmod_lines)
+
   var line_break_before_dot =<< trim END
     vim9script
     import './Xexport.vim' as expo
@@ -365,7 +373,6 @@ def Test_vim9_import_export()
   assert_fails('source Ximport.vim', 'E46: Cannot change read-only variable "CONST"', '', 3)
 
   delete('Ximport.vim')
-  delete('Ximport3.vim')
   delete('Xexport.vim')
 
   # Check that in a Vim9 script 'cpo' is set to the Vim default.
--- a/src/version.c
+++ b/src/version.c
@@ -747,6 +747,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    4277,
+/**/
     4276,
 /**/
     4275,