From 68854a82fdedebf6ee0675d1abeae6fc627ff6bb Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Mon, 31 Jan 2022 18:59:13 +0000 Subject: [PATCH] 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. --- src/ex_docmd.c | 8 ++++---- src/testdir/test_vim9_import.vim | 9 ++++++++- src/version.c | 2 ++ 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/ex_docmd.c b/src/ex_docmd.c index c55b34ddb..64dcd7e2b 100644 --- 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 diff --git a/src/testdir/test_vim9_import.vim b/src/testdir/test_vim9_import.vim index f37ff8b75..be453c654 100644 --- 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. diff --git a/src/version.c b/src/version.c index 301f54421..0dc936ab3 100644 --- a/src/version.c +++ b/src/version.c @@ -746,6 +746,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 4277, /**/ 4276, /**/ -- 2.50.1