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 }