mirror of
https://github.com/vim/vim.git
synced 2025-07-26 11:04:33 -04:00
patch 8.2.4656: Vim9: can't use item from "import autoload" with autoload dir
Problem: Vim9: can't use items from "import autoload" with autoload directory name. Solution: Let sn_autoload_prefix overrule sn_import_autoload. (closes #10054)
This commit is contained in:
parent
1104a6d0c2
commit
ccbfd4883f
@ -1868,6 +1868,7 @@ typedef struct
|
|||||||
char_u *sn_autoload_prefix;
|
char_u *sn_autoload_prefix;
|
||||||
|
|
||||||
// TRUE for a script used with "import autoload './dirname/script.vim'"
|
// TRUE for a script used with "import autoload './dirname/script.vim'"
|
||||||
|
// For "../autoload/script.vim" sn_autoload_prefix is also set.
|
||||||
int sn_import_autoload;
|
int sn_import_autoload;
|
||||||
|
|
||||||
# ifdef FEAT_PROFILE
|
# ifdef FEAT_PROFILE
|
||||||
|
@ -969,6 +969,31 @@ def Test_autoload_import_relative()
|
|||||||
delete('XimportRel3.vim')
|
delete('XimportRel3.vim')
|
||||||
enddef
|
enddef
|
||||||
|
|
||||||
|
def Test_autoload_import_relative_autoload_dir()
|
||||||
|
mkdir('autoload', 'p')
|
||||||
|
var lines =<< trim END
|
||||||
|
vim9script
|
||||||
|
export def Bar()
|
||||||
|
g:called_bar = 'yes'
|
||||||
|
enddef
|
||||||
|
END
|
||||||
|
writefile(lines, 'autoload/script.vim')
|
||||||
|
|
||||||
|
lines =<< trim END
|
||||||
|
vim9script
|
||||||
|
import autoload './autoload/script.vim'
|
||||||
|
def Foo()
|
||||||
|
script.Bar()
|
||||||
|
enddef
|
||||||
|
Foo()
|
||||||
|
assert_equal('yes', g:called_bar)
|
||||||
|
END
|
||||||
|
v9.CheckScriptSuccess(lines)
|
||||||
|
|
||||||
|
unlet g:called_bar
|
||||||
|
delete('autoload', 'rf')
|
||||||
|
enddef
|
||||||
|
|
||||||
func Test_import_in_diffexpr()
|
func Test_import_in_diffexpr()
|
||||||
CheckExecutable diff
|
CheckExecutable diff
|
||||||
|
|
||||||
|
@ -750,6 +750,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
4656,
|
||||||
/**/
|
/**/
|
||||||
4655,
|
4655,
|
||||||
/**/
|
/**/
|
||||||
|
@ -298,26 +298,31 @@ compile_load_scriptvar(
|
|||||||
*p = NUL;
|
*p = NUL;
|
||||||
|
|
||||||
si = SCRIPT_ITEM(import->imp_sid);
|
si = SCRIPT_ITEM(import->imp_sid);
|
||||||
if (si->sn_autoload_prefix != NULL
|
if (si->sn_import_autoload && si->sn_state == SN_STATE_NOT_LOADED)
|
||||||
&& si->sn_state == SN_STATE_NOT_LOADED)
|
// "import autoload './dir/script.vim'" or
|
||||||
{
|
// "import autoload './autoload/script.vim'" - load script first
|
||||||
char_u *auto_name = concat_str(si->sn_autoload_prefix, exp_name);
|
|
||||||
|
|
||||||
// autoload script must be loaded later, access by the autoload
|
|
||||||
// name. If a '(' follows it must be a function. Otherwise we
|
|
||||||
// don't know, it can be "script.Func".
|
|
||||||
if (cc == '(' || paren_follows_after_expr)
|
|
||||||
res = generate_PUSHFUNC(cctx, auto_name, &t_func_any);
|
|
||||||
else
|
|
||||||
res = generate_AUTOLOAD(cctx, auto_name, &t_any);
|
|
||||||
vim_free(auto_name);
|
|
||||||
done = TRUE;
|
|
||||||
}
|
|
||||||
else if (si->sn_import_autoload && si->sn_state == SN_STATE_NOT_LOADED)
|
|
||||||
{
|
|
||||||
// "import autoload './dir/script.vim'" - load script first
|
|
||||||
res = generate_SOURCE(cctx, import->imp_sid);
|
res = generate_SOURCE(cctx, import->imp_sid);
|
||||||
if (res == OK)
|
|
||||||
|
if (res == OK)
|
||||||
|
{
|
||||||
|
if (si->sn_autoload_prefix != NULL
|
||||||
|
&& si->sn_state == SN_STATE_NOT_LOADED)
|
||||||
|
{
|
||||||
|
char_u *auto_name =
|
||||||
|
concat_str(si->sn_autoload_prefix, exp_name);
|
||||||
|
|
||||||
|
// autoload script must be loaded later, access by the autoload
|
||||||
|
// name. If a '(' follows it must be a function. Otherwise we
|
||||||
|
// don't know, it can be "script.Func".
|
||||||
|
if (cc == '(' || paren_follows_after_expr)
|
||||||
|
res = generate_PUSHFUNC(cctx, auto_name, &t_func_any);
|
||||||
|
else
|
||||||
|
res = generate_AUTOLOAD(cctx, auto_name, &t_any);
|
||||||
|
vim_free(auto_name);
|
||||||
|
done = TRUE;
|
||||||
|
}
|
||||||
|
else if (si->sn_import_autoload
|
||||||
|
&& si->sn_state == SN_STATE_NOT_LOADED)
|
||||||
{
|
{
|
||||||
// If a '(' follows it must be a function. Otherwise we don't
|
// If a '(' follows it must be a function. Otherwise we don't
|
||||||
// know, it can be "script.Func".
|
// know, it can be "script.Func".
|
||||||
@ -331,14 +336,15 @@ compile_load_scriptvar(
|
|||||||
else
|
else
|
||||||
res = generate_OLDSCRIPT(cctx, ISN_LOADEXPORT, exp_name,
|
res = generate_OLDSCRIPT(cctx, ISN_LOADEXPORT, exp_name,
|
||||||
import->imp_sid, &t_any);
|
import->imp_sid, &t_any);
|
||||||
|
done = TRUE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
idx = find_exported(import->imp_sid, exp_name, &ufunc, &type,
|
||||||
|
cctx, NULL, TRUE);
|
||||||
}
|
}
|
||||||
done = TRUE;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
idx = find_exported(import->imp_sid, exp_name, &ufunc, &type,
|
|
||||||
cctx, NULL, TRUE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
*p = cc;
|
*p = cc;
|
||||||
*end = p;
|
*end = p;
|
||||||
if (done)
|
if (done)
|
||||||
|
@ -1932,7 +1932,9 @@ generate_store_var(
|
|||||||
isntype_T isn_type = ISN_STORES;
|
isntype_T isn_type = ISN_STORES;
|
||||||
|
|
||||||
if (SCRIPT_ID_VALID(scriptvar_sid)
|
if (SCRIPT_ID_VALID(scriptvar_sid)
|
||||||
&& SCRIPT_ITEM(scriptvar_sid)->sn_import_autoload)
|
&& SCRIPT_ITEM(scriptvar_sid)->sn_import_autoload
|
||||||
|
&& SCRIPT_ITEM(scriptvar_sid)->sn_autoload_prefix
|
||||||
|
== NULL)
|
||||||
{
|
{
|
||||||
// "import autoload './dir/script.vim'" - load script first
|
// "import autoload './dir/script.vim'" - load script first
|
||||||
if (generate_SOURCE(cctx, scriptvar_sid) == FAIL)
|
if (generate_SOURCE(cctx, scriptvar_sid) == FAIL)
|
||||||
|
@ -415,6 +415,9 @@ handle_import_fname(char_u *fname, int is_autoload, int *sid)
|
|||||||
si = SCRIPT_ITEM(*sid);
|
si = SCRIPT_ITEM(*sid);
|
||||||
si->sn_import_autoload = TRUE;
|
si->sn_import_autoload = TRUE;
|
||||||
|
|
||||||
|
if (si->sn_autoload_prefix == NULL)
|
||||||
|
si->sn_autoload_prefix = get_autoload_prefix(si);
|
||||||
|
|
||||||
// with testing override: load autoload script right away
|
// with testing override: load autoload script right away
|
||||||
if (!override_autoload || si->sn_state != SN_STATE_NOT_LOADED)
|
if (!override_autoload || si->sn_state != SN_STATE_NOT_LOADED)
|
||||||
return OK;
|
return OK;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user