comparison src/userfunc.c @ 28727:30862b2f7431 v8.2.4888

patch 8.2.4888: line number of lambda ignores line continuation Commit: https://github.com/vim/vim/commit/521bf32bb4f86676ce3617d25309770f1440ba79 Author: Bram Moolenaar <Bram@vim.org> Date: Fri May 6 15:47:07 2022 +0100 patch 8.2.4888: line number of lambda ignores line continuation Problem: Line number of lambda ignores line continuation. Solution: Use the line number of where the arguments are. Avoid outputting "..." twice. (closes #10364)
author Bram Moolenaar <Bram@vim.org>
date Fri, 06 May 2022 17:00:02 +0200
parents c6aadb2c4cd7
children d0241e74bfdb
comparison
equal deleted inserted replaced
28726:47103a36fc8c 28727:30862b2f7431
1371 char_u *tofree2 = NULL; 1371 char_u *tofree2 = NULL;
1372 int equal_arrow = **arg == '('; 1372 int equal_arrow = **arg == '(';
1373 int white_error = FALSE; 1373 int white_error = FALSE;
1374 int called_emsg_start = called_emsg; 1374 int called_emsg_start = called_emsg;
1375 int vim9script = in_vim9script(); 1375 int vim9script = in_vim9script();
1376 long start_lnum = SOURCING_LNUM;
1376 1377
1377 if (equal_arrow && !vim9script) 1378 if (equal_arrow && !vim9script)
1378 return NOTDONE; 1379 return NOTDONE;
1379 1380
1380 ga_init(&newargs); 1381 ga_init(&newargs);
1431 if (equal_arrow && **arg == '{') 1432 if (equal_arrow && **arg == '{')
1432 { 1433 {
1433 if (evalarg == NULL) 1434 if (evalarg == NULL)
1434 // cannot happen? 1435 // cannot happen?
1435 goto theend; 1436 goto theend;
1437 SOURCING_LNUM = start_lnum; // used for where lambda is defined
1436 if (lambda_function_body(arg, rettv, evalarg, pnewargs, 1438 if (lambda_function_body(arg, rettv, evalarg, pnewargs,
1437 types_optional ? &argtypes : NULL, varargs, 1439 types_optional ? &argtypes : NULL, varargs,
1438 &default_args, ret_type) == FAIL) 1440 &default_args, ret_type) == FAIL)
1439 goto errret; 1441 goto errret;
1440 goto theend; 1442 goto theend;
1561 // uf_args.ga_len. In Vim9 script "...name" has to be used. 1563 // uf_args.ga_len. In Vim9 script "...name" has to be used.
1562 fp->uf_varargs = !vim9script || varargs; 1564 fp->uf_varargs = !vim9script || varargs;
1563 fp->uf_flags = flags; 1565 fp->uf_flags = flags;
1564 fp->uf_calls = 0; 1566 fp->uf_calls = 0;
1565 fp->uf_script_ctx = current_sctx; 1567 fp->uf_script_ctx = current_sctx;
1566 fp->uf_script_ctx.sc_lnum += SOURCING_LNUM - newlines.ga_len + 1; 1568 // Use the line number of the arguments.
1569 fp->uf_script_ctx.sc_lnum += start_lnum;
1567 1570
1568 function_using_block_scopes(fp, evalarg->eval_cstack); 1571 function_using_block_scopes(fp, evalarg->eval_cstack);
1569 1572
1570 pt->pt_func = fp; 1573 pt->pt_func = fp;
1571 pt->pt_refcount = 1; 1574 pt->pt_refcount = 1;
3705 msg_puts(", "); 3708 msg_puts(", ");
3706 msg_puts("..."); 3709 msg_puts("...");
3707 } 3710 }
3708 if (fp->uf_va_name != NULL) 3711 if (fp->uf_va_name != NULL)
3709 { 3712 {
3710 if (j) 3713 if (!fp->uf_varargs)
3711 msg_puts(", "); 3714 {
3712 msg_puts("..."); 3715 if (j)
3716 msg_puts(", ");
3717 msg_puts("...");
3718 }
3713 msg_puts((char *)fp->uf_va_name); 3719 msg_puts((char *)fp->uf_va_name);
3714 if (fp->uf_va_type != NULL) 3720 if (fp->uf_va_type != NULL)
3715 { 3721 {
3716 char *tofree; 3722 char *tofree;
3717 3723