diff src/vim9expr.c @ 28261:20f6b0cdf38c v8.2.4656

patch 8.2.4656: Vim9: can't use item from "import autoload" with autoload dir Commit: https://github.com/vim/vim/commit/ccbfd4883f0385a1d84cc87785ddcc86185b4ad9 Author: Bram Moolenaar <Bram@vim.org> Date: Thu Mar 31 16:18:23 2022 +0100 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)
author Bram Moolenaar <Bram@vim.org>
date Thu, 31 Mar 2022 17:30:03 +0200
parents 4b322951ebac
children c446812efd60
line wrap: on
line diff
--- a/src/vim9expr.c
+++ b/src/vim9expr.c
@@ -298,26 +298,31 @@ compile_load_scriptvar(
 	*p = NUL;
 
 	si = SCRIPT_ITEM(import->imp_sid);
-	if (si->sn_autoload_prefix != NULL
+	if (si->sn_import_autoload && si->sn_state == SN_STATE_NOT_LOADED)
+	    // "import autoload './dir/script.vim'" or
+	    // "import autoload './autoload/script.vim'" - load script first
+	    res = generate_SOURCE(cctx, import->imp_sid);
+
+	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);
+	    {
+		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);
-	    if (res == OK)
+		// 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
 		// know, it can be "script.Func".
@@ -331,14 +336,15 @@ compile_load_scriptvar(
 		else
 		    res = generate_OLDSCRIPT(cctx, ISN_LOADEXPORT, exp_name,
 						      import->imp_sid, &t_any);
+		done = TRUE;
 	    }
-	    done = TRUE;
+	    else
+	    {
+		idx = find_exported(import->imp_sid, exp_name, &ufunc, &type,
+							     cctx, NULL, TRUE);
+	    }
 	}
-	else
-	{
-	    idx = find_exported(import->imp_sid, exp_name, &ufunc, &type,
-							    cctx, NULL, TRUE);
-	}
+
 	*p = cc;
 	*end = p;
 	if (done)