diff src/userfunc.c @ 26323:3841da4eac23 v8.2.3692

patch 8.2.3692: Vim9: cannot use :func inside a :def function Commit: https://github.com/vim/vim/commit/38453528c3372293d70c8e85471a6188749ff331 Author: Bram Moolenaar <Bram@vim.org> Date: Sun Nov 28 22:00:12 2021 +0000 patch 8.2.3692: Vim9: cannot use :func inside a :def function Problem: Vim9: cannot use :func inside a :def function. Solution: Make it work.
author Bram Moolenaar <Bram@vim.org>
date Sun, 28 Nov 2021 23:15:03 +0100
parents 9e5e331828da
children bf1a7ce3f14a
line wrap: on
line diff
--- a/src/userfunc.c
+++ b/src/userfunc.c
@@ -523,7 +523,7 @@ register_cfunc(cfunc_T cb, cfunc_free_T 
     fp->uf_def_status = UF_NOT_COMPILED;
     fp->uf_refcount = 1;
     fp->uf_varargs = TRUE;
-    fp->uf_flags = FC_CFUNC;
+    fp->uf_flags = FC_CFUNC | FC_LAMBDA;
     fp->uf_calls = 0;
     fp->uf_script_ctx = current_sctx;
     fp->uf_cb = cb;
@@ -1205,6 +1205,7 @@ lambda_function_body(
     set_ufunc_name(ufunc, name);
     if (hash_add(&func_hashtab, UF2HIKEY(ufunc)) == FAIL)
 	goto erret;
+    ufunc->uf_flags = FC_LAMBDA;
     ufunc->uf_refcount = 1;
     ufunc->uf_args = *newargs;
     newargs->ga_data = NULL;
@@ -1399,7 +1400,7 @@ get_lambda_tv(
     if (evaluate)
     {
 	int	    len;
-	int	    flags = 0;
+	int	    flags = FC_LAMBDA;
 	char_u	    *p;
 	char_u	    *line_end;
 	char_u	    *name = get_lambda_name();
@@ -2506,8 +2507,7 @@ call_user_func(
 	return;
     }
 
-    if (STRNCMP(fp->uf_name, "<lambda>", 8) == 0)
-	islambda = TRUE;
+    islambda = fp->uf_flags & FC_LAMBDA;
 
     /*
      * Note about using fc->fixvar[]: This is an array of FIXVAR_CNT variables