From 19e69a63302f7f8972cee723bf0f3fc176825583 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Fri, 21 Jan 2022 20:37:05 +0000 Subject: patch 8.2.4174: Vim9: can use an autoload name in normal script Problem: Vim9: can use an autoload name in normal script. Solution: Disallow using an autoload name. --- src/errors.h | 3 ++- src/testdir/test_vim9_import.vim | 12 ++++++++++++ src/userfunc.c | 6 ++++++ src/version.c | 2 ++ 4 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/errors.h b/src/errors.h index 3fd265f43d..e632d5b240 100644 --- a/src/errors.h +++ b/src/errors.h @@ -3209,7 +3209,8 @@ EXTERN char e_cannot_import_dot_vim_without_using_as[] INIT(= N_("E1261: Cannot import .vim without using \"as\"")); EXTERN char e_cannot_import_same_script_twice_str[] INIT(= N_("E1262: Cannot import the same script twice: %s")); -// E1263 unused +EXTERN char e_using_autoload_name_in_non_autoload_script_str[] + INIT(= N_("E1263: Using autoload name in a non-autoload script: %s")); EXTERN char e_autoload_import_cannot_use_absolute_or_relative_path[] INIT(= N_("E1264: Autoload import cannot use absolute or relative path: %s")); EXTERN char e_cannot_use_partial_here[] diff --git a/src/testdir/test_vim9_import.vim b/src/testdir/test_vim9_import.vim index 6ecea56a93..3734709f08 100644 --- a/src/testdir/test_vim9_import.vim +++ b/src/testdir/test_vim9_import.vim @@ -1622,6 +1622,18 @@ def Test_autoload_missing_function_name() delete('Xdir', 'rf') enddef +def Test_autoload_name_wring() + var lines =<< trim END + vim9script + def Xscriptname#Func() + enddef + END + writefile(lines, 'Xscriptname.vim') + CheckScriptFailure(lines, 'E1263:') + + delete('Xscriptname') +enddef + def Test_import_autoload_postponed() mkdir('Xdir/autoload', 'p') var save_rtp = &rtp diff --git a/src/userfunc.c b/src/userfunc.c index 7341878758..650dfc9d12 100644 --- a/src/userfunc.c +++ b/src/userfunc.c @@ -4495,6 +4495,12 @@ define_function(exarg_T *eap, char_u *name_arg, garray_T *lines_to_free) } } } + else if (vim9script && vim_strchr(name, AUTOLOAD_CHAR) != NULL) + { + semsg(_(e_using_autoload_name_in_non_autoload_script_str), + name); + goto erret; + } } if (var_conflict) { diff --git a/src/version.c b/src/version.c index a9a8323786..edf26ed805 100644 --- a/src/version.c +++ b/src/version.c @@ -750,6 +750,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 4174, /**/ 4173, /**/ -- cgit v1.2.3