patch 8.2.4548: script-local function is deleted when used in a funcref
Problem: Script-local function is deleted when used in a funcref.
Solution: Do not consider a function starting with "<SNR>" reference
counted. (closes #9916, closes #9820)
diff --git a/src/userfunc.c b/src/userfunc.c
index 42e1e89..6a5d84b 100644
--- a/src/userfunc.c
+++ b/src/userfunc.c
@@ -2215,8 +2215,9 @@
/*
* There are two kinds of function names:
- * 1. ordinary names, function defined with :function or :def
- * 2. numbered functions and lambdas
+ * 1. ordinary names, function defined with :function or :def;
+ * can start with "<SNR>123_" literally or with K_SPECIAL.
+ * 2. Numbered functions and lambdas: "<lambda>123"
* For the first we only count the name stored in func_hashtab as a reference,
* using function() does not count as a reference, because the function is
* looked up by name.
@@ -2224,7 +2225,7 @@
int
func_name_refcount(char_u *name)
{
- return numbered_function(name) || *name == '<';
+ return numbered_function(name) || (name[0] == '<' && name[1] == 'l');
}
/*