diff options
author | Bram Moolenaar <Bram@vim.org> | 2022-01-18 17:43:04 +0000 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2022-01-18 17:43:04 +0000 |
commit | d02dce2bb572f0e6b4570442e9cdbed14ef41820 (patch) | |
tree | 8d45fb3ef354ba98df86fd26701570e2c2644680 /src/vim9script.c | |
parent | fd218c8a36e7ed33f7a205163690c5b7d2f31f8a (diff) | |
download | vim-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.c | 24 |
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; |