1
0
forked from aniani/vim

patch 8.2.4030: a script local funcref is not found from a mapping

Problem:    A script local funcref is not found from a mapping.
Solution:   When looking for a function, also find a script-local funcref.
            (closes #9485)
This commit is contained in:
Bram Moolenaar
2022-01-07 18:20:55 +00:00
parent b2d85e3784
commit 71f21938bc
5 changed files with 59 additions and 28 deletions

View File

@@ -2690,7 +2690,7 @@ eval_variable(
{
if ((flags & EVAL_VAR_IMPORT) == 0)
{
if (sid != 0 && SCRIPT_ID_VALID(sid))
if (SCRIPT_ID_VALID(sid))
{
ht = &SCRIPT_VARS(sid);
if (ht != NULL)
@@ -2877,6 +2877,35 @@ find_var(char_u *name, hashtab_T **htp, int no_autoload)
return NULL;
}
/*
* Like find_var() but if the name starts with <SNR>99_ then look in the
* referenced script (used for a funcref).
*/
dictitem_T *
find_var_also_in_script(char_u *name, hashtab_T **htp, int no_autoload)
{
if (STRNCMP(name, "<SNR>", 5) == 0 && isdigit(name[5]))
{
char_u *p = name + 5;
int sid = getdigits(&p);
if (SCRIPT_ID_VALID(sid) && *p == '_')
{
hashtab_T *ht = &SCRIPT_VARS(sid);
if (ht != NULL)
{
dictitem_T *di = find_var_in_ht(ht, 0, p + 1, no_autoload);
if (di != NULL)
return di;
}
}
}
return find_var(name, htp, no_autoload);
}
/*
* Find variable "varname" in hashtab "ht" with name "htname".
* When "varname" is empty returns curwin/curtab/etc vars dictionary.