mirror of
https://github.com/vim/vim.git
synced 2025-09-25 03:54:15 -04:00
patch 8.2.4429: using script-local function from the wrong script
Problem: Using script-local function from the wrong script when using a partial. (Yegappan Lakshmanan) Solution: Include the script ID in the partial name.
This commit is contained in:
@@ -1958,17 +1958,29 @@ find_func_even_dead(char_u *name, int flags)
|
||||
|
||||
if ((flags & FFED_IS_GLOBAL) == 0)
|
||||
{
|
||||
int find_script_local = in_vim9script() && eval_isnamec1(*name)
|
||||
&& (name[1] != ':' || *name == 's');
|
||||
|
||||
if (find_script_local)
|
||||
// Find script-local function before global one.
|
||||
if (in_vim9script() && eval_isnamec1(*name)
|
||||
&& (name[1] != ':' || *name == 's'))
|
||||
{
|
||||
// Find script-local function before global one.
|
||||
func = find_func_with_sid(name[0] == 's' && name[1] == ':'
|
||||
? name + 2 : name, current_sctx.sc_sid);
|
||||
if (func != NULL)
|
||||
return func;
|
||||
}
|
||||
if (in_vim9script() && STRNCMP(name, "<SNR>", 5) == 0)
|
||||
{
|
||||
char_u *p = name + 5;
|
||||
long sid;
|
||||
|
||||
// printable "<SNR>123_Name" form
|
||||
sid = getdigits(&p);
|
||||
if (*p == '_')
|
||||
{
|
||||
func = find_func_with_sid(p + 1, (int)sid);
|
||||
if (func != NULL)
|
||||
return func;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ((flags & FFED_NO_GLOBAL) == 0)
|
||||
@@ -4067,6 +4079,23 @@ get_scriptlocal_funcname(char_u *funcname)
|
||||
return newname;
|
||||
}
|
||||
|
||||
/*
|
||||
* Return script-local "fname" with the 3-byte sequence replaced by
|
||||
* printable <SNR> in allocated memory.
|
||||
*/
|
||||
char_u *
|
||||
alloc_printable_func_name(char_u *fname)
|
||||
{
|
||||
char_u *n = alloc(STRLEN(fname + 3) + 6);
|
||||
|
||||
if (n != NULL)
|
||||
{
|
||||
STRCPY(n, "<SNR>");
|
||||
STRCPY(n + 5, fname + 3);
|
||||
}
|
||||
return n;
|
||||
}
|
||||
|
||||
/*
|
||||
* Call trans_function_name(), except that a lambda is returned as-is.
|
||||
* Returns the name in allocated memory.
|
||||
|
Reference in New Issue
Block a user