0
0
mirror of https://github.com/vim/vim.git synced 2025-09-24 03:44:06 -04:00

patch 8.2.2975: Vim9: can only use an autoload function name as a string

Problem:    Vim9: can only use an autoload function name as a string.
Solution:   Load the autoload script when encountered. (closes #8124)
This commit is contained in:
Bram Moolenaar
2021-06-11 22:05:47 +02:00
parent 4f13527598
commit f0a4069e3d
5 changed files with 43 additions and 3 deletions

View File

@@ -2921,8 +2921,9 @@ find_var_ht(char_u *name, char_u **varname)
if (ht != NULL)
return ht; // local variable
// in Vim9 script items at the script level are script-local
if (in_vim9script())
// In Vim9 script items at the script level are script-local, except
// for autoload names.
if (in_vim9script() && vim_strchr(name, AUTOLOAD_CHAR) == NULL)
{
ht = get_script_local_ht();
if (ht != NULL)

View File

@@ -1128,6 +1128,7 @@ do_source(
proftime_T wait_start;
#endif
int trigger_source_post = FALSE;
int save_estack_compiling = estack_compiling;
ESTACK_CHECK_DECLARATION
p = expand_env_save(fname);
@@ -1142,6 +1143,7 @@ do_source(
smsg(_("Cannot source a directory: \"%s\""), fname);
goto theend;
}
estack_compiling = FALSE;
#ifdef FEAT_EVAL
// See if we loaded this script before.
@@ -1508,6 +1510,7 @@ almosttheend:
theend:
vim_free(fname_exp);
estack_compiling = save_estack_compiling;
return retval;
}

View File

@@ -114,6 +114,34 @@ def Test_autoload_name_mismatch()
delete(dir, 'rf')
enddef
def Test_autoload_names()
var dir = 'Xdir/autoload'
mkdir(dir, 'p')
var lines =<< trim END
func foobar#function()
return 'yes'
endfunc
let foobar#var = 'no'
END
writefile(lines, dir .. '/foobar.vim')
var save_rtp = &rtp
exe 'set rtp=' .. getcwd() .. '/Xdir'
lines =<< trim END
assert_equal('yes', foobar#function())
var Function = foobar#function
assert_equal('yes', Function())
assert_equal('no', foobar#var)
END
CheckDefAndScriptSuccess(lines)
&rtp = save_rtp
delete(dir, 'rf')
enddef
def CallRecursive(n: number): number
return CallRecursive(n + 1)
enddef

View File

@@ -750,6 +750,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
2975,
/**/
2974,
/**/

View File

@@ -3084,7 +3084,13 @@ compile_load(
if (name == NULL)
return FAIL;
if (arg_exists(*arg, len, &idx, &type, &gen_load_outer, cctx) == OK)
if (vim_strchr(name, AUTOLOAD_CHAR) != NULL)
{
script_autoload(name, FALSE);
res = generate_LOAD(cctx, ISN_LOADAUTO, 0, name, &t_any);
}
else if (arg_exists(*arg, len, &idx, &type, &gen_load_outer, cctx)
== OK)
{
if (gen_load_outer == 0)
gen_load = TRUE;