From: Bram Moolenaar Date: Sun, 20 Sep 2020 20:43:52 +0000 (+0200) Subject: patch 8.2.1719: Vim9: no error if comma is missing in between arguments X-Git-Tag: v8.2.1719 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=10e4f12bf4cd08328618bbf4e57a15435296e586;p=vim patch 8.2.1719: Vim9: no error if comma is missing in between arguments Problem: Vim9: no error if comma is missing in between arguments. Solution: Give an error message. --- diff --git a/src/errors.h b/src/errors.h index d12e97f6f..0246fa103 100644 --- a/src/errors.h +++ b/src/errors.h @@ -268,4 +268,6 @@ EXTERN char e_cannot_change_dict_item[] INIT(= N_("E1121: Cannot change dict item")); EXTERN char e_variable_is_locked_str[] INIT(= N_("E1122: Variable is locked: %s")); +EXTERN char e_missing_comma_before_argument_str[] + INIT(= N_("E1123: Missing comma before argument: %s")); #endif diff --git a/src/testdir/test_vim9_expr.vim b/src/testdir/test_vim9_expr.vim index b9a68112b..411ed7017 100644 --- a/src/testdir/test_vim9_expr.vim +++ b/src/testdir/test_vim9_expr.vim @@ -2112,6 +2112,7 @@ def Test_expr7_call() "vim9script", "let x = substitute ('x', 'x', 'x', 'x')" ], 'E121:', 2) + CheckDefFailure(["let Ref = function('len' [1, 2])"], 'E1123:', 1) let auto_lines =<< trim END def g:some#func(): string diff --git a/src/version.c b/src/version.c index 2344ddf2e..15c497671 100644 --- a/src/version.c +++ b/src/version.c @@ -750,6 +750,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1719, /**/ 1718, /**/ diff --git a/src/vim9compile.c b/src/vim9compile.c index 0db516274..1edf48ce6 100644 --- a/src/vim9compile.c +++ b/src/vim9compile.c @@ -2290,6 +2290,7 @@ compile_arguments(char_u **arg, cctx_T *cctx, int *argcount) { char_u *p = *arg; char_u *whitep = *arg; + int must_end = FALSE; for (;;) { @@ -2300,6 +2301,11 @@ compile_arguments(char_u **arg, cctx_T *cctx, int *argcount) *arg = p + 1; return OK; } + if (must_end) + { + semsg(_(e_missing_comma_before_argument_str), p); + return FAIL; + } if (compile_expr0(&p, cctx) == FAIL) return FAIL; @@ -2316,6 +2322,8 @@ compile_arguments(char_u **arg, cctx_T *cctx, int *argcount) if (*p != NUL && !VIM_ISWHITE(*p)) semsg(_(e_white_space_required_after_str), ","); } + else + must_end = TRUE; whitep = p; p = skipwhite(p); }