]> granicus.if.org Git - vim/commitdiff
patch 8.2.4277: Vim9: an import does not shadow a command modifier v8.2.4277
authorBram Moolenaar <Bram@vim.org>
Mon, 31 Jan 2022 18:59:13 +0000 (18:59 +0000)
committerBram Moolenaar <Bram@vim.org>
Mon, 31 Jan 2022 18:59:13 +0000 (18:59 +0000)
Problem:    Vim9: an import does not shadow a command modifier.
Solution:   Do not accept a command modifier followed by a dot.

src/ex_docmd.c
src/testdir/test_vim9_import.vim
src/version.c

index c55b34ddb6849e051c5cef910eb28c5856d76cb6..64dcd7e2bf4fdd8b2f8712f242af780e7578ffbe 100644 (file)
@@ -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
index f37ff8b75de0eeac3d97e8d5f6c969e97d6ec668..be453c654eeef30c99f1dd1c26eab98bb32f8518 100644 (file)
@@ -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.
index 301f54421b638597e5e55148b99699943164c11e..0dc936ab3f300743051be981d7780dc0117c968f 100644 (file)
@@ -746,6 +746,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    4277,
 /**/
     4276,
 /**/