Mercurial > vim
comparison src/userfunc.c @ 21046:0ca7e04d39e3 v8.2.1074
patch 8.2.1074: Vim9: no line break allowed after some operators
Commit: https://github.com/vim/vim/commit/9215f01218b2ed2cfe49c1f43fcf342bd9ffdded
Author: Bram Moolenaar <Bram@vim.org>
Date: Sat Jun 27 21:18:00 2020 +0200
patch 8.2.1074: Vim9: no line break allowed after some operators
Problem: Vim9: no line break allowed after some operators.
Solution: Skip a line break after the operator. Add
eval_may_get_next_line() to simplify checking for a line break.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sat, 27 Jun 2020 21:30:04 +0200 |
parents | d9e0db9b2b99 |
children | 111f877e63d9 |
comparison
equal
deleted
inserted
replaced
21045:e834e0a2a43c | 21046:0ca7e04d39e3 |
---|---|
400 garray_T *pnewargs; | 400 garray_T *pnewargs; |
401 ufunc_T *fp = NULL; | 401 ufunc_T *fp = NULL; |
402 partial_T *pt = NULL; | 402 partial_T *pt = NULL; |
403 int varargs; | 403 int varargs; |
404 int ret; | 404 int ret; |
405 char_u *start = skipwhite(*arg + 1); | 405 char_u *start; |
406 char_u *s, *e; | 406 char_u *s, *e; |
407 int *old_eval_lavars = eval_lavars_used; | 407 int *old_eval_lavars = eval_lavars_used; |
408 int eval_lavars = FALSE; | 408 int eval_lavars = FALSE; |
409 int getnext; | |
410 char_u *tofree = NULL; | 409 char_u *tofree = NULL; |
411 | 410 |
412 ga_init(&newargs); | 411 ga_init(&newargs); |
413 ga_init(&newlines); | 412 ga_init(&newlines); |
414 | 413 |
415 // First, check if this is a lambda expression. "->" must exist. | 414 // First, check if this is a lambda expression. "->" must exist. |
415 start = skipwhite(*arg + 1); | |
416 ret = get_function_args(&start, '-', NULL, NULL, NULL, NULL, TRUE, | 416 ret = get_function_args(&start, '-', NULL, NULL, NULL, NULL, TRUE, |
417 NULL, NULL); | 417 NULL, NULL); |
418 if (ret == FAIL || *start != '>') | 418 if (ret == FAIL || *start != '>') |
419 return NOTDONE; | 419 return NOTDONE; |
420 | 420 |
433 // Set up a flag for checking local variables and arguments. | 433 // Set up a flag for checking local variables and arguments. |
434 if (evaluate) | 434 if (evaluate) |
435 eval_lavars_used = &eval_lavars; | 435 eval_lavars_used = &eval_lavars; |
436 | 436 |
437 // Get the start and the end of the expression. | 437 // Get the start and the end of the expression. |
438 *arg = skipwhite(*arg + 1); | 438 *arg = skipwhite_and_linebreak(*arg + 1, evalarg); |
439 eval_next_non_blank(*arg, evalarg, &getnext); | |
440 if (getnext) | |
441 *arg = eval_next_line(evalarg); | |
442 s = *arg; | 439 s = *arg; |
443 ret = skip_expr_concatenate(&s, arg, evalarg); | 440 ret = skip_expr_concatenate(&s, arg, evalarg); |
444 if (ret == FAIL) | 441 if (ret == FAIL) |
445 goto errret; | 442 goto errret; |
446 if (evalarg != NULL) | 443 if (evalarg != NULL) |
449 tofree = evalarg->eval_tofree; | 446 tofree = evalarg->eval_tofree; |
450 evalarg->eval_tofree = NULL; | 447 evalarg->eval_tofree = NULL; |
451 } | 448 } |
452 | 449 |
453 e = *arg; | 450 e = *arg; |
454 *arg = skipwhite(*arg); | 451 *arg = skipwhite_and_linebreak(*arg, evalarg); |
455 eval_next_non_blank(*arg, evalarg, &getnext); | |
456 if (getnext) | |
457 *arg = eval_next_line(evalarg); | |
458 if (**arg != '}') | 452 if (**arg != '}') |
459 { | 453 { |
460 semsg(_("E451: Expected }: %s"), *arg); | 454 semsg(_("E451: Expected }: %s"), *arg); |
461 goto errret; | 455 goto errret; |
462 } | 456 } |