changeset 19826:293a22b677a8 v8.2.0469

patch 8.2.0469: Vim9: no error for missing ] after list Commit: https://github.com/vim/vim/commit/ee619e5bc0992e818f2d9540b093b769b9c27651 Author: Bram Moolenaar <Bram@vim.org> Date: Sat Mar 28 21:38:06 2020 +0100 patch 8.2.0469: Vim9: no error for missing ] after list Problem: Vim9: no error for missing ] after list. Solution: Add error message. Add more tests.
author Bram Moolenaar <Bram@vim.org>
date Sat, 28 Mar 2020 21:45:06 +0100
parents 17feab93763a
children 478239d7c5ae
files src/globals.h src/list.c src/testdir/test_lambda.vim src/testdir/test_vim9_expr.vim src/userfunc.c src/version.c
diffstat 6 files changed, 15 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/globals.h
+++ b/src/globals.h
@@ -1644,6 +1644,7 @@ EXTERN char e_func_deleted[]	INIT(= N_("
 EXTERN char e_dictkey[]		INIT(= N_("E716: Key not present in Dictionary: %s"));
 EXTERN char e_listreq[]		INIT(= N_("E714: List required"));
 EXTERN char e_listblobreq[]	INIT(= N_("E897: List or Blob required"));
+EXTERN char e_list_end[]	INIT(= N_("E697: Missing end of List ']': %s"));
 EXTERN char e_listdictarg[]	INIT(= N_("E712: Argument of %s must be a List or Dictionary"));
 EXTERN char e_listdictblobarg[]	INIT(= N_("E896: Argument of %s must be a List, Dictionary or Blob"));
 EXTERN char e_modulus[]		INIT(= N_("E804: Cannot use '%' with Float"));
--- a/src/list.c
+++ b/src/list.c
@@ -1083,7 +1083,7 @@ get_list_tv(char_u **arg, typval_T *rett
     if (**arg != ']')
     {
 	if (do_error)
-	    semsg(_("E697: Missing end of List ']': %s"), *arg);
+	    semsg(_(e_list_end), *arg);
 failret:
 	if (evaluate)
 	    list_free(l);
--- a/src/testdir/test_lambda.vim
+++ b/src/testdir/test_lambda.vim
@@ -62,7 +62,7 @@ endfunc
 function Test_lambda_fails()
   call assert_equal(3, {a, b -> a + b}(1, 2))
   call assert_fails('echo {a, a -> a + a}(1, 2)', 'E853:')
-  call assert_fails('echo {a, b -> a + b)}(1, 2)', 'E15:')
+  call assert_fails('echo {a, b -> a + b)}(1, 2)', 'E451:')
   echo assert_fails('echo 10->{a -> a + 2}', 'E107:')
 endfunc
 
--- a/src/testdir/test_vim9_expr.vim
+++ b/src/testdir/test_vim9_expr.vim
@@ -806,6 +806,12 @@ func Test_expr7_fails()
   call CheckDefFailure("let x = @", "E1002:")
   call CheckDefFailure("let x = @<", "E354:")
 
+  call CheckDefFailure("let x = [1, 2", "E697:")
+  call CheckDefFailure("let x = [notfound]", "E1001:")
+
+  call CheckDefFailure("let x = { -> 123) }", "E451:")
+  call CheckDefFailure("let x = 123->{x -> x + 5) }", "E451:")
+
   call CheckDefFailure("let x = &notexist", 'E113:')
   call CheckDefExecFailure("&grepprg = [343]", 'E1051:')
 
@@ -878,6 +884,7 @@ enddef
 
 func Test_expr7_trailing_fails()
   call CheckDefFailureList(['let l = [2]', 'l->{l -> add(l, 8)}'], 'E107')
+  call CheckDefFailureList(['let l = [2]', 'l->{l -> add(l, 8)} ()'], 'E274')
 endfunc
 
 func Test_expr_fails()
--- a/src/userfunc.c
+++ b/src/userfunc.c
@@ -350,7 +350,10 @@ get_lambda_tv(char_u **arg, typval_T *re
     e = *arg;
     *arg = skipwhite(*arg);
     if (**arg != '}')
+    {
+	semsg(_("E451: Expected }: %s"), *arg);
 	goto errret;
+    }
     ++*arg;
 
     if (evaluate)
--- a/src/version.c
+++ b/src/version.c
@@ -739,6 +739,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    469,
+/**/
     468,
 /**/
     467,