xref: /vim-8.2.3635/src/userfunc.c (revision fa79be6b)
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 
2378     if (fdp != NULL)
2379 	CLEAR_POINTER(fdp);
2380     start = *pp;
2381 
2382     // Check for hard coded <SNR>: already translated function ID (from a user
2383     // command).
2384     if ((*pp)[0] == K_SPECIAL && (*pp)[1] == KS_EXTRA
2385 						   && (*pp)[2] == (int)KE_SNR)
2386     {
2387 	*pp += 3;
2388 	len = get_id_len(pp) + 3;
2389 	return vim_strnsave(start, len);
2390     }
2391 
2392     // A name starting with "<SID>" or "<SNR>" is local to a script.  But
2393     // don't skip over "s:", get_lval() needs it for "s:dict.func".
2394     lead = eval_fname_script(start);
2395     if (lead > 2)
2396 	start += lead;
2397 
2398     // Note that TFN_ flags use the same values as GLV_ flags.
2399     end = get_lval(start, NULL, &lv, FALSE, skip, flags | GLV_READ_ONLY,
2400 					      lead > 2 ? 0 : FNE_CHECK_START);
2401     if (end == start)
2402     {
2403 	if (!skip)
2404 	    emsg(_("E129: Function name required"));
2405 	goto theend;
2406     }
2407     if (end == NULL || (lv.ll_tv != NULL && (lead > 2 || lv.ll_range)))
2408     {
2409 	/*
2410 	 * Report an invalid expression in braces, unless the expression
2411 	 * evaluation has been cancelled due to an aborting error, an
2412 	 * interrupt, or an exception.
2413 	 */
2414 	if (!aborting())
2415 	{
2416 	    if (end != NULL)
2417 		semsg(_(e_invarg2), start);
2418 	}
2419 	else
2420 	    *pp = find_name_end(start, NULL, NULL, FNE_INCL_BR);
2421 	goto theend;
2422     }
2423 
2424     if (lv.ll_tv != NULL)
2425     {
2426 	if (fdp != NULL)
2427 	{
2428 	    fdp->fd_dict = lv.ll_dict;
2429 	    fdp->fd_newkey = lv.ll_newkey;
2430 	    lv.ll_newkey = NULL;
2431 	    fdp->fd_di = lv.ll_di;
2432 	}
2433 	if (lv.ll_tv->v_type == VAR_FUNC && lv.ll_tv->vval.v_string != NULL)
2434 	{
2435 	    name = vim_strsave(lv.ll_tv->vval.v_string);
2436 	    *pp = end;
2437 	}
2438 	else if (lv.ll_tv->v_type == VAR_PARTIAL
2439 					  && lv.ll_tv->vval.v_partial != NULL)
2440 	{
2441 	    name = vim_strsave(partial_name(lv.ll_tv->vval.v_partial));
2442 	    *pp = end;
2443 	    if (partial != NULL)
2444 		*partial = lv.ll_tv->vval.v_partial;
2445 	}
2446 	else
2447 	{
2448 	    if (!skip && !(flags & TFN_QUIET) && (fdp == NULL
2449 			     || lv.ll_dict == NULL || fdp->fd_newkey == NULL))
2450 		emsg(_(e_funcref));
2451 	    else
2452 		*pp = end;
2453 	    name = NULL;
2454 	}
2455 	goto theend;
2456     }
2457 
2458     if (lv.ll_name == NULL)
2459     {
2460 	// Error found, but continue after the function name.
2461 	*pp = end;
2462 	goto theend;
2463     }
2464 
2465     // Check if the name is a Funcref.  If so, use the value.
2466     if (lv.ll_exp_name != NULL)
2467     {
2468 	len = (int)STRLEN(lv.ll_exp_name);
2469 	name = deref_func_name(lv.ll_exp_name, &len, partial,
2470 						     flags & TFN_NO_AUTOLOAD);
2471 	if (name == lv.ll_exp_name)
2472 	    name = NULL;
2473     }
2474     else if (!(flags & TFN_NO_DEREF))
2475     {
2476 	len = (int)(end - *pp);
2477 	name = deref_func_name(*pp, &len, partial, flags & TFN_NO_AUTOLOAD);
2478 	if (name == *pp)
2479 	    name = NULL;
2480     }
2481     if (name != NULL)
2482     {
2483 	name = vim_strsave(name);
2484 	*pp = end;
2485 	if (STRNCMP(name, "<SNR>", 5) == 0)
2486 	{
2487 	    // Change "<SNR>" to the byte sequence.
2488 	    name[0] = K_SPECIAL;
2489 	    name[1] = KS_EXTRA;
2490 	    name[2] = (int)KE_SNR;
2491 	    mch_memmove(name + 3, name + 5, STRLEN(name + 5) + 1);
2492 	}
2493 	goto theend;
2494     }
2495 
2496     if (lv.ll_exp_name != NULL)
2497     {
2498 	len = (int)STRLEN(lv.ll_exp_name);
2499 	if (lead <= 2 && lv.ll_name == lv.ll_exp_name
2500 					 && STRNCMP(lv.ll_name, "s:", 2) == 0)
2501 	{
2502 	    // When there was "s:" already or the name expanded to get a
2503 	    // leading "s:" then remove it.
2504 	    lv.ll_name += 2;
2505 	    len -= 2;
2506 	    lead = 2;
2507 	}
2508     }
2509     else
2510     {
2511 	// skip over "s:" and "g:"
2512 	if (lead == 2 || (lv.ll_name[0] == 'g' && lv.ll_name[1] == ':'))
2513 	{
2514 	    if (is_global != NULL && lv.ll_name[0] == 'g')
2515 		*is_global = TRUE;
2516 	    lv.ll_name += 2;
2517 	}
2518 	len = (int)(end - lv.ll_name);
2519     }
2520 
2521     // In Vim9 script a user function is script-local by default.
2522     vim9script = ASCII_ISUPPER(*start) && in_vim9script();
2523 
2524     /*
2525      * Copy the function name to allocated memory.
2526      * Accept <SID>name() inside a script, translate into <SNR>123_name().
2527      * Accept <SNR>123_name() outside a script.
2528      */
2529     if (skip)
2530 	lead = 0;	// do nothing
2531     else if (lead > 0 || vim9script)
2532     {
2533 	if (!vim9script)
2534 	    lead = 3;
2535 	if (vim9script || (lv.ll_exp_name != NULL
2536 					     && eval_fname_sid(lv.ll_exp_name))
2537 						       || eval_fname_sid(*pp))
2538 	{
2539 	    // It's script-local, "s:" or "<SID>"
2540 	    if (current_sctx.sc_sid <= 0)
2541 	    {
2542 		emsg(_(e_usingsid));
2543 		goto theend;
2544 	    }
2545 	    sprintf((char *)sid_buf, "%ld_", (long)current_sctx.sc_sid);
2546 	    if (vim9script)
2547 		extra = 3 + (int)STRLEN(sid_buf);
2548 	    else
2549 		lead += (int)STRLEN(sid_buf);
2550 	}
2551     }
2552     else if (!(flags & TFN_INT) && builtin_function(lv.ll_name, len))
2553     {
2554 	semsg(_("E128: Function name must start with a capital or \"s:\": %s"),
2555 								       start);
2556 	goto theend;
2557     }
2558     if (!skip && !(flags & TFN_QUIET) && !(flags & TFN_NO_DEREF))
2559     {
2560 	char_u *cp = vim_strchr(lv.ll_name, ':');
2561 
2562 	if (cp != NULL && cp < end)
2563 	{
2564 	    semsg(_("E884: Function name cannot contain a colon: %s"), start);
2565 	    goto theend;
2566 	}
2567     }
2568 
2569     name = alloc(len + lead + extra + 1);
2570     if (name != NULL)
2571     {
2572 	if (!skip && (lead > 0 || vim9script))
2573 	{
2574 	    name[0] = K_SPECIAL;
2575 	    name[1] = KS_EXTRA;
2576 	    name[2] = (int)KE_SNR;
2577 	    if (vim9script || lead > 3)	// If it's "<SID>"
2578 		STRCPY(name + 3, sid_buf);
2579 	}
2580 	mch_memmove(name + lead + extra, lv.ll_name, (size_t)len);
2581 	name[lead + extra + len] = NUL;
2582     }
2583     *pp = end;
2584 
2585 theend:
2586     clear_lval(&lv);
2587     return name;
2588 }
2589 
2590 /*
2591  * Assuming "name" is the result of trans_function_name() and it was prefixed
2592  * to use the script-local name, return the unmodified name (points into
2593  * "name").  Otherwise return NULL.
2594  * This can be used to first search for a script-local function and fall back
2595  * to the global function if not found.
2596  */
2597     char_u *
2598 untrans_function_name(char_u *name)
2599 {
2600     char_u *p;
2601 
2602     if (*name == K_SPECIAL && in_vim9script())
2603     {
2604 	p = vim_strchr(name, '_');
2605 	if (p != NULL)
2606 	    return p + 1;
2607     }
2608     return NULL;
2609 }
2610 
2611 /*
2612  * List functions.  When "regmatch" is NULL all of then.
2613  * Otherwise functions matching "regmatch".
2614  */
2615     static void
2616 list_functions(regmatch_T *regmatch)
2617 {
2618     int		changed = func_hashtab.ht_changed;
2619     long_u	todo = func_hashtab.ht_used;
2620     hashitem_T	*hi;
2621 
2622     for (hi = func_hashtab.ht_array; todo > 0 && !got_int; ++hi)
2623     {
2624 	if (!HASHITEM_EMPTY(hi))
2625 	{
2626 	    ufunc_T	*fp = HI2UF(hi);
2627 
2628 	    --todo;
2629 	    if ((fp->uf_flags & FC_DEAD) == 0
2630 		    && (regmatch == NULL
2631 			? !message_filtered(fp->uf_name)
2632 			    && !func_name_refcount(fp->uf_name)
2633 			: !isdigit(*fp->uf_name)
2634 			    && vim_regexec(regmatch, fp->uf_name, 0)))
2635 	    {
2636 		list_func_head(fp, FALSE);
2637 		if (changed != func_hashtab.ht_changed)
2638 		{
2639 		    emsg(_("E454: function list was modified"));
2640 		    return;
2641 		}
2642 	    }
2643 	}
2644     }
2645 }
2646 
2647 /*
2648  * ":function" also supporting nested ":def".
2649  * When "name_arg" is not NULL this is a nested function, using "name_arg" for
2650  * the function name.
2651  * Returns a pointer to the function or NULL if no function defined.
2652  */
2653     ufunc_T *
2654 def_function(exarg_T *eap, char_u *name_arg)
2655 {
2656     char_u	*theline;
2657     char_u	*line_to_free = NULL;
2658     int		j;
2659     int		c;
2660     int		saved_did_emsg;
2661     int		saved_wait_return = need_wait_return;
2662     char_u	*name = name_arg;
2663     int		is_global = FALSE;
2664     char_u	*p;
2665     char_u	*arg;
2666     char_u	*line_arg = NULL;
2667     garray_T	newargs;
2668     garray_T	argtypes;
2669     garray_T	default_args;
2670     garray_T	newlines;
2671     int		varargs = FALSE;
2672     int		flags = 0;
2673     char_u	*ret_type = NULL;
2674     ufunc_T	*fp = NULL;
2675     int		overwrite = FALSE;
2676     int		indent;
2677     int		nesting;
2678 #define MAX_FUNC_NESTING 50
2679     char	nesting_def[MAX_FUNC_NESTING];
2680     dictitem_T	*v;
2681     funcdict_T	fudi;
2682     static int	func_nr = 0;	    // number for nameless function
2683     int		paren;
2684     hashitem_T	*hi;
2685     getline_opt_T getline_options = GETLINE_CONCAT_CONT;
2686     linenr_T	sourcing_lnum_off;
2687     linenr_T	sourcing_lnum_top;
2688     int		is_heredoc = FALSE;
2689     char_u	*skip_until = NULL;
2690     char_u	*heredoc_trimmed = NULL;
2691     int		vim9script = in_vim9script();
2692     imported_T	*import = NULL;
2693 
2694     /*
2695      * ":function" without argument: list functions.
2696      */
2697     if (ends_excmd2(eap->cmd, eap->arg))
2698     {
2699 	if (!eap->skip)
2700 	    list_functions(NULL);
2701 	eap->nextcmd = check_nextcmd(eap->arg);
2702 	return NULL;
2703     }
2704 
2705     /*
2706      * ":function /pat": list functions matching pattern.
2707      */
2708     if (*eap->arg == '/')
2709     {
2710 	p = skip_regexp(eap->arg + 1, '/', TRUE);
2711 	if (!eap->skip)
2712 	{
2713 	    regmatch_T	regmatch;
2714 
2715 	    c = *p;
2716 	    *p = NUL;
2717 	    regmatch.regprog = vim_regcomp(eap->arg + 1, RE_MAGIC);
2718 	    *p = c;
2719 	    if (regmatch.regprog != NULL)
2720 	    {
2721 		regmatch.rm_ic = p_ic;
2722 		list_functions(&regmatch);
2723 		vim_regfree(regmatch.regprog);
2724 	    }
2725 	}
2726 	if (*p == '/')
2727 	    ++p;
2728 	eap->nextcmd = check_nextcmd(p);
2729 	return NULL;
2730     }
2731 
2732     ga_init(&newargs);
2733     ga_init(&argtypes);
2734     ga_init(&default_args);
2735 
2736     /*
2737      * Get the function name.  There are these situations:
2738      * func	    normal function name
2739      *		    "name" == func, "fudi.fd_dict" == NULL
2740      * dict.func    new dictionary entry
2741      *		    "name" == NULL, "fudi.fd_dict" set,
2742      *		    "fudi.fd_di" == NULL, "fudi.fd_newkey" == func
2743      * dict.func    existing dict entry with a Funcref
2744      *		    "name" == func, "fudi.fd_dict" set,
2745      *		    "fudi.fd_di" set, "fudi.fd_newkey" == NULL
2746      * dict.func    existing dict entry that's not a Funcref
2747      *		    "name" == NULL, "fudi.fd_dict" set,
2748      *		    "fudi.fd_di" set, "fudi.fd_newkey" == NULL
2749      * s:func	    script-local function name
2750      * g:func	    global function name, same as "func"
2751      */
2752     p = eap->arg;
2753     if (name_arg != NULL)
2754     {
2755 	// nested function, argument is (args).
2756 	paren = TRUE;
2757 	CLEAR_FIELD(fudi);
2758     }
2759     else
2760     {
2761 	name = trans_function_name(&p, &is_global, eap->skip,
2762 						 TFN_NO_AUTOLOAD, &fudi, NULL);
2763 	paren = (vim_strchr(p, '(') != NULL);
2764 	if (name == NULL && (fudi.fd_dict == NULL || !paren) && !eap->skip)
2765 	{
2766 	    /*
2767 	     * Return on an invalid expression in braces, unless the expression
2768 	     * evaluation has been cancelled due to an aborting error, an
2769 	     * interrupt, or an exception.
2770 	     */
2771 	    if (!aborting())
2772 	    {
2773 		if (!eap->skip && fudi.fd_newkey != NULL)
2774 		    semsg(_(e_dictkey), fudi.fd_newkey);
2775 		vim_free(fudi.fd_newkey);
2776 		return NULL;
2777 	    }
2778 	    else
2779 		eap->skip = TRUE;
2780 	}
2781     }
2782 
2783     // An error in a function call during evaluation of an expression in magic
2784     // braces should not cause the function not to be defined.
2785     saved_did_emsg = did_emsg;
2786     did_emsg = FALSE;
2787 
2788     /*
2789      * ":function func" with only function name: list function.
2790      */
2791     if (!paren)
2792     {
2793 	if (!ends_excmd(*skipwhite(p)))
2794 	{
2795 	    semsg(_(e_trailing_arg), p);
2796 	    goto ret_free;
2797 	}
2798 	eap->nextcmd = check_nextcmd(p);
2799 	if (eap->nextcmd != NULL)
2800 	    *p = NUL;
2801 	if (!eap->skip && !got_int)
2802 	{
2803 	    fp = find_func(name, is_global, NULL);
2804 	    if (fp == NULL && ASCII_ISUPPER(*eap->arg))
2805 	    {
2806 		char_u *up = untrans_function_name(name);
2807 
2808 		// With Vim9 script the name was made script-local, if not
2809 		// found try again with the original name.
2810 		if (up != NULL)
2811 		    fp = find_func(up, FALSE, NULL);
2812 	    }
2813 
2814 	    if (fp != NULL)
2815 	    {
2816 		list_func_head(fp, TRUE);
2817 		for (j = 0; j < fp->uf_lines.ga_len && !got_int; ++j)
2818 		{
2819 		    if (FUNCLINE(fp, j) == NULL)
2820 			continue;
2821 		    msg_putchar('\n');
2822 		    msg_outnum((long)(j + 1));
2823 		    if (j < 9)
2824 			msg_putchar(' ');
2825 		    if (j < 99)
2826 			msg_putchar(' ');
2827 		    msg_prt_line(FUNCLINE(fp, j), FALSE);
2828 		    out_flush();	// show a line at a time
2829 		    ui_breakcheck();
2830 		}
2831 		if (!got_int)
2832 		{
2833 		    msg_putchar('\n');
2834 		    if (fp->uf_def_status != UF_NOT_COMPILED)
2835 			msg_puts("   enddef");
2836 		    else
2837 			msg_puts("   endfunction");
2838 		}
2839 	    }
2840 	    else
2841 		emsg_funcname(N_("E123: Undefined function: %s"), eap->arg);
2842 	}
2843 	goto ret_free;
2844     }
2845 
2846     /*
2847      * ":function name(arg1, arg2)" Define function.
2848      */
2849     p = skipwhite(p);
2850     if (*p != '(')
2851     {
2852 	if (!eap->skip)
2853 	{
2854 	    semsg(_("E124: Missing '(': %s"), eap->arg);
2855 	    goto ret_free;
2856 	}
2857 	// attempt to continue by skipping some text
2858 	if (vim_strchr(p, '(') != NULL)
2859 	    p = vim_strchr(p, '(');
2860     }
2861     p = skipwhite(p + 1);
2862 
2863     // In Vim9 script only global functions can be redefined.
2864     if (vim9script && eap->forceit && !is_global)
2865     {
2866 	emsg(_(e_nobang));
2867 	goto ret_free;
2868     }
2869 
2870     ga_init2(&newlines, (int)sizeof(char_u *), 3);
2871 
2872     if (!eap->skip && name_arg == NULL)
2873     {
2874 	// Check the name of the function.  Unless it's a dictionary function
2875 	// (that we are overwriting).
2876 	if (name != NULL)
2877 	    arg = name;
2878 	else
2879 	    arg = fudi.fd_newkey;
2880 	if (arg != NULL && (fudi.fd_di == NULL
2881 				     || (fudi.fd_di->di_tv.v_type != VAR_FUNC
2882 				 && fudi.fd_di->di_tv.v_type != VAR_PARTIAL)))
2883 	{
2884 	    if (*arg == K_SPECIAL)
2885 		j = 3;
2886 	    else
2887 		j = 0;
2888 	    while (arg[j] != NUL && (j == 0 ? eval_isnamec1(arg[j])
2889 						      : eval_isnamec(arg[j])))
2890 		++j;
2891 	    if (arg[j] != NUL)
2892 		emsg_funcname((char *)e_invarg2, arg);
2893 	}
2894 	// Disallow using the g: dict.
2895 	if (fudi.fd_dict != NULL && fudi.fd_dict->dv_scope == VAR_DEF_SCOPE)
2896 	    emsg(_("E862: Cannot use g: here"));
2897     }
2898 
2899     // This may get more lines and make the pointers into the first line
2900     // invalid.
2901     if (get_function_args(&p, ')', &newargs,
2902 			eap->cmdidx == CMD_def ? &argtypes : NULL,
2903 			 &varargs, &default_args, eap->skip,
2904 			 eap, &line_to_free) == FAIL)
2905 	goto errret_2;
2906 
2907     if (eap->cmdidx == CMD_def)
2908     {
2909 	// find the return type: :def Func(): type
2910 	if (*p == ':')
2911 	{
2912 	    ret_type = skipwhite(p + 1);
2913 	    p = skip_type(ret_type, FALSE);
2914 	    if (p > ret_type)
2915 	    {
2916 		ret_type = vim_strnsave(ret_type, p - ret_type);
2917 		p = skipwhite(p);
2918 	    }
2919 	    else
2920 	    {
2921 		semsg(_(e_expected_type_str), ret_type);
2922 		ret_type = NULL;
2923 	    }
2924 	}
2925 	p = skipwhite(p);
2926     }
2927     else
2928 	// find extra arguments "range", "dict", "abort" and "closure"
2929 	for (;;)
2930 	{
2931 	    p = skipwhite(p);
2932 	    if (STRNCMP(p, "range", 5) == 0)
2933 	    {
2934 		flags |= FC_RANGE;
2935 		p += 5;
2936 	    }
2937 	    else if (STRNCMP(p, "dict", 4) == 0)
2938 	    {
2939 		flags |= FC_DICT;
2940 		p += 4;
2941 	    }
2942 	    else if (STRNCMP(p, "abort", 5) == 0)
2943 	    {
2944 		flags |= FC_ABORT;
2945 		p += 5;
2946 	    }
2947 	    else if (STRNCMP(p, "closure", 7) == 0)
2948 	    {
2949 		flags |= FC_CLOSURE;
2950 		p += 7;
2951 		if (current_funccal == NULL)
2952 		{
2953 		    emsg_funcname(N_("E932: Closure function should not be at top level: %s"),
2954 			    name == NULL ? (char_u *)"" : name);
2955 		    goto erret;
2956 		}
2957 	    }
2958 	    else
2959 		break;
2960 	}
2961 
2962     // When there is a line break use what follows for the function body.
2963     // Makes 'exe "func Test()\n...\nendfunc"' work.
2964     if (*p == '\n')
2965 	line_arg = p + 1;
2966     else if (*p != NUL
2967 	    && !(*p == '"' && (!vim9script || eap->cmdidx == CMD_function)
2968 						     && eap->cmdidx != CMD_def)
2969 	    && !(*p == '#' && (vim9script || eap->cmdidx == CMD_def))
2970 	    && !eap->skip
2971 	    && !did_emsg)
2972 	semsg(_(e_trailing_arg), p);
2973 
2974     /*
2975      * Read the body of the function, until "}", ":endfunction" or ":enddef" is
2976      * found.
2977      */
2978     if (KeyTyped)
2979     {
2980 	// Check if the function already exists, don't let the user type the
2981 	// whole function before telling him it doesn't work!  For a script we
2982 	// need to skip the body to be able to find what follows.
2983 	if (!eap->skip && !eap->forceit)
2984 	{
2985 	    if (fudi.fd_dict != NULL && fudi.fd_newkey == NULL)
2986 		emsg(_(e_funcdict));
2987 	    else if (name != NULL && find_func(name, is_global, NULL) != NULL)
2988 		emsg_funcname(e_funcexts, name);
2989 	}
2990 
2991 	if (!eap->skip && did_emsg)
2992 	    goto erret;
2993 
2994 	msg_putchar('\n');	    // don't overwrite the function name
2995 	cmdline_row = msg_row;
2996     }
2997 
2998     // Save the starting line number.
2999     sourcing_lnum_top = SOURCING_LNUM;
3000 
3001     // Detect having skipped over comment lines to find the return
3002     // type.  Add NULL lines to keep the line count correct.
3003     sourcing_lnum_off = get_sourced_lnum(eap->getline, eap->cookie);
3004     if (SOURCING_LNUM < sourcing_lnum_off)
3005     {
3006 	sourcing_lnum_off -= SOURCING_LNUM;
3007 	if (ga_grow(&newlines, sourcing_lnum_off) == FAIL)
3008 	    goto erret;
3009 	while (sourcing_lnum_off-- > 0)
3010 	    ((char_u **)(newlines.ga_data))[newlines.ga_len++] = NULL;
3011     }
3012 
3013     indent = 2;
3014     nesting = 0;
3015     nesting_def[nesting] = (eap->cmdidx == CMD_def);
3016     for (;;)
3017     {
3018 	if (KeyTyped)
3019 	{
3020 	    msg_scroll = TRUE;
3021 	    saved_wait_return = FALSE;
3022 	}
3023 	need_wait_return = FALSE;
3024 
3025 	if (line_arg != NULL)
3026 	{
3027 	    // Use eap->arg, split up in parts by line breaks.
3028 	    theline = line_arg;
3029 	    p = vim_strchr(theline, '\n');
3030 	    if (p == NULL)
3031 		line_arg += STRLEN(line_arg);
3032 	    else
3033 	    {
3034 		*p = NUL;
3035 		line_arg = p + 1;
3036 	    }
3037 	}
3038 	else
3039 	{
3040 	    vim_free(line_to_free);
3041 	    if (eap->getline == NULL)
3042 		theline = getcmdline(':', 0L, indent, getline_options);
3043 	    else
3044 		theline = eap->getline(':', eap->cookie, indent,
3045 							      getline_options);
3046 	    line_to_free = theline;
3047 	}
3048 	if (KeyTyped)
3049 	    lines_left = Rows - 1;
3050 	if (theline == NULL)
3051 	{
3052 	    if (eap->cmdidx == CMD_def)
3053 		emsg(_(e_missing_enddef));
3054 	    else
3055 		emsg(_("E126: Missing :endfunction"));
3056 	    goto erret;
3057 	}
3058 
3059 	// Detect line continuation: SOURCING_LNUM increased more than one.
3060 	sourcing_lnum_off = get_sourced_lnum(eap->getline, eap->cookie);
3061 	if (SOURCING_LNUM < sourcing_lnum_off)
3062 	    sourcing_lnum_off -= SOURCING_LNUM;
3063 	else
3064 	    sourcing_lnum_off = 0;
3065 
3066 	if (skip_until != NULL)
3067 	{
3068 	    // Don't check for ":endfunc"/":enddef" between
3069 	    // * ":append" and "."
3070 	    // * ":python <<EOF" and "EOF"
3071 	    // * ":let {var-name} =<< [trim] {marker}" and "{marker}"
3072 	    if (heredoc_trimmed == NULL
3073 		    || (is_heredoc && skipwhite(theline) == theline)
3074 		    || STRNCMP(theline, heredoc_trimmed,
3075 						 STRLEN(heredoc_trimmed)) == 0)
3076 	    {
3077 		if (heredoc_trimmed == NULL)
3078 		    p = theline;
3079 		else if (is_heredoc)
3080 		    p = skipwhite(theline) == theline
3081 				 ? theline : theline + STRLEN(heredoc_trimmed);
3082 		else
3083 		    p = theline + STRLEN(heredoc_trimmed);
3084 		if (STRCMP(p, skip_until) == 0)
3085 		{
3086 		    VIM_CLEAR(skip_until);
3087 		    VIM_CLEAR(heredoc_trimmed);
3088 		    getline_options = GETLINE_CONCAT_CONT;
3089 		    is_heredoc = FALSE;
3090 		}
3091 	    }
3092 	}
3093 	else
3094 	{
3095 	    // skip ':' and blanks
3096 	    for (p = theline; VIM_ISWHITE(*p) || *p == ':'; ++p)
3097 		;
3098 
3099 	    // Check for "endfunction" or "enddef".
3100 	    if (checkforcmd(&p, nesting_def[nesting]
3101 			     ? "enddef" : "endfunction", 4) && nesting-- == 0)
3102 	    {
3103 		char_u *nextcmd = NULL;
3104 
3105 		if (*p == '|')
3106 		    nextcmd = p + 1;
3107 		else if (line_arg != NULL && *skipwhite(line_arg) != NUL)
3108 		    nextcmd = line_arg;
3109 		else if (*p != NUL && *p != '"' && p_verbose > 0)
3110 		    give_warning2(eap->cmdidx == CMD_def
3111 			? (char_u *)_("W1001: Text found after :enddef: %s")
3112 			: (char_u *)_("W22: Text found after :endfunction: %s"),
3113 			 p, TRUE);
3114 		if (nextcmd != NULL)
3115 		{
3116 		    // Another command follows. If the line came from "eap" we
3117 		    // can simply point into it, otherwise we need to change
3118 		    // "eap->cmdlinep".
3119 		    eap->nextcmd = nextcmd;
3120 		    if (line_to_free != NULL)
3121 		    {
3122 			vim_free(*eap->cmdlinep);
3123 			*eap->cmdlinep = line_to_free;
3124 			line_to_free = NULL;
3125 		    }
3126 		}
3127 		break;
3128 	    }
3129 
3130 	    // Increase indent inside "if", "while", "for" and "try", decrease
3131 	    // at "end".
3132 	    if (indent > 2 && (*p == '}' || STRNCMP(p, "end", 3) == 0))
3133 		indent -= 2;
3134 	    else if (STRNCMP(p, "if", 2) == 0
3135 		    || STRNCMP(p, "wh", 2) == 0
3136 		    || STRNCMP(p, "for", 3) == 0
3137 		    || STRNCMP(p, "try", 3) == 0)
3138 		indent += 2;
3139 
3140 	    // Check for defining a function inside this function.
3141 	    // Only recognize "def" inside "def", not inside "function",
3142 	    // For backwards compatibility, see Test_function_python().
3143 	    c = *p;
3144 	    if (checkforcmd(&p, "function", 2)
3145 		    || (eap->cmdidx == CMD_def && checkforcmd(&p, "def", 3)))
3146 	    {
3147 		if (*p == '!')
3148 		    p = skipwhite(p + 1);
3149 		p += eval_fname_script(p);
3150 		vim_free(trans_function_name(&p, NULL, TRUE, 0, NULL, NULL));
3151 		if (*skipwhite(p) == '(')
3152 		{
3153 		    if (nesting == MAX_FUNC_NESTING - 1)
3154 			emsg(_(e_function_nesting_too_deep));
3155 		    else
3156 		    {
3157 			++nesting;
3158 			nesting_def[nesting] = (c == 'd');
3159 			indent += 2;
3160 		    }
3161 		}
3162 	    }
3163 
3164 	    // Check for ":append", ":change", ":insert".  Not for :def.
3165 	    p = skip_range(p, FALSE, NULL);
3166 	    if (eap->cmdidx != CMD_def
3167 		&& ((p[0] == 'a' && (!ASCII_ISALPHA(p[1]) || p[1] == 'p'))
3168 		    || (p[0] == 'c'
3169 			&& (!ASCII_ISALPHA(p[1]) || (p[1] == 'h'
3170 				&& (!ASCII_ISALPHA(p[2]) || (p[2] == 'a'
3171 					&& (STRNCMP(&p[3], "nge", 3) != 0
3172 					    || !ASCII_ISALPHA(p[6])))))))
3173 		    || (p[0] == 'i'
3174 			&& (!ASCII_ISALPHA(p[1]) || (p[1] == 'n'
3175 				&& (!ASCII_ISALPHA(p[2])
3176 				    || (p[2] == 's'
3177 					&& (!ASCII_ISALPHA(p[3])
3178 						|| p[3] == 'e'))))))))
3179 		skip_until = vim_strsave((char_u *)".");
3180 
3181 	    // Check for ":python <<EOF", ":tcl <<EOF", etc.
3182 	    arg = skipwhite(skiptowhite(p));
3183 	    if (arg[0] == '<' && arg[1] =='<'
3184 		    && ((p[0] == 'p' && p[1] == 'y'
3185 				    && (!ASCII_ISALNUM(p[2]) || p[2] == 't'
3186 					|| ((p[2] == '3' || p[2] == 'x')
3187 						   && !ASCII_ISALPHA(p[3]))))
3188 			|| (p[0] == 'p' && p[1] == 'e'
3189 				    && (!ASCII_ISALPHA(p[2]) || p[2] == 'r'))
3190 			|| (p[0] == 't' && p[1] == 'c'
3191 				    && (!ASCII_ISALPHA(p[2]) || p[2] == 'l'))
3192 			|| (p[0] == 'l' && p[1] == 'u' && p[2] == 'a'
3193 				    && !ASCII_ISALPHA(p[3]))
3194 			|| (p[0] == 'r' && p[1] == 'u' && p[2] == 'b'
3195 				    && (!ASCII_ISALPHA(p[3]) || p[3] == 'y'))
3196 			|| (p[0] == 'm' && p[1] == 'z'
3197 				    && (!ASCII_ISALPHA(p[2]) || p[2] == 's'))
3198 			))
3199 	    {
3200 		// ":python <<" continues until a dot, like ":append"
3201 		p = skipwhite(arg + 2);
3202 		if (STRNCMP(p, "trim", 4) == 0)
3203 		{
3204 		    // Ignore leading white space.
3205 		    p = skipwhite(p + 4);
3206 		    heredoc_trimmed = vim_strnsave(theline,
3207 						 skipwhite(theline) - theline);
3208 		}
3209 		if (*p == NUL)
3210 		    skip_until = vim_strsave((char_u *)".");
3211 		else
3212 		    skip_until = vim_strnsave(p, skiptowhite(p) - p);
3213 		getline_options = GETLINE_NONE;
3214 		is_heredoc = TRUE;
3215 	    }
3216 
3217 	    // Check for ":cmd v =<< [trim] EOF"
3218 	    //       and ":cmd [a, b] =<< [trim] EOF"
3219 	    // Where "cmd" can be "let", "var", "final" or "const".
3220 	    arg = skipwhite(skiptowhite(p));
3221 	    if (*arg == '[')
3222 		arg = vim_strchr(arg, ']');
3223 	    if (arg != NULL)
3224 	    {
3225 		arg = skipwhite(skiptowhite(arg));
3226 		if (arg[0] == '=' && arg[1] == '<' && arg[2] =='<'
3227 			&& (checkforcmd(&p, "let", 2)
3228 			    || checkforcmd(&p, "var", 3)
3229 			    || checkforcmd(&p, "final", 5)
3230 			    || checkforcmd(&p, "const", 5)))
3231 		{
3232 		    p = skipwhite(arg + 3);
3233 		    if (STRNCMP(p, "trim", 4) == 0)
3234 		    {
3235 			// Ignore leading white space.
3236 			p = skipwhite(p + 4);
3237 			heredoc_trimmed = vim_strnsave(theline,
3238 						 skipwhite(theline) - theline);
3239 		    }
3240 		    skip_until = vim_strnsave(p, skiptowhite(p) - p);
3241 		    getline_options = GETLINE_NONE;
3242 		    is_heredoc = TRUE;
3243 		}
3244 	    }
3245 	}
3246 
3247 	// Add the line to the function.
3248 	if (ga_grow(&newlines, 1 + sourcing_lnum_off) == FAIL)
3249 	    goto erret;
3250 
3251 	// Copy the line to newly allocated memory.  get_one_sourceline()
3252 	// allocates 250 bytes per line, this saves 80% on average.  The cost
3253 	// is an extra alloc/free.
3254 	p = vim_strsave(theline);
3255 	if (p == NULL)
3256 	    goto erret;
3257 	((char_u **)(newlines.ga_data))[newlines.ga_len++] = p;
3258 
3259 	// Add NULL lines for continuation lines, so that the line count is
3260 	// equal to the index in the growarray.
3261 	while (sourcing_lnum_off-- > 0)
3262 	    ((char_u **)(newlines.ga_data))[newlines.ga_len++] = NULL;
3263 
3264 	// Check for end of eap->arg.
3265 	if (line_arg != NULL && *line_arg == NUL)
3266 	    line_arg = NULL;
3267     }
3268 
3269     // Don't define the function when skipping commands or when an error was
3270     // detected.
3271     if (eap->skip || did_emsg)
3272 	goto erret;
3273 
3274     /*
3275      * If there are no errors, add the function
3276      */
3277     if (fudi.fd_dict == NULL)
3278     {
3279 	hashtab_T	*ht;
3280 
3281 	v = find_var(name, &ht, FALSE);
3282 	if (v != NULL && v->di_tv.v_type == VAR_FUNC)
3283 	{
3284 	    emsg_funcname(N_("E707: Function name conflicts with variable: %s"),
3285 									name);
3286 	    goto erret;
3287 	}
3288 
3289 	fp = find_func_even_dead(name, is_global, NULL);
3290 	if (vim9script)
3291 	{
3292 	    char_u *uname = untrans_function_name(name);
3293 
3294 	    import = find_imported(uname == NULL ? name : uname, 0, NULL);
3295 	}
3296 
3297 	if (fp != NULL || import != NULL)
3298 	{
3299 	    int dead = fp != NULL && (fp->uf_flags & FC_DEAD);
3300 
3301 	    // Function can be replaced with "function!" and when sourcing the
3302 	    // same script again, but only once.
3303 	    // A name that is used by an import can not be overruled.
3304 	    if (import != NULL
3305 		    || (!dead && !eap->forceit
3306 			&& (fp->uf_script_ctx.sc_sid != current_sctx.sc_sid
3307 			  || fp->uf_script_ctx.sc_seq == current_sctx.sc_seq)))
3308 	    {
3309 		if (vim9script)
3310 		    emsg_funcname(e_name_already_defined_str, name);
3311 		else
3312 		    emsg_funcname(e_funcexts, name);
3313 		goto erret;
3314 	    }
3315 	    if (fp->uf_calls > 0)
3316 	    {
3317 		emsg_funcname(
3318 			N_("E127: Cannot redefine function %s: It is in use"),
3319 									name);
3320 		goto erret;
3321 	    }
3322 	    if (fp->uf_refcount > 1)
3323 	    {
3324 		// This function is referenced somewhere, don't redefine it but
3325 		// create a new one.
3326 		--fp->uf_refcount;
3327 		fp->uf_flags |= FC_REMOVED;
3328 		fp = NULL;
3329 		overwrite = TRUE;
3330 	    }
3331 	    else
3332 	    {
3333 		char_u *exp_name = fp->uf_name_exp;
3334 
3335 		// redefine existing function, keep the expanded name
3336 		VIM_CLEAR(name);
3337 		fp->uf_name_exp = NULL;
3338 		func_clear_items(fp);
3339 		fp->uf_name_exp = exp_name;
3340 		fp->uf_flags &= ~FC_DEAD;
3341 #ifdef FEAT_PROFILE
3342 		fp->uf_profiling = FALSE;
3343 		fp->uf_prof_initialized = FALSE;
3344 #endif
3345 		clear_def_function(fp);
3346 	    }
3347 	}
3348     }
3349     else
3350     {
3351 	char	numbuf[20];
3352 
3353 	fp = NULL;
3354 	if (fudi.fd_newkey == NULL && !eap->forceit)
3355 	{
3356 	    emsg(_(e_funcdict));
3357 	    goto erret;
3358 	}
3359 	if (fudi.fd_di == NULL)
3360 	{
3361 	    // Can't add a function to a locked dictionary
3362 	    if (value_check_lock(fudi.fd_dict->dv_lock, eap->arg, FALSE))
3363 		goto erret;
3364 	}
3365 	    // Can't change an existing function if it is locked
3366 	else if (value_check_lock(fudi.fd_di->di_tv.v_lock, eap->arg, FALSE))
3367 	    goto erret;
3368 
3369 	// Give the function a sequential number.  Can only be used with a
3370 	// Funcref!
3371 	vim_free(name);
3372 	sprintf(numbuf, "%d", ++func_nr);
3373 	name = vim_strsave((char_u *)numbuf);
3374 	if (name == NULL)
3375 	    goto erret;
3376     }
3377 
3378     if (fp == NULL)
3379     {
3380 	if (fudi.fd_dict == NULL && vim_strchr(name, AUTOLOAD_CHAR) != NULL)
3381 	{
3382 	    int	    slen, plen;
3383 	    char_u  *scriptname;
3384 
3385 	    // Check that the autoload name matches the script name.
3386 	    j = FAIL;
3387 	    if (SOURCING_NAME != NULL)
3388 	    {
3389 		scriptname = autoload_name(name);
3390 		if (scriptname != NULL)
3391 		{
3392 		    p = vim_strchr(scriptname, '/');
3393 		    plen = (int)STRLEN(p);
3394 		    slen = (int)STRLEN(SOURCING_NAME);
3395 		    if (slen > plen && fnamecmp(p,
3396 					    SOURCING_NAME + slen - plen) == 0)
3397 			j = OK;
3398 		    vim_free(scriptname);
3399 		}
3400 	    }
3401 	    if (j == FAIL)
3402 	    {
3403 		semsg(_("E746: Function name does not match script file name: %s"), name);
3404 		goto erret;
3405 	    }
3406 	}
3407 
3408 	fp = alloc_clear(offsetof(ufunc_T, uf_name) + STRLEN(name) + 1);
3409 	if (fp == NULL)
3410 	    goto erret;
3411 	fp->uf_def_status = eap->cmdidx == CMD_def ? UF_TO_BE_COMPILED
3412 							     : UF_NOT_COMPILED;
3413 
3414 	if (fudi.fd_dict != NULL)
3415 	{
3416 	    if (fudi.fd_di == NULL)
3417 	    {
3418 		// add new dict entry
3419 		fudi.fd_di = dictitem_alloc(fudi.fd_newkey);
3420 		if (fudi.fd_di == NULL)
3421 		{
3422 		    vim_free(fp);
3423 		    fp = NULL;
3424 		    goto erret;
3425 		}
3426 		if (dict_add(fudi.fd_dict, fudi.fd_di) == FAIL)
3427 		{
3428 		    vim_free(fudi.fd_di);
3429 		    vim_free(fp);
3430 		    fp = NULL;
3431 		    goto erret;
3432 		}
3433 	    }
3434 	    else
3435 		// overwrite existing dict entry
3436 		clear_tv(&fudi.fd_di->di_tv);
3437 	    fudi.fd_di->di_tv.v_type = VAR_FUNC;
3438 	    fudi.fd_di->di_tv.vval.v_string = vim_strsave(name);
3439 
3440 	    // behave like "dict" was used
3441 	    flags |= FC_DICT;
3442 	}
3443 
3444 	// insert the new function in the function list
3445 	set_ufunc_name(fp, name);
3446 	if (overwrite)
3447 	{
3448 	    hi = hash_find(&func_hashtab, name);
3449 	    hi->hi_key = UF2HIKEY(fp);
3450 	}
3451 	else if (hash_add(&func_hashtab, UF2HIKEY(fp)) == FAIL)
3452 	{
3453 	    vim_free(fp);
3454 	    fp = NULL;
3455 	    goto erret;
3456 	}
3457 	fp->uf_refcount = 1;
3458     }
3459     fp->uf_args = newargs;
3460     fp->uf_def_args = default_args;
3461     fp->uf_ret_type = &t_any;
3462     fp->uf_func_type = &t_func_any;
3463 
3464     if (eap->cmdidx == CMD_def)
3465     {
3466 	int	lnum_save = SOURCING_LNUM;
3467 
3468 	fp->uf_def_status = UF_TO_BE_COMPILED;
3469 
3470 	// error messages are for the first function line
3471 	SOURCING_LNUM = sourcing_lnum_top;
3472 
3473 	// parse the argument types
3474 	ga_init2(&fp->uf_type_list, sizeof(type_T *), 10);
3475 
3476 	if (argtypes.ga_len > 0)
3477 	{
3478 	    // When "varargs" is set the last name/type goes into uf_va_name
3479 	    // and uf_va_type.
3480 	    int len = argtypes.ga_len - (varargs ? 1 : 0);
3481 
3482 	    if (len > 0)
3483 		fp->uf_arg_types = ALLOC_CLEAR_MULT(type_T *, len);
3484 	    if (fp->uf_arg_types != NULL)
3485 	    {
3486 		int	i;
3487 		type_T	*type;
3488 
3489 		for (i = 0; i < len; ++ i)
3490 		{
3491 		    p = ((char_u **)argtypes.ga_data)[i];
3492 		    if (p == NULL)
3493 			// will get the type from the default value
3494 			type = &t_unknown;
3495 		    else
3496 			type = parse_type(&p, &fp->uf_type_list);
3497 		    if (type == NULL)
3498 		    {
3499 			SOURCING_LNUM = lnum_save;
3500 			goto errret_2;
3501 		    }
3502 		    fp->uf_arg_types[i] = type;
3503 		}
3504 	    }
3505 	    if (varargs)
3506 	    {
3507 		// Move the last argument "...name: type" to uf_va_name and
3508 		// uf_va_type.
3509 		fp->uf_va_name = ((char_u **)fp->uf_args.ga_data)
3510 						      [fp->uf_args.ga_len - 1];
3511 		--fp->uf_args.ga_len;
3512 		p = ((char_u **)argtypes.ga_data)[len];
3513 		if (p == NULL)
3514 		    // todo: get type from default value
3515 		    fp->uf_va_type = &t_any;
3516 		else
3517 		    fp->uf_va_type = parse_type(&p, &fp->uf_type_list);
3518 		if (fp->uf_va_type == NULL)
3519 		{
3520 		    SOURCING_LNUM = lnum_save;
3521 		    goto errret_2;
3522 		}
3523 	    }
3524 	    varargs = FALSE;
3525 	}
3526 
3527 	// parse the return type, if any
3528 	if (ret_type == NULL)
3529 	    fp->uf_ret_type = &t_void;
3530 	else
3531 	{
3532 	    p = ret_type;
3533 	    fp->uf_ret_type = parse_type(&p, &fp->uf_type_list);
3534 	}
3535 	SOURCING_LNUM = lnum_save;
3536     }
3537     else
3538 	fp->uf_def_status = UF_NOT_COMPILED;
3539 
3540     fp->uf_lines = newlines;
3541     if ((flags & FC_CLOSURE) != 0)
3542     {
3543 	if (register_closure(fp) == FAIL)
3544 	    goto erret;
3545     }
3546     else
3547 	fp->uf_scoped = NULL;
3548 
3549 #ifdef FEAT_PROFILE
3550     if (prof_def_func())
3551 	func_do_profile(fp);
3552 #endif
3553     fp->uf_varargs = varargs;
3554     if (sandbox)
3555 	flags |= FC_SANDBOX;
3556     if (vim9script && !ASCII_ISUPPER(*fp->uf_name))
3557 	flags |= FC_VIM9;
3558     fp->uf_flags = flags;
3559     fp->uf_calls = 0;
3560     fp->uf_cleared = FALSE;
3561     fp->uf_script_ctx = current_sctx;
3562     fp->uf_script_ctx_version = current_sctx.sc_version;
3563     fp->uf_script_ctx.sc_lnum += sourcing_lnum_top;
3564     if (is_export)
3565     {
3566 	fp->uf_flags |= FC_EXPORT;
3567 	// let ex_export() know the export worked.
3568 	is_export = FALSE;
3569     }
3570 
3571     if (eap->cmdidx == CMD_def)
3572 	set_function_type(fp);
3573     else if (fp->uf_script_ctx.sc_version == SCRIPT_VERSION_VIM9)
3574 	// :func does not use Vim9 script syntax, even in a Vim9 script file
3575 	fp->uf_script_ctx.sc_version = SCRIPT_VERSION_MAX;
3576 
3577     goto ret_free;
3578 
3579 erret:
3580     ga_clear_strings(&newargs);
3581     ga_clear_strings(&default_args);
3582 errret_2:
3583     ga_clear_strings(&newlines);
3584 ret_free:
3585     ga_clear_strings(&argtypes);
3586     vim_free(skip_until);
3587     vim_free(line_to_free);
3588     vim_free(fudi.fd_newkey);
3589     if (name != name_arg)
3590 	vim_free(name);
3591     vim_free(ret_type);
3592     did_emsg |= saved_did_emsg;
3593     need_wait_return |= saved_wait_return;
3594 
3595     return fp;
3596 }
3597 
3598 /*
3599  * ":function"
3600  */
3601     void
3602 ex_function(exarg_T *eap)
3603 {
3604     (void)def_function(eap, NULL);
3605 }
3606 
3607 /*
3608  * :defcompile - compile all :def functions in the current script that need to
3609  * be compiled.  Except dead functions.
3610  */
3611     void
3612 ex_defcompile(exarg_T *eap UNUSED)
3613 {
3614     long	todo = (long)func_hashtab.ht_used;
3615     int		changed = func_hashtab.ht_changed;
3616     hashitem_T	*hi;
3617     ufunc_T	*ufunc;
3618 
3619     for (hi = func_hashtab.ht_array; todo > 0 && !got_int; ++hi)
3620     {
3621 	if (!HASHITEM_EMPTY(hi))
3622 	{
3623 	    --todo;
3624 	    ufunc = HI2UF(hi);
3625 	    if (ufunc->uf_script_ctx.sc_sid == current_sctx.sc_sid
3626 		    && ufunc->uf_def_status == UF_TO_BE_COMPILED
3627 		    && (ufunc->uf_flags & FC_DEAD) == 0)
3628 	    {
3629 		compile_def_function(ufunc, FALSE, NULL);
3630 
3631 		if (func_hashtab.ht_changed != changed)
3632 		{
3633 		    // a function has been added or removed, need to start over
3634 		    todo = (long)func_hashtab.ht_used;
3635 		    changed = func_hashtab.ht_changed;
3636 		    hi = func_hashtab.ht_array;
3637 		    --hi;
3638 		}
3639 	    }
3640 	}
3641     }
3642 }
3643 
3644 /*
3645  * Return 5 if "p" starts with "<SID>" or "<SNR>" (ignoring case).
3646  * Return 2 if "p" starts with "s:".
3647  * Return 0 otherwise.
3648  */
3649     int
3650 eval_fname_script(char_u *p)
3651 {
3652     // Use MB_STRICMP() because in Turkish comparing the "I" may not work with
3653     // the standard library function.
3654     if (p[0] == '<' && (MB_STRNICMP(p + 1, "SID>", 4) == 0
3655 				       || MB_STRNICMP(p + 1, "SNR>", 4) == 0))
3656 	return 5;
3657     if (p[0] == 's' && p[1] == ':')
3658 	return 2;
3659     return 0;
3660 }
3661 
3662     int
3663 translated_function_exists(char_u *name, int is_global)
3664 {
3665     if (builtin_function(name, -1))
3666 	return has_internal_func(name);
3667     return find_func(name, is_global, NULL) != NULL;
3668 }
3669 
3670 /*
3671  * Return TRUE when "ufunc" has old-style "..." varargs
3672  * or named varargs "...name: type".
3673  */
3674     int
3675 has_varargs(ufunc_T *ufunc)
3676 {
3677     return ufunc->uf_varargs || ufunc->uf_va_name != NULL;
3678 }
3679 
3680 /*
3681  * Return TRUE if a function "name" exists.
3682  * If "no_defef" is TRUE, do not dereference a Funcref.
3683  */
3684     int
3685 function_exists(char_u *name, int no_deref)
3686 {
3687     char_u  *nm = name;
3688     char_u  *p;
3689     int	    n = FALSE;
3690     int	    flag;
3691     int	    is_global = FALSE;
3692 
3693     flag = TFN_INT | TFN_QUIET | TFN_NO_AUTOLOAD;
3694     if (no_deref)
3695 	flag |= TFN_NO_DEREF;
3696     p = trans_function_name(&nm, &is_global, FALSE, flag, NULL, NULL);
3697     nm = skipwhite(nm);
3698 
3699     // Only accept "funcname", "funcname ", "funcname (..." and
3700     // "funcname(...", not "funcname!...".
3701     if (p != NULL && (*nm == NUL || *nm == '('))
3702 	n = translated_function_exists(p, is_global);
3703     vim_free(p);
3704     return n;
3705 }
3706 
3707 #if defined(FEAT_PYTHON) || defined(FEAT_PYTHON3) || defined(PROTO)
3708     char_u *
3709 get_expanded_name(char_u *name, int check)
3710 {
3711     char_u	*nm = name;
3712     char_u	*p;
3713     int		is_global = FALSE;
3714 
3715     p = trans_function_name(&nm, &is_global, FALSE,
3716 						TFN_INT|TFN_QUIET, NULL, NULL);
3717 
3718     if (p != NULL && *nm == NUL
3719 		       && (!check || translated_function_exists(p, is_global)))
3720 	return p;
3721 
3722     vim_free(p);
3723     return NULL;
3724 }
3725 #endif
3726 
3727 /*
3728  * Function given to ExpandGeneric() to obtain the list of user defined
3729  * function names.
3730  */
3731     char_u *
3732 get_user_func_name(expand_T *xp, int idx)
3733 {
3734     static long_u	done;
3735     static int		changed;
3736     static hashitem_T	*hi;
3737     ufunc_T		*fp;
3738 
3739     if (idx == 0)
3740     {
3741 	done = 0;
3742 	hi = func_hashtab.ht_array;
3743 	changed = func_hashtab.ht_changed;
3744     }
3745     if (changed == func_hashtab.ht_changed && done < func_hashtab.ht_used)
3746     {
3747 	if (done++ > 0)
3748 	    ++hi;
3749 	while (HASHITEM_EMPTY(hi))
3750 	    ++hi;
3751 	fp = HI2UF(hi);
3752 
3753 	// don't show dead, dict and lambda functions
3754 	if ((fp->uf_flags & FC_DEAD) || (fp->uf_flags & FC_DICT)
3755 				|| STRNCMP(fp->uf_name, "<lambda>", 8) == 0)
3756 	    return (char_u *)"";
3757 
3758 	if (STRLEN(fp->uf_name) + 4 >= IOSIZE)
3759 	    return fp->uf_name;	// prevents overflow
3760 
3761 	cat_func_name(IObuff, fp);
3762 	if (xp->xp_context != EXPAND_USER_FUNC)
3763 	{
3764 	    STRCAT(IObuff, "(");
3765 	    if (!has_varargs(fp) && fp->uf_args.ga_len == 0)
3766 		STRCAT(IObuff, ")");
3767 	}
3768 	return IObuff;
3769     }
3770     return NULL;
3771 }
3772 
3773 /*
3774  * ":delfunction {name}"
3775  */
3776     void
3777 ex_delfunction(exarg_T *eap)
3778 {
3779     ufunc_T	*fp = NULL;
3780     char_u	*p;
3781     char_u	*name;
3782     funcdict_T	fudi;
3783     int		is_global = FALSE;
3784 
3785     p = eap->arg;
3786     name = trans_function_name(&p, &is_global, eap->skip, 0, &fudi, NULL);
3787     vim_free(fudi.fd_newkey);
3788     if (name == NULL)
3789     {
3790 	if (fudi.fd_dict != NULL && !eap->skip)
3791 	    emsg(_(e_funcref));
3792 	return;
3793     }
3794     if (!ends_excmd(*skipwhite(p)))
3795     {
3796 	vim_free(name);
3797 	semsg(_(e_trailing_arg), p);
3798 	return;
3799     }
3800     eap->nextcmd = check_nextcmd(p);
3801     if (eap->nextcmd != NULL)
3802 	*p = NUL;
3803 
3804     if (!eap->skip)
3805 	fp = find_func(name, is_global, NULL);
3806     vim_free(name);
3807 
3808     if (!eap->skip)
3809     {
3810 	if (fp == NULL)
3811 	{
3812 	    if (!eap->forceit)
3813 		semsg(_(e_nofunc), eap->arg);
3814 	    return;
3815 	}
3816 	if (fp->uf_calls > 0)
3817 	{
3818 	    semsg(_("E131: Cannot delete function %s: It is in use"), eap->arg);
3819 	    return;
3820 	}
3821 	if (fp->uf_flags & FC_VIM9)
3822 	{
3823 	    semsg(_(e_cannot_delete_vim9_script_function_str), eap->arg);
3824 	    return;
3825 	}
3826 
3827 	if (fudi.fd_dict != NULL)
3828 	{
3829 	    // Delete the dict item that refers to the function, it will
3830 	    // invoke func_unref() and possibly delete the function.
3831 	    dictitem_remove(fudi.fd_dict, fudi.fd_di);
3832 	}
3833 	else
3834 	{
3835 	    // A normal function (not a numbered function or lambda) has a
3836 	    // refcount of 1 for the entry in the hashtable.  When deleting
3837 	    // it and the refcount is more than one, it should be kept.
3838 	    // A numbered function and lambda should be kept if the refcount is
3839 	    // one or more.
3840 	    if (fp->uf_refcount > (func_name_refcount(fp->uf_name) ? 0 : 1))
3841 	    {
3842 		// Function is still referenced somewhere.  Don't free it but
3843 		// do remove it from the hashtable.
3844 		if (func_remove(fp))
3845 		    fp->uf_refcount--;
3846 		fp->uf_flags |= FC_DELETED;
3847 	    }
3848 	    else
3849 		func_clear_free(fp, FALSE);
3850 	}
3851     }
3852 }
3853 
3854 /*
3855  * Unreference a Function: decrement the reference count and free it when it
3856  * becomes zero.
3857  */
3858     void
3859 func_unref(char_u *name)
3860 {
3861     ufunc_T *fp = NULL;
3862 
3863     if (name == NULL || !func_name_refcount(name))
3864 	return;
3865     fp = find_func(name, FALSE, NULL);
3866     if (fp == NULL && isdigit(*name))
3867     {
3868 #ifdef EXITFREE
3869 	if (!entered_free_all_mem)
3870 #endif
3871 	    internal_error("func_unref()");
3872     }
3873     if (fp != NULL && --fp->uf_refcount <= 0)
3874     {
3875 	// Only delete it when it's not being used.  Otherwise it's done
3876 	// when "uf_calls" becomes zero.
3877 	if (fp->uf_calls == 0)
3878 	    func_clear_free(fp, FALSE);
3879     }
3880 }
3881 
3882 /*
3883  * Unreference a Function: decrement the reference count and free it when it
3884  * becomes zero.
3885  */
3886     void
3887 func_ptr_unref(ufunc_T *fp)
3888 {
3889     if (fp != NULL && --fp->uf_refcount <= 0)
3890     {
3891 	// Only delete it when it's not being used.  Otherwise it's done
3892 	// when "uf_calls" becomes zero.
3893 	if (fp->uf_calls == 0)
3894 	    func_clear_free(fp, FALSE);
3895     }
3896 }
3897 
3898 /*
3899  * Count a reference to a Function.
3900  */
3901     void
3902 func_ref(char_u *name)
3903 {
3904     ufunc_T *fp;
3905 
3906     if (name == NULL || !func_name_refcount(name))
3907 	return;
3908     fp = find_func(name, FALSE, NULL);
3909     if (fp != NULL)
3910 	++fp->uf_refcount;
3911     else if (isdigit(*name))
3912 	// Only give an error for a numbered function.
3913 	// Fail silently, when named or lambda function isn't found.
3914 	internal_error("func_ref()");
3915 }
3916 
3917 /*
3918  * Count a reference to a Function.
3919  */
3920     void
3921 func_ptr_ref(ufunc_T *fp)
3922 {
3923     if (fp != NULL)
3924 	++fp->uf_refcount;
3925 }
3926 
3927 /*
3928  * Return TRUE if items in "fc" do not have "copyID".  That means they are not
3929  * referenced from anywhere that is in use.
3930  */
3931     static int
3932 can_free_funccal(funccall_T *fc, int copyID)
3933 {
3934     return (fc->l_varlist.lv_copyID != copyID
3935 	    && fc->l_vars.dv_copyID != copyID
3936 	    && fc->l_avars.dv_copyID != copyID
3937 	    && fc->fc_copyID != copyID);
3938 }
3939 
3940 /*
3941  * ":return [expr]"
3942  */
3943     void
3944 ex_return(exarg_T *eap)
3945 {
3946     char_u	*arg = eap->arg;
3947     typval_T	rettv;
3948     int		returning = FALSE;
3949     evalarg_T	evalarg;
3950 
3951     if (current_funccal == NULL)
3952     {
3953 	emsg(_("E133: :return not inside a function"));
3954 	return;
3955     }
3956 
3957     CLEAR_FIELD(evalarg);
3958     evalarg.eval_flags = eap->skip ? 0 : EVAL_EVALUATE;
3959 
3960     if (eap->skip)
3961 	++emsg_skip;
3962 
3963     eap->nextcmd = NULL;
3964     if ((*arg != NUL && *arg != '|' && *arg != '\n')
3965 				  && eval0(arg, &rettv, eap, &evalarg) != FAIL)
3966     {
3967 	if (!eap->skip)
3968 	    returning = do_return(eap, FALSE, TRUE, &rettv);
3969 	else
3970 	    clear_tv(&rettv);
3971     }
3972     // It's safer to return also on error.
3973     else if (!eap->skip)
3974     {
3975 	// In return statement, cause_abort should be force_abort.
3976 	update_force_abort();
3977 
3978 	/*
3979 	 * Return unless the expression evaluation has been cancelled due to an
3980 	 * aborting error, an interrupt, or an exception.
3981 	 */
3982 	if (!aborting())
3983 	    returning = do_return(eap, FALSE, TRUE, NULL);
3984     }
3985 
3986     // When skipping or the return gets pending, advance to the next command
3987     // in this line (!returning).  Otherwise, ignore the rest of the line.
3988     // Following lines will be ignored by get_func_line().
3989     if (returning)
3990 	eap->nextcmd = NULL;
3991     else if (eap->nextcmd == NULL)	    // no argument
3992 	eap->nextcmd = check_nextcmd(arg);
3993 
3994     if (eap->skip)
3995 	--emsg_skip;
3996     clear_evalarg(&evalarg, eap);
3997 }
3998 
3999 /*
4000  * ":1,25call func(arg1, arg2)"	function call.
4001  */
4002     void
4003 ex_call(exarg_T *eap)
4004 {
4005     char_u	*arg = eap->arg;
4006     char_u	*startarg;
4007     char_u	*name;
4008     char_u	*tofree;
4009     int		len;
4010     typval_T	rettv;
4011     linenr_T	lnum;
4012     int		doesrange;
4013     int		failed = FALSE;
4014     funcdict_T	fudi;
4015     partial_T	*partial = NULL;
4016     evalarg_T	evalarg;
4017 
4018     fill_evalarg_from_eap(&evalarg, eap, eap->skip);
4019     if (eap->skip)
4020     {
4021 	// trans_function_name() doesn't work well when skipping, use eval0()
4022 	// instead to skip to any following command, e.g. for:
4023 	//   :if 0 | call dict.foo().bar() | endif
4024 	++emsg_skip;
4025 	if (eval0(eap->arg, &rettv, eap, &evalarg) != FAIL)
4026 	    clear_tv(&rettv);
4027 	--emsg_skip;
4028 	clear_evalarg(&evalarg, eap);
4029 	return;
4030     }
4031 
4032     tofree = trans_function_name(&arg, NULL, eap->skip,
4033 						     TFN_INT, &fudi, &partial);
4034     if (fudi.fd_newkey != NULL)
4035     {
4036 	// Still need to give an error message for missing key.
4037 	semsg(_(e_dictkey), fudi.fd_newkey);
4038 	vim_free(fudi.fd_newkey);
4039     }
4040     if (tofree == NULL)
4041 	return;
4042 
4043     // Increase refcount on dictionary, it could get deleted when evaluating
4044     // the arguments.
4045     if (fudi.fd_dict != NULL)
4046 	++fudi.fd_dict->dv_refcount;
4047 
4048     // If it is the name of a variable of type VAR_FUNC or VAR_PARTIAL use its
4049     // contents.  For VAR_PARTIAL get its partial, unless we already have one
4050     // from trans_function_name().
4051     len = (int)STRLEN(tofree);
4052     name = deref_func_name(tofree, &len,
4053 				    partial != NULL ? NULL : &partial, FALSE);
4054 
4055     // Skip white space to allow ":call func ()".  Not good, but required for
4056     // backward compatibility.
4057     startarg = skipwhite(arg);
4058     rettv.v_type = VAR_UNKNOWN;	// clear_tv() uses this
4059 
4060     if (*startarg != '(')
4061     {
4062 	semsg(_(e_missing_paren), eap->arg);
4063 	goto end;
4064     }
4065 
4066     /*
4067      * When skipping, evaluate the function once, to find the end of the
4068      * arguments.
4069      * When the function takes a range, this is discovered after the first
4070      * call, and the loop is broken.
4071      */
4072     if (eap->skip)
4073     {
4074 	++emsg_skip;
4075 	lnum = eap->line2;	// do it once, also with an invalid range
4076     }
4077     else
4078 	lnum = eap->line1;
4079     for ( ; lnum <= eap->line2; ++lnum)
4080     {
4081 	funcexe_T funcexe;
4082 
4083 	if (!eap->skip && eap->addr_count > 0)
4084 	{
4085 	    if (lnum > curbuf->b_ml.ml_line_count)
4086 	    {
4087 		// If the function deleted lines or switched to another buffer
4088 		// the line number may become invalid.
4089 		emsg(_(e_invrange));
4090 		break;
4091 	    }
4092 	    curwin->w_cursor.lnum = lnum;
4093 	    curwin->w_cursor.col = 0;
4094 	    curwin->w_cursor.coladd = 0;
4095 	}
4096 	arg = startarg;
4097 
4098 	CLEAR_FIELD(funcexe);
4099 	funcexe.firstline = eap->line1;
4100 	funcexe.lastline = eap->line2;
4101 	funcexe.doesrange = &doesrange;
4102 	funcexe.evaluate = !eap->skip;
4103 	funcexe.partial = partial;
4104 	funcexe.selfdict = fudi.fd_dict;
4105 	if (get_func_tv(name, -1, &rettv, &arg, &evalarg, &funcexe) == FAIL)
4106 	{
4107 	    failed = TRUE;
4108 	    break;
4109 	}
4110 	if (has_watchexpr())
4111 	    dbg_check_breakpoint(eap);
4112 
4113 	// Handle a function returning a Funcref, Dictionary or List.
4114 	if (handle_subscript(&arg, &rettv,
4115 			   eap->skip ? NULL : &EVALARG_EVALUATE, TRUE) == FAIL)
4116 	{
4117 	    failed = TRUE;
4118 	    break;
4119 	}
4120 
4121 	clear_tv(&rettv);
4122 	if (doesrange || eap->skip)
4123 	    break;
4124 
4125 	// Stop when immediately aborting on error, or when an interrupt
4126 	// occurred or an exception was thrown but not caught.
4127 	// get_func_tv() returned OK, so that the check for trailing
4128 	// characters below is executed.
4129 	if (aborting())
4130 	    break;
4131     }
4132     if (eap->skip)
4133 	--emsg_skip;
4134     clear_evalarg(&evalarg, eap);
4135 
4136     // When inside :try we need to check for following "| catch".
4137     if (!failed || eap->cstack->cs_trylevel > 0)
4138     {
4139 	// Check for trailing illegal characters and a following command.
4140 	arg = skipwhite(arg);
4141 	if (!ends_excmd2(eap->arg, arg))
4142 	{
4143 	    if (!failed)
4144 	    {
4145 		emsg_severe = TRUE;
4146 		semsg(_(e_trailing_arg), arg);
4147 	    }
4148 	}
4149 	else
4150 	    eap->nextcmd = check_nextcmd(arg);
4151     }
4152 
4153 end:
4154     dict_unref(fudi.fd_dict);
4155     vim_free(tofree);
4156 }
4157 
4158 /*
4159  * Return from a function.  Possibly makes the return pending.  Also called
4160  * for a pending return at the ":endtry" or after returning from an extra
4161  * do_cmdline().  "reanimate" is used in the latter case.  "is_cmd" is set
4162  * when called due to a ":return" command.  "rettv" may point to a typval_T
4163  * with the return rettv.  Returns TRUE when the return can be carried out,
4164  * FALSE when the return gets pending.
4165  */
4166     int
4167 do_return(
4168     exarg_T	*eap,
4169     int		reanimate,
4170     int		is_cmd,
4171     void	*rettv)
4172 {
4173     int		idx;
4174     cstack_T	*cstack = eap->cstack;
4175 
4176     if (reanimate)
4177 	// Undo the return.
4178 	current_funccal->returned = FALSE;
4179 
4180     /*
4181      * Cleanup (and inactivate) conditionals, but stop when a try conditional
4182      * not in its finally clause (which then is to be executed next) is found.
4183      * In this case, make the ":return" pending for execution at the ":endtry".
4184      * Otherwise, return normally.
4185      */
4186     idx = cleanup_conditionals(eap->cstack, 0, TRUE);
4187     if (idx >= 0)
4188     {
4189 	cstack->cs_pending[idx] = CSTP_RETURN;
4190 
4191 	if (!is_cmd && !reanimate)
4192 	    // A pending return again gets pending.  "rettv" points to an
4193 	    // allocated variable with the rettv of the original ":return"'s
4194 	    // argument if present or is NULL else.
4195 	    cstack->cs_rettv[idx] = rettv;
4196 	else
4197 	{
4198 	    // When undoing a return in order to make it pending, get the stored
4199 	    // return rettv.
4200 	    if (reanimate)
4201 		rettv = current_funccal->rettv;
4202 
4203 	    if (rettv != NULL)
4204 	    {
4205 		// Store the value of the pending return.
4206 		if ((cstack->cs_rettv[idx] = alloc_tv()) != NULL)
4207 		    *(typval_T *)cstack->cs_rettv[idx] = *(typval_T *)rettv;
4208 		else
4209 		    emsg(_(e_outofmem));
4210 	    }
4211 	    else
4212 		cstack->cs_rettv[idx] = NULL;
4213 
4214 	    if (reanimate)
4215 	    {
4216 		// The pending return value could be overwritten by a ":return"
4217 		// without argument in a finally clause; reset the default
4218 		// return value.
4219 		current_funccal->rettv->v_type = VAR_NUMBER;
4220 		current_funccal->rettv->vval.v_number = 0;
4221 	    }
4222 	}
4223 	report_make_pending(CSTP_RETURN, rettv);
4224     }
4225     else
4226     {
4227 	current_funccal->returned = TRUE;
4228 
4229 	// If the return is carried out now, store the return value.  For
4230 	// a return immediately after reanimation, the value is already
4231 	// there.
4232 	if (!reanimate && rettv != NULL)
4233 	{
4234 	    clear_tv(current_funccal->rettv);
4235 	    *current_funccal->rettv = *(typval_T *)rettv;
4236 	    if (!is_cmd)
4237 		vim_free(rettv);
4238 	}
4239     }
4240 
4241     return idx < 0;
4242 }
4243 
4244 /*
4245  * Free the variable with a pending return value.
4246  */
4247     void
4248 discard_pending_return(void *rettv)
4249 {
4250     free_tv((typval_T *)rettv);
4251 }
4252 
4253 /*
4254  * Generate a return command for producing the value of "rettv".  The result
4255  * is an allocated string.  Used by report_pending() for verbose messages.
4256  */
4257     char_u *
4258 get_return_cmd(void *rettv)
4259 {
4260     char_u	*s = NULL;
4261     char_u	*tofree = NULL;
4262     char_u	numbuf[NUMBUFLEN];
4263 
4264     if (rettv != NULL)
4265 	s = echo_string((typval_T *)rettv, &tofree, numbuf, 0);
4266     if (s == NULL)
4267 	s = (char_u *)"";
4268 
4269     STRCPY(IObuff, ":return ");
4270     STRNCPY(IObuff + 8, s, IOSIZE - 8);
4271     if (STRLEN(s) + 8 >= IOSIZE)
4272 	STRCPY(IObuff + IOSIZE - 4, "...");
4273     vim_free(tofree);
4274     return vim_strsave(IObuff);
4275 }
4276 
4277 /*
4278  * Get next function line.
4279  * Called by do_cmdline() to get the next line.
4280  * Returns allocated string, or NULL for end of function.
4281  */
4282     char_u *
4283 get_func_line(
4284     int	    c UNUSED,
4285     void    *cookie,
4286     int	    indent UNUSED,
4287     getline_opt_T options UNUSED)
4288 {
4289     funccall_T	*fcp = (funccall_T *)cookie;
4290     ufunc_T	*fp = fcp->func;
4291     char_u	*retval;
4292     garray_T	*gap;  // growarray with function lines
4293 
4294     // If breakpoints have been added/deleted need to check for it.
4295     if (fcp->dbg_tick != debug_tick)
4296     {
4297 	fcp->breakpoint = dbg_find_breakpoint(FALSE, fp->uf_name,
4298 							       SOURCING_LNUM);
4299 	fcp->dbg_tick = debug_tick;
4300     }
4301 #ifdef FEAT_PROFILE
4302     if (do_profiling == PROF_YES)
4303 	func_line_end(cookie);
4304 #endif
4305 
4306     gap = &fp->uf_lines;
4307     if (((fp->uf_flags & FC_ABORT) && did_emsg && !aborted_in_try())
4308 	    || fcp->returned)
4309 	retval = NULL;
4310     else
4311     {
4312 	// Skip NULL lines (continuation lines).
4313 	while (fcp->linenr < gap->ga_len
4314 			  && ((char_u **)(gap->ga_data))[fcp->linenr] == NULL)
4315 	    ++fcp->linenr;
4316 	if (fcp->linenr >= gap->ga_len)
4317 	    retval = NULL;
4318 	else
4319 	{
4320 	    retval = vim_strsave(((char_u **)(gap->ga_data))[fcp->linenr++]);
4321 	    SOURCING_LNUM = fcp->linenr;
4322 #ifdef FEAT_PROFILE
4323 	    if (do_profiling == PROF_YES)
4324 		func_line_start(cookie);
4325 #endif
4326 	}
4327     }
4328 
4329     // Did we encounter a breakpoint?
4330     if (fcp->breakpoint != 0 && fcp->breakpoint <= SOURCING_LNUM)
4331     {
4332 	dbg_breakpoint(fp->uf_name, SOURCING_LNUM);
4333 	// Find next breakpoint.
4334 	fcp->breakpoint = dbg_find_breakpoint(FALSE, fp->uf_name,
4335 							       SOURCING_LNUM);
4336 	fcp->dbg_tick = debug_tick;
4337     }
4338 
4339     return retval;
4340 }
4341 
4342 /*
4343  * Return TRUE if the currently active function should be ended, because a
4344  * return was encountered or an error occurred.  Used inside a ":while".
4345  */
4346     int
4347 func_has_ended(void *cookie)
4348 {
4349     funccall_T  *fcp = (funccall_T *)cookie;
4350 
4351     // Ignore the "abort" flag if the abortion behavior has been changed due to
4352     // an error inside a try conditional.
4353     return (((fcp->func->uf_flags & FC_ABORT) && did_emsg && !aborted_in_try())
4354 	    || fcp->returned);
4355 }
4356 
4357 /*
4358  * return TRUE if cookie indicates a function which "abort"s on errors.
4359  */
4360     int
4361 func_has_abort(
4362     void    *cookie)
4363 {
4364     return ((funccall_T *)cookie)->func->uf_flags & FC_ABORT;
4365 }
4366 
4367 
4368 /*
4369  * Turn "dict.Func" into a partial for "Func" bound to "dict".
4370  * Don't do this when "Func" is already a partial that was bound
4371  * explicitly (pt_auto is FALSE).
4372  * Changes "rettv" in-place.
4373  * Returns the updated "selfdict_in".
4374  */
4375     dict_T *
4376 make_partial(dict_T *selfdict_in, typval_T *rettv)
4377 {
4378     char_u	*fname;
4379     char_u	*tofree = NULL;
4380     ufunc_T	*fp;
4381     char_u	fname_buf[FLEN_FIXED + 1];
4382     int		error;
4383     dict_T	*selfdict = selfdict_in;
4384 
4385     if (rettv->v_type == VAR_PARTIAL && rettv->vval.v_partial->pt_func != NULL)
4386 	fp = rettv->vval.v_partial->pt_func;
4387     else
4388     {
4389 	fname = rettv->v_type == VAR_FUNC ? rettv->vval.v_string
4390 					      : rettv->vval.v_partial->pt_name;
4391 	// Translate "s:func" to the stored function name.
4392 	fname = fname_trans_sid(fname, fname_buf, &tofree, &error);
4393 	fp = find_func(fname, FALSE, NULL);
4394 	vim_free(tofree);
4395     }
4396 
4397     if (fp != NULL && (fp->uf_flags & FC_DICT))
4398     {
4399 	partial_T	*pt = ALLOC_CLEAR_ONE(partial_T);
4400 
4401 	if (pt != NULL)
4402 	{
4403 	    pt->pt_refcount = 1;
4404 	    pt->pt_dict = selfdict;
4405 	    pt->pt_auto = TRUE;
4406 	    selfdict = NULL;
4407 	    if (rettv->v_type == VAR_FUNC)
4408 	    {
4409 		// Just a function: Take over the function name and use
4410 		// selfdict.
4411 		pt->pt_name = rettv->vval.v_string;
4412 	    }
4413 	    else
4414 	    {
4415 		partial_T	*ret_pt = rettv->vval.v_partial;
4416 		int		i;
4417 
4418 		// Partial: copy the function name, use selfdict and copy
4419 		// args.  Can't take over name or args, the partial might
4420 		// be referenced elsewhere.
4421 		if (ret_pt->pt_name != NULL)
4422 		{
4423 		    pt->pt_name = vim_strsave(ret_pt->pt_name);
4424 		    func_ref(pt->pt_name);
4425 		}
4426 		else
4427 		{
4428 		    pt->pt_func = ret_pt->pt_func;
4429 		    func_ptr_ref(pt->pt_func);
4430 		}
4431 		if (ret_pt->pt_argc > 0)
4432 		{
4433 		    pt->pt_argv = ALLOC_MULT(typval_T, ret_pt->pt_argc);
4434 		    if (pt->pt_argv == NULL)
4435 			// out of memory: drop the arguments
4436 			pt->pt_argc = 0;
4437 		    else
4438 		    {
4439 			pt->pt_argc = ret_pt->pt_argc;
4440 			for (i = 0; i < pt->pt_argc; i++)
4441 			    copy_tv(&ret_pt->pt_argv[i], &pt->pt_argv[i]);
4442 		    }
4443 		}
4444 		partial_unref(ret_pt);
4445 	    }
4446 	    rettv->v_type = VAR_PARTIAL;
4447 	    rettv->vval.v_partial = pt;
4448 	}
4449     }
4450     return selfdict;
4451 }
4452 
4453 /*
4454  * Return the name of the executed function.
4455  */
4456     char_u *
4457 func_name(void *cookie)
4458 {
4459     return ((funccall_T *)cookie)->func->uf_name;
4460 }
4461 
4462 /*
4463  * Return the address holding the next breakpoint line for a funccall cookie.
4464  */
4465     linenr_T *
4466 func_breakpoint(void *cookie)
4467 {
4468     return &((funccall_T *)cookie)->breakpoint;
4469 }
4470 
4471 /*
4472  * Return the address holding the debug tick for a funccall cookie.
4473  */
4474     int *
4475 func_dbg_tick(void *cookie)
4476 {
4477     return &((funccall_T *)cookie)->dbg_tick;
4478 }
4479 
4480 /*
4481  * Return the nesting level for a funccall cookie.
4482  */
4483     int
4484 func_level(void *cookie)
4485 {
4486     return ((funccall_T *)cookie)->level;
4487 }
4488 
4489 /*
4490  * Return TRUE when a function was ended by a ":return" command.
4491  */
4492     int
4493 current_func_returned(void)
4494 {
4495     return current_funccal->returned;
4496 }
4497 
4498     int
4499 free_unref_funccal(int copyID, int testing)
4500 {
4501     int		did_free = FALSE;
4502     int		did_free_funccal = FALSE;
4503     funccall_T	*fc, **pfc;
4504 
4505     for (pfc = &previous_funccal; *pfc != NULL; )
4506     {
4507 	if (can_free_funccal(*pfc, copyID))
4508 	{
4509 	    fc = *pfc;
4510 	    *pfc = fc->caller;
4511 	    free_funccal_contents(fc);
4512 	    did_free = TRUE;
4513 	    did_free_funccal = TRUE;
4514 	}
4515 	else
4516 	    pfc = &(*pfc)->caller;
4517     }
4518     if (did_free_funccal)
4519 	// When a funccal was freed some more items might be garbage
4520 	// collected, so run again.
4521 	(void)garbage_collect(testing);
4522 
4523     return did_free;
4524 }
4525 
4526 /*
4527  * Get function call environment based on backtrace debug level
4528  */
4529     static funccall_T *
4530 get_funccal(void)
4531 {
4532     int		i;
4533     funccall_T	*funccal;
4534     funccall_T	*temp_funccal;
4535 
4536     funccal = current_funccal;
4537     if (debug_backtrace_level > 0)
4538     {
4539 	for (i = 0; i < debug_backtrace_level; i++)
4540 	{
4541 	    temp_funccal = funccal->caller;
4542 	    if (temp_funccal)
4543 		funccal = temp_funccal;
4544 	    else
4545 		// backtrace level overflow. reset to max
4546 		debug_backtrace_level = i;
4547 	}
4548     }
4549     return funccal;
4550 }
4551 
4552 /*
4553  * Return the hashtable used for local variables in the current funccal.
4554  * Return NULL if there is no current funccal.
4555  */
4556     hashtab_T *
4557 get_funccal_local_ht()
4558 {
4559     if (current_funccal == NULL || current_funccal->l_vars.dv_refcount == 0)
4560 	return NULL;
4561     return &get_funccal()->l_vars.dv_hashtab;
4562 }
4563 
4564 /*
4565  * Return the l: scope variable.
4566  * Return NULL if there is no current funccal.
4567  */
4568     dictitem_T *
4569 get_funccal_local_var()
4570 {
4571     if (current_funccal == NULL || current_funccal->l_vars.dv_refcount == 0)
4572 	return NULL;
4573     return &get_funccal()->l_vars_var;
4574 }
4575 
4576 /*
4577  * Return the hashtable used for argument in the current funccal.
4578  * Return NULL if there is no current funccal.
4579  */
4580     hashtab_T *
4581 get_funccal_args_ht()
4582 {
4583     if (current_funccal == NULL || current_funccal->l_vars.dv_refcount == 0)
4584 	return NULL;
4585     return &get_funccal()->l_avars.dv_hashtab;
4586 }
4587 
4588 /*
4589  * Return the a: scope variable.
4590  * Return NULL if there is no current funccal.
4591  */
4592     dictitem_T *
4593 get_funccal_args_var()
4594 {
4595     if (current_funccal == NULL || current_funccal->l_vars.dv_refcount == 0)
4596 	return NULL;
4597     return &get_funccal()->l_avars_var;
4598 }
4599 
4600 /*
4601  * List function variables, if there is a function.
4602  */
4603     void
4604 list_func_vars(int *first)
4605 {
4606     if (current_funccal != NULL && current_funccal->l_vars.dv_refcount > 0)
4607 	list_hashtable_vars(&current_funccal->l_vars.dv_hashtab,
4608 							   "l:", FALSE, first);
4609 }
4610 
4611 /*
4612  * If "ht" is the hashtable for local variables in the current funccal, return
4613  * the dict that contains it.
4614  * Otherwise return NULL.
4615  */
4616     dict_T *
4617 get_current_funccal_dict(hashtab_T *ht)
4618 {
4619     if (current_funccal != NULL
4620 	    && ht == &current_funccal->l_vars.dv_hashtab)
4621 	return &current_funccal->l_vars;
4622     return NULL;
4623 }
4624 
4625 /*
4626  * Search hashitem in parent scope.
4627  */
4628     hashitem_T *
4629 find_hi_in_scoped_ht(char_u *name, hashtab_T **pht)
4630 {
4631     funccall_T	*old_current_funccal = current_funccal;
4632     hashtab_T	*ht;
4633     hashitem_T	*hi = NULL;
4634     char_u	*varname;
4635 
4636     if (current_funccal == NULL || current_funccal->func->uf_scoped == NULL)
4637       return NULL;
4638 
4639     // Search in parent scope, which can be referenced from a lambda.
4640     current_funccal = current_funccal->func->uf_scoped;
4641     while (current_funccal != NULL)
4642     {
4643 	ht = find_var_ht(name, &varname);
4644 	if (ht != NULL && *varname != NUL)
4645 	{
4646 	    hi = hash_find(ht, varname);
4647 	    if (!HASHITEM_EMPTY(hi))
4648 	    {
4649 		*pht = ht;
4650 		break;
4651 	    }
4652 	}
4653 	if (current_funccal == current_funccal->func->uf_scoped)
4654 	    break;
4655 	current_funccal = current_funccal->func->uf_scoped;
4656     }
4657     current_funccal = old_current_funccal;
4658 
4659     return hi;
4660 }
4661 
4662 /*
4663  * Search variable in parent scope.
4664  */
4665     dictitem_T *
4666 find_var_in_scoped_ht(char_u *name, int no_autoload)
4667 {
4668     dictitem_T	*v = NULL;
4669     funccall_T	*old_current_funccal = current_funccal;
4670     hashtab_T	*ht;
4671     char_u	*varname;
4672 
4673     if (current_funccal == NULL || current_funccal->func->uf_scoped == NULL)
4674 	return NULL;
4675 
4676     // Search in parent scope which is possible to reference from lambda
4677     current_funccal = current_funccal->func->uf_scoped;
4678     while (current_funccal)
4679     {
4680 	ht = find_var_ht(name, &varname);
4681 	if (ht != NULL && *varname != NUL)
4682 	{
4683 	    v = find_var_in_ht(ht, *name, varname, no_autoload);
4684 	    if (v != NULL)
4685 		break;
4686 	}
4687 	if (current_funccal == current_funccal->func->uf_scoped)
4688 	    break;
4689 	current_funccal = current_funccal->func->uf_scoped;
4690     }
4691     current_funccal = old_current_funccal;
4692 
4693     return v;
4694 }
4695 
4696 /*
4697  * Set "copyID + 1" in previous_funccal and callers.
4698  */
4699     int
4700 set_ref_in_previous_funccal(int copyID)
4701 {
4702     int		abort = FALSE;
4703     funccall_T	*fc;
4704 
4705     for (fc = previous_funccal; !abort && fc != NULL; fc = fc->caller)
4706     {
4707 	fc->fc_copyID = copyID + 1;
4708 	abort = abort
4709 	    || set_ref_in_ht(&fc->l_vars.dv_hashtab, copyID + 1, NULL)
4710 	    || set_ref_in_ht(&fc->l_avars.dv_hashtab, copyID + 1, NULL)
4711 	    || set_ref_in_list_items(&fc->l_varlist, copyID + 1, NULL);
4712     }
4713     return abort;
4714 }
4715 
4716     static int
4717 set_ref_in_funccal(funccall_T *fc, int copyID)
4718 {
4719     int abort = FALSE;
4720 
4721     if (fc->fc_copyID != copyID)
4722     {
4723 	fc->fc_copyID = copyID;
4724 	abort = abort
4725 	    || set_ref_in_ht(&fc->l_vars.dv_hashtab, copyID, NULL)
4726 	    || set_ref_in_ht(&fc->l_avars.dv_hashtab, copyID, NULL)
4727 	    || set_ref_in_list_items(&fc->l_varlist, copyID, NULL)
4728 	    || set_ref_in_func(NULL, fc->func, copyID);
4729     }
4730     return abort;
4731 }
4732 
4733 /*
4734  * Set "copyID" in all local vars and arguments in the call stack.
4735  */
4736     int
4737 set_ref_in_call_stack(int copyID)
4738 {
4739     int			abort = FALSE;
4740     funccall_T		*fc;
4741     funccal_entry_T	*entry;
4742 
4743     for (fc = current_funccal; !abort && fc != NULL; fc = fc->caller)
4744 	abort = abort || set_ref_in_funccal(fc, copyID);
4745 
4746     // Also go through the funccal_stack.
4747     for (entry = funccal_stack; !abort && entry != NULL; entry = entry->next)
4748 	for (fc = entry->top_funccal; !abort && fc != NULL; fc = fc->caller)
4749 	    abort = abort || set_ref_in_funccal(fc, copyID);
4750 
4751     return abort;
4752 }
4753 
4754 /*
4755  * Set "copyID" in all functions available by name.
4756  */
4757     int
4758 set_ref_in_functions(int copyID)
4759 {
4760     int		todo;
4761     hashitem_T	*hi = NULL;
4762     int		abort = FALSE;
4763     ufunc_T	*fp;
4764 
4765     todo = (int)func_hashtab.ht_used;
4766     for (hi = func_hashtab.ht_array; todo > 0 && !got_int; ++hi)
4767     {
4768 	if (!HASHITEM_EMPTY(hi))
4769 	{
4770 	    --todo;
4771 	    fp = HI2UF(hi);
4772 	    if (!func_name_refcount(fp->uf_name))
4773 		abort = abort || set_ref_in_func(NULL, fp, copyID);
4774 	}
4775     }
4776     return abort;
4777 }
4778 
4779 /*
4780  * Set "copyID" in all function arguments.
4781  */
4782     int
4783 set_ref_in_func_args(int copyID)
4784 {
4785     int i;
4786     int abort = FALSE;
4787 
4788     for (i = 0; i < funcargs.ga_len; ++i)
4789 	abort = abort || set_ref_in_item(((typval_T **)funcargs.ga_data)[i],
4790 							  copyID, NULL, NULL);
4791     return abort;
4792 }
4793 
4794 /*
4795  * Mark all lists and dicts referenced through function "name" with "copyID".
4796  * Returns TRUE if setting references failed somehow.
4797  */
4798     int
4799 set_ref_in_func(char_u *name, ufunc_T *fp_in, int copyID)
4800 {
4801     ufunc_T	*fp = fp_in;
4802     funccall_T	*fc;
4803     int		error = FCERR_NONE;
4804     char_u	fname_buf[FLEN_FIXED + 1];
4805     char_u	*tofree = NULL;
4806     char_u	*fname;
4807     int		abort = FALSE;
4808 
4809     if (name == NULL && fp_in == NULL)
4810 	return FALSE;
4811 
4812     if (fp_in == NULL)
4813     {
4814 	fname = fname_trans_sid(name, fname_buf, &tofree, &error);
4815 	fp = find_func(fname, FALSE, NULL);
4816     }
4817     if (fp != NULL)
4818     {
4819 	for (fc = fp->uf_scoped; fc != NULL; fc = fc->func->uf_scoped)
4820 	    abort = abort || set_ref_in_funccal(fc, copyID);
4821     }
4822 
4823     vim_free(tofree);
4824     return abort;
4825 }
4826 
4827 #endif // FEAT_EVAL
4828