summaryrefslogtreecommitdiff
path: root/src/vim9script.c
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2022-01-18 17:43:04 +0000
committerBram Moolenaar <Bram@vim.org>2022-01-18 17:43:04 +0000
commitd02dce2bb572f0e6b4570442e9cdbed14ef41820 (patch)
tree8d45fb3ef354ba98df86fd26701570e2c2644680 /src/vim9script.c
parentfd218c8a36e7ed33f7a205163690c5b7d2f31f8a (diff)
downloadvim-git-d02dce2bb572f0e6b4570442e9cdbed14ef41820.tar.gz
patch 8.2.4137: Vim9: calling import with and without method is inconsistentv8.2.4137
Problem: Vim9: calling import with and without method is inconsistent. Solution: Set a flag that a parenthsis follows to compile_load_scriptvar(). Add some more tests. Improve error message.
Diffstat (limited to 'src/vim9script.c')
-rw-r--r--src/vim9script.c24
1 files changed, 19 insertions, 5 deletions
diff --git a/src/vim9script.c b/src/vim9script.c
index 2f7f732ac..e13ac4ac4 100644
--- a/src/vim9script.c
+++ b/src/vim9script.c
@@ -707,22 +707,36 @@ find_exported(
sprintf((char *)funcname + 3, "%ld_%s", (long)sid, name);
}
*ufunc = find_func(funcname, FALSE);
- if (funcname != buffer)
- vim_free(funcname);
if (*ufunc == NULL)
{
if (verbose)
- semsg(_(e_item_not_found_in_script_str), name);
- return -1;
+ {
+ ufunc_T *alt_ufunc = NULL;
+
+ if (script->sn_autoload_prefix != NULL)
+ {
+ // try find the function by the script-local name
+ funcname[0] = K_SPECIAL;
+ funcname[1] = KS_EXTRA;
+ funcname[2] = (int)KE_SNR;
+ sprintf((char *)funcname + 3, "%ld_%s", (long)sid, name);
+ alt_ufunc = find_func(funcname, FALSE);
+ }
+ if (alt_ufunc != NULL)
+ semsg(_(e_item_not_exported_in_script_str), name);
+ else
+ semsg(_(e_item_not_found_in_script_str), name);
+ }
}
else if (((*ufunc)->uf_flags & FC_EXPORT) == 0)
{
if (verbose)
semsg(_(e_item_not_exported_in_script_str), name);
*ufunc = NULL;
- return -1;
}
+ if (funcname != buffer)
+ vim_free(funcname);
}
return idx;