Mercurial > vim
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 |