summaryrefslogtreecommitdiff
path: root/src/userfunc.c
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2022-05-06 15:47:07 +0100
committerBram Moolenaar <Bram@vim.org>2022-05-06 15:47:07 +0100
commit521bf32bb4f86676ce3617d25309770f1440ba79 (patch)
tree6e574e5e70b43787f9b20d7dd44e947297889a8d /src/userfunc.c
parent9b334d5912607f09912bfd19aa95355a1efc2761 (diff)
downloadvim-git-521bf32bb4f86676ce3617d25309770f1440ba79.tar.gz
patch 8.2.4888: line number of lambda ignores line continuationv8.2.4888
Problem: Line number of lambda ignores line continuation. Solution: Use the line number of where the arguments are. Avoid outputting "..." twice. (closes #10364)
Diffstat (limited to 'src/userfunc.c')
-rw-r--r--src/userfunc.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/userfunc.c b/src/userfunc.c
index f3ba7719c..081bac19a 100644
--- a/src/userfunc.c
+++ b/src/userfunc.c
@@ -1373,6 +1373,7 @@ get_lambda_tv(
int white_error = FALSE;
int called_emsg_start = called_emsg;
int vim9script = in_vim9script();
+ long start_lnum = SOURCING_LNUM;
if (equal_arrow && !vim9script)
return NOTDONE;
@@ -1433,6 +1434,7 @@ get_lambda_tv(
if (evalarg == NULL)
// cannot happen?
goto theend;
+ SOURCING_LNUM = start_lnum; // used for where lambda is defined
if (lambda_function_body(arg, rettv, evalarg, pnewargs,
types_optional ? &argtypes : NULL, varargs,
&default_args, ret_type) == FAIL)
@@ -1563,7 +1565,8 @@ get_lambda_tv(
fp->uf_flags = flags;
fp->uf_calls = 0;
fp->uf_script_ctx = current_sctx;
- fp->uf_script_ctx.sc_lnum += SOURCING_LNUM - newlines.ga_len + 1;
+ // Use the line number of the arguments.
+ fp->uf_script_ctx.sc_lnum += start_lnum;
function_using_block_scopes(fp, evalarg->eval_cstack);
@@ -3707,9 +3710,12 @@ list_func_head(ufunc_T *fp, int indent)
}
if (fp->uf_va_name != NULL)
{
- if (j)
- msg_puts(", ");
- msg_puts("...");
+ if (!fp->uf_varargs)
+ {
+ if (j)
+ msg_puts(", ");
+ msg_puts("...");
+ }
msg_puts((char *)fp->uf_va_name);
if (fp->uf_va_type != NULL)
{