Mercurial > vim
diff src/list.c @ 21028:7acceb76669f v8.2.1065
patch 8.2.1065: Vim9: no line break allowed inside a list
Commit: https://github.com/vim/vim/commit/7147820cb978f5b179cfec2f9d8b7774e28d43e0
Author: Bram Moolenaar <Bram@vim.org>
Date: Fri Jun 26 22:46:27 2020 +0200
patch 8.2.1065: Vim9: no line break allowed inside a list
Problem: Vim9: no line break allowed inside a list.
Solution: Handle line break inside a list in Vim9 script.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Fri, 26 Jun 2020 23:00:05 +0200 |
parents | 3b29ac3394dc |
children | f58ee30d863f |
line wrap: on
line diff
--- a/src/list.c +++ b/src/list.c @@ -1156,19 +1156,19 @@ f_join(typval_T *argvars, typval_T *rett /* * Allocate a variable for a List and fill it from "*arg". + * "*arg" points to the "[". * Return OK or FAIL. */ int -get_list_tv(char_u **arg, typval_T *rettv, int flags, int do_error) +get_list_tv(char_u **arg, typval_T *rettv, evalarg_T *evalarg, int do_error) { - int evaluate = flags & EVAL_EVALUATE; + int evaluate = evalarg == NULL ? FALSE + : evalarg->eval_flags & EVAL_EVALUATE; + int getnext; list_T *l = NULL; typval_T tv; listitem_T *item; - evalarg_T evalarg; - - CLEAR_FIELD(evalarg); - evalarg.eval_flags = flags; + int had_comma; if (evaluate) { @@ -1178,9 +1178,12 @@ get_list_tv(char_u **arg, typval_T *rett } *arg = skipwhite(*arg + 1); + eval_next_non_blank(*arg, evalarg, &getnext); + if (getnext) + *arg = eval_next_line(evalarg); while (**arg != ']' && **arg != NUL) { - if (eval1(arg, &tv, &evalarg) == FAIL) // recursive! + if (eval1(arg, &tv, evalarg) == FAIL) // recursive! goto failret; if (evaluate) { @@ -1195,15 +1198,24 @@ get_list_tv(char_u **arg, typval_T *rett clear_tv(&tv); } + // the comma must comma after the value + had_comma = **arg == ','; + if (had_comma) + *arg = skipwhite(*arg + 1); + + // the "]" can be on the next line + eval_next_non_blank(*arg, evalarg, &getnext); + if (getnext) + *arg = eval_next_line(evalarg); if (**arg == ']') break; - if (**arg != ',') + + if (!had_comma) { if (do_error) semsg(_("E696: Missing comma in List: %s"), *arg); goto failret; } - *arg = skipwhite(*arg + 1); } if (**arg != ']')