xref: /vim-8.2.3635/src/userfunc.c (revision bd6428b9)
1 /* vi:set ts=8 sts=4 sw=4 noet:
2  *
3  * VIM - Vi IMproved	by Bram Moolenaar
4  *
5  * Do ":help uganda"  in Vim to read copying and usage conditions.
6  * Do ":help credits" in Vim to see a list of people who contributed.
7  * See README.txt for an overview of the Vim source code.
8  */
9 
10 /*
11  * userfunc.c: User defined function support
12  */
13 
14 #include "vim.h"
15 
16 #if defined(FEAT_EVAL) || defined(PROTO)
17 /*
18  * All user-defined functions are found in this hashtable.
19  */
20 static hashtab_T	func_hashtab;
21 
22 // Used by get_func_tv()
23 static garray_T funcargs = GA_EMPTY;
24 
25 // pointer to funccal for currently active function
26 static funccall_T *current_funccal = NULL;
27 
28 // Pointer to list of previously used funccal, still around because some
29 // item in it is still being used.
30 static funccall_T *previous_funccal = NULL;
31 
32 static char *e_funcexts = N_("E122: Function %s already exists, add ! to replace it");
33 static char *e_funcdict = N_("E717: Dictionary entry already exists");
34 static char *e_funcref = N_("E718: Funcref required");
35 static char *e_nofunc = N_("E130: Unknown function: %s");
36 
37 static void funccal_unref(funccall_T *fc, ufunc_T *fp, int force);
38 
39     void
40 func_init()
41 {
42     hash_init(&func_hashtab);
43 }
44 
45 /*
46  * Return the function hash table
47  */
48     hashtab_T *
49 func_tbl_get(void)
50 {
51     return &func_hashtab;
52 }
53 
54 /*
55  * Get one function argument.
56  * If "argtypes" is not NULL also get the type: "arg: type".
57  * Return a pointer to after the type.
58  * When something is wrong return "arg".
59  */
60     static char_u *
61 one_function_arg(char_u *arg, garray_T *newargs, garray_T *argtypes, int skip)
62 {
63     char_u	*p = arg;
64     char_u	*arg_copy = NULL;
65 
66     while (ASCII_ISALNUM(*p) || *p == '_')
67 	++p;
68     if (arg == p || isdigit(*arg)
69 	    || (argtypes == NULL
70 		&& ((p - arg == 9 && STRNCMP(arg, "firstline", 9) == 0)
71 		    || (p - arg == 8 && STRNCMP(arg, "lastline", 8) == 0))))
72     {
73 	if (!skip)
74 	    semsg(_("E125: Illegal argument: %s"), arg);
75 	return arg;
76     }
77     if (newargs != NULL && ga_grow(newargs, 1) == FAIL)
78 	return arg;
79     if (newargs != NULL)
80     {
81 	int	c;
82 	int	i;
83 
84 	c = *p;
85 	*p = NUL;
86 	arg_copy = vim_strsave(arg);
87 	if (arg_copy == NULL)
88 	{
89 	    *p = c;
90 	    return arg;
91 	}
92 
93 	// Check for duplicate argument name.
94 	for (i = 0; i < newargs->ga_len; ++i)
95 	    if (STRCMP(((char_u **)(newargs->ga_data))[i], arg_copy) == 0)
96 	    {
97 		semsg(_("E853: Duplicate argument name: %s"), arg_copy);
98 		vim_free(arg_copy);
99 		return arg;
100 	    }
101 	((char_u **)(newargs->ga_data))[newargs->ga_len] = arg_copy;
102 	newargs->ga_len++;
103 
104 	*p = c;
105     }
106 
107     // get any type from "arg: type"
108     if (argtypes != NULL && ga_grow(argtypes, 1) == OK)
109     {
110 	char_u *type = NULL;
111 
112 	if (VIM_ISWHITE(*p) && *skipwhite(p) == ':')
113 	{
114 	    semsg(_(e_no_white_space_allowed_before_colon_str),
115 					    arg_copy == NULL ? arg : arg_copy);
116 	    p = skipwhite(p);
117 	}
118 	if (*p == ':')
119 	{
120 	    ++p;
121 	    if (!VIM_ISWHITE(*p))
122 	    {
123 		semsg(_(e_white_space_required_after_str), ":");
124 		return arg;
125 	    }
126 	    type = skipwhite(p);
127 	    p = skip_type(type, TRUE);
128 	    type = vim_strnsave(type, p - type);
129 	}
130 	else if (*skipwhite(p) != '=')
131 	{
132 	    semsg(_(e_missing_argument_type_for_str),
133 					    arg_copy == NULL ? arg : arg_copy);
134 	    return arg;
135 	}
136 	((char_u **)argtypes->ga_data)[argtypes->ga_len++] = type;
137     }
138 
139     return p;
140 }
141 
142 /*
143  * Get function arguments.
144  */
145     int
146 get_function_args(
147     char_u	**argp,
148     char_u	endchar,
149     garray_T	*newargs,
150     garray_T	*argtypes,	// NULL unless using :def
151     int		*varargs,
152     garray_T	*default_args,
153     int		skip,
154     exarg_T	*eap,
155     char_u	**line_to_free)
156 {
157     int		mustend = FALSE;
158     char_u	*arg = *argp;
159     char_u	*p = arg;
160     int		c;
161     int		any_default = FALSE;
162     char_u	*expr;
163     char_u	*whitep = arg;
164 
165     if (newargs != NULL)
166 	ga_init2(newargs, (int)sizeof(char_u *), 3);
167     if (argtypes != NULL)
168 	ga_init2(argtypes, (int)sizeof(char_u *), 3);
169     if (default_args != NULL)
170 	ga_init2(default_args, (int)sizeof(char_u *), 3);
171 
172     if (varargs != NULL)
173 	*varargs = FALSE;
174 
175     /*
176      * Isolate the arguments: "arg1, arg2, ...)"
177      */
178     while (*p != endchar)
179     {
180 	while (eap != NULL && eap->getline != NULL
181 			 && (*p == NUL || (VIM_ISWHITE(*whitep) && *p == '#')))
182 	{
183 	    char_u *theline;
184 
185 	    // End of the line, get the next one.
186 	    theline = eap->getline(':', eap->cookie, 0, TRUE);
187 	    if (theline == NULL)
188 		break;
189 	    vim_free(*line_to_free);
190 	    *line_to_free = theline;
191 	    whitep = (char_u *)" ";
192 	    p = skipwhite(theline);
193 	}
194 
195 	if (mustend && *p != endchar)
196 	{
197 	    if (!skip)
198 		semsg(_(e_invarg2), *argp);
199 	    break;
200 	}
201 	if (*p == endchar)
202 	    break;
203 
204 	if (p[0] == '.' && p[1] == '.' && p[2] == '.')
205 	{
206 	    if (varargs != NULL)
207 		*varargs = TRUE;
208 	    p += 3;
209 	    mustend = TRUE;
210 
211 	    if (argtypes != NULL)
212 	    {
213 		// ...name: list<type>
214 		if (!eval_isnamec1(*p))
215 		{
216 		    emsg(_(e_missing_name_after_dots));
217 		    break;
218 		}
219 
220 		arg = p;
221 		p = one_function_arg(p, newargs, argtypes, skip);
222 		if (p == arg)
223 		    break;
224 	    }
225 	}
226 	else
227 	{
228 	    arg = p;
229 	    p = one_function_arg(p, newargs, argtypes, skip);
230 	    if (p == arg)
231 		break;
232 
233 	    if (*skipwhite(p) == '=' && default_args != NULL)
234 	    {
235 		typval_T	rettv;
236 
237 		// find the end of the expression (doesn't evaluate it)
238 		any_default = TRUE;
239 		p = skipwhite(p) + 1;
240 		whitep = p;
241 		p = skipwhite(p);
242 		expr = p;
243 		if (eval1(&p, &rettv, NULL) != FAIL)
244 		{
245 		    if (ga_grow(default_args, 1) == FAIL)
246 			goto err_ret;
247 
248 		    // trim trailing whitespace
249 		    while (p > expr && VIM_ISWHITE(p[-1]))
250 			p--;
251 		    c = *p;
252 		    *p = NUL;
253 		    expr = vim_strsave(expr);
254 		    if (expr == NULL)
255 		    {
256 			*p = c;
257 			goto err_ret;
258 		    }
259 		    ((char_u **)(default_args->ga_data))
260 						 [default_args->ga_len] = expr;
261 		    default_args->ga_len++;
262 		    *p = c;
263 		}
264 		else
265 		    mustend = TRUE;
266 	    }
267 	    else if (any_default)
268 	    {
269 		emsg(_("E989: Non-default argument follows default argument"));
270 		goto err_ret;
271 	    }
272 	    if (*p == ',')
273 	    {
274 		++p;
275 		// Don't give this error when skipping, it makes the "->" not
276 		// found in "{k,v -> x}" and give a confusing error.
277 		if (!skip && in_vim9script()
278 				      && !IS_WHITE_OR_NUL(*p) && *p != endchar)
279 		{
280 		    semsg(_(e_white_space_required_after_str), ",");
281 		    goto err_ret;
282 		}
283 	    }
284 	    else
285 		mustend = TRUE;
286 	}
287 	whitep = p;
288 	p = skipwhite(p);
289     }
290 
291     if (*p != endchar)
292 	goto err_ret;
293     ++p;	// skip "endchar"
294 
295     *argp = p;
296     return OK;
297 
298 err_ret:
299     if (newargs != NULL)
300 	ga_clear_strings(newargs);
301     if (default_args != NULL)
302 	ga_clear_strings(default_args);
303     return FAIL;
304 }
305 
306 /*
307  * Register function "fp" as using "current_funccal" as its scope.
308  */
309     static int
310 register_closure(ufunc_T *fp)
311 {
312     if (fp->uf_scoped == current_funccal)
313 	// no change
314 	return OK;
315     funccal_unref(fp->uf_scoped, fp, FALSE);
316     fp->uf_scoped = current_funccal;
317     current_funccal->fc_refcount++;
318 
319     if (ga_grow(&current_funccal->fc_funcs, 1) == FAIL)
320 	return FAIL;
321     ((ufunc_T **)current_funccal->fc_funcs.ga_data)
322 	[current_funccal->fc_funcs.ga_len++] = fp;
323     return OK;
324 }
325 
326     static void
327 set_ufunc_name(ufunc_T *fp, char_u *name)
328 {
329     STRCPY(fp->uf_name, name);
330 
331     if (name[0] == K_SPECIAL)
332     {
333 	fp->uf_name_exp = alloc(STRLEN(name) + 3);
334 	if (fp->uf_name_exp != NULL)
335 	{
336 	    STRCPY(fp->uf_name_exp, "<SNR>");
337 	    STRCAT(fp->uf_name_exp, fp->uf_name + 3);
338 	}
339     }
340 }
341 
342 /*
343  * Get a name for a lambda.  Returned in static memory.
344  */
345     char_u *
346 get_lambda_name(void)
347 {
348     static char_u   name[30];
349     static int	    lambda_no = 0;
350 
351     sprintf((char*)name, "<lambda>%d", ++lambda_no);
352     return name;
353 }
354 
355 #if defined(FEAT_LUA) || defined(PROTO)
356 /*
357  * Registers a native C callback which can be called from Vim script.
358  * Returns the name of the Vim script function.
359  */
360     char_u *
361 register_cfunc(cfunc_T cb, cfunc_free_T cb_free, void *state)
362 {
363     char_u	*name = get_lambda_name();
364     ufunc_T	*fp;
365 
366     fp = alloc_clear(offsetof(ufunc_T, uf_name) + STRLEN(name) + 1);
367     if (fp == NULL)
368 	return NULL;
369 
370     fp->uf_def_status = UF_NOT_COMPILED;
371     fp->uf_refcount = 1;
372     fp->uf_varargs = TRUE;
373     fp->uf_flags = FC_CFUNC;
374     fp->uf_calls = 0;
375     fp->uf_script_ctx = current_sctx;
376     fp->uf_cb = cb;
377     fp->uf_cb_free = cb_free;
378     fp->uf_cb_state = state;
379 
380     set_ufunc_name(fp, name);
381     hash_add(&func_hashtab, UF2HIKEY(fp));
382 
383     return name;
384 }
385 #endif
386 
387 /*
388  * Parse a lambda expression and get a Funcref from "*arg".
389  * Return OK or FAIL.  Returns NOTDONE for dict or {expr}.
390  */
391     int
392 get_lambda_tv(char_u **arg, typval_T *rettv, evalarg_T *evalarg)
393 {
394     int		evaluate = evalarg != NULL
395 				      && (evalarg->eval_flags & EVAL_EVALUATE);
396     garray_T	newargs;
397     garray_T	newlines;
398     garray_T	*pnewargs;
399     ufunc_T	*fp = NULL;
400     partial_T   *pt = NULL;
401     int		varargs;
402     int		ret;
403     char_u	*s;
404     char_u	*start, *end;
405     int		*old_eval_lavars = eval_lavars_used;
406     int		eval_lavars = FALSE;
407     char_u	*tofree = NULL;
408 
409     ga_init(&newargs);
410     ga_init(&newlines);
411 
412     // First, check if this is a lambda expression. "->" must exist.
413     s = skipwhite(*arg + 1);
414     ret = get_function_args(&s, '-', NULL, NULL, NULL, NULL, TRUE,
415 								   NULL, NULL);
416     if (ret == FAIL || *s != '>')
417 	return NOTDONE;
418 
419     // Parse the arguments again.
420     if (evaluate)
421 	pnewargs = &newargs;
422     else
423 	pnewargs = NULL;
424     *arg = skipwhite(*arg + 1);
425     // TODO: argument types
426     ret = get_function_args(arg, '-', pnewargs, NULL, &varargs, NULL, FALSE,
427 								   NULL, NULL);
428     if (ret == FAIL || **arg != '>')
429 	goto errret;
430 
431     // Set up a flag for checking local variables and arguments.
432     if (evaluate)
433 	eval_lavars_used = &eval_lavars;
434 
435     // Get the start and the end of the expression.
436     *arg = skipwhite_and_linebreak(*arg + 1, evalarg);
437     start = *arg;
438     ret = skip_expr_concatenate(arg, &start, &end, evalarg);
439     if (ret == FAIL)
440 	goto errret;
441     if (evalarg != NULL)
442     {
443 	// avoid that the expression gets freed when another line break follows
444 	tofree = evalarg->eval_tofree;
445 	evalarg->eval_tofree = NULL;
446     }
447 
448     *arg = skipwhite_and_linebreak(*arg, evalarg);
449     if (**arg != '}')
450     {
451 	semsg(_("E451: Expected }: %s"), *arg);
452 	goto errret;
453     }
454     ++*arg;
455 
456     if (evaluate)
457     {
458 	int	    len;
459 	int	    flags = 0;
460 	char_u	    *p;
461 	char_u	    *name = get_lambda_name();
462 
463 	fp = alloc_clear(offsetof(ufunc_T, uf_name) + STRLEN(name) + 1);
464 	if (fp == NULL)
465 	    goto errret;
466 	fp->uf_def_status = UF_NOT_COMPILED;
467 	pt = ALLOC_CLEAR_ONE(partial_T);
468 	if (pt == NULL)
469 	    goto errret;
470 
471 	ga_init2(&newlines, (int)sizeof(char_u *), 1);
472 	if (ga_grow(&newlines, 1) == FAIL)
473 	    goto errret;
474 
475 	// Add "return " before the expression.
476 	len = 7 + (int)(end - start) + 1;
477 	p = alloc(len);
478 	if (p == NULL)
479 	    goto errret;
480 	((char_u **)(newlines.ga_data))[newlines.ga_len++] = p;
481 	STRCPY(p, "return ");
482 	vim_strncpy(p + 7, start, end - start);
483 	if (strstr((char *)p + 7, "a:") == NULL)
484 	    // No a: variables are used for sure.
485 	    flags |= FC_NOARGS;
486 
487 	fp->uf_refcount = 1;
488 	set_ufunc_name(fp, name);
489 	hash_add(&func_hashtab, UF2HIKEY(fp));
490 	fp->uf_args = newargs;
491 	ga_init(&fp->uf_def_args);
492 	fp->uf_lines = newlines;
493 	if (current_funccal != NULL && eval_lavars)
494 	{
495 	    flags |= FC_CLOSURE;
496 	    if (register_closure(fp) == FAIL)
497 		goto errret;
498 	}
499 	else
500 	    fp->uf_scoped = NULL;
501 
502 #ifdef FEAT_PROFILE
503 	if (prof_def_func())
504 	    func_do_profile(fp);
505 #endif
506 	if (sandbox)
507 	    flags |= FC_SANDBOX;
508 	// can be called with more args than uf_args.ga_len
509 	fp->uf_varargs = TRUE;
510 	fp->uf_flags = flags;
511 	fp->uf_calls = 0;
512 	fp->uf_script_ctx = current_sctx;
513 	fp->uf_script_ctx.sc_lnum += SOURCING_LNUM - newlines.ga_len;
514 
515 	pt->pt_func = fp;
516 	pt->pt_refcount = 1;
517 	rettv->vval.v_partial = pt;
518 	rettv->v_type = VAR_PARTIAL;
519     }
520 
521     eval_lavars_used = old_eval_lavars;
522     if (evalarg != NULL && evalarg->eval_tofree == NULL)
523 	evalarg->eval_tofree = tofree;
524     else
525 	vim_free(tofree);
526     return OK;
527 
528 errret:
529     ga_clear_strings(&newargs);
530     ga_clear_strings(&newlines);
531     vim_free(fp);
532     vim_free(pt);
533     if (evalarg != NULL && evalarg->eval_tofree == NULL)
534 	evalarg->eval_tofree = tofree;
535     else
536 	vim_free(tofree);
537     eval_lavars_used = old_eval_lavars;
538     return FAIL;
539 }
540 
541 /*
542  * Check if "name" is a variable of type VAR_FUNC.  If so, return the function
543  * name it contains, otherwise return "name".
544  * If "partialp" is not NULL, and "name" is of type VAR_PARTIAL also set
545  * "partialp".
546  */
547     char_u *
548 deref_func_name(char_u *name, int *lenp, partial_T **partialp, int no_autoload)
549 {
550     dictitem_T	*v;
551     int		cc;
552     char_u	*s;
553 
554     if (partialp != NULL)
555 	*partialp = NULL;
556 
557     cc = name[*lenp];
558     name[*lenp] = NUL;
559     v = find_var(name, NULL, no_autoload);
560     name[*lenp] = cc;
561     if (v != NULL && v->di_tv.v_type == VAR_FUNC)
562     {
563 	if (v->di_tv.vval.v_string == NULL)
564 	{
565 	    *lenp = 0;
566 	    return (char_u *)"";	// just in case
567 	}
568 	s = v->di_tv.vval.v_string;
569 	*lenp = (int)STRLEN(s);
570 	return s;
571     }
572 
573     if (v != NULL && v->di_tv.v_type == VAR_PARTIAL)
574     {
575 	partial_T *pt = v->di_tv.vval.v_partial;
576 
577 	if (pt == NULL)
578 	{
579 	    *lenp = 0;
580 	    return (char_u *)"";	// just in case
581 	}
582 	if (partialp != NULL)
583 	    *partialp = pt;
584 	s = partial_name(pt);
585 	*lenp = (int)STRLEN(s);
586 	return s;
587     }
588 
589     return name;
590 }
591 
592 /*
593  * Give an error message with a function name.  Handle <SNR> things.
594  * "ermsg" is to be passed without translation, use N_() instead of _().
595  */
596     void
597 emsg_funcname(char *ermsg, char_u *name)
598 {
599     char_u	*p;
600 
601     if (*name == K_SPECIAL)
602 	p = concat_str((char_u *)"<SNR>", name + 3);
603     else
604 	p = name;
605     semsg(_(ermsg), p);
606     if (p != name)
607 	vim_free(p);
608 }
609 
610 /*
611  * Allocate a variable for the result of a function.
612  * Return OK or FAIL.
613  */
614     int
615 get_func_tv(
616     char_u	*name,		// name of the function
617     int		len,		// length of "name" or -1 to use strlen()
618     typval_T	*rettv,
619     char_u	**arg,		// argument, pointing to the '('
620     evalarg_T	*evalarg,	// for line continuation
621     funcexe_T	*funcexe)	// various values
622 {
623     char_u	*argp;
624     int		ret = OK;
625     typval_T	argvars[MAX_FUNC_ARGS + 1];	// vars for arguments
626     int		argcount = 0;		// number of arguments found
627     int		vim9script = in_vim9script();
628 
629     /*
630      * Get the arguments.
631      */
632     argp = *arg;
633     while (argcount < MAX_FUNC_ARGS - (funcexe->partial == NULL ? 0
634 						  : funcexe->partial->pt_argc))
635     {
636 	// skip the '(' or ',' and possibly line breaks
637 	argp = skipwhite_and_linebreak(argp + 1, evalarg);
638 
639 	if (*argp == ')' || *argp == ',' || *argp == NUL)
640 	    break;
641 	if (eval1(&argp, &argvars[argcount], evalarg) == FAIL)
642 	{
643 	    ret = FAIL;
644 	    break;
645 	}
646 	++argcount;
647 	// The comma should come right after the argument, but this wasn't
648 	// checked previously, thus only enforce it in Vim9 script.
649 	if (vim9script)
650 	{
651 	    if (*argp != ',' && *skipwhite(argp) == ',')
652 	    {
653 		semsg(_(e_no_white_space_allowed_before_str), ",");
654 		ret = FAIL;
655 		break;
656 	    }
657 	}
658 	else
659 	    argp = skipwhite(argp);
660 	if (*argp != ',')
661 	    break;
662 	if (vim9script && !IS_WHITE_OR_NUL(argp[1]))
663 	{
664 	    semsg(_(e_white_space_required_after_str), ",");
665 	    ret = FAIL;
666 	    break;
667 	}
668     }
669     argp = skipwhite_and_linebreak(argp, evalarg);
670     if (*argp == ')')
671 	++argp;
672     else
673 	ret = FAIL;
674 
675     if (ret == OK)
676     {
677 	int		i = 0;
678 
679 	if (get_vim_var_nr(VV_TESTING))
680 	{
681 	    // Prepare for calling test_garbagecollect_now(), need to know
682 	    // what variables are used on the call stack.
683 	    if (funcargs.ga_itemsize == 0)
684 		ga_init2(&funcargs, (int)sizeof(typval_T *), 50);
685 	    for (i = 0; i < argcount; ++i)
686 		if (ga_grow(&funcargs, 1) == OK)
687 		    ((typval_T **)funcargs.ga_data)[funcargs.ga_len++] =
688 								  &argvars[i];
689 	}
690 
691 	ret = call_func(name, len, rettv, argcount, argvars, funcexe);
692 
693 	funcargs.ga_len -= i;
694     }
695     else if (!aborting())
696     {
697 	if (argcount == MAX_FUNC_ARGS)
698 	    emsg_funcname(N_("E740: Too many arguments for function %s"), name);
699 	else
700 	    emsg_funcname(N_("E116: Invalid arguments for function %s"), name);
701     }
702 
703     while (--argcount >= 0)
704 	clear_tv(&argvars[argcount]);
705 
706     if (in_vim9script())
707 	*arg = argp;
708     else
709 	*arg = skipwhite(argp);
710     return ret;
711 }
712 
713 /*
714  * Return TRUE if "p" starts with "<SID>" or "s:".
715  * Only works if eval_fname_script() returned non-zero for "p"!
716  */
717     static int
718 eval_fname_sid(char_u *p)
719 {
720     return (*p == 's' || TOUPPER_ASC(p[2]) == 'I');
721 }
722 
723 /*
724  * In a script change <SID>name() and s:name() to K_SNR 123_name().
725  * Change <SNR>123_name() to K_SNR 123_name().
726  * Use "fname_buf[FLEN_FIXED + 1]" when it fits, otherwise allocate memory
727  * (slow).
728  */
729     char_u *
730 fname_trans_sid(char_u *name, char_u *fname_buf, char_u **tofree, int *error)
731 {
732     int		llen;
733     char_u	*fname;
734     int		i;
735 
736     llen = eval_fname_script(name);
737     if (llen > 0)
738     {
739 	fname_buf[0] = K_SPECIAL;
740 	fname_buf[1] = KS_EXTRA;
741 	fname_buf[2] = (int)KE_SNR;
742 	i = 3;
743 	if (eval_fname_sid(name))	// "<SID>" or "s:"
744 	{
745 	    if (current_sctx.sc_sid <= 0)
746 		*error = FCERR_SCRIPT;
747 	    else
748 	    {
749 		sprintf((char *)fname_buf + 3, "%ld_",
750 						    (long)current_sctx.sc_sid);
751 		i = (int)STRLEN(fname_buf);
752 	    }
753 	}
754 	if (i + STRLEN(name + llen) < FLEN_FIXED)
755 	{
756 	    STRCPY(fname_buf + i, name + llen);
757 	    fname = fname_buf;
758 	}
759 	else
760 	{
761 	    fname = alloc(i + STRLEN(name + llen) + 1);
762 	    if (fname == NULL)
763 		*error = FCERR_OTHER;
764 	    else
765 	    {
766 		*tofree = fname;
767 		mch_memmove(fname, fname_buf, (size_t)i);
768 		STRCPY(fname + i, name + llen);
769 	    }
770 	}
771     }
772     else
773 	fname = name;
774     return fname;
775 }
776 
777 /*
778  * Find a function "name" in script "sid".
779  */
780     static ufunc_T *
781 find_func_with_sid(char_u *name, int sid)
782 {
783     hashitem_T	*hi;
784     char_u	buffer[200];
785 
786     buffer[0] = K_SPECIAL;
787     buffer[1] = KS_EXTRA;
788     buffer[2] = (int)KE_SNR;
789     vim_snprintf((char *)buffer + 3, sizeof(buffer) - 3, "%ld_%s",
790 							      (long)sid, name);
791     hi = hash_find(&func_hashtab, buffer);
792     if (!HASHITEM_EMPTY(hi))
793 	return HI2UF(hi);
794 
795     return NULL;
796 }
797 
798 /*
799  * Find a function by name, return pointer to it in ufuncs.
800  * When "is_global" is true don't find script-local or imported functions.
801  * Return NULL for unknown function.
802  */
803     ufunc_T *
804 find_func_even_dead(char_u *name, int is_global, cctx_T *cctx)
805 {
806     hashitem_T	*hi;
807     ufunc_T	*func;
808     imported_T	*imported;
809 
810     if (!is_global)
811     {
812 	char_u	*after_script = NULL;
813 	long	sid = 0;
814 	int	find_script_local = in_vim9script()
815 				     && eval_isnamec1(*name) && name[1] != ':';
816 
817 	if (find_script_local)
818 	{
819 	    // Find script-local function before global one.
820 	    func = find_func_with_sid(name, current_sctx.sc_sid);
821 	    if (func != NULL)
822 		return func;
823 	}
824 
825 	if (name[0] == K_SPECIAL
826 		&& name[1] == KS_EXTRA
827 		&& name[2] == KE_SNR)
828 	{
829 	    // Caller changes s: to <SNR>99_name.
830 
831 	    after_script = name + 3;
832 	    sid = getdigits(&after_script);
833 	    if (*after_script == '_')
834 		++after_script;
835 	    else
836 		after_script = NULL;
837 	}
838 	if (find_script_local || after_script != NULL)
839 	{
840 	    // Find imported function before global one.
841 	    if (after_script != NULL && sid != current_sctx.sc_sid)
842 		imported = find_imported_in_script(after_script, 0, sid);
843 	    else
844 		imported = find_imported(after_script == NULL
845 					       ? name : after_script, 0, cctx);
846 	    if (imported != NULL && imported->imp_funcname != NULL)
847 	    {
848 		hi = hash_find(&func_hashtab, imported->imp_funcname);
849 		if (!HASHITEM_EMPTY(hi))
850 		    return HI2UF(hi);
851 	    }
852 	}
853     }
854 
855     hi = hash_find(&func_hashtab,
856 				STRNCMP(name, "g:", 2) == 0 ? name + 2 : name);
857     if (!HASHITEM_EMPTY(hi))
858 	return HI2UF(hi);
859 
860     return NULL;
861 }
862 
863 /*
864  * Find a function by name, return pointer to it in ufuncs.
865  * "cctx" is passed in a :def function to find imported functions.
866  * Return NULL for unknown or dead function.
867  */
868     ufunc_T *
869 find_func(char_u *name, int is_global, cctx_T *cctx)
870 {
871     ufunc_T	*fp = find_func_even_dead(name, is_global, cctx);
872 
873     if (fp != NULL && (fp->uf_flags & FC_DEAD) == 0)
874 	return fp;
875     return NULL;
876 }
877 
878 /*
879  * Return TRUE if "ufunc" is a global function.
880  */
881     int
882 func_is_global(ufunc_T *ufunc)
883 {
884     return ufunc->uf_name[0] != K_SPECIAL;
885 }
886 
887 /*
888  * Copy the function name of "fp" to buffer "buf".
889  * "buf" must be able to hold the function name plus three bytes.
890  * Takes care of script-local function names.
891  */
892     static void
893 cat_func_name(char_u *buf, ufunc_T *fp)
894 {
895     if (!func_is_global(fp))
896     {
897 	STRCPY(buf, "<SNR>");
898 	STRCAT(buf, fp->uf_name + 3);
899     }
900     else
901 	STRCPY(buf, fp->uf_name);
902 }
903 
904 /*
905  * Add a number variable "name" to dict "dp" with value "nr".
906  */
907     static void
908 add_nr_var(
909     dict_T	*dp,
910     dictitem_T	*v,
911     char	*name,
912     varnumber_T nr)
913 {
914     STRCPY(v->di_key, name);
915     v->di_flags = DI_FLAGS_RO | DI_FLAGS_FIX;
916     hash_add(&dp->dv_hashtab, DI2HIKEY(v));
917     v->di_tv.v_type = VAR_NUMBER;
918     v->di_tv.v_lock = VAR_FIXED;
919     v->di_tv.vval.v_number = nr;
920 }
921 
922 /*
923  * Free "fc".
924  */
925     static void
926 free_funccal(funccall_T *fc)
927 {
928     int	i;
929 
930     for (i = 0; i < fc->fc_funcs.ga_len; ++i)
931     {
932 	ufunc_T *fp = ((ufunc_T **)(fc->fc_funcs.ga_data))[i];
933 
934 	// When garbage collecting a funccall_T may be freed before the
935 	// function that references it, clear its uf_scoped field.
936 	// The function may have been redefined and point to another
937 	// funccall_T, don't clear it then.
938 	if (fp != NULL && fp->uf_scoped == fc)
939 	    fp->uf_scoped = NULL;
940     }
941     ga_clear(&fc->fc_funcs);
942 
943     func_ptr_unref(fc->func);
944     vim_free(fc);
945 }
946 
947 /*
948  * Free "fc" and what it contains.
949  * Can be called only when "fc" is kept beyond the period of it called,
950  * i.e. after cleanup_function_call(fc).
951  */
952    static void
953 free_funccal_contents(funccall_T *fc)
954 {
955     listitem_T	*li;
956 
957     // Free all l: variables.
958     vars_clear(&fc->l_vars.dv_hashtab);
959 
960     // Free all a: variables.
961     vars_clear(&fc->l_avars.dv_hashtab);
962 
963     // Free the a:000 variables.
964     FOR_ALL_LIST_ITEMS(&fc->l_varlist, li)
965 	clear_tv(&li->li_tv);
966 
967     free_funccal(fc);
968 }
969 
970 /*
971  * Handle the last part of returning from a function: free the local hashtable.
972  * Unless it is still in use by a closure.
973  */
974     static void
975 cleanup_function_call(funccall_T *fc)
976 {
977     int	may_free_fc = fc->fc_refcount <= 0;
978     int	free_fc = TRUE;
979 
980     current_funccal = fc->caller;
981 
982     // Free all l: variables if not referred.
983     if (may_free_fc && fc->l_vars.dv_refcount == DO_NOT_FREE_CNT)
984 	vars_clear(&fc->l_vars.dv_hashtab);
985     else
986 	free_fc = FALSE;
987 
988     // If the a:000 list and the l: and a: dicts are not referenced and
989     // there is no closure using it, we can free the funccall_T and what's
990     // in it.
991     if (may_free_fc && fc->l_avars.dv_refcount == DO_NOT_FREE_CNT)
992 	vars_clear_ext(&fc->l_avars.dv_hashtab, FALSE);
993     else
994     {
995 	int	    todo;
996 	hashitem_T  *hi;
997 	dictitem_T  *di;
998 
999 	free_fc = FALSE;
1000 
1001 	// Make a copy of the a: variables, since we didn't do that above.
1002 	todo = (int)fc->l_avars.dv_hashtab.ht_used;
1003 	for (hi = fc->l_avars.dv_hashtab.ht_array; todo > 0; ++hi)
1004 	{
1005 	    if (!HASHITEM_EMPTY(hi))
1006 	    {
1007 		--todo;
1008 		di = HI2DI(hi);
1009 		copy_tv(&di->di_tv, &di->di_tv);
1010 	    }
1011 	}
1012     }
1013 
1014     if (may_free_fc && fc->l_varlist.lv_refcount == DO_NOT_FREE_CNT)
1015 	fc->l_varlist.lv_first = NULL;
1016     else
1017     {
1018 	listitem_T *li;
1019 
1020 	free_fc = FALSE;
1021 
1022 	// Make a copy of the a:000 items, since we didn't do that above.
1023 	FOR_ALL_LIST_ITEMS(&fc->l_varlist, li)
1024 	    copy_tv(&li->li_tv, &li->li_tv);
1025     }
1026 
1027     if (free_fc)
1028 	free_funccal(fc);
1029     else
1030     {
1031 	static int made_copy = 0;
1032 
1033 	// "fc" is still in use.  This can happen when returning "a:000",
1034 	// assigning "l:" to a global variable or defining a closure.
1035 	// Link "fc" in the list for garbage collection later.
1036 	fc->caller = previous_funccal;
1037 	previous_funccal = fc;
1038 
1039 	if (want_garbage_collect)
1040 	    // If garbage collector is ready, clear count.
1041 	    made_copy = 0;
1042 	else if (++made_copy >= (int)((4096 * 1024) / sizeof(*fc)))
1043 	{
1044 	    // We have made a lot of copies, worth 4 Mbyte.  This can happen
1045 	    // when repetitively calling a function that creates a reference to
1046 	    // itself somehow.  Call the garbage collector soon to avoid using
1047 	    // too much memory.
1048 	    made_copy = 0;
1049 	    want_garbage_collect = TRUE;
1050 	}
1051     }
1052 }
1053 
1054 /*
1055  * There are two kinds of function names:
1056  * 1. ordinary names, function defined with :function or :def
1057  * 2. numbered functions and lambdas
1058  * For the first we only count the name stored in func_hashtab as a reference,
1059  * using function() does not count as a reference, because the function is
1060  * looked up by name.
1061  */
1062     int
1063 func_name_refcount(char_u *name)
1064 {
1065     return isdigit(*name) || *name == '<';
1066 }
1067 
1068 /*
1069  * Unreference "fc": decrement the reference count and free it when it
1070  * becomes zero.  "fp" is detached from "fc".
1071  * When "force" is TRUE we are exiting.
1072  */
1073     static void
1074 funccal_unref(funccall_T *fc, ufunc_T *fp, int force)
1075 {
1076     funccall_T	**pfc;
1077     int		i;
1078 
1079     if (fc == NULL)
1080 	return;
1081 
1082     if (--fc->fc_refcount <= 0 && (force || (
1083 		fc->l_varlist.lv_refcount == DO_NOT_FREE_CNT
1084 		&& fc->l_vars.dv_refcount == DO_NOT_FREE_CNT
1085 		&& fc->l_avars.dv_refcount == DO_NOT_FREE_CNT)))
1086 	for (pfc = &previous_funccal; *pfc != NULL; pfc = &(*pfc)->caller)
1087 	{
1088 	    if (fc == *pfc)
1089 	    {
1090 		*pfc = fc->caller;
1091 		free_funccal_contents(fc);
1092 		return;
1093 	    }
1094 	}
1095     for (i = 0; i < fc->fc_funcs.ga_len; ++i)
1096 	if (((ufunc_T **)(fc->fc_funcs.ga_data))[i] == fp)
1097 	    ((ufunc_T **)(fc->fc_funcs.ga_data))[i] = NULL;
1098 }
1099 
1100 /*
1101  * Remove the function from the function hashtable.  If the function was
1102  * deleted while it still has references this was already done.
1103  * Return TRUE if the entry was deleted, FALSE if it wasn't found.
1104  */
1105     static int
1106 func_remove(ufunc_T *fp)
1107 {
1108     hashitem_T	*hi;
1109 
1110     // Return if it was already virtually deleted.
1111     if (fp->uf_flags & FC_DEAD)
1112 	return FALSE;
1113 
1114     hi = hash_find(&func_hashtab, UF2HIKEY(fp));
1115     if (!HASHITEM_EMPTY(hi))
1116     {
1117 	// When there is a def-function index do not actually remove the
1118 	// function, so we can find the index when defining the function again.
1119 	// Do remove it when it's a copy.
1120 	if (fp->uf_def_status == UF_COMPILED && (fp->uf_flags & FC_COPY) == 0)
1121 	    fp->uf_flags |= FC_DEAD;
1122 	else
1123 	    hash_remove(&func_hashtab, hi);
1124 	return TRUE;
1125     }
1126     return FALSE;
1127 }
1128 
1129     static void
1130 func_clear_items(ufunc_T *fp)
1131 {
1132     ga_clear_strings(&(fp->uf_args));
1133     ga_clear_strings(&(fp->uf_def_args));
1134     ga_clear_strings(&(fp->uf_lines));
1135     VIM_CLEAR(fp->uf_arg_types);
1136     VIM_CLEAR(fp->uf_def_arg_idx);
1137     VIM_CLEAR(fp->uf_va_name);
1138     clear_type_list(&fp->uf_type_list);
1139 
1140 #ifdef FEAT_LUA
1141     if (fp->uf_cb_free != NULL)
1142     {
1143 	fp->uf_cb_free(fp->uf_cb_state);
1144 	fp->uf_cb_free = NULL;
1145     }
1146 
1147     fp->uf_cb_state = NULL;
1148     fp->uf_cb = NULL;
1149 #endif
1150 #ifdef FEAT_PROFILE
1151     VIM_CLEAR(fp->uf_tml_count);
1152     VIM_CLEAR(fp->uf_tml_total);
1153     VIM_CLEAR(fp->uf_tml_self);
1154 #endif
1155 }
1156 
1157 /*
1158  * Free all things that a function contains.  Does not free the function
1159  * itself, use func_free() for that.
1160  * When "force" is TRUE we are exiting.
1161  */
1162     static void
1163 func_clear(ufunc_T *fp, int force)
1164 {
1165     if (fp->uf_cleared)
1166 	return;
1167     fp->uf_cleared = TRUE;
1168 
1169     // clear this function
1170     func_clear_items(fp);
1171     funccal_unref(fp->uf_scoped, fp, force);
1172     if ((fp->uf_flags & FC_COPY) == 0)
1173 	clear_def_function(fp);
1174 }
1175 
1176 /*
1177  * Free a function and remove it from the list of functions.  Does not free
1178  * what a function contains, call func_clear() first.
1179  * When "force" is TRUE we are exiting.
1180  * Returns OK when the function was actually freed.
1181  */
1182     static int
1183 func_free(ufunc_T *fp, int force)
1184 {
1185     // Only remove it when not done already, otherwise we would remove a newer
1186     // version of the function with the same name.
1187     if ((fp->uf_flags & (FC_DELETED | FC_REMOVED)) == 0)
1188 	func_remove(fp);
1189 
1190     if ((fp->uf_flags & FC_DEAD) == 0 || force)
1191     {
1192 	if (fp->uf_dfunc_idx > 0)
1193 	    unlink_def_function(fp);
1194 	VIM_CLEAR(fp->uf_name_exp);
1195 	vim_free(fp);
1196 	return OK;
1197     }
1198     return FAIL;
1199 }
1200 
1201 /*
1202  * Free all things that a function contains and free the function itself.
1203  * When "force" is TRUE we are exiting.
1204  */
1205     static void
1206 func_clear_free(ufunc_T *fp, int force)
1207 {
1208     func_clear(fp, force);
1209     if (force || fp->uf_dfunc_idx == 0 || func_name_refcount(fp->uf_name)
1210 						   || (fp->uf_flags & FC_COPY))
1211 	func_free(fp, force);
1212     else
1213 	fp->uf_flags |= FC_DEAD;
1214 }
1215 
1216 /*
1217  * Copy already defined function "lambda" to a new function with name "global".
1218  * This is for when a compiled function defines a global function.
1219  */
1220     void
1221 copy_func(char_u *lambda, char_u *global)
1222 {
1223     ufunc_T *ufunc = find_func_even_dead(lambda, TRUE, NULL);
1224     ufunc_T *fp;
1225 
1226     if (ufunc == NULL)
1227 	semsg(_(e_lambda_function_not_found_str), lambda);
1228     else
1229     {
1230 	// TODO: handle ! to overwrite
1231 	fp = find_func(global, TRUE, NULL);
1232 	if (fp != NULL)
1233 	{
1234 	    semsg(_(e_funcexts), global);
1235 	    return;
1236 	}
1237 
1238 	fp = alloc_clear(offsetof(ufunc_T, uf_name) + STRLEN(global) + 1);
1239 	if (fp == NULL)
1240 	    return;
1241 
1242 	fp->uf_varargs = ufunc->uf_varargs;
1243 	fp->uf_flags = (ufunc->uf_flags & ~FC_VIM9) | FC_COPY;
1244 	fp->uf_def_status = ufunc->uf_def_status;
1245 	fp->uf_dfunc_idx = ufunc->uf_dfunc_idx;
1246 	if (ga_copy_strings(&ufunc->uf_args, &fp->uf_args) == FAIL
1247 		|| ga_copy_strings(&ufunc->uf_def_args, &fp->uf_def_args)
1248 									== FAIL
1249 		|| ga_copy_strings(&ufunc->uf_lines, &fp->uf_lines) == FAIL)
1250 	    goto failed;
1251 
1252 	fp->uf_name_exp = ufunc->uf_name_exp == NULL ? NULL
1253 					     : vim_strsave(ufunc->uf_name_exp);
1254 	if (ufunc->uf_arg_types != NULL)
1255 	{
1256 	    fp->uf_arg_types = ALLOC_MULT(type_T *, fp->uf_args.ga_len);
1257 	    if (fp->uf_arg_types == NULL)
1258 		goto failed;
1259 	    mch_memmove(fp->uf_arg_types, ufunc->uf_arg_types,
1260 					sizeof(type_T *) * fp->uf_args.ga_len);
1261 	}
1262 	if (ufunc->uf_def_arg_idx != NULL)
1263 	{
1264 	    fp->uf_def_arg_idx = ALLOC_MULT(int, fp->uf_def_args.ga_len + 1);
1265 	    if (fp->uf_def_arg_idx == NULL)
1266 		goto failed;
1267 	    mch_memmove(fp->uf_def_arg_idx, ufunc->uf_def_arg_idx,
1268 				     sizeof(int) * fp->uf_def_args.ga_len + 1);
1269 	}
1270 	if (ufunc->uf_va_name != NULL)
1271 	{
1272 	    fp->uf_va_name = vim_strsave(ufunc->uf_va_name);
1273 	    if (fp->uf_va_name == NULL)
1274 		goto failed;
1275 	}
1276 
1277 	fp->uf_refcount = 1;
1278 	STRCPY(fp->uf_name, global);
1279 	hash_add(&func_hashtab, UF2HIKEY(fp));
1280     }
1281     return;
1282 
1283 failed:
1284     func_clear_free(fp, TRUE);
1285 }
1286 
1287 
1288 /*
1289  * Call a user function.
1290  */
1291     static void
1292 call_user_func(
1293     ufunc_T	*fp,		// pointer to function
1294     int		argcount,	// nr of args
1295     typval_T	*argvars,	// arguments
1296     typval_T	*rettv,		// return value
1297     funcexe_T	*funcexe,	// context
1298     dict_T	*selfdict)	// Dictionary for "self"
1299 {
1300     sctx_T	save_current_sctx;
1301     int		using_sandbox = FALSE;
1302     funccall_T	*fc;
1303     int		save_did_emsg;
1304     int		default_arg_err = FALSE;
1305     static int	depth = 0;
1306     dictitem_T	*v;
1307     int		fixvar_idx = 0;	// index in fixvar[]
1308     int		i;
1309     int		ai;
1310     int		islambda = FALSE;
1311     char_u	numbuf[NUMBUFLEN];
1312     char_u	*name;
1313 #ifdef FEAT_PROFILE
1314     proftime_T	wait_start;
1315     proftime_T	call_start;
1316     int		started_profiling = FALSE;
1317 #endif
1318     ESTACK_CHECK_DECLARATION
1319 
1320     // If depth of calling is getting too high, don't execute the function
1321     if (depth >= p_mfd)
1322     {
1323 	emsg(_("E132: Function call depth is higher than 'maxfuncdepth'"));
1324 	rettv->v_type = VAR_NUMBER;
1325 	rettv->vval.v_number = -1;
1326 	return;
1327     }
1328     ++depth;
1329 
1330     line_breakcheck();		// check for CTRL-C hit
1331 
1332     fc = ALLOC_CLEAR_ONE(funccall_T);
1333     if (fc == NULL)
1334 	return;
1335     fc->caller = current_funccal;
1336     current_funccal = fc;
1337     fc->func = fp;
1338     fc->rettv = rettv;
1339     fc->level = ex_nesting_level;
1340     // Check if this function has a breakpoint.
1341     fc->breakpoint = dbg_find_breakpoint(FALSE, fp->uf_name, (linenr_T)0);
1342     fc->dbg_tick = debug_tick;
1343     // Set up fields for closure.
1344     ga_init2(&fc->fc_funcs, sizeof(ufunc_T *), 1);
1345     func_ptr_ref(fp);
1346 
1347     if (fp->uf_def_status != UF_NOT_COMPILED)
1348     {
1349 	// Execute the function, possibly compiling it first.
1350 	call_def_function(fp, argcount, argvars, funcexe->partial, rettv);
1351 	--depth;
1352 	current_funccal = fc->caller;
1353 	free_funccal(fc);
1354 	return;
1355     }
1356 
1357     if (STRNCMP(fp->uf_name, "<lambda>", 8) == 0)
1358 	islambda = TRUE;
1359 
1360     /*
1361      * Note about using fc->fixvar[]: This is an array of FIXVAR_CNT variables
1362      * with names up to VAR_SHORT_LEN long.  This avoids having to alloc/free
1363      * each argument variable and saves a lot of time.
1364      */
1365     /*
1366      * Init l: variables.
1367      */
1368     init_var_dict(&fc->l_vars, &fc->l_vars_var, VAR_DEF_SCOPE);
1369     if (selfdict != NULL)
1370     {
1371 	// Set l:self to "selfdict".  Use "name" to avoid a warning from
1372 	// some compiler that checks the destination size.
1373 	v = &fc->fixvar[fixvar_idx++].var;
1374 	name = v->di_key;
1375 	STRCPY(name, "self");
1376 	v->di_flags = DI_FLAGS_RO | DI_FLAGS_FIX;
1377 	hash_add(&fc->l_vars.dv_hashtab, DI2HIKEY(v));
1378 	v->di_tv.v_type = VAR_DICT;
1379 	v->di_tv.v_lock = 0;
1380 	v->di_tv.vval.v_dict = selfdict;
1381 	++selfdict->dv_refcount;
1382     }
1383 
1384     /*
1385      * Init a: variables, unless none found (in lambda).
1386      * Set a:0 to "argcount" less number of named arguments, if >= 0.
1387      * Set a:000 to a list with room for the "..." arguments.
1388      */
1389     init_var_dict(&fc->l_avars, &fc->l_avars_var, VAR_SCOPE);
1390     if ((fp->uf_flags & FC_NOARGS) == 0)
1391 	add_nr_var(&fc->l_avars, &fc->fixvar[fixvar_idx++].var, "0",
1392 				(varnumber_T)(argcount >= fp->uf_args.ga_len
1393 				    ? argcount - fp->uf_args.ga_len : 0));
1394     fc->l_avars.dv_lock = VAR_FIXED;
1395     if ((fp->uf_flags & FC_NOARGS) == 0)
1396     {
1397 	// Use "name" to avoid a warning from some compiler that checks the
1398 	// destination size.
1399 	v = &fc->fixvar[fixvar_idx++].var;
1400 	name = v->di_key;
1401 	STRCPY(name, "000");
1402 	v->di_flags = DI_FLAGS_RO | DI_FLAGS_FIX;
1403 	hash_add(&fc->l_avars.dv_hashtab, DI2HIKEY(v));
1404 	v->di_tv.v_type = VAR_LIST;
1405 	v->di_tv.v_lock = VAR_FIXED;
1406 	v->di_tv.vval.v_list = &fc->l_varlist;
1407     }
1408     CLEAR_FIELD(fc->l_varlist);
1409     fc->l_varlist.lv_refcount = DO_NOT_FREE_CNT;
1410     fc->l_varlist.lv_lock = VAR_FIXED;
1411 
1412     /*
1413      * Set a:firstline to "firstline" and a:lastline to "lastline".
1414      * Set a:name to named arguments.
1415      * Set a:N to the "..." arguments.
1416      * Skipped when no a: variables used (in lambda).
1417      */
1418     if ((fp->uf_flags & FC_NOARGS) == 0)
1419     {
1420 	add_nr_var(&fc->l_avars, &fc->fixvar[fixvar_idx++].var, "firstline",
1421 					      (varnumber_T)funcexe->firstline);
1422 	add_nr_var(&fc->l_avars, &fc->fixvar[fixvar_idx++].var, "lastline",
1423 					       (varnumber_T)funcexe->lastline);
1424     }
1425     for (i = 0; i < argcount || i < fp->uf_args.ga_len; ++i)
1426     {
1427 	int	    addlocal = FALSE;
1428 	typval_T    def_rettv;
1429 	int	    isdefault = FALSE;
1430 
1431 	ai = i - fp->uf_args.ga_len;
1432 	if (ai < 0)
1433 	{
1434 	    // named argument a:name
1435 	    name = FUNCARG(fp, i);
1436 	    if (islambda)
1437 		addlocal = TRUE;
1438 
1439 	    // evaluate named argument default expression
1440 	    isdefault = ai + fp->uf_def_args.ga_len >= 0
1441 		       && (i >= argcount || (argvars[i].v_type == VAR_SPECIAL
1442 				   && argvars[i].vval.v_number == VVAL_NONE));
1443 	    if (isdefault)
1444 	    {
1445 		char_u	    *default_expr = NULL;
1446 		def_rettv.v_type = VAR_NUMBER;
1447 		def_rettv.vval.v_number = -1;
1448 
1449 		default_expr = ((char_u **)(fp->uf_def_args.ga_data))
1450 						 [ai + fp->uf_def_args.ga_len];
1451 		if (eval1(&default_expr, &def_rettv, &EVALARG_EVALUATE) == FAIL)
1452 		{
1453 		    default_arg_err = 1;
1454 		    break;
1455 		}
1456 	    }
1457 	}
1458 	else
1459 	{
1460 	    if ((fp->uf_flags & FC_NOARGS) != 0)
1461 		// Bail out if no a: arguments used (in lambda).
1462 		break;
1463 
1464 	    // "..." argument a:1, a:2, etc.
1465 	    sprintf((char *)numbuf, "%d", ai + 1);
1466 	    name = numbuf;
1467 	}
1468 	if (fixvar_idx < FIXVAR_CNT && STRLEN(name) <= VAR_SHORT_LEN)
1469 	{
1470 	    v = &fc->fixvar[fixvar_idx++].var;
1471 	    v->di_flags = DI_FLAGS_RO | DI_FLAGS_FIX;
1472 	    STRCPY(v->di_key, name);
1473 	}
1474 	else
1475 	{
1476 	    v = dictitem_alloc(name);
1477 	    if (v == NULL)
1478 		break;
1479 	    v->di_flags |= DI_FLAGS_RO | DI_FLAGS_FIX;
1480 	}
1481 
1482 	// Note: the values are copied directly to avoid alloc/free.
1483 	// "argvars" must have VAR_FIXED for v_lock.
1484 	v->di_tv = isdefault ? def_rettv : argvars[i];
1485 	v->di_tv.v_lock = VAR_FIXED;
1486 
1487 	if (addlocal)
1488 	{
1489 	    // Named arguments should be accessed without the "a:" prefix in
1490 	    // lambda expressions.  Add to the l: dict.
1491 	    copy_tv(&v->di_tv, &v->di_tv);
1492 	    hash_add(&fc->l_vars.dv_hashtab, DI2HIKEY(v));
1493 	}
1494 	else
1495 	    hash_add(&fc->l_avars.dv_hashtab, DI2HIKEY(v));
1496 
1497 	if (ai >= 0 && ai < MAX_FUNC_ARGS)
1498 	{
1499 	    listitem_T *li = &fc->l_listitems[ai];
1500 
1501 	    li->li_tv = argvars[i];
1502 	    li->li_tv.v_lock = VAR_FIXED;
1503 	    list_append(&fc->l_varlist, li);
1504 	}
1505     }
1506 
1507     // Don't redraw while executing the function.
1508     ++RedrawingDisabled;
1509 
1510     if (fp->uf_flags & FC_SANDBOX)
1511     {
1512 	using_sandbox = TRUE;
1513 	++sandbox;
1514     }
1515 
1516     estack_push_ufunc(fp, 1);
1517     ESTACK_CHECK_SETUP
1518     if (p_verbose >= 12)
1519     {
1520 	++no_wait_return;
1521 	verbose_enter_scroll();
1522 
1523 	smsg(_("calling %s"), SOURCING_NAME);
1524 	if (p_verbose >= 14)
1525 	{
1526 	    char_u	buf[MSG_BUF_LEN];
1527 	    char_u	numbuf2[NUMBUFLEN];
1528 	    char_u	*tofree;
1529 	    char_u	*s;
1530 
1531 	    msg_puts("(");
1532 	    for (i = 0; i < argcount; ++i)
1533 	    {
1534 		if (i > 0)
1535 		    msg_puts(", ");
1536 		if (argvars[i].v_type == VAR_NUMBER)
1537 		    msg_outnum((long)argvars[i].vval.v_number);
1538 		else
1539 		{
1540 		    // Do not want errors such as E724 here.
1541 		    ++emsg_off;
1542 		    s = tv2string(&argvars[i], &tofree, numbuf2, 0);
1543 		    --emsg_off;
1544 		    if (s != NULL)
1545 		    {
1546 			if (vim_strsize(s) > MSG_BUF_CLEN)
1547 			{
1548 			    trunc_string(s, buf, MSG_BUF_CLEN, MSG_BUF_LEN);
1549 			    s = buf;
1550 			}
1551 			msg_puts((char *)s);
1552 			vim_free(tofree);
1553 		    }
1554 		}
1555 	    }
1556 	    msg_puts(")");
1557 	}
1558 	msg_puts("\n");   // don't overwrite this either
1559 
1560 	verbose_leave_scroll();
1561 	--no_wait_return;
1562     }
1563 #ifdef FEAT_PROFILE
1564     if (do_profiling == PROF_YES)
1565     {
1566 	if (!fp->uf_profiling && has_profiling(FALSE, fp->uf_name, NULL))
1567 	{
1568 	    started_profiling = TRUE;
1569 	    func_do_profile(fp);
1570 	}
1571 	if (fp->uf_profiling
1572 		    || (fc->caller != NULL && fc->caller->func->uf_profiling))
1573 	{
1574 	    ++fp->uf_tm_count;
1575 	    profile_start(&call_start);
1576 	    profile_zero(&fp->uf_tm_children);
1577 	}
1578 	script_prof_save(&wait_start);
1579     }
1580 #endif
1581 
1582     save_current_sctx = current_sctx;
1583     current_sctx = fp->uf_script_ctx;
1584     save_did_emsg = did_emsg;
1585     did_emsg = FALSE;
1586 
1587     if (default_arg_err && (fp->uf_flags & FC_ABORT))
1588 	did_emsg = TRUE;
1589     else if (islambda)
1590     {
1591 	char_u *p = *(char_u **)fp->uf_lines.ga_data + 7;
1592 
1593 	// A Lambda always has the command "return {expr}".  It is much faster
1594 	// to evaluate {expr} directly.
1595 	++ex_nesting_level;
1596 	(void)eval1(&p, rettv, &EVALARG_EVALUATE);
1597 	--ex_nesting_level;
1598     }
1599     else
1600 	// call do_cmdline() to execute the lines
1601 	do_cmdline(NULL, get_func_line, (void *)fc,
1602 				     DOCMD_NOWAIT|DOCMD_VERBOSE|DOCMD_REPEAT);
1603 
1604     --RedrawingDisabled;
1605 
1606     // when the function was aborted because of an error, return -1
1607     if ((did_emsg && (fp->uf_flags & FC_ABORT)) || rettv->v_type == VAR_UNKNOWN)
1608     {
1609 	clear_tv(rettv);
1610 	rettv->v_type = VAR_NUMBER;
1611 	rettv->vval.v_number = -1;
1612     }
1613 
1614 #ifdef FEAT_PROFILE
1615     if (do_profiling == PROF_YES && (fp->uf_profiling
1616 		    || (fc->caller != NULL && fc->caller->func->uf_profiling)))
1617     {
1618 	profile_end(&call_start);
1619 	profile_sub_wait(&wait_start, &call_start);
1620 	profile_add(&fp->uf_tm_total, &call_start);
1621 	profile_self(&fp->uf_tm_self, &call_start, &fp->uf_tm_children);
1622 	if (fc->caller != NULL && fc->caller->func->uf_profiling)
1623 	{
1624 	    profile_add(&fc->caller->func->uf_tm_children, &call_start);
1625 	    profile_add(&fc->caller->func->uf_tml_children, &call_start);
1626 	}
1627 	if (started_profiling)
1628 	    // make a ":profdel func" stop profiling the function
1629 	    fp->uf_profiling = FALSE;
1630     }
1631 #endif
1632 
1633     // when being verbose, mention the return value
1634     if (p_verbose >= 12)
1635     {
1636 	++no_wait_return;
1637 	verbose_enter_scroll();
1638 
1639 	if (aborting())
1640 	    smsg(_("%s aborted"), SOURCING_NAME);
1641 	else if (fc->rettv->v_type == VAR_NUMBER)
1642 	    smsg(_("%s returning #%ld"), SOURCING_NAME,
1643 					       (long)fc->rettv->vval.v_number);
1644 	else
1645 	{
1646 	    char_u	buf[MSG_BUF_LEN];
1647 	    char_u	numbuf2[NUMBUFLEN];
1648 	    char_u	*tofree;
1649 	    char_u	*s;
1650 
1651 	    // The value may be very long.  Skip the middle part, so that we
1652 	    // have some idea how it starts and ends. smsg() would always
1653 	    // truncate it at the end. Don't want errors such as E724 here.
1654 	    ++emsg_off;
1655 	    s = tv2string(fc->rettv, &tofree, numbuf2, 0);
1656 	    --emsg_off;
1657 	    if (s != NULL)
1658 	    {
1659 		if (vim_strsize(s) > MSG_BUF_CLEN)
1660 		{
1661 		    trunc_string(s, buf, MSG_BUF_CLEN, MSG_BUF_LEN);
1662 		    s = buf;
1663 		}
1664 		smsg(_("%s returning %s"), SOURCING_NAME, s);
1665 		vim_free(tofree);
1666 	    }
1667 	}
1668 	msg_puts("\n");   // don't overwrite this either
1669 
1670 	verbose_leave_scroll();
1671 	--no_wait_return;
1672     }
1673 
1674     ESTACK_CHECK_NOW
1675     estack_pop();
1676     current_sctx = save_current_sctx;
1677 #ifdef FEAT_PROFILE
1678     if (do_profiling == PROF_YES)
1679 	script_prof_restore(&wait_start);
1680 #endif
1681     if (using_sandbox)
1682 	--sandbox;
1683 
1684     if (p_verbose >= 12 && SOURCING_NAME != NULL)
1685     {
1686 	++no_wait_return;
1687 	verbose_enter_scroll();
1688 
1689 	smsg(_("continuing in %s"), SOURCING_NAME);
1690 	msg_puts("\n");   // don't overwrite this either
1691 
1692 	verbose_leave_scroll();
1693 	--no_wait_return;
1694     }
1695 
1696     did_emsg |= save_did_emsg;
1697     --depth;
1698 
1699     cleanup_function_call(fc);
1700 }
1701 
1702 /*
1703  * Call a user function after checking the arguments.
1704  */
1705     int
1706 call_user_func_check(
1707 	ufunc_T	    *fp,
1708 	int	    argcount,
1709 	typval_T    *argvars,
1710 	typval_T    *rettv,
1711 	funcexe_T   *funcexe,
1712 	dict_T	    *selfdict)
1713 {
1714     int error;
1715     int regular_args = fp->uf_args.ga_len;
1716 
1717     if (fp->uf_flags & FC_RANGE && funcexe->doesrange != NULL)
1718 	*funcexe->doesrange = TRUE;
1719     if (argcount < regular_args - fp->uf_def_args.ga_len)
1720 	error = FCERR_TOOFEW;
1721     else if (!has_varargs(fp) && argcount > regular_args)
1722 	error = FCERR_TOOMANY;
1723     else if ((fp->uf_flags & FC_DICT) && selfdict == NULL)
1724 	error = FCERR_DICT;
1725     else
1726     {
1727 	int		did_save_redo = FALSE;
1728 	save_redo_T	save_redo;
1729 
1730 	/*
1731 	 * Call the user function.
1732 	 * Save and restore search patterns, script variables and
1733 	 * redo buffer.
1734 	 */
1735 	save_search_patterns();
1736 	if (!ins_compl_active())
1737 	{
1738 	    saveRedobuff(&save_redo);
1739 	    did_save_redo = TRUE;
1740 	}
1741 	++fp->uf_calls;
1742 	call_user_func(fp, argcount, argvars, rettv, funcexe,
1743 				   (fp->uf_flags & FC_DICT) ? selfdict : NULL);
1744 	if (--fp->uf_calls <= 0 && fp->uf_refcount <= 0)
1745 	    // Function was unreferenced while being used, free it now.
1746 	    func_clear_free(fp, FALSE);
1747 	if (did_save_redo)
1748 	    restoreRedobuff(&save_redo);
1749 	restore_search_patterns();
1750 	error = FCERR_NONE;
1751     }
1752     return error;
1753 }
1754 
1755 static funccal_entry_T *funccal_stack = NULL;
1756 
1757 /*
1758  * Save the current function call pointer, and set it to NULL.
1759  * Used when executing autocommands and for ":source".
1760  */
1761     void
1762 save_funccal(funccal_entry_T *entry)
1763 {
1764     entry->top_funccal = current_funccal;
1765     entry->next = funccal_stack;
1766     funccal_stack = entry;
1767     current_funccal = NULL;
1768 }
1769 
1770     void
1771 restore_funccal(void)
1772 {
1773     if (funccal_stack == NULL)
1774 	iemsg("INTERNAL: restore_funccal()");
1775     else
1776     {
1777 	current_funccal = funccal_stack->top_funccal;
1778 	funccal_stack = funccal_stack->next;
1779     }
1780 }
1781 
1782     funccall_T *
1783 get_current_funccal(void)
1784 {
1785     return current_funccal;
1786 }
1787 
1788 /*
1789  * Mark all functions of script "sid" as deleted.
1790  */
1791     void
1792 delete_script_functions(int sid)
1793 {
1794     hashitem_T	*hi;
1795     ufunc_T	*fp;
1796     long_u	todo = 1;
1797     char_u	buf[30];
1798     size_t	len;
1799 
1800     buf[0] = K_SPECIAL;
1801     buf[1] = KS_EXTRA;
1802     buf[2] = (int)KE_SNR;
1803     sprintf((char *)buf + 3, "%d_", sid);
1804     len = STRLEN(buf);
1805 
1806     while (todo > 0)
1807     {
1808 	todo = func_hashtab.ht_used;
1809 	for (hi = func_hashtab.ht_array; todo > 0; ++hi)
1810 	    if (!HASHITEM_EMPTY(hi))
1811 	    {
1812 		fp = HI2UF(hi);
1813 		if (STRNCMP(fp->uf_name, buf, len) == 0)
1814 		{
1815 		    int changed = func_hashtab.ht_changed;
1816 
1817 		    fp->uf_flags |= FC_DEAD;
1818 		    func_clear(fp, TRUE);
1819 		    // When clearing a function another function can be cleared
1820 		    // as a side effect.  When that happens start over.
1821 		    if (changed != func_hashtab.ht_changed)
1822 			break;
1823 		}
1824 		--todo;
1825 	    }
1826     }
1827 }
1828 
1829 #if defined(EXITFREE) || defined(PROTO)
1830     void
1831 free_all_functions(void)
1832 {
1833     hashitem_T	*hi;
1834     ufunc_T	*fp;
1835     long_u	skipped = 0;
1836     long_u	todo = 1;
1837     int		changed;
1838 
1839     // Clean up the current_funccal chain and the funccal stack.
1840     while (current_funccal != NULL)
1841     {
1842 	clear_tv(current_funccal->rettv);
1843 	cleanup_function_call(current_funccal);
1844 	if (current_funccal == NULL && funccal_stack != NULL)
1845 	    restore_funccal();
1846     }
1847 
1848     // First clear what the functions contain.  Since this may lower the
1849     // reference count of a function, it may also free a function and change
1850     // the hash table. Restart if that happens.
1851     while (todo > 0)
1852     {
1853 	todo = func_hashtab.ht_used;
1854 	for (hi = func_hashtab.ht_array; todo > 0; ++hi)
1855 	    if (!HASHITEM_EMPTY(hi))
1856 	    {
1857 		// clear the def function index now
1858 		fp = HI2UF(hi);
1859 		fp->uf_flags &= ~FC_DEAD;
1860 		fp->uf_def_status = UF_NOT_COMPILED;
1861 
1862 		// Only free functions that are not refcounted, those are
1863 		// supposed to be freed when no longer referenced.
1864 		if (func_name_refcount(fp->uf_name))
1865 		    ++skipped;
1866 		else
1867 		{
1868 		    changed = func_hashtab.ht_changed;
1869 		    func_clear(fp, TRUE);
1870 		    if (changed != func_hashtab.ht_changed)
1871 		    {
1872 			skipped = 0;
1873 			break;
1874 		    }
1875 		}
1876 		--todo;
1877 	    }
1878     }
1879 
1880     // Now actually free the functions.  Need to start all over every time,
1881     // because func_free() may change the hash table.
1882     skipped = 0;
1883     while (func_hashtab.ht_used > skipped)
1884     {
1885 	todo = func_hashtab.ht_used;
1886 	for (hi = func_hashtab.ht_array; todo > 0; ++hi)
1887 	    if (!HASHITEM_EMPTY(hi))
1888 	    {
1889 		--todo;
1890 		// Only free functions that are not refcounted, those are
1891 		// supposed to be freed when no longer referenced.
1892 		fp = HI2UF(hi);
1893 		if (func_name_refcount(fp->uf_name))
1894 		    ++skipped;
1895 		else
1896 		{
1897 		    if (func_free(fp, FALSE) == OK)
1898 		    {
1899 			skipped = 0;
1900 			break;
1901 		    }
1902 		    // did not actually free it
1903 		    ++skipped;
1904 		}
1905 	    }
1906     }
1907     if (skipped == 0)
1908 	hash_clear(&func_hashtab);
1909 
1910     free_def_functions();
1911 }
1912 #endif
1913 
1914 /*
1915  * Return TRUE if "name" looks like a builtin function name: starts with a
1916  * lower case letter and doesn't contain AUTOLOAD_CHAR or ':'.
1917  * "len" is the length of "name", or -1 for NUL terminated.
1918  */
1919     int
1920 builtin_function(char_u *name, int len)
1921 {
1922     char_u *p;
1923 
1924     if (!ASCII_ISLOWER(name[0]) || name[1] == ':')
1925 	return FALSE;
1926     p = vim_strchr(name, AUTOLOAD_CHAR);
1927     return p == NULL || (len > 0 && p > name + len);
1928 }
1929 
1930     int
1931 func_call(
1932     char_u	*name,
1933     typval_T	*args,
1934     partial_T	*partial,
1935     dict_T	*selfdict,
1936     typval_T	*rettv)
1937 {
1938     list_T	*l = args->vval.v_list;
1939     listitem_T	*item;
1940     typval_T	argv[MAX_FUNC_ARGS + 1];
1941     int		argc = 0;
1942     int		r = 0;
1943 
1944     CHECK_LIST_MATERIALIZE(l);
1945     FOR_ALL_LIST_ITEMS(l, item)
1946     {
1947 	if (argc == MAX_FUNC_ARGS - (partial == NULL ? 0 : partial->pt_argc))
1948 	{
1949 	    emsg(_("E699: Too many arguments"));
1950 	    break;
1951 	}
1952 	// Make a copy of each argument.  This is needed to be able to set
1953 	// v_lock to VAR_FIXED in the copy without changing the original list.
1954 	copy_tv(&item->li_tv, &argv[argc++]);
1955     }
1956 
1957     if (item == NULL)
1958     {
1959 	funcexe_T funcexe;
1960 
1961 	CLEAR_FIELD(funcexe);
1962 	funcexe.firstline = curwin->w_cursor.lnum;
1963 	funcexe.lastline = curwin->w_cursor.lnum;
1964 	funcexe.evaluate = TRUE;
1965 	funcexe.partial = partial;
1966 	funcexe.selfdict = selfdict;
1967 	r = call_func(name, -1, rettv, argc, argv, &funcexe);
1968     }
1969 
1970     // Free the arguments.
1971     while (argc > 0)
1972 	clear_tv(&argv[--argc]);
1973 
1974     return r;
1975 }
1976 
1977 static int callback_depth = 0;
1978 
1979     int
1980 get_callback_depth(void)
1981 {
1982     return callback_depth;
1983 }
1984 
1985 /*
1986  * Invoke call_func() with a callback.
1987  */
1988     int
1989 call_callback(
1990     callback_T	*callback,
1991     int		len,		// length of "name" or -1 to use strlen()
1992     typval_T	*rettv,		// return value goes here
1993     int		argcount,	// number of "argvars"
1994     typval_T	*argvars)	// vars for arguments, must have "argcount"
1995 				// PLUS ONE elements!
1996 {
1997     funcexe_T	funcexe;
1998     int		ret;
1999 
2000     CLEAR_FIELD(funcexe);
2001     funcexe.evaluate = TRUE;
2002     funcexe.partial = callback->cb_partial;
2003     ++callback_depth;
2004     ret = call_func(callback->cb_name, len, rettv, argcount, argvars, &funcexe);
2005     --callback_depth;
2006     return ret;
2007 }
2008 
2009 /*
2010  * Give an error message for the result of a function.
2011  * Nothing if "error" is FCERR_NONE.
2012  */
2013     void
2014 user_func_error(int error, char_u *name)
2015 {
2016     switch (error)
2017     {
2018 	case FCERR_UNKNOWN:
2019 		emsg_funcname(e_unknownfunc, name);
2020 		break;
2021 	case FCERR_NOTMETHOD:
2022 		emsg_funcname(
2023 			N_("E276: Cannot use function as a method: %s"), name);
2024 		break;
2025 	case FCERR_DELETED:
2026 		emsg_funcname(N_(e_func_deleted), name);
2027 		break;
2028 	case FCERR_TOOMANY:
2029 		emsg_funcname((char *)e_toomanyarg, name);
2030 		break;
2031 	case FCERR_TOOFEW:
2032 		emsg_funcname((char *)e_toofewarg, name);
2033 		break;
2034 	case FCERR_SCRIPT:
2035 		emsg_funcname(
2036 		    N_("E120: Using <SID> not in a script context: %s"), name);
2037 		break;
2038 	case FCERR_DICT:
2039 		emsg_funcname(
2040 		      N_("E725: Calling dict function without Dictionary: %s"),
2041 			name);
2042 		break;
2043     }
2044 }
2045 
2046 /*
2047  * Call a function with its resolved parameters
2048  *
2049  * Return FAIL when the function can't be called,  OK otherwise.
2050  * Also returns OK when an error was encountered while executing the function.
2051  */
2052     int
2053 call_func(
2054     char_u	*funcname,	// name of the function
2055     int		len,		// length of "name" or -1 to use strlen()
2056     typval_T	*rettv,		// return value goes here
2057     int		argcount_in,	// number of "argvars"
2058     typval_T	*argvars_in,	// vars for arguments, must have "argcount"
2059 				// PLUS ONE elements!
2060     funcexe_T	*funcexe)	// more arguments
2061 {
2062     int		ret = FAIL;
2063     int		error = FCERR_NONE;
2064     int		i;
2065     ufunc_T	*fp = NULL;
2066     char_u	fname_buf[FLEN_FIXED + 1];
2067     char_u	*tofree = NULL;
2068     char_u	*fname = NULL;
2069     char_u	*name = NULL;
2070     int		argcount = argcount_in;
2071     typval_T	*argvars = argvars_in;
2072     dict_T	*selfdict = funcexe->selfdict;
2073     typval_T	argv[MAX_FUNC_ARGS + 1]; // used when "partial" or
2074 					 // "funcexe->basetv" is not NULL
2075     int		argv_clear = 0;
2076     int		argv_base = 0;
2077     partial_T	*partial = funcexe->partial;
2078 
2079     // Initialize rettv so that it is safe for caller to invoke clear_tv(rettv)
2080     // even when call_func() returns FAIL.
2081     rettv->v_type = VAR_UNKNOWN;
2082 
2083     if (partial != NULL)
2084 	fp = partial->pt_func;
2085     if (fp == NULL)
2086     {
2087 	// Make a copy of the name, if it comes from a funcref variable it
2088 	// could be changed or deleted in the called function.
2089 	name = len > 0 ? vim_strnsave(funcname, len) : vim_strsave(funcname);
2090 	if (name == NULL)
2091 	    return ret;
2092 
2093 	fname = fname_trans_sid(name, fname_buf, &tofree, &error);
2094     }
2095 
2096     if (funcexe->doesrange != NULL)
2097 	*funcexe->doesrange = FALSE;
2098 
2099     if (partial != NULL)
2100     {
2101 	// When the function has a partial with a dict and there is a dict
2102 	// argument, use the dict argument.  That is backwards compatible.
2103 	// When the dict was bound explicitly use the one from the partial.
2104 	if (partial->pt_dict != NULL && (selfdict == NULL || !partial->pt_auto))
2105 	    selfdict = partial->pt_dict;
2106 	if (error == FCERR_NONE && partial->pt_argc > 0)
2107 	{
2108 	    for (argv_clear = 0; argv_clear < partial->pt_argc; ++argv_clear)
2109 	    {
2110 		if (argv_clear + argcount_in >= MAX_FUNC_ARGS)
2111 		{
2112 		    error = FCERR_TOOMANY;
2113 		    goto theend;
2114 		}
2115 		copy_tv(&partial->pt_argv[argv_clear], &argv[argv_clear]);
2116 	    }
2117 	    for (i = 0; i < argcount_in; ++i)
2118 		argv[i + argv_clear] = argvars_in[i];
2119 	    argvars = argv;
2120 	    argcount = partial->pt_argc + argcount_in;
2121 	}
2122     }
2123 
2124     if (error == FCERR_NONE && funcexe->evaluate)
2125     {
2126 	char_u *rfname = fname;
2127 	int	is_global = FALSE;
2128 
2129 	// Skip "g:" before a function name.
2130 	if (fp == NULL && fname[0] == 'g' && fname[1] == ':')
2131 	{
2132 	    is_global = TRUE;
2133 	    rfname = fname + 2;
2134 	}
2135 
2136 	rettv->v_type = VAR_NUMBER;	// default rettv is number zero
2137 	rettv->vval.v_number = 0;
2138 	error = FCERR_UNKNOWN;
2139 
2140 	if (fp != NULL || !builtin_function(rfname, -1))
2141 	{
2142 	    /*
2143 	     * User defined function.
2144 	     */
2145 	    if (fp == NULL)
2146 		fp = find_func(rfname, is_global, NULL);
2147 
2148 	    // Trigger FuncUndefined event, may load the function.
2149 	    if (fp == NULL
2150 		    && apply_autocmds(EVENT_FUNCUNDEFINED,
2151 						    rfname, rfname, TRUE, NULL)
2152 		    && !aborting())
2153 	    {
2154 		// executed an autocommand, search for the function again
2155 		fp = find_func(rfname, is_global, NULL);
2156 	    }
2157 	    // Try loading a package.
2158 	    if (fp == NULL && script_autoload(rfname, TRUE) && !aborting())
2159 	    {
2160 		// loaded a package, search for the function again
2161 		fp = find_func(rfname, is_global, NULL);
2162 	    }
2163 	    if (fp == NULL)
2164 	    {
2165 		char_u *p = untrans_function_name(rfname);
2166 
2167 		// If using Vim9 script try not local to the script.
2168 		// Don't do this if the name starts with "s:".
2169 		if (p != NULL && (funcname[0] != 's' || funcname[1] != ':'))
2170 		    fp = find_func(p, is_global, NULL);
2171 	    }
2172 
2173 	    if (fp != NULL && (fp->uf_flags & FC_DELETED))
2174 		error = FCERR_DELETED;
2175 #ifdef FEAT_LUA
2176 	    else if (fp != NULL && (fp->uf_flags & FC_CFUNC))
2177 	    {
2178 		cfunc_T cb = fp->uf_cb;
2179 
2180 		error = (*cb)(argcount, argvars, rettv, fp->uf_cb_state);
2181 	    }
2182 #endif
2183 	    else if (fp != NULL)
2184 	    {
2185 		if (funcexe->argv_func != NULL)
2186 		    // postponed filling in the arguments, do it now
2187 		    argcount = funcexe->argv_func(argcount, argvars, argv_clear,
2188 							   fp->uf_args.ga_len);
2189 
2190 		if (funcexe->basetv != NULL)
2191 		{
2192 		    // Method call: base->Method()
2193 		    mch_memmove(&argv[1], argvars, sizeof(typval_T) * argcount);
2194 		    argv[0] = *funcexe->basetv;
2195 		    argcount++;
2196 		    argvars = argv;
2197 		    argv_base = 1;
2198 		}
2199 
2200 		error = call_user_func_check(fp, argcount, argvars, rettv,
2201 							    funcexe, selfdict);
2202 	    }
2203 	}
2204 	else if (funcexe->basetv != NULL)
2205 	{
2206 	    /*
2207 	     * expr->method(): Find the method name in the table, call its
2208 	     * implementation with the base as one of the arguments.
2209 	     */
2210 	    error = call_internal_method(fname, argcount, argvars, rettv,
2211 							      funcexe->basetv);
2212 	}
2213 	else
2214 	{
2215 	    /*
2216 	     * Find the function name in the table, call its implementation.
2217 	     */
2218 	    error = call_internal_func(fname, argcount, argvars, rettv);
2219 	}
2220 
2221 	/*
2222 	 * The function call (or "FuncUndefined" autocommand sequence) might
2223 	 * have been aborted by an error, an interrupt, or an explicitly thrown
2224 	 * exception that has not been caught so far.  This situation can be
2225 	 * tested for by calling aborting().  For an error in an internal
2226 	 * function or for the "E132" error in call_user_func(), however, the
2227 	 * throw point at which the "force_abort" flag (temporarily reset by
2228 	 * emsg()) is normally updated has not been reached yet. We need to
2229 	 * update that flag first to make aborting() reliable.
2230 	 */
2231 	update_force_abort();
2232     }
2233     if (error == FCERR_NONE)
2234 	ret = OK;
2235 
2236 theend:
2237     /*
2238      * Report an error unless the argument evaluation or function call has been
2239      * cancelled due to an aborting error, an interrupt, or an exception.
2240      */
2241     if (!aborting())
2242     {
2243 	user_func_error(error, (name != NULL) ? name : funcname);
2244     }
2245 
2246     // clear the copies made from the partial
2247     while (argv_clear > 0)
2248 	clear_tv(&argv[--argv_clear + argv_base]);
2249 
2250     vim_free(tofree);
2251     vim_free(name);
2252 
2253     return ret;
2254 }
2255 
2256     char_u *
2257 printable_func_name(ufunc_T *fp)
2258 {
2259     return fp->uf_name_exp != NULL ? fp->uf_name_exp : fp->uf_name;
2260 }
2261 
2262 /*
2263  * List the head of the function: "function name(arg1, arg2)".
2264  */
2265     static void
2266 list_func_head(ufunc_T *fp, int indent)
2267 {
2268     int		j;
2269 
2270     msg_start();
2271     if (indent)
2272 	msg_puts("   ");
2273     if (fp->uf_def_status != UF_NOT_COMPILED)
2274 	msg_puts("def ");
2275     else
2276 	msg_puts("function ");
2277     msg_puts((char *)printable_func_name(fp));
2278     msg_putchar('(');
2279     for (j = 0; j < fp->uf_args.ga_len; ++j)
2280     {
2281 	if (j)
2282 	    msg_puts(", ");
2283 	msg_puts((char *)FUNCARG(fp, j));
2284 	if (fp->uf_arg_types != NULL)
2285 	{
2286 	    char *tofree;
2287 
2288 	    msg_puts(": ");
2289 	    msg_puts(type_name(fp->uf_arg_types[j], &tofree));
2290 	    vim_free(tofree);
2291 	}
2292 	if (j >= fp->uf_args.ga_len - fp->uf_def_args.ga_len)
2293 	{
2294 	    msg_puts(" = ");
2295 	    msg_puts(((char **)(fp->uf_def_args.ga_data))
2296 		       [j - fp->uf_args.ga_len + fp->uf_def_args.ga_len]);
2297 	}
2298     }
2299     if (fp->uf_varargs)
2300     {
2301 	if (j)
2302 	    msg_puts(", ");
2303 	msg_puts("...");
2304     }
2305     if (fp->uf_va_name != NULL)
2306     {
2307 	if (j)
2308 	    msg_puts(", ");
2309 	msg_puts("...");
2310 	msg_puts((char *)fp->uf_va_name);
2311 	if (fp->uf_va_type)
2312 	{
2313 	    char *tofree;
2314 
2315 	    msg_puts(": ");
2316 	    msg_puts(type_name(fp->uf_va_type, &tofree));
2317 	    vim_free(tofree);
2318 	}
2319     }
2320     msg_putchar(')');
2321 
2322     if (fp->uf_def_status != UF_NOT_COMPILED)
2323     {
2324 	if (fp->uf_ret_type != &t_void)
2325 	{
2326 	    char *tofree;
2327 
2328 	    msg_puts(": ");
2329 	    msg_puts(type_name(fp->uf_ret_type, &tofree));
2330 	    vim_free(tofree);
2331 	}
2332     }
2333     else if (fp->uf_flags & FC_ABORT)
2334 	msg_puts(" abort");
2335     if (fp->uf_flags & FC_RANGE)
2336 	msg_puts(" range");
2337     if (fp->uf_flags & FC_DICT)
2338 	msg_puts(" dict");
2339     if (fp->uf_flags & FC_CLOSURE)
2340 	msg_puts(" closure");
2341     msg_clr_eos();
2342     if (p_verbose > 0)
2343 	last_set_msg(fp->uf_script_ctx);
2344 }
2345 
2346 /*
2347  * Get a function name, translating "<SID>" and "<SNR>".
2348  * Also handles a Funcref in a List or Dictionary.
2349  * Returns the function name in allocated memory, or NULL for failure.
2350  * Set "*is_global" to TRUE when the function must be global, unless
2351  * "is_global" is NULL.
2352  * flags:
2353  * TFN_INT:	    internal function name OK
2354  * TFN_QUIET:	    be quiet
2355  * TFN_NO_AUTOLOAD: do not use script autoloading
2356  * TFN_NO_DEREF:    do not dereference a Funcref
2357  * Advances "pp" to just after the function name (if no error).
2358  */
2359     char_u *
2360 trans_function_name(
2361     char_u	**pp,
2362     int		*is_global,
2363     int		skip,		// only find the end, don't evaluate
2364     int		flags,
2365     funcdict_T	*fdp,		// return: info about dictionary used
2366     partial_T	**partial)	// return: partial of a FuncRef
2367 {
2368     char_u	*name = NULL;
2369     char_u	*start;
2370     char_u	*end;
2371     int		lead;
2372     char_u	sid_buf[20];
2373     int		len;
2374     int		extra = 0;
2375     lval_T	lv;
2376     int		vim9script;
2377     static char *e_function_name = N_("E129: Function name required");
2378 
2379     if (fdp != NULL)
2380 	CLEAR_POINTER(fdp);
2381     start = *pp;
2382 
2383     // Check for hard coded <SNR>: already translated function ID (from a user
2384     // command).
2385     if ((*pp)[0] == K_SPECIAL && (*pp)[1] == KS_EXTRA
2386 						   && (*pp)[2] == (int)KE_SNR)
2387     {
2388 	*pp += 3;
2389 	len = get_id_len(pp) + 3;
2390 	return vim_strnsave(start, len);
2391     }
2392 
2393     // A name starting with "<SID>" or "<SNR>" is local to a script.  But
2394     // don't skip over "s:", get_lval() needs it for "s:dict.func".
2395     lead = eval_fname_script(start);
2396     if (lead > 2)
2397 	start += lead;
2398 
2399     // Note that TFN_ flags use the same values as GLV_ flags.
2400     end = get_lval(start, NULL, &lv, FALSE, skip, flags | GLV_READ_ONLY,
2401 					      lead > 2 ? 0 : FNE_CHECK_START);
2402     if (end == start)
2403     {
2404 	if (!skip)
2405 	    emsg(_(e_function_name));
2406 	goto theend;
2407     }
2408     if (end == NULL || (lv.ll_tv != NULL && (lead > 2 || lv.ll_range)))
2409     {
2410 	/*
2411 	 * Report an invalid expression in braces, unless the expression
2412 	 * evaluation has been cancelled due to an aborting error, an
2413 	 * interrupt, or an exception.
2414 	 */
2415 	if (!aborting())
2416 	{
2417 	    if (end != NULL)
2418 		semsg(_(e_invarg2), start);
2419 	}
2420 	else
2421 	    *pp = find_name_end(start, NULL, NULL, FNE_INCL_BR);
2422 	goto theend;
2423     }
2424 
2425     if (lv.ll_tv != NULL)
2426     {
2427 	if (fdp != NULL)
2428 	{
2429 	    fdp->fd_dict = lv.ll_dict;
2430 	    fdp->fd_newkey = lv.ll_newkey;
2431 	    lv.ll_newkey = NULL;
2432 	    fdp->fd_di = lv.ll_di;
2433 	}
2434 	if (lv.ll_tv->v_type == VAR_FUNC && lv.ll_tv->vval.v_string != NULL)
2435 	{
2436 	    name = vim_strsave(lv.ll_tv->vval.v_string);
2437 	    *pp = end;
2438 	}
2439 	else if (lv.ll_tv->v_type == VAR_PARTIAL
2440 					  && lv.ll_tv->vval.v_partial != NULL)
2441 	{
2442 	    name = vim_strsave(partial_name(lv.ll_tv->vval.v_partial));
2443 	    *pp = end;
2444 	    if (partial != NULL)
2445 		*partial = lv.ll_tv->vval.v_partial;
2446 	}
2447 	else
2448 	{
2449 	    if (!skip && !(flags & TFN_QUIET) && (fdp == NULL
2450 			     || lv.ll_dict == NULL || fdp->fd_newkey == NULL))
2451 		emsg(_(e_funcref));
2452 	    else
2453 		*pp = end;
2454 	    name = NULL;
2455 	}
2456 	goto theend;
2457     }
2458 
2459     if (lv.ll_name == NULL)
2460     {
2461 	// Error found, but continue after the function name.
2462 	*pp = end;
2463 	goto theend;
2464     }
2465 
2466     // Check if the name is a Funcref.  If so, use the value.
2467     if (lv.ll_exp_name != NULL)
2468     {
2469 	len = (int)STRLEN(lv.ll_exp_name);
2470 	name = deref_func_name(lv.ll_exp_name, &len, partial,
2471 						     flags & TFN_NO_AUTOLOAD);
2472 	if (name == lv.ll_exp_name)
2473 	    name = NULL;
2474     }
2475     else if (!(flags & TFN_NO_DEREF))
2476     {
2477 	len = (int)(end - *pp);
2478 	name = deref_func_name(*pp, &len, partial, flags & TFN_NO_AUTOLOAD);
2479 	if (name == *pp)
2480 	    name = NULL;
2481     }
2482     if (name != NULL)
2483     {
2484 	name = vim_strsave(name);
2485 	*pp = end;
2486 	if (STRNCMP(name, "<SNR>", 5) == 0)
2487 	{
2488 	    // Change "<SNR>" to the byte sequence.
2489 	    name[0] = K_SPECIAL;
2490 	    name[1] = KS_EXTRA;
2491 	    name[2] = (int)KE_SNR;
2492 	    mch_memmove(name + 3, name + 5, STRLEN(name + 5) + 1);
2493 	}
2494 	goto theend;
2495     }
2496 
2497     if (lv.ll_exp_name != NULL)
2498     {
2499 	len = (int)STRLEN(lv.ll_exp_name);
2500 	if (lead <= 2 && lv.ll_name == lv.ll_exp_name
2501 					 && STRNCMP(lv.ll_name, "s:", 2) == 0)
2502 	{
2503 	    // When there was "s:" already or the name expanded to get a
2504 	    // leading "s:" then remove it.
2505 	    lv.ll_name += 2;
2506 	    len -= 2;
2507 	    lead = 2;
2508 	}
2509     }
2510     else
2511     {
2512 	// skip over "s:" and "g:"
2513 	if (lead == 2 || (lv.ll_name[0] == 'g' && lv.ll_name[1] == ':'))
2514 	{
2515 	    if (is_global != NULL && lv.ll_name[0] == 'g')
2516 		*is_global = TRUE;
2517 	    lv.ll_name += 2;
2518 	}
2519 	len = (int)(end - lv.ll_name);
2520     }
2521     if (len <= 0)
2522     {
2523 	if (!skip)
2524 	    emsg(_(e_function_name));
2525 	goto theend;
2526     }
2527 
2528     // In Vim9 script a user function is script-local by default.
2529     vim9script = ASCII_ISUPPER(*start) && in_vim9script();
2530 
2531     /*
2532      * Copy the function name to allocated memory.
2533      * Accept <SID>name() inside a script, translate into <SNR>123_name().
2534      * Accept <SNR>123_name() outside a script.
2535      */
2536     if (skip)
2537 	lead = 0;	// do nothing
2538     else if (lead > 0 || vim9script)
2539     {
2540 	if (!vim9script)
2541 	    lead = 3;
2542 	if (vim9script || (lv.ll_exp_name != NULL
2543 					     && eval_fname_sid(lv.ll_exp_name))
2544 						       || eval_fname_sid(*pp))
2545 	{
2546 	    // It's script-local, "s:" or "<SID>"
2547 	    if (current_sctx.sc_sid <= 0)
2548 	    {
2549 		emsg(_(e_usingsid));
2550 		goto theend;
2551 	    }
2552 	    sprintf((char *)sid_buf, "%ld_", (long)current_sctx.sc_sid);
2553 	    if (vim9script)
2554 		extra = 3 + (int)STRLEN(sid_buf);
2555 	    else
2556 		lead += (int)STRLEN(sid_buf);
2557 	}
2558     }
2559     else if (!(flags & TFN_INT) && builtin_function(lv.ll_name, len))
2560     {
2561 	semsg(_("E128: Function name must start with a capital or \"s:\": %s"),
2562 								       start);
2563 	goto theend;
2564     }
2565     if (!skip && !(flags & TFN_QUIET) && !(flags & TFN_NO_DEREF))
2566     {
2567 	char_u *cp = vim_strchr(lv.ll_name, ':');
2568 
2569 	if (cp != NULL && cp < end)
2570 	{
2571 	    semsg(_("E884: Function name cannot contain a colon: %s"), start);
2572 	    goto theend;
2573 	}
2574     }
2575 
2576     name = alloc(len + lead + extra + 1);
2577     if (name != NULL)
2578     {
2579 	if (!skip && (lead > 0 || vim9script))
2580 	{
2581 	    name[0] = K_SPECIAL;
2582 	    name[1] = KS_EXTRA;
2583 	    name[2] = (int)KE_SNR;
2584 	    if (vim9script || lead > 3)	// If it's "<SID>"
2585 		STRCPY(name + 3, sid_buf);
2586 	}
2587 	mch_memmove(name + lead + extra, lv.ll_name, (size_t)len);
2588 	name[lead + extra + len] = NUL;
2589     }
2590     *pp = end;
2591 
2592 theend:
2593     clear_lval(&lv);
2594     return name;
2595 }
2596 
2597 /*
2598  * Assuming "name" is the result of trans_function_name() and it was prefixed
2599  * to use the script-local name, return the unmodified name (points into
2600  * "name").  Otherwise return NULL.
2601  * This can be used to first search for a script-local function and fall back
2602  * to the global function if not found.
2603  */
2604     char_u *
2605 untrans_function_name(char_u *name)
2606 {
2607     char_u *p;
2608 
2609     if (*name == K_SPECIAL && in_vim9script())
2610     {
2611 	p = vim_strchr(name, '_');
2612 	if (p != NULL)
2613 	    return p + 1;
2614     }
2615     return NULL;
2616 }
2617 
2618 /*
2619  * List functions.  When "regmatch" is NULL all of then.
2620  * Otherwise functions matching "regmatch".
2621  */
2622     static void
2623 list_functions(regmatch_T *regmatch)
2624 {
2625     int		changed = func_hashtab.ht_changed;
2626     long_u	todo = func_hashtab.ht_used;
2627     hashitem_T	*hi;
2628 
2629     for (hi = func_hashtab.ht_array; todo > 0 && !got_int; ++hi)
2630     {
2631 	if (!HASHITEM_EMPTY(hi))
2632 	{
2633 	    ufunc_T	*fp = HI2UF(hi);
2634 
2635 	    --todo;
2636 	    if ((fp->uf_flags & FC_DEAD) == 0
2637 		    && (regmatch == NULL
2638 			? !message_filtered(fp->uf_name)
2639 			    && !func_name_refcount(fp->uf_name)
2640 			: !isdigit(*fp->uf_name)
2641 			    && vim_regexec(regmatch, fp->uf_name, 0)))
2642 	    {
2643 		list_func_head(fp, FALSE);
2644 		if (changed != func_hashtab.ht_changed)
2645 		{
2646 		    emsg(_("E454: function list was modified"));
2647 		    return;
2648 		}
2649 	    }
2650 	}
2651     }
2652 }
2653 
2654 /*
2655  * ":function" also supporting nested ":def".
2656  * When "name_arg" is not NULL this is a nested function, using "name_arg" for
2657  * the function name.
2658  * Returns a pointer to the function or NULL if no function defined.
2659  */
2660     ufunc_T *
2661 def_function(exarg_T *eap, char_u *name_arg)
2662 {
2663     char_u	*theline;
2664     char_u	*line_to_free = NULL;
2665     int		j;
2666     int		c;
2667     int		saved_did_emsg;
2668     int		saved_wait_return = need_wait_return;
2669     char_u	*name = name_arg;
2670     int		is_global = FALSE;
2671     char_u	*p;
2672     char_u	*arg;
2673     char_u	*line_arg = NULL;
2674     garray_T	newargs;
2675     garray_T	argtypes;
2676     garray_T	default_args;
2677     garray_T	newlines;
2678     int		varargs = FALSE;
2679     int		flags = 0;
2680     char_u	*ret_type = NULL;
2681     ufunc_T	*fp = NULL;
2682     int		overwrite = FALSE;
2683     int		indent;
2684     int		nesting;
2685 #define MAX_FUNC_NESTING 50
2686     char	nesting_def[MAX_FUNC_NESTING];
2687     dictitem_T	*v;
2688     funcdict_T	fudi;
2689     static int	func_nr = 0;	    // number for nameless function
2690     int		paren;
2691     hashitem_T	*hi;
2692     getline_opt_T getline_options = GETLINE_CONCAT_CONT;
2693     linenr_T	sourcing_lnum_off;
2694     linenr_T	sourcing_lnum_top;
2695     int		is_heredoc = FALSE;
2696     char_u	*skip_until = NULL;
2697     char_u	*heredoc_trimmed = NULL;
2698     int		vim9script = in_vim9script();
2699     imported_T	*import = NULL;
2700 
2701     /*
2702      * ":function" without argument: list functions.
2703      */
2704     if (ends_excmd2(eap->cmd, eap->arg))
2705     {
2706 	if (!eap->skip)
2707 	    list_functions(NULL);
2708 	eap->nextcmd = check_nextcmd(eap->arg);
2709 	return NULL;
2710     }
2711 
2712     /*
2713      * ":function /pat": list functions matching pattern.
2714      */
2715     if (*eap->arg == '/')
2716     {
2717 	p = skip_regexp(eap->arg + 1, '/', TRUE);
2718 	if (!eap->skip)
2719 	{
2720 	    regmatch_T	regmatch;
2721 
2722 	    c = *p;
2723 	    *p = NUL;
2724 	    regmatch.regprog = vim_regcomp(eap->arg + 1, RE_MAGIC);
2725 	    *p = c;
2726 	    if (regmatch.regprog != NULL)
2727 	    {
2728 		regmatch.rm_ic = p_ic;
2729 		list_functions(&regmatch);
2730 		vim_regfree(regmatch.regprog);
2731 	    }
2732 	}
2733 	if (*p == '/')
2734 	    ++p;
2735 	eap->nextcmd = check_nextcmd(p);
2736 	return NULL;
2737     }
2738 
2739     ga_init(&newargs);
2740     ga_init(&argtypes);
2741     ga_init(&default_args);
2742 
2743     /*
2744      * Get the function name.  There are these situations:
2745      * func	    normal function name
2746      *		    "name" == func, "fudi.fd_dict" == NULL
2747      * dict.func    new dictionary entry
2748      *		    "name" == NULL, "fudi.fd_dict" set,
2749      *		    "fudi.fd_di" == NULL, "fudi.fd_newkey" == func
2750      * dict.func    existing dict entry with a Funcref
2751      *		    "name" == func, "fudi.fd_dict" set,
2752      *		    "fudi.fd_di" set, "fudi.fd_newkey" == NULL
2753      * dict.func    existing dict entry that's not a Funcref
2754      *		    "name" == NULL, "fudi.fd_dict" set,
2755      *		    "fudi.fd_di" set, "fudi.fd_newkey" == NULL
2756      * s:func	    script-local function name
2757      * g:func	    global function name, same as "func"
2758      */
2759     p = eap->arg;
2760     if (name_arg != NULL)
2761     {
2762 	// nested function, argument is (args).
2763 	paren = TRUE;
2764 	CLEAR_FIELD(fudi);
2765     }
2766     else
2767     {
2768 	name = trans_function_name(&p, &is_global, eap->skip,
2769 						 TFN_NO_AUTOLOAD, &fudi, NULL);
2770 	paren = (vim_strchr(p, '(') != NULL);
2771 	if (name == NULL && (fudi.fd_dict == NULL || !paren) && !eap->skip)
2772 	{
2773 	    /*
2774 	     * Return on an invalid expression in braces, unless the expression
2775 	     * evaluation has been cancelled due to an aborting error, an
2776 	     * interrupt, or an exception.
2777 	     */
2778 	    if (!aborting())
2779 	    {
2780 		if (!eap->skip && fudi.fd_newkey != NULL)
2781 		    semsg(_(e_dictkey), fudi.fd_newkey);
2782 		vim_free(fudi.fd_newkey);
2783 		return NULL;
2784 	    }
2785 	    else
2786 		eap->skip = TRUE;
2787 	}
2788     }
2789 
2790     // An error in a function call during evaluation of an expression in magic
2791     // braces should not cause the function not to be defined.
2792     saved_did_emsg = did_emsg;
2793     did_emsg = FALSE;
2794 
2795     /*
2796      * ":function func" with only function name: list function.
2797      */
2798     if (!paren)
2799     {
2800 	if (!ends_excmd(*skipwhite(p)))
2801 	{
2802 	    semsg(_(e_trailing_arg), p);
2803 	    goto ret_free;
2804 	}
2805 	eap->nextcmd = check_nextcmd(p);
2806 	if (eap->nextcmd != NULL)
2807 	    *p = NUL;
2808 	if (!eap->skip && !got_int)
2809 	{
2810 	    fp = find_func(name, is_global, NULL);
2811 	    if (fp == NULL && ASCII_ISUPPER(*eap->arg))
2812 	    {
2813 		char_u *up = untrans_function_name(name);
2814 
2815 		// With Vim9 script the name was made script-local, if not
2816 		// found try again with the original name.
2817 		if (up != NULL)
2818 		    fp = find_func(up, FALSE, NULL);
2819 	    }
2820 
2821 	    if (fp != NULL)
2822 	    {
2823 		list_func_head(fp, TRUE);
2824 		for (j = 0; j < fp->uf_lines.ga_len && !got_int; ++j)
2825 		{
2826 		    if (FUNCLINE(fp, j) == NULL)
2827 			continue;
2828 		    msg_putchar('\n');
2829 		    msg_outnum((long)(j + 1));
2830 		    if (j < 9)
2831 			msg_putchar(' ');
2832 		    if (j < 99)
2833 			msg_putchar(' ');
2834 		    msg_prt_line(FUNCLINE(fp, j), FALSE);
2835 		    out_flush();	// show a line at a time
2836 		    ui_breakcheck();
2837 		}
2838 		if (!got_int)
2839 		{
2840 		    msg_putchar('\n');
2841 		    if (fp->uf_def_status != UF_NOT_COMPILED)
2842 			msg_puts("   enddef");
2843 		    else
2844 			msg_puts("   endfunction");
2845 		}
2846 	    }
2847 	    else
2848 		emsg_funcname(N_("E123: Undefined function: %s"), eap->arg);
2849 	}
2850 	goto ret_free;
2851     }
2852 
2853     /*
2854      * ":function name(arg1, arg2)" Define function.
2855      */
2856     p = skipwhite(p);
2857     if (*p != '(')
2858     {
2859 	if (!eap->skip)
2860 	{
2861 	    semsg(_("E124: Missing '(': %s"), eap->arg);
2862 	    goto ret_free;
2863 	}
2864 	// attempt to continue by skipping some text
2865 	if (vim_strchr(p, '(') != NULL)
2866 	    p = vim_strchr(p, '(');
2867     }
2868     p = skipwhite(p + 1);
2869 
2870     // In Vim9 script only global functions can be redefined.
2871     if (vim9script && eap->forceit && !is_global)
2872     {
2873 	emsg(_(e_nobang));
2874 	goto ret_free;
2875     }
2876 
2877     ga_init2(&newlines, (int)sizeof(char_u *), 3);
2878 
2879     if (!eap->skip && name_arg == NULL)
2880     {
2881 	// Check the name of the function.  Unless it's a dictionary function
2882 	// (that we are overwriting).
2883 	if (name != NULL)
2884 	    arg = name;
2885 	else
2886 	    arg = fudi.fd_newkey;
2887 	if (arg != NULL && (fudi.fd_di == NULL
2888 				     || (fudi.fd_di->di_tv.v_type != VAR_FUNC
2889 				 && fudi.fd_di->di_tv.v_type != VAR_PARTIAL)))
2890 	{
2891 	    if (*arg == K_SPECIAL)
2892 		j = 3;
2893 	    else
2894 		j = 0;
2895 	    while (arg[j] != NUL && (j == 0 ? eval_isnamec1(arg[j])
2896 						      : eval_isnamec(arg[j])))
2897 		++j;
2898 	    if (arg[j] != NUL)
2899 		emsg_funcname((char *)e_invarg2, arg);
2900 	}
2901 	// Disallow using the g: dict.
2902 	if (fudi.fd_dict != NULL && fudi.fd_dict->dv_scope == VAR_DEF_SCOPE)
2903 	    emsg(_("E862: Cannot use g: here"));
2904     }
2905 
2906     // This may get more lines and make the pointers into the first line
2907     // invalid.
2908     if (get_function_args(&p, ')', &newargs,
2909 			eap->cmdidx == CMD_def ? &argtypes : NULL,
2910 			 &varargs, &default_args, eap->skip,
2911 			 eap, &line_to_free) == FAIL)
2912 	goto errret_2;
2913 
2914     if (eap->cmdidx == CMD_def)
2915     {
2916 	// find the return type: :def Func(): type
2917 	if (*p == ':')
2918 	{
2919 	    ret_type = skipwhite(p + 1);
2920 	    p = skip_type(ret_type, FALSE);
2921 	    if (p > ret_type)
2922 	    {
2923 		ret_type = vim_strnsave(ret_type, p - ret_type);
2924 		p = skipwhite(p);
2925 	    }
2926 	    else
2927 	    {
2928 		semsg(_(e_expected_type_str), ret_type);
2929 		ret_type = NULL;
2930 	    }
2931 	}
2932 	p = skipwhite(p);
2933     }
2934     else
2935 	// find extra arguments "range", "dict", "abort" and "closure"
2936 	for (;;)
2937 	{
2938 	    p = skipwhite(p);
2939 	    if (STRNCMP(p, "range", 5) == 0)
2940 	    {
2941 		flags |= FC_RANGE;
2942 		p += 5;
2943 	    }
2944 	    else if (STRNCMP(p, "dict", 4) == 0)
2945 	    {
2946 		flags |= FC_DICT;
2947 		p += 4;
2948 	    }
2949 	    else if (STRNCMP(p, "abort", 5) == 0)
2950 	    {
2951 		flags |= FC_ABORT;
2952 		p += 5;
2953 	    }
2954 	    else if (STRNCMP(p, "closure", 7) == 0)
2955 	    {
2956 		flags |= FC_CLOSURE;
2957 		p += 7;
2958 		if (current_funccal == NULL)
2959 		{
2960 		    emsg_funcname(N_("E932: Closure function should not be at top level: %s"),
2961 			    name == NULL ? (char_u *)"" : name);
2962 		    goto erret;
2963 		}
2964 	    }
2965 	    else
2966 		break;
2967 	}
2968 
2969     // When there is a line break use what follows for the function body.
2970     // Makes 'exe "func Test()\n...\nendfunc"' work.
2971     if (*p == '\n')
2972 	line_arg = p + 1;
2973     else if (*p != NUL
2974 	    && !(*p == '"' && (!vim9script || eap->cmdidx == CMD_function)
2975 						     && eap->cmdidx != CMD_def)
2976 	    && !(*p == '#' && (vim9script || eap->cmdidx == CMD_def))
2977 	    && !eap->skip
2978 	    && !did_emsg)
2979 	semsg(_(e_trailing_arg), p);
2980 
2981     /*
2982      * Read the body of the function, until "}", ":endfunction" or ":enddef" is
2983      * found.
2984      */
2985     if (KeyTyped)
2986     {
2987 	// Check if the function already exists, don't let the user type the
2988 	// whole function before telling him it doesn't work!  For a script we
2989 	// need to skip the body to be able to find what follows.
2990 	if (!eap->skip && !eap->forceit)
2991 	{
2992 	    if (fudi.fd_dict != NULL && fudi.fd_newkey == NULL)
2993 		emsg(_(e_funcdict));
2994 	    else if (name != NULL && find_func(name, is_global, NULL) != NULL)
2995 		emsg_funcname(e_funcexts, name);
2996 	}
2997 
2998 	if (!eap->skip && did_emsg)
2999 	    goto erret;
3000 
3001 	msg_putchar('\n');	    // don't overwrite the function name
3002 	cmdline_row = msg_row;
3003     }
3004 
3005     // Save the starting line number.
3006     sourcing_lnum_top = SOURCING_LNUM;
3007 
3008     // Detect having skipped over comment lines to find the return
3009     // type.  Add NULL lines to keep the line count correct.
3010     sourcing_lnum_off = get_sourced_lnum(eap->getline, eap->cookie);
3011     if (SOURCING_LNUM < sourcing_lnum_off)
3012     {
3013 	sourcing_lnum_off -= SOURCING_LNUM;
3014 	if (ga_grow(&newlines, sourcing_lnum_off) == FAIL)
3015 	    goto erret;
3016 	while (sourcing_lnum_off-- > 0)
3017 	    ((char_u **)(newlines.ga_data))[newlines.ga_len++] = NULL;
3018     }
3019 
3020     indent = 2;
3021     nesting = 0;
3022     nesting_def[nesting] = (eap->cmdidx == CMD_def);
3023     for (;;)
3024     {
3025 	if (KeyTyped)
3026 	{
3027 	    msg_scroll = TRUE;
3028 	    saved_wait_return = FALSE;
3029 	}
3030 	need_wait_return = FALSE;
3031 
3032 	if (line_arg != NULL)
3033 	{
3034 	    // Use eap->arg, split up in parts by line breaks.
3035 	    theline = line_arg;
3036 	    p = vim_strchr(theline, '\n');
3037 	    if (p == NULL)
3038 		line_arg += STRLEN(line_arg);
3039 	    else
3040 	    {
3041 		*p = NUL;
3042 		line_arg = p + 1;
3043 	    }
3044 	}
3045 	else
3046 	{
3047 	    vim_free(line_to_free);
3048 	    if (eap->getline == NULL)
3049 		theline = getcmdline(':', 0L, indent, getline_options);
3050 	    else
3051 		theline = eap->getline(':', eap->cookie, indent,
3052 							      getline_options);
3053 	    line_to_free = theline;
3054 	}
3055 	if (KeyTyped)
3056 	    lines_left = Rows - 1;
3057 	if (theline == NULL)
3058 	{
3059 	    if (eap->cmdidx == CMD_def)
3060 		emsg(_(e_missing_enddef));
3061 	    else
3062 		emsg(_("E126: Missing :endfunction"));
3063 	    goto erret;
3064 	}
3065 
3066 	// Detect line continuation: SOURCING_LNUM increased more than one.
3067 	sourcing_lnum_off = get_sourced_lnum(eap->getline, eap->cookie);
3068 	if (SOURCING_LNUM < sourcing_lnum_off)
3069 	    sourcing_lnum_off -= SOURCING_LNUM;
3070 	else
3071 	    sourcing_lnum_off = 0;
3072 
3073 	if (skip_until != NULL)
3074 	{
3075 	    // Don't check for ":endfunc"/":enddef" between
3076 	    // * ":append" and "."
3077 	    // * ":python <<EOF" and "EOF"
3078 	    // * ":let {var-name} =<< [trim] {marker}" and "{marker}"
3079 	    if (heredoc_trimmed == NULL
3080 		    || (is_heredoc && skipwhite(theline) == theline)
3081 		    || STRNCMP(theline, heredoc_trimmed,
3082 						 STRLEN(heredoc_trimmed)) == 0)
3083 	    {
3084 		if (heredoc_trimmed == NULL)
3085 		    p = theline;
3086 		else if (is_heredoc)
3087 		    p = skipwhite(theline) == theline
3088 				 ? theline : theline + STRLEN(heredoc_trimmed);
3089 		else
3090 		    p = theline + STRLEN(heredoc_trimmed);
3091 		if (STRCMP(p, skip_until) == 0)
3092 		{
3093 		    VIM_CLEAR(skip_until);
3094 		    VIM_CLEAR(heredoc_trimmed);
3095 		    getline_options = GETLINE_CONCAT_CONT;
3096 		    is_heredoc = FALSE;
3097 		}
3098 	    }
3099 	}
3100 	else
3101 	{
3102 	    // skip ':' and blanks
3103 	    for (p = theline; VIM_ISWHITE(*p) || *p == ':'; ++p)
3104 		;
3105 
3106 	    // Check for "endfunction" or "enddef".
3107 	    if (checkforcmd(&p, nesting_def[nesting]
3108 			     ? "enddef" : "endfunction", 4) && nesting-- == 0)
3109 	    {
3110 		char_u *nextcmd = NULL;
3111 
3112 		if (*p == '|')
3113 		    nextcmd = p + 1;
3114 		else if (line_arg != NULL && *skipwhite(line_arg) != NUL)
3115 		    nextcmd = line_arg;
3116 		else if (*p != NUL && *p != '"' && p_verbose > 0)
3117 		    give_warning2(eap->cmdidx == CMD_def
3118 			? (char_u *)_("W1001: Text found after :enddef: %s")
3119 			: (char_u *)_("W22: Text found after :endfunction: %s"),
3120 			 p, TRUE);
3121 		if (nextcmd != NULL)
3122 		{
3123 		    // Another command follows. If the line came from "eap" we
3124 		    // can simply point into it, otherwise we need to change
3125 		    // "eap->cmdlinep".
3126 		    eap->nextcmd = nextcmd;
3127 		    if (line_to_free != NULL)
3128 		    {
3129 			vim_free(*eap->cmdlinep);
3130 			*eap->cmdlinep = line_to_free;
3131 			line_to_free = NULL;
3132 		    }
3133 		}
3134 		break;
3135 	    }
3136 
3137 	    // Increase indent inside "if", "while", "for" and "try", decrease
3138 	    // at "end".
3139 	    if (indent > 2 && (*p == '}' || STRNCMP(p, "end", 3) == 0))
3140 		indent -= 2;
3141 	    else if (STRNCMP(p, "if", 2) == 0
3142 		    || STRNCMP(p, "wh", 2) == 0
3143 		    || STRNCMP(p, "for", 3) == 0
3144 		    || STRNCMP(p, "try", 3) == 0)
3145 		indent += 2;
3146 
3147 	    // Check for defining a function inside this function.
3148 	    // Only recognize "def" inside "def", not inside "function",
3149 	    // For backwards compatibility, see Test_function_python().
3150 	    c = *p;
3151 	    if (checkforcmd(&p, "function", 2)
3152 		    || (eap->cmdidx == CMD_def && checkforcmd(&p, "def", 3)))
3153 	    {
3154 		if (*p == '!')
3155 		    p = skipwhite(p + 1);
3156 		p += eval_fname_script(p);
3157 		vim_free(trans_function_name(&p, NULL, TRUE, 0, NULL, NULL));
3158 		if (*skipwhite(p) == '(')
3159 		{
3160 		    if (nesting == MAX_FUNC_NESTING - 1)
3161 			emsg(_(e_function_nesting_too_deep));
3162 		    else
3163 		    {
3164 			++nesting;
3165 			nesting_def[nesting] = (c == 'd');
3166 			indent += 2;
3167 		    }
3168 		}
3169 	    }
3170 
3171 	    // Check for ":append", ":change", ":insert".  Not for :def.
3172 	    p = skip_range(p, FALSE, NULL);
3173 	    if (eap->cmdidx != CMD_def
3174 		&& ((p[0] == 'a' && (!ASCII_ISALPHA(p[1]) || p[1] == 'p'))
3175 		    || (p[0] == 'c'
3176 			&& (!ASCII_ISALPHA(p[1]) || (p[1] == 'h'
3177 				&& (!ASCII_ISALPHA(p[2]) || (p[2] == 'a'
3178 					&& (STRNCMP(&p[3], "nge", 3) != 0
3179 					    || !ASCII_ISALPHA(p[6])))))))
3180 		    || (p[0] == 'i'
3181 			&& (!ASCII_ISALPHA(p[1]) || (p[1] == 'n'
3182 				&& (!ASCII_ISALPHA(p[2])
3183 				    || (p[2] == 's'
3184 					&& (!ASCII_ISALPHA(p[3])
3185 						|| p[3] == 'e'))))))))
3186 		skip_until = vim_strsave((char_u *)".");
3187 
3188 	    // Check for ":python <<EOF", ":tcl <<EOF", etc.
3189 	    arg = skipwhite(skiptowhite(p));
3190 	    if (arg[0] == '<' && arg[1] =='<'
3191 		    && ((p[0] == 'p' && p[1] == 'y'
3192 				    && (!ASCII_ISALNUM(p[2]) || p[2] == 't'
3193 					|| ((p[2] == '3' || p[2] == 'x')
3194 						   && !ASCII_ISALPHA(p[3]))))
3195 			|| (p[0] == 'p' && p[1] == 'e'
3196 				    && (!ASCII_ISALPHA(p[2]) || p[2] == 'r'))
3197 			|| (p[0] == 't' && p[1] == 'c'
3198 				    && (!ASCII_ISALPHA(p[2]) || p[2] == 'l'))
3199 			|| (p[0] == 'l' && p[1] == 'u' && p[2] == 'a'
3200 				    && !ASCII_ISALPHA(p[3]))
3201 			|| (p[0] == 'r' && p[1] == 'u' && p[2] == 'b'
3202 				    && (!ASCII_ISALPHA(p[3]) || p[3] == 'y'))
3203 			|| (p[0] == 'm' && p[1] == 'z'
3204 				    && (!ASCII_ISALPHA(p[2]) || p[2] == 's'))
3205 			))
3206 	    {
3207 		// ":python <<" continues until a dot, like ":append"
3208 		p = skipwhite(arg + 2);
3209 		if (STRNCMP(p, "trim", 4) == 0)
3210 		{
3211 		    // Ignore leading white space.
3212 		    p = skipwhite(p + 4);
3213 		    heredoc_trimmed = vim_strnsave(theline,
3214 						 skipwhite(theline) - theline);
3215 		}
3216 		if (*p == NUL)
3217 		    skip_until = vim_strsave((char_u *)".");
3218 		else
3219 		    skip_until = vim_strnsave(p, skiptowhite(p) - p);
3220 		getline_options = GETLINE_NONE;
3221 		is_heredoc = TRUE;
3222 	    }
3223 
3224 	    // Check for ":cmd v =<< [trim] EOF"
3225 	    //       and ":cmd [a, b] =<< [trim] EOF"
3226 	    // Where "cmd" can be "let", "var", "final" or "const".
3227 	    arg = skipwhite(skiptowhite(p));
3228 	    if (*arg == '[')
3229 		arg = vim_strchr(arg, ']');
3230 	    if (arg != NULL)
3231 	    {
3232 		arg = skipwhite(skiptowhite(arg));
3233 		if (arg[0] == '=' && arg[1] == '<' && arg[2] =='<'
3234 			&& (checkforcmd(&p, "let", 2)
3235 			    || checkforcmd(&p, "var", 3)
3236 			    || checkforcmd(&p, "final", 5)
3237 			    || checkforcmd(&p, "const", 5)))
3238 		{
3239 		    p = skipwhite(arg + 3);
3240 		    if (STRNCMP(p, "trim", 4) == 0)
3241 		    {
3242 			// Ignore leading white space.
3243 			p = skipwhite(p + 4);
3244 			heredoc_trimmed = vim_strnsave(theline,
3245 						 skipwhite(theline) - theline);
3246 		    }
3247 		    skip_until = vim_strnsave(p, skiptowhite(p) - p);
3248 		    getline_options = GETLINE_NONE;
3249 		    is_heredoc = TRUE;
3250 		}
3251 	    }
3252 	}
3253 
3254 	// Add the line to the function.
3255 	if (ga_grow(&newlines, 1 + sourcing_lnum_off) == FAIL)
3256 	    goto erret;
3257 
3258 	// Copy the line to newly allocated memory.  get_one_sourceline()
3259 	// allocates 250 bytes per line, this saves 80% on average.  The cost
3260 	// is an extra alloc/free.
3261 	p = vim_strsave(theline);
3262 	if (p == NULL)
3263 	    goto erret;
3264 	((char_u **)(newlines.ga_data))[newlines.ga_len++] = p;
3265 
3266 	// Add NULL lines for continuation lines, so that the line count is
3267 	// equal to the index in the growarray.
3268 	while (sourcing_lnum_off-- > 0)
3269 	    ((char_u **)(newlines.ga_data))[newlines.ga_len++] = NULL;
3270 
3271 	// Check for end of eap->arg.
3272 	if (line_arg != NULL && *line_arg == NUL)
3273 	    line_arg = NULL;
3274     }
3275 
3276     // Don't define the function when skipping commands or when an error was
3277     // detected.
3278     if (eap->skip || did_emsg)
3279 	goto erret;
3280 
3281     /*
3282      * If there are no errors, add the function
3283      */
3284     if (fudi.fd_dict == NULL)
3285     {
3286 	hashtab_T	*ht;
3287 
3288 	v = find_var(name, &ht, FALSE);
3289 	if (v != NULL && v->di_tv.v_type == VAR_FUNC)
3290 	{
3291 	    emsg_funcname(N_("E707: Function name conflicts with variable: %s"),
3292 									name);
3293 	    goto erret;
3294 	}
3295 
3296 	fp = find_func_even_dead(name, is_global, NULL);
3297 	if (vim9script)
3298 	{
3299 	    char_u *uname = untrans_function_name(name);
3300 
3301 	    import = find_imported(uname == NULL ? name : uname, 0, NULL);
3302 	}
3303 
3304 	if (fp != NULL || import != NULL)
3305 	{
3306 	    int dead = fp != NULL && (fp->uf_flags & FC_DEAD);
3307 
3308 	    // Function can be replaced with "function!" and when sourcing the
3309 	    // same script again, but only once.
3310 	    // A name that is used by an import can not be overruled.
3311 	    if (import != NULL
3312 		    || (!dead && !eap->forceit
3313 			&& (fp->uf_script_ctx.sc_sid != current_sctx.sc_sid
3314 			  || fp->uf_script_ctx.sc_seq == current_sctx.sc_seq)))
3315 	    {
3316 		if (vim9script)
3317 		    emsg_funcname(e_name_already_defined_str, name);
3318 		else
3319 		    emsg_funcname(e_funcexts, name);
3320 		goto erret;
3321 	    }
3322 	    if (fp->uf_calls > 0)
3323 	    {
3324 		emsg_funcname(
3325 			N_("E127: Cannot redefine function %s: It is in use"),
3326 									name);
3327 		goto erret;
3328 	    }
3329 	    if (fp->uf_refcount > 1)
3330 	    {
3331 		// This function is referenced somewhere, don't redefine it but
3332 		// create a new one.
3333 		--fp->uf_refcount;
3334 		fp->uf_flags |= FC_REMOVED;
3335 		fp = NULL;
3336 		overwrite = TRUE;
3337 	    }
3338 	    else
3339 	    {
3340 		char_u *exp_name = fp->uf_name_exp;
3341 
3342 		// redefine existing function, keep the expanded name
3343 		VIM_CLEAR(name);
3344 		fp->uf_name_exp = NULL;
3345 		func_clear_items(fp);
3346 		fp->uf_name_exp = exp_name;
3347 		fp->uf_flags &= ~FC_DEAD;
3348 #ifdef FEAT_PROFILE
3349 		fp->uf_profiling = FALSE;
3350 		fp->uf_prof_initialized = FALSE;
3351 #endif
3352 		clear_def_function(fp);
3353 	    }
3354 	}
3355     }
3356     else
3357     {
3358 	char	numbuf[20];
3359 
3360 	fp = NULL;
3361 	if (fudi.fd_newkey == NULL && !eap->forceit)
3362 	{
3363 	    emsg(_(e_funcdict));
3364 	    goto erret;
3365 	}
3366 	if (fudi.fd_di == NULL)
3367 	{
3368 	    // Can't add a function to a locked dictionary
3369 	    if (value_check_lock(fudi.fd_dict->dv_lock, eap->arg, FALSE))
3370 		goto erret;
3371 	}
3372 	    // Can't change an existing function if it is locked
3373 	else if (value_check_lock(fudi.fd_di->di_tv.v_lock, eap->arg, FALSE))
3374 	    goto erret;
3375 
3376 	// Give the function a sequential number.  Can only be used with a
3377 	// Funcref!
3378 	vim_free(name);
3379 	sprintf(numbuf, "%d", ++func_nr);
3380 	name = vim_strsave((char_u *)numbuf);
3381 	if (name == NULL)
3382 	    goto erret;
3383     }
3384 
3385     if (fp == NULL)
3386     {
3387 	if (fudi.fd_dict == NULL && vim_strchr(name, AUTOLOAD_CHAR) != NULL)
3388 	{
3389 	    int	    slen, plen;
3390 	    char_u  *scriptname;
3391 
3392 	    // Check that the autoload name matches the script name.
3393 	    j = FAIL;
3394 	    if (SOURCING_NAME != NULL)
3395 	    {
3396 		scriptname = autoload_name(name);
3397 		if (scriptname != NULL)
3398 		{
3399 		    p = vim_strchr(scriptname, '/');
3400 		    plen = (int)STRLEN(p);
3401 		    slen = (int)STRLEN(SOURCING_NAME);
3402 		    if (slen > plen && fnamecmp(p,
3403 					    SOURCING_NAME + slen - plen) == 0)
3404 			j = OK;
3405 		    vim_free(scriptname);
3406 		}
3407 	    }
3408 	    if (j == FAIL)
3409 	    {
3410 		semsg(_("E746: Function name does not match script file name: %s"), name);
3411 		goto erret;
3412 	    }
3413 	}
3414 
3415 	fp = alloc_clear(offsetof(ufunc_T, uf_name) + STRLEN(name) + 1);
3416 	if (fp == NULL)
3417 	    goto erret;
3418 	fp->uf_def_status = eap->cmdidx == CMD_def ? UF_TO_BE_COMPILED
3419 							     : UF_NOT_COMPILED;
3420 
3421 	if (fudi.fd_dict != NULL)
3422 	{
3423 	    if (fudi.fd_di == NULL)
3424 	    {
3425 		// add new dict entry
3426 		fudi.fd_di = dictitem_alloc(fudi.fd_newkey);
3427 		if (fudi.fd_di == NULL)
3428 		{
3429 		    vim_free(fp);
3430 		    fp = NULL;
3431 		    goto erret;
3432 		}
3433 		if (dict_add(fudi.fd_dict, fudi.fd_di) == FAIL)
3434 		{
3435 		    vim_free(fudi.fd_di);
3436 		    vim_free(fp);
3437 		    fp = NULL;
3438 		    goto erret;
3439 		}
3440 	    }
3441 	    else
3442 		// overwrite existing dict entry
3443 		clear_tv(&fudi.fd_di->di_tv);
3444 	    fudi.fd_di->di_tv.v_type = VAR_FUNC;
3445 	    fudi.fd_di->di_tv.vval.v_string = vim_strsave(name);
3446 
3447 	    // behave like "dict" was used
3448 	    flags |= FC_DICT;
3449 	}
3450 
3451 	// insert the new function in the function list
3452 	set_ufunc_name(fp, name);
3453 	if (overwrite)
3454 	{
3455 	    hi = hash_find(&func_hashtab, name);
3456 	    hi->hi_key = UF2HIKEY(fp);
3457 	}
3458 	else if (hash_add(&func_hashtab, UF2HIKEY(fp)) == FAIL)
3459 	{
3460 	    vim_free(fp);
3461 	    fp = NULL;
3462 	    goto erret;
3463 	}
3464 	fp->uf_refcount = 1;
3465     }
3466     fp->uf_args = newargs;
3467     fp->uf_def_args = default_args;
3468     fp->uf_ret_type = &t_any;
3469     fp->uf_func_type = &t_func_any;
3470 
3471     if (eap->cmdidx == CMD_def)
3472     {
3473 	int	lnum_save = SOURCING_LNUM;
3474 
3475 	fp->uf_def_status = UF_TO_BE_COMPILED;
3476 
3477 	// error messages are for the first function line
3478 	SOURCING_LNUM = sourcing_lnum_top;
3479 
3480 	// parse the argument types
3481 	ga_init2(&fp->uf_type_list, sizeof(type_T *), 10);
3482 
3483 	if (argtypes.ga_len > 0)
3484 	{
3485 	    // When "varargs" is set the last name/type goes into uf_va_name
3486 	    // and uf_va_type.
3487 	    int len = argtypes.ga_len - (varargs ? 1 : 0);
3488 
3489 	    if (len > 0)
3490 		fp->uf_arg_types = ALLOC_CLEAR_MULT(type_T *, len);
3491 	    if (fp->uf_arg_types != NULL)
3492 	    {
3493 		int	i;
3494 		type_T	*type;
3495 
3496 		for (i = 0; i < len; ++ i)
3497 		{
3498 		    p = ((char_u **)argtypes.ga_data)[i];
3499 		    if (p == NULL)
3500 			// will get the type from the default value
3501 			type = &t_unknown;
3502 		    else
3503 			type = parse_type(&p, &fp->uf_type_list);
3504 		    if (type == NULL)
3505 		    {
3506 			SOURCING_LNUM = lnum_save;
3507 			goto errret_2;
3508 		    }
3509 		    fp->uf_arg_types[i] = type;
3510 		}
3511 	    }
3512 	    if (varargs)
3513 	    {
3514 		// Move the last argument "...name: type" to uf_va_name and
3515 		// uf_va_type.
3516 		fp->uf_va_name = ((char_u **)fp->uf_args.ga_data)
3517 						      [fp->uf_args.ga_len - 1];
3518 		--fp->uf_args.ga_len;
3519 		p = ((char_u **)argtypes.ga_data)[len];
3520 		if (p == NULL)
3521 		    // todo: get type from default value
3522 		    fp->uf_va_type = &t_any;
3523 		else
3524 		    fp->uf_va_type = parse_type(&p, &fp->uf_type_list);
3525 		if (fp->uf_va_type == NULL)
3526 		{
3527 		    SOURCING_LNUM = lnum_save;
3528 		    goto errret_2;
3529 		}
3530 	    }
3531 	    varargs = FALSE;
3532 	}
3533 
3534 	// parse the return type, if any
3535 	if (ret_type == NULL)
3536 	    fp->uf_ret_type = &t_void;
3537 	else
3538 	{
3539 	    p = ret_type;
3540 	    fp->uf_ret_type = parse_type(&p, &fp->uf_type_list);
3541 	}
3542 	SOURCING_LNUM = lnum_save;
3543     }
3544     else
3545 	fp->uf_def_status = UF_NOT_COMPILED;
3546 
3547     fp->uf_lines = newlines;
3548     if ((flags & FC_CLOSURE) != 0)
3549     {
3550 	if (register_closure(fp) == FAIL)
3551 	    goto erret;
3552     }
3553     else
3554 	fp->uf_scoped = NULL;
3555 
3556 #ifdef FEAT_PROFILE
3557     if (prof_def_func())
3558 	func_do_profile(fp);
3559 #endif
3560     fp->uf_varargs = varargs;
3561     if (sandbox)
3562 	flags |= FC_SANDBOX;
3563     if (vim9script && !ASCII_ISUPPER(*fp->uf_name))
3564 	flags |= FC_VIM9;
3565     fp->uf_flags = flags;
3566     fp->uf_calls = 0;
3567     fp->uf_cleared = FALSE;
3568     fp->uf_script_ctx = current_sctx;
3569     fp->uf_script_ctx_version = current_sctx.sc_version;
3570     fp->uf_script_ctx.sc_lnum += sourcing_lnum_top;
3571     if (is_export)
3572     {
3573 	fp->uf_flags |= FC_EXPORT;
3574 	// let ex_export() know the export worked.
3575 	is_export = FALSE;
3576     }
3577 
3578     if (eap->cmdidx == CMD_def)
3579 	set_function_type(fp);
3580     else if (fp->uf_script_ctx.sc_version == SCRIPT_VERSION_VIM9)
3581 	// :func does not use Vim9 script syntax, even in a Vim9 script file
3582 	fp->uf_script_ctx.sc_version = SCRIPT_VERSION_MAX;
3583 
3584     goto ret_free;
3585 
3586 erret:
3587     ga_clear_strings(&newargs);
3588     ga_clear_strings(&default_args);
3589 errret_2:
3590     ga_clear_strings(&newlines);
3591 ret_free:
3592     ga_clear_strings(&argtypes);
3593     vim_free(skip_until);
3594     vim_free(line_to_free);
3595     vim_free(fudi.fd_newkey);
3596     if (name != name_arg)
3597 	vim_free(name);
3598     vim_free(ret_type);
3599     did_emsg |= saved_did_emsg;
3600     need_wait_return |= saved_wait_return;
3601 
3602     return fp;
3603 }
3604 
3605 /*
3606  * ":function"
3607  */
3608     void
3609 ex_function(exarg_T *eap)
3610 {
3611     (void)def_function(eap, NULL);
3612 }
3613 
3614 /*
3615  * :defcompile - compile all :def functions in the current script that need to
3616  * be compiled.  Except dead functions.
3617  */
3618     void
3619 ex_defcompile(exarg_T *eap UNUSED)
3620 {
3621     long	todo = (long)func_hashtab.ht_used;
3622     int		changed = func_hashtab.ht_changed;
3623     hashitem_T	*hi;
3624     ufunc_T	*ufunc;
3625 
3626     for (hi = func_hashtab.ht_array; todo > 0 && !got_int; ++hi)
3627     {
3628 	if (!HASHITEM_EMPTY(hi))
3629 	{
3630 	    --todo;
3631 	    ufunc = HI2UF(hi);
3632 	    if (ufunc->uf_script_ctx.sc_sid == current_sctx.sc_sid
3633 		    && ufunc->uf_def_status == UF_TO_BE_COMPILED
3634 		    && (ufunc->uf_flags & FC_DEAD) == 0)
3635 	    {
3636 		compile_def_function(ufunc, FALSE, NULL);
3637 
3638 		if (func_hashtab.ht_changed != changed)
3639 		{
3640 		    // a function has been added or removed, need to start over
3641 		    todo = (long)func_hashtab.ht_used;
3642 		    changed = func_hashtab.ht_changed;
3643 		    hi = func_hashtab.ht_array;
3644 		    --hi;
3645 		}
3646 	    }
3647 	}
3648     }
3649 }
3650 
3651 /*
3652  * Return 5 if "p" starts with "<SID>" or "<SNR>" (ignoring case).
3653  * Return 2 if "p" starts with "s:".
3654  * Return 0 otherwise.
3655  */
3656     int
3657 eval_fname_script(char_u *p)
3658 {
3659     // Use MB_STRICMP() because in Turkish comparing the "I" may not work with
3660     // the standard library function.
3661     if (p[0] == '<' && (MB_STRNICMP(p + 1, "SID>", 4) == 0
3662 				       || MB_STRNICMP(p + 1, "SNR>", 4) == 0))
3663 	return 5;
3664     if (p[0] == 's' && p[1] == ':')
3665 	return 2;
3666     return 0;
3667 }
3668 
3669     int
3670 translated_function_exists(char_u *name, int is_global)
3671 {
3672     if (builtin_function(name, -1))
3673 	return has_internal_func(name);
3674     return find_func(name, is_global, NULL) != NULL;
3675 }
3676 
3677 /*
3678  * Return TRUE when "ufunc" has old-style "..." varargs
3679  * or named varargs "...name: type".
3680  */
3681     int
3682 has_varargs(ufunc_T *ufunc)
3683 {
3684     return ufunc->uf_varargs || ufunc->uf_va_name != NULL;
3685 }
3686 
3687 /*
3688  * Return TRUE if a function "name" exists.
3689  * If "no_defef" is TRUE, do not dereference a Funcref.
3690  */
3691     int
3692 function_exists(char_u *name, int no_deref)
3693 {
3694     char_u  *nm = name;
3695     char_u  *p;
3696     int	    n = FALSE;
3697     int	    flag;
3698     int	    is_global = FALSE;
3699 
3700     flag = TFN_INT | TFN_QUIET | TFN_NO_AUTOLOAD;
3701     if (no_deref)
3702 	flag |= TFN_NO_DEREF;
3703     p = trans_function_name(&nm, &is_global, FALSE, flag, NULL, NULL);
3704     nm = skipwhite(nm);
3705 
3706     // Only accept "funcname", "funcname ", "funcname (..." and
3707     // "funcname(...", not "funcname!...".
3708     if (p != NULL && (*nm == NUL || *nm == '('))
3709 	n = translated_function_exists(p, is_global);
3710     vim_free(p);
3711     return n;
3712 }
3713 
3714 #if defined(FEAT_PYTHON) || defined(FEAT_PYTHON3) || defined(PROTO)
3715     char_u *
3716 get_expanded_name(char_u *name, int check)
3717 {
3718     char_u	*nm = name;
3719     char_u	*p;
3720     int		is_global = FALSE;
3721 
3722     p = trans_function_name(&nm, &is_global, FALSE,
3723 						TFN_INT|TFN_QUIET, NULL, NULL);
3724 
3725     if (p != NULL && *nm == NUL
3726 		       && (!check || translated_function_exists(p, is_global)))
3727 	return p;
3728 
3729     vim_free(p);
3730     return NULL;
3731 }
3732 #endif
3733 
3734 /*
3735  * Function given to ExpandGeneric() to obtain the list of user defined
3736  * function names.
3737  */
3738     char_u *
3739 get_user_func_name(expand_T *xp, int idx)
3740 {
3741     static long_u	done;
3742     static int		changed;
3743     static hashitem_T	*hi;
3744     ufunc_T		*fp;
3745 
3746     if (idx == 0)
3747     {
3748 	done = 0;
3749 	hi = func_hashtab.ht_array;
3750 	changed = func_hashtab.ht_changed;
3751     }
3752     if (changed == func_hashtab.ht_changed && done < func_hashtab.ht_used)
3753     {
3754 	if (done++ > 0)
3755 	    ++hi;
3756 	while (HASHITEM_EMPTY(hi))
3757 	    ++hi;
3758 	fp = HI2UF(hi);
3759 
3760 	// don't show dead, dict and lambda functions
3761 	if ((fp->uf_flags & FC_DEAD) || (fp->uf_flags & FC_DICT)
3762 				|| STRNCMP(fp->uf_name, "<lambda>", 8) == 0)
3763 	    return (char_u *)"";
3764 
3765 	if (STRLEN(fp->uf_name) + 4 >= IOSIZE)
3766 	    return fp->uf_name;	// prevents overflow
3767 
3768 	cat_func_name(IObuff, fp);
3769 	if (xp->xp_context != EXPAND_USER_FUNC)
3770 	{
3771 	    STRCAT(IObuff, "(");
3772 	    if (!has_varargs(fp) && fp->uf_args.ga_len == 0)
3773 		STRCAT(IObuff, ")");
3774 	}
3775 	return IObuff;
3776     }
3777     return NULL;
3778 }
3779 
3780 /*
3781  * ":delfunction {name}"
3782  */
3783     void
3784 ex_delfunction(exarg_T *eap)
3785 {
3786     ufunc_T	*fp = NULL;
3787     char_u	*p;
3788     char_u	*name;
3789     funcdict_T	fudi;
3790     int		is_global = FALSE;
3791 
3792     p = eap->arg;
3793     name = trans_function_name(&p, &is_global, eap->skip, 0, &fudi, NULL);
3794     vim_free(fudi.fd_newkey);
3795     if (name == NULL)
3796     {
3797 	if (fudi.fd_dict != NULL && !eap->skip)
3798 	    emsg(_(e_funcref));
3799 	return;
3800     }
3801     if (!ends_excmd(*skipwhite(p)))
3802     {
3803 	vim_free(name);
3804 	semsg(_(e_trailing_arg), p);
3805 	return;
3806     }
3807     eap->nextcmd = check_nextcmd(p);
3808     if (eap->nextcmd != NULL)
3809 	*p = NUL;
3810 
3811     if (!eap->skip)
3812 	fp = find_func(name, is_global, NULL);
3813     vim_free(name);
3814 
3815     if (!eap->skip)
3816     {
3817 	if (fp == NULL)
3818 	{
3819 	    if (!eap->forceit)
3820 		semsg(_(e_nofunc), eap->arg);
3821 	    return;
3822 	}
3823 	if (fp->uf_calls > 0)
3824 	{
3825 	    semsg(_("E131: Cannot delete function %s: It is in use"), eap->arg);
3826 	    return;
3827 	}
3828 	if (fp->uf_flags & FC_VIM9)
3829 	{
3830 	    semsg(_(e_cannot_delete_vim9_script_function_str), eap->arg);
3831 	    return;
3832 	}
3833 
3834 	if (fudi.fd_dict != NULL)
3835 	{
3836 	    // Delete the dict item that refers to the function, it will
3837 	    // invoke func_unref() and possibly delete the function.
3838 	    dictitem_remove(fudi.fd_dict, fudi.fd_di);
3839 	}
3840 	else
3841 	{
3842 	    // A normal function (not a numbered function or lambda) has a
3843 	    // refcount of 1 for the entry in the hashtable.  When deleting
3844 	    // it and the refcount is more than one, it should be kept.
3845 	    // A numbered function and lambda should be kept if the refcount is
3846 	    // one or more.
3847 	    if (fp->uf_refcount > (func_name_refcount(fp->uf_name) ? 0 : 1))
3848 	    {
3849 		// Function is still referenced somewhere.  Don't free it but
3850 		// do remove it from the hashtable.
3851 		if (func_remove(fp))
3852 		    fp->uf_refcount--;
3853 		fp->uf_flags |= FC_DELETED;
3854 	    }
3855 	    else
3856 		func_clear_free(fp, FALSE);
3857 	}
3858     }
3859 }
3860 
3861 /*
3862  * Unreference a Function: decrement the reference count and free it when it
3863  * becomes zero.
3864  */
3865     void
3866 func_unref(char_u *name)
3867 {
3868     ufunc_T *fp = NULL;
3869 
3870     if (name == NULL || !func_name_refcount(name))
3871 	return;
3872     fp = find_func(name, FALSE, NULL);
3873     if (fp == NULL && isdigit(*name))
3874     {
3875 #ifdef EXITFREE
3876 	if (!entered_free_all_mem)
3877 #endif
3878 	    internal_error("func_unref()");
3879     }
3880     if (fp != NULL && --fp->uf_refcount <= 0)
3881     {
3882 	// Only delete it when it's not being used.  Otherwise it's done
3883 	// when "uf_calls" becomes zero.
3884 	if (fp->uf_calls == 0)
3885 	    func_clear_free(fp, FALSE);
3886     }
3887 }
3888 
3889 /*
3890  * Unreference a Function: decrement the reference count and free it when it
3891  * becomes zero.
3892  */
3893     void
3894 func_ptr_unref(ufunc_T *fp)
3895 {
3896     if (fp != NULL && --fp->uf_refcount <= 0)
3897     {
3898 	// Only delete it when it's not being used.  Otherwise it's done
3899 	// when "uf_calls" becomes zero.
3900 	if (fp->uf_calls == 0)
3901 	    func_clear_free(fp, FALSE);
3902     }
3903 }
3904 
3905 /*
3906  * Count a reference to a Function.
3907  */
3908     void
3909 func_ref(char_u *name)
3910 {
3911     ufunc_T *fp;
3912 
3913     if (name == NULL || !func_name_refcount(name))
3914 	return;
3915     fp = find_func(name, FALSE, NULL);
3916     if (fp != NULL)
3917 	++fp->uf_refcount;
3918     else if (isdigit(*name))
3919 	// Only give an error for a numbered function.
3920 	// Fail silently, when named or lambda function isn't found.
3921 	internal_error("func_ref()");
3922 }
3923 
3924 /*
3925  * Count a reference to a Function.
3926  */
3927     void
3928 func_ptr_ref(ufunc_T *fp)
3929 {
3930     if (fp != NULL)
3931 	++fp->uf_refcount;
3932 }
3933 
3934 /*
3935  * Return TRUE if items in "fc" do not have "copyID".  That means they are not
3936  * referenced from anywhere that is in use.
3937  */
3938     static int
3939 can_free_funccal(funccall_T *fc, int copyID)
3940 {
3941     return (fc->l_varlist.lv_copyID != copyID
3942 	    && fc->l_vars.dv_copyID != copyID
3943 	    && fc->l_avars.dv_copyID != copyID
3944 	    && fc->fc_copyID != copyID);
3945 }
3946 
3947 /*
3948  * ":return [expr]"
3949  */
3950     void
3951 ex_return(exarg_T *eap)
3952 {
3953     char_u	*arg = eap->arg;
3954     typval_T	rettv;
3955     int		returning = FALSE;
3956     evalarg_T	evalarg;
3957 
3958     if (current_funccal == NULL)
3959     {
3960 	emsg(_("E133: :return not inside a function"));
3961 	return;
3962     }
3963 
3964     CLEAR_FIELD(evalarg);
3965     evalarg.eval_flags = eap->skip ? 0 : EVAL_EVALUATE;
3966 
3967     if (eap->skip)
3968 	++emsg_skip;
3969 
3970     eap->nextcmd = NULL;
3971     if ((*arg != NUL && *arg != '|' && *arg != '\n')
3972 				  && eval0(arg, &rettv, eap, &evalarg) != FAIL)
3973     {
3974 	if (!eap->skip)
3975 	    returning = do_return(eap, FALSE, TRUE, &rettv);
3976 	else
3977 	    clear_tv(&rettv);
3978     }
3979     // It's safer to return also on error.
3980     else if (!eap->skip)
3981     {
3982 	// In return statement, cause_abort should be force_abort.
3983 	update_force_abort();
3984 
3985 	/*
3986 	 * Return unless the expression evaluation has been cancelled due to an
3987 	 * aborting error, an interrupt, or an exception.
3988 	 */
3989 	if (!aborting())
3990 	    returning = do_return(eap, FALSE, TRUE, NULL);
3991     }
3992 
3993     // When skipping or the return gets pending, advance to the next command
3994     // in this line (!returning).  Otherwise, ignore the rest of the line.
3995     // Following lines will be ignored by get_func_line().
3996     if (returning)
3997 	eap->nextcmd = NULL;
3998     else if (eap->nextcmd == NULL)	    // no argument
3999 	eap->nextcmd = check_nextcmd(arg);
4000 
4001     if (eap->skip)
4002 	--emsg_skip;
4003     clear_evalarg(&evalarg, eap);
4004 }
4005 
4006 /*
4007  * ":1,25call func(arg1, arg2)"	function call.
4008  */
4009     void
4010 ex_call(exarg_T *eap)
4011 {
4012     char_u	*arg = eap->arg;
4013     char_u	*startarg;
4014     char_u	*name;
4015     char_u	*tofree;
4016     int		len;
4017     typval_T	rettv;
4018     linenr_T	lnum;
4019     int		doesrange;
4020     int		failed = FALSE;
4021     funcdict_T	fudi;
4022     partial_T	*partial = NULL;
4023     evalarg_T	evalarg;
4024 
4025     fill_evalarg_from_eap(&evalarg, eap, eap->skip);
4026     if (eap->skip)
4027     {
4028 	// trans_function_name() doesn't work well when skipping, use eval0()
4029 	// instead to skip to any following command, e.g. for:
4030 	//   :if 0 | call dict.foo().bar() | endif
4031 	++emsg_skip;
4032 	if (eval0(eap->arg, &rettv, eap, &evalarg) != FAIL)
4033 	    clear_tv(&rettv);
4034 	--emsg_skip;
4035 	clear_evalarg(&evalarg, eap);
4036 	return;
4037     }
4038 
4039     tofree = trans_function_name(&arg, NULL, eap->skip,
4040 						     TFN_INT, &fudi, &partial);
4041     if (fudi.fd_newkey != NULL)
4042     {
4043 	// Still need to give an error message for missing key.
4044 	semsg(_(e_dictkey), fudi.fd_newkey);
4045 	vim_free(fudi.fd_newkey);
4046     }
4047     if (tofree == NULL)
4048 	return;
4049 
4050     // Increase refcount on dictionary, it could get deleted when evaluating
4051     // the arguments.
4052     if (fudi.fd_dict != NULL)
4053 	++fudi.fd_dict->dv_refcount;
4054 
4055     // If it is the name of a variable of type VAR_FUNC or VAR_PARTIAL use its
4056     // contents.  For VAR_PARTIAL get its partial, unless we already have one
4057     // from trans_function_name().
4058     len = (int)STRLEN(tofree);
4059     name = deref_func_name(tofree, &len,
4060 				    partial != NULL ? NULL : &partial, FALSE);
4061 
4062     // Skip white space to allow ":call func ()".  Not good, but required for
4063     // backward compatibility.
4064     startarg = skipwhite(arg);
4065     rettv.v_type = VAR_UNKNOWN;	// clear_tv() uses this
4066 
4067     if (*startarg != '(')
4068     {
4069 	semsg(_(e_missing_paren), eap->arg);
4070 	goto end;
4071     }
4072 
4073     /*
4074      * When skipping, evaluate the function once, to find the end of the
4075      * arguments.
4076      * When the function takes a range, this is discovered after the first
4077      * call, and the loop is broken.
4078      */
4079     if (eap->skip)
4080     {
4081 	++emsg_skip;
4082 	lnum = eap->line2;	// do it once, also with an invalid range
4083     }
4084     else
4085 	lnum = eap->line1;
4086     for ( ; lnum <= eap->line2; ++lnum)
4087     {
4088 	funcexe_T funcexe;
4089 
4090 	if (!eap->skip && eap->addr_count > 0)
4091 	{
4092 	    if (lnum > curbuf->b_ml.ml_line_count)
4093 	    {
4094 		// If the function deleted lines or switched to another buffer
4095 		// the line number may become invalid.
4096 		emsg(_(e_invrange));
4097 		break;
4098 	    }
4099 	    curwin->w_cursor.lnum = lnum;
4100 	    curwin->w_cursor.col = 0;
4101 	    curwin->w_cursor.coladd = 0;
4102 	}
4103 	arg = startarg;
4104 
4105 	CLEAR_FIELD(funcexe);
4106 	funcexe.firstline = eap->line1;
4107 	funcexe.lastline = eap->line2;
4108 	funcexe.doesrange = &doesrange;
4109 	funcexe.evaluate = !eap->skip;
4110 	funcexe.partial = partial;
4111 	funcexe.selfdict = fudi.fd_dict;
4112 	if (get_func_tv(name, -1, &rettv, &arg, &evalarg, &funcexe) == FAIL)
4113 	{
4114 	    failed = TRUE;
4115 	    break;
4116 	}
4117 	if (has_watchexpr())
4118 	    dbg_check_breakpoint(eap);
4119 
4120 	// Handle a function returning a Funcref, Dictionary or List.
4121 	if (handle_subscript(&arg, &rettv,
4122 			   eap->skip ? NULL : &EVALARG_EVALUATE, TRUE) == FAIL)
4123 	{
4124 	    failed = TRUE;
4125 	    break;
4126 	}
4127 
4128 	clear_tv(&rettv);
4129 	if (doesrange || eap->skip)
4130 	    break;
4131 
4132 	// Stop when immediately aborting on error, or when an interrupt
4133 	// occurred or an exception was thrown but not caught.
4134 	// get_func_tv() returned OK, so that the check for trailing
4135 	// characters below is executed.
4136 	if (aborting())
4137 	    break;
4138     }
4139     if (eap->skip)
4140 	--emsg_skip;
4141     clear_evalarg(&evalarg, eap);
4142 
4143     // When inside :try we need to check for following "| catch".
4144     if (!failed || eap->cstack->cs_trylevel > 0)
4145     {
4146 	// Check for trailing illegal characters and a following command.
4147 	arg = skipwhite(arg);
4148 	if (!ends_excmd2(eap->arg, arg))
4149 	{
4150 	    if (!failed)
4151 	    {
4152 		emsg_severe = TRUE;
4153 		semsg(_(e_trailing_arg), arg);
4154 	    }
4155 	}
4156 	else
4157 	    eap->nextcmd = check_nextcmd(arg);
4158     }
4159 
4160 end:
4161     dict_unref(fudi.fd_dict);
4162     vim_free(tofree);
4163 }
4164 
4165 /*
4166  * Return from a function.  Possibly makes the return pending.  Also called
4167  * for a pending return at the ":endtry" or after returning from an extra
4168  * do_cmdline().  "reanimate" is used in the latter case.  "is_cmd" is set
4169  * when called due to a ":return" command.  "rettv" may point to a typval_T
4170  * with the return rettv.  Returns TRUE when the return can be carried out,
4171  * FALSE when the return gets pending.
4172  */
4173     int
4174 do_return(
4175     exarg_T	*eap,
4176     int		reanimate,
4177     int		is_cmd,
4178     void	*rettv)
4179 {
4180     int		idx;
4181     cstack_T	*cstack = eap->cstack;
4182 
4183     if (reanimate)
4184 	// Undo the return.
4185 	current_funccal->returned = FALSE;
4186 
4187     /*
4188      * Cleanup (and inactivate) conditionals, but stop when a try conditional
4189      * not in its finally clause (which then is to be executed next) is found.
4190      * In this case, make the ":return" pending for execution at the ":endtry".
4191      * Otherwise, return normally.
4192      */
4193     idx = cleanup_conditionals(eap->cstack, 0, TRUE);
4194     if (idx >= 0)
4195     {
4196 	cstack->cs_pending[idx] = CSTP_RETURN;
4197 
4198 	if (!is_cmd && !reanimate)
4199 	    // A pending return again gets pending.  "rettv" points to an
4200 	    // allocated variable with the rettv of the original ":return"'s
4201 	    // argument if present or is NULL else.
4202 	    cstack->cs_rettv[idx] = rettv;
4203 	else
4204 	{
4205 	    // When undoing a return in order to make it pending, get the stored
4206 	    // return rettv.
4207 	    if (reanimate)
4208 		rettv = current_funccal->rettv;
4209 
4210 	    if (rettv != NULL)
4211 	    {
4212 		// Store the value of the pending return.
4213 		if ((cstack->cs_rettv[idx] = alloc_tv()) != NULL)
4214 		    *(typval_T *)cstack->cs_rettv[idx] = *(typval_T *)rettv;
4215 		else
4216 		    emsg(_(e_outofmem));
4217 	    }
4218 	    else
4219 		cstack->cs_rettv[idx] = NULL;
4220 
4221 	    if (reanimate)
4222 	    {
4223 		// The pending return value could be overwritten by a ":return"
4224 		// without argument in a finally clause; reset the default
4225 		// return value.
4226 		current_funccal->rettv->v_type = VAR_NUMBER;
4227 		current_funccal->rettv->vval.v_number = 0;
4228 	    }
4229 	}
4230 	report_make_pending(CSTP_RETURN, rettv);
4231     }
4232     else
4233     {
4234 	current_funccal->returned = TRUE;
4235 
4236 	// If the return is carried out now, store the return value.  For
4237 	// a return immediately after reanimation, the value is already
4238 	// there.
4239 	if (!reanimate && rettv != NULL)
4240 	{
4241 	    clear_tv(current_funccal->rettv);
4242 	    *current_funccal->rettv = *(typval_T *)rettv;
4243 	    if (!is_cmd)
4244 		vim_free(rettv);
4245 	}
4246     }
4247 
4248     return idx < 0;
4249 }
4250 
4251 /*
4252  * Free the variable with a pending return value.
4253  */
4254     void
4255 discard_pending_return(void *rettv)
4256 {
4257     free_tv((typval_T *)rettv);
4258 }
4259 
4260 /*
4261  * Generate a return command for producing the value of "rettv".  The result
4262  * is an allocated string.  Used by report_pending() for verbose messages.
4263  */
4264     char_u *
4265 get_return_cmd(void *rettv)
4266 {
4267     char_u	*s = NULL;
4268     char_u	*tofree = NULL;
4269     char_u	numbuf[NUMBUFLEN];
4270 
4271     if (rettv != NULL)
4272 	s = echo_string((typval_T *)rettv, &tofree, numbuf, 0);
4273     if (s == NULL)
4274 	s = (char_u *)"";
4275 
4276     STRCPY(IObuff, ":return ");
4277     STRNCPY(IObuff + 8, s, IOSIZE - 8);
4278     if (STRLEN(s) + 8 >= IOSIZE)
4279 	STRCPY(IObuff + IOSIZE - 4, "...");
4280     vim_free(tofree);
4281     return vim_strsave(IObuff);
4282 }
4283 
4284 /*
4285  * Get next function line.
4286  * Called by do_cmdline() to get the next line.
4287  * Returns allocated string, or NULL for end of function.
4288  */
4289     char_u *
4290 get_func_line(
4291     int	    c UNUSED,
4292     void    *cookie,
4293     int	    indent UNUSED,
4294     getline_opt_T options UNUSED)
4295 {
4296     funccall_T	*fcp = (funccall_T *)cookie;
4297     ufunc_T	*fp = fcp->func;
4298     char_u	*retval;
4299     garray_T	*gap;  // growarray with function lines
4300 
4301     // If breakpoints have been added/deleted need to check for it.
4302     if (fcp->dbg_tick != debug_tick)
4303     {
4304 	fcp->breakpoint = dbg_find_breakpoint(FALSE, fp->uf_name,
4305 							       SOURCING_LNUM);
4306 	fcp->dbg_tick = debug_tick;
4307     }
4308 #ifdef FEAT_PROFILE
4309     if (do_profiling == PROF_YES)
4310 	func_line_end(cookie);
4311 #endif
4312 
4313     gap = &fp->uf_lines;
4314     if (((fp->uf_flags & FC_ABORT) && did_emsg && !aborted_in_try())
4315 	    || fcp->returned)
4316 	retval = NULL;
4317     else
4318     {
4319 	// Skip NULL lines (continuation lines).
4320 	while (fcp->linenr < gap->ga_len
4321 			  && ((char_u **)(gap->ga_data))[fcp->linenr] == NULL)
4322 	    ++fcp->linenr;
4323 	if (fcp->linenr >= gap->ga_len)
4324 	    retval = NULL;
4325 	else
4326 	{
4327 	    retval = vim_strsave(((char_u **)(gap->ga_data))[fcp->linenr++]);
4328 	    SOURCING_LNUM = fcp->linenr;
4329 #ifdef FEAT_PROFILE
4330 	    if (do_profiling == PROF_YES)
4331 		func_line_start(cookie);
4332 #endif
4333 	}
4334     }
4335 
4336     // Did we encounter a breakpoint?
4337     if (fcp->breakpoint != 0 && fcp->breakpoint <= SOURCING_LNUM)
4338     {
4339 	dbg_breakpoint(fp->uf_name, SOURCING_LNUM);
4340 	// Find next breakpoint.
4341 	fcp->breakpoint = dbg_find_breakpoint(FALSE, fp->uf_name,
4342 							       SOURCING_LNUM);
4343 	fcp->dbg_tick = debug_tick;
4344     }
4345 
4346     return retval;
4347 }
4348 
4349 /*
4350  * Return TRUE if the currently active function should be ended, because a
4351  * return was encountered or an error occurred.  Used inside a ":while".
4352  */
4353     int
4354 func_has_ended(void *cookie)
4355 {
4356     funccall_T  *fcp = (funccall_T *)cookie;
4357 
4358     // Ignore the "abort" flag if the abortion behavior has been changed due to
4359     // an error inside a try conditional.
4360     return (((fcp->func->uf_flags & FC_ABORT) && did_emsg && !aborted_in_try())
4361 	    || fcp->returned);
4362 }
4363 
4364 /*
4365  * return TRUE if cookie indicates a function which "abort"s on errors.
4366  */
4367     int
4368 func_has_abort(
4369     void    *cookie)
4370 {
4371     return ((funccall_T *)cookie)->func->uf_flags & FC_ABORT;
4372 }
4373 
4374 
4375 /*
4376  * Turn "dict.Func" into a partial for "Func" bound to "dict".
4377  * Don't do this when "Func" is already a partial that was bound
4378  * explicitly (pt_auto is FALSE).
4379  * Changes "rettv" in-place.
4380  * Returns the updated "selfdict_in".
4381  */
4382     dict_T *
4383 make_partial(dict_T *selfdict_in, typval_T *rettv)
4384 {
4385     char_u	*fname;
4386     char_u	*tofree = NULL;
4387     ufunc_T	*fp;
4388     char_u	fname_buf[FLEN_FIXED + 1];
4389     int		error;
4390     dict_T	*selfdict = selfdict_in;
4391 
4392     if (rettv->v_type == VAR_PARTIAL && rettv->vval.v_partial->pt_func != NULL)
4393 	fp = rettv->vval.v_partial->pt_func;
4394     else
4395     {
4396 	fname = rettv->v_type == VAR_FUNC ? rettv->vval.v_string
4397 					      : rettv->vval.v_partial->pt_name;
4398 	// Translate "s:func" to the stored function name.
4399 	fname = fname_trans_sid(fname, fname_buf, &tofree, &error);
4400 	fp = find_func(fname, FALSE, NULL);
4401 	vim_free(tofree);
4402     }
4403 
4404     if (fp != NULL && (fp->uf_flags & FC_DICT))
4405     {
4406 	partial_T	*pt = ALLOC_CLEAR_ONE(partial_T);
4407 
4408 	if (pt != NULL)
4409 	{
4410 	    pt->pt_refcount = 1;
4411 	    pt->pt_dict = selfdict;
4412 	    pt->pt_auto = TRUE;
4413 	    selfdict = NULL;
4414 	    if (rettv->v_type == VAR_FUNC)
4415 	    {
4416 		// Just a function: Take over the function name and use
4417 		// selfdict.
4418 		pt->pt_name = rettv->vval.v_string;
4419 	    }
4420 	    else
4421 	    {
4422 		partial_T	*ret_pt = rettv->vval.v_partial;
4423 		int		i;
4424 
4425 		// Partial: copy the function name, use selfdict and copy
4426 		// args.  Can't take over name or args, the partial might
4427 		// be referenced elsewhere.
4428 		if (ret_pt->pt_name != NULL)
4429 		{
4430 		    pt->pt_name = vim_strsave(ret_pt->pt_name);
4431 		    func_ref(pt->pt_name);
4432 		}
4433 		else
4434 		{
4435 		    pt->pt_func = ret_pt->pt_func;
4436 		    func_ptr_ref(pt->pt_func);
4437 		}
4438 		if (ret_pt->pt_argc > 0)
4439 		{
4440 		    pt->pt_argv = ALLOC_MULT(typval_T, ret_pt->pt_argc);
4441 		    if (pt->pt_argv == NULL)
4442 			// out of memory: drop the arguments
4443 			pt->pt_argc = 0;
4444 		    else
4445 		    {
4446 			pt->pt_argc = ret_pt->pt_argc;
4447 			for (i = 0; i < pt->pt_argc; i++)
4448 			    copy_tv(&ret_pt->pt_argv[i], &pt->pt_argv[i]);
4449 		    }
4450 		}
4451 		partial_unref(ret_pt);
4452 	    }
4453 	    rettv->v_type = VAR_PARTIAL;
4454 	    rettv->vval.v_partial = pt;
4455 	}
4456     }
4457     return selfdict;
4458 }
4459 
4460 /*
4461  * Return the name of the executed function.
4462  */
4463     char_u *
4464 func_name(void *cookie)
4465 {
4466     return ((funccall_T *)cookie)->func->uf_name;
4467 }
4468 
4469 /*
4470  * Return the address holding the next breakpoint line for a funccall cookie.
4471  */
4472     linenr_T *
4473 func_breakpoint(void *cookie)
4474 {
4475     return &((funccall_T *)cookie)->breakpoint;
4476 }
4477 
4478 /*
4479  * Return the address holding the debug tick for a funccall cookie.
4480  */
4481     int *
4482 func_dbg_tick(void *cookie)
4483 {
4484     return &((funccall_T *)cookie)->dbg_tick;
4485 }
4486 
4487 /*
4488  * Return the nesting level for a funccall cookie.
4489  */
4490     int
4491 func_level(void *cookie)
4492 {
4493     return ((funccall_T *)cookie)->level;
4494 }
4495 
4496 /*
4497  * Return TRUE when a function was ended by a ":return" command.
4498  */
4499     int
4500 current_func_returned(void)
4501 {
4502     return current_funccal->returned;
4503 }
4504 
4505     int
4506 free_unref_funccal(int copyID, int testing)
4507 {
4508     int		did_free = FALSE;
4509     int		did_free_funccal = FALSE;
4510     funccall_T	*fc, **pfc;
4511 
4512     for (pfc = &previous_funccal; *pfc != NULL; )
4513     {
4514 	if (can_free_funccal(*pfc, copyID))
4515 	{
4516 	    fc = *pfc;
4517 	    *pfc = fc->caller;
4518 	    free_funccal_contents(fc);
4519 	    did_free = TRUE;
4520 	    did_free_funccal = TRUE;
4521 	}
4522 	else
4523 	    pfc = &(*pfc)->caller;
4524     }
4525     if (did_free_funccal)
4526 	// When a funccal was freed some more items might be garbage
4527 	// collected, so run again.
4528 	(void)garbage_collect(testing);
4529 
4530     return did_free;
4531 }
4532 
4533 /*
4534  * Get function call environment based on backtrace debug level
4535  */
4536     static funccall_T *
4537 get_funccal(void)
4538 {
4539     int		i;
4540     funccall_T	*funccal;
4541     funccall_T	*temp_funccal;
4542 
4543     funccal = current_funccal;
4544     if (debug_backtrace_level > 0)
4545     {
4546 	for (i = 0; i < debug_backtrace_level; i++)
4547 	{
4548 	    temp_funccal = funccal->caller;
4549 	    if (temp_funccal)
4550 		funccal = temp_funccal;
4551 	    else
4552 		// backtrace level overflow. reset to max
4553 		debug_backtrace_level = i;
4554 	}
4555     }
4556     return funccal;
4557 }
4558 
4559 /*
4560  * Return the hashtable used for local variables in the current funccal.
4561  * Return NULL if there is no current funccal.
4562  */
4563     hashtab_T *
4564 get_funccal_local_ht()
4565 {
4566     if (current_funccal == NULL || current_funccal->l_vars.dv_refcount == 0)
4567 	return NULL;
4568     return &get_funccal()->l_vars.dv_hashtab;
4569 }
4570 
4571 /*
4572  * Return the l: scope variable.
4573  * Return NULL if there is no current funccal.
4574  */
4575     dictitem_T *
4576 get_funccal_local_var()
4577 {
4578     if (current_funccal == NULL || current_funccal->l_vars.dv_refcount == 0)
4579 	return NULL;
4580     return &get_funccal()->l_vars_var;
4581 }
4582 
4583 /*
4584  * Return the hashtable used for argument in the current funccal.
4585  * Return NULL if there is no current funccal.
4586  */
4587     hashtab_T *
4588 get_funccal_args_ht()
4589 {
4590     if (current_funccal == NULL || current_funccal->l_vars.dv_refcount == 0)
4591 	return NULL;
4592     return &get_funccal()->l_avars.dv_hashtab;
4593 }
4594 
4595 /*
4596  * Return the a: scope variable.
4597  * Return NULL if there is no current funccal.
4598  */
4599     dictitem_T *
4600 get_funccal_args_var()
4601 {
4602     if (current_funccal == NULL || current_funccal->l_vars.dv_refcount == 0)
4603 	return NULL;
4604     return &get_funccal()->l_avars_var;
4605 }
4606 
4607 /*
4608  * List function variables, if there is a function.
4609  */
4610     void
4611 list_func_vars(int *first)
4612 {
4613     if (current_funccal != NULL && current_funccal->l_vars.dv_refcount > 0)
4614 	list_hashtable_vars(&current_funccal->l_vars.dv_hashtab,
4615 							   "l:", FALSE, first);
4616 }
4617 
4618 /*
4619  * If "ht" is the hashtable for local variables in the current funccal, return
4620  * the dict that contains it.
4621  * Otherwise return NULL.
4622  */
4623     dict_T *
4624 get_current_funccal_dict(hashtab_T *ht)
4625 {
4626     if (current_funccal != NULL
4627 	    && ht == &current_funccal->l_vars.dv_hashtab)
4628 	return &current_funccal->l_vars;
4629     return NULL;
4630 }
4631 
4632 /*
4633  * Search hashitem in parent scope.
4634  */
4635     hashitem_T *
4636 find_hi_in_scoped_ht(char_u *name, hashtab_T **pht)
4637 {
4638     funccall_T	*old_current_funccal = current_funccal;
4639     hashtab_T	*ht;
4640     hashitem_T	*hi = NULL;
4641     char_u	*varname;
4642 
4643     if (current_funccal == NULL || current_funccal->func->uf_scoped == NULL)
4644       return NULL;
4645 
4646     // Search in parent scope, which can be referenced from a lambda.
4647     current_funccal = current_funccal->func->uf_scoped;
4648     while (current_funccal != NULL)
4649     {
4650 	ht = find_var_ht(name, &varname);
4651 	if (ht != NULL && *varname != NUL)
4652 	{
4653 	    hi = hash_find(ht, varname);
4654 	    if (!HASHITEM_EMPTY(hi))
4655 	    {
4656 		*pht = ht;
4657 		break;
4658 	    }
4659 	}
4660 	if (current_funccal == current_funccal->func->uf_scoped)
4661 	    break;
4662 	current_funccal = current_funccal->func->uf_scoped;
4663     }
4664     current_funccal = old_current_funccal;
4665 
4666     return hi;
4667 }
4668 
4669 /*
4670  * Search variable in parent scope.
4671  */
4672     dictitem_T *
4673 find_var_in_scoped_ht(char_u *name, int no_autoload)
4674 {
4675     dictitem_T	*v = NULL;
4676     funccall_T	*old_current_funccal = current_funccal;
4677     hashtab_T	*ht;
4678     char_u	*varname;
4679 
4680     if (current_funccal == NULL || current_funccal->func->uf_scoped == NULL)
4681 	return NULL;
4682 
4683     // Search in parent scope which is possible to reference from lambda
4684     current_funccal = current_funccal->func->uf_scoped;
4685     while (current_funccal)
4686     {
4687 	ht = find_var_ht(name, &varname);
4688 	if (ht != NULL && *varname != NUL)
4689 	{
4690 	    v = find_var_in_ht(ht, *name, varname, no_autoload);
4691 	    if (v != NULL)
4692 		break;
4693 	}
4694 	if (current_funccal == current_funccal->func->uf_scoped)
4695 	    break;
4696 	current_funccal = current_funccal->func->uf_scoped;
4697     }
4698     current_funccal = old_current_funccal;
4699 
4700     return v;
4701 }
4702 
4703 /*
4704  * Set "copyID + 1" in previous_funccal and callers.
4705  */
4706     int
4707 set_ref_in_previous_funccal(int copyID)
4708 {
4709     int		abort = FALSE;
4710     funccall_T	*fc;
4711 
4712     for (fc = previous_funccal; !abort && fc != NULL; fc = fc->caller)
4713     {
4714 	fc->fc_copyID = copyID + 1;
4715 	abort = abort
4716 	    || set_ref_in_ht(&fc->l_vars.dv_hashtab, copyID + 1, NULL)
4717 	    || set_ref_in_ht(&fc->l_avars.dv_hashtab, copyID + 1, NULL)
4718 	    || set_ref_in_list_items(&fc->l_varlist, copyID + 1, NULL);
4719     }
4720     return abort;
4721 }
4722 
4723     static int
4724 set_ref_in_funccal(funccall_T *fc, int copyID)
4725 {
4726     int abort = FALSE;
4727 
4728     if (fc->fc_copyID != copyID)
4729     {
4730 	fc->fc_copyID = copyID;
4731 	abort = abort
4732 	    || set_ref_in_ht(&fc->l_vars.dv_hashtab, copyID, NULL)
4733 	    || set_ref_in_ht(&fc->l_avars.dv_hashtab, copyID, NULL)
4734 	    || set_ref_in_list_items(&fc->l_varlist, copyID, NULL)
4735 	    || set_ref_in_func(NULL, fc->func, copyID);
4736     }
4737     return abort;
4738 }
4739 
4740 /*
4741  * Set "copyID" in all local vars and arguments in the call stack.
4742  */
4743     int
4744 set_ref_in_call_stack(int copyID)
4745 {
4746     int			abort = FALSE;
4747     funccall_T		*fc;
4748     funccal_entry_T	*entry;
4749 
4750     for (fc = current_funccal; !abort && fc != NULL; fc = fc->caller)
4751 	abort = abort || set_ref_in_funccal(fc, copyID);
4752 
4753     // Also go through the funccal_stack.
4754     for (entry = funccal_stack; !abort && entry != NULL; entry = entry->next)
4755 	for (fc = entry->top_funccal; !abort && fc != NULL; fc = fc->caller)
4756 	    abort = abort || set_ref_in_funccal(fc, copyID);
4757 
4758     return abort;
4759 }
4760 
4761 /*
4762  * Set "copyID" in all functions available by name.
4763  */
4764     int
4765 set_ref_in_functions(int copyID)
4766 {
4767     int		todo;
4768     hashitem_T	*hi = NULL;
4769     int		abort = FALSE;
4770     ufunc_T	*fp;
4771 
4772     todo = (int)func_hashtab.ht_used;
4773     for (hi = func_hashtab.ht_array; todo > 0 && !got_int; ++hi)
4774     {
4775 	if (!HASHITEM_EMPTY(hi))
4776 	{
4777 	    --todo;
4778 	    fp = HI2UF(hi);
4779 	    if (!func_name_refcount(fp->uf_name))
4780 		abort = abort || set_ref_in_func(NULL, fp, copyID);
4781 	}
4782     }
4783     return abort;
4784 }
4785 
4786 /*
4787  * Set "copyID" in all function arguments.
4788  */
4789     int
4790 set_ref_in_func_args(int copyID)
4791 {
4792     int i;
4793     int abort = FALSE;
4794 
4795     for (i = 0; i < funcargs.ga_len; ++i)
4796 	abort = abort || set_ref_in_item(((typval_T **)funcargs.ga_data)[i],
4797 							  copyID, NULL, NULL);
4798     return abort;
4799 }
4800 
4801 /*
4802  * Mark all lists and dicts referenced through function "name" with "copyID".
4803  * Returns TRUE if setting references failed somehow.
4804  */
4805     int
4806 set_ref_in_func(char_u *name, ufunc_T *fp_in, int copyID)
4807 {
4808     ufunc_T	*fp = fp_in;
4809     funccall_T	*fc;
4810     int		error = FCERR_NONE;
4811     char_u	fname_buf[FLEN_FIXED + 1];
4812     char_u	*tofree = NULL;
4813     char_u	*fname;
4814     int		abort = FALSE;
4815 
4816     if (name == NULL && fp_in == NULL)
4817 	return FALSE;
4818 
4819     if (fp_in == NULL)
4820     {
4821 	fname = fname_trans_sid(name, fname_buf, &tofree, &error);
4822 	fp = find_func(fname, FALSE, NULL);
4823     }
4824     if (fp != NULL)
4825     {
4826 	for (fc = fp->uf_scoped; fc != NULL; fc = fc->func->uf_scoped)
4827 	    abort = abort || set_ref_in_funccal(fc, copyID);
4828     }
4829 
4830     vim_free(tofree);
4831     return abort;
4832 }
4833 
4834 #endif // FEAT_EVAL
4835