changeset 21455:8cc1555f2445 v8.2.1278

patch 8.2.1278: Vim9: line break after "->" only allowed in :def function Commit: https://github.com/vim/vim/commit/dd1a9af00f6954b176c5875af0a91acde72572c8 Author: Bram Moolenaar <Bram@vim.org> Date: Thu Jul 23 15:38:03 2020 +0200 patch 8.2.1278: Vim9: line break after "->" only allowed in :def function Problem: Vim9: line break after "->" only allowed in :def function. Solution: Only allow line break after "->". (closes https://github.com/vim/vim/issues/6492)
author Bram Moolenaar <Bram@vim.org>
date Thu, 23 Jul 2020 15:45:06 +0200
parents c50b04b76bc2
children a2bf60c69fb9
files src/globals.h src/testdir/test_vim9_expr.vim src/version.c src/vim9compile.c
diffstat 4 files changed, 16 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/src/globals.h
+++ b/src/globals.h
@@ -1730,6 +1730,7 @@ EXTERN char e_longname[]	INIT(= N_("E75:
 EXTERN char e_toomsbra[]	INIT(= N_("E76: Too many ["));
 EXTERN char e_toomany[]	INIT(= N_("E77: Too many file names"));
 EXTERN char e_trailing[]	INIT(= N_("E488: Trailing characters"));
+EXTERN char e_trailing_arg[]	INIT(= N_("E488: Trailing characters: %s"));
 EXTERN char e_umark[]		INIT(= N_("E78: Unknown mark"));
 EXTERN char e_wildexpand[]	INIT(= N_("E79: Cannot expand wildcards"));
 EXTERN char e_winheight[]	INIT(= N_("E591: 'winheight' cannot be smaller than 'winminheight'"));
--- a/src/testdir/test_vim9_expr.vim
+++ b/src/testdir/test_vim9_expr.vim
@@ -1460,7 +1460,8 @@ enddef
 
 def Test_expr7_call()
   assert_equal('yes', 'yes'->Echo())
-  assert_equal('yes', 'yes'->s:EchoArg())
+  assert_equal('yes', 'yes'
+  			->s:EchoArg())
   assert_equal(1, !range(5)->empty())
   assert_equal([0, 1, 2], --3->range())
 
@@ -1531,6 +1532,8 @@ func Test_expr7_fails()
 
   call CheckDefFailure(["let x = ''", "let y = x.memb"], 'E715:')
 
+  call CheckDefFailure(["'yes'->", "Echo()"], 'E488:')
+
   call CheckDefExecFailure(["[1, 2->len()"], 'E697:')
   call CheckDefExecFailure(["#{a: 1->len()"], 'E488:')
   call CheckDefExecFailure(["{'a': 1->len()"], 'E723:')
@@ -1591,8 +1594,8 @@ enddef
 def Test_expr7_subscript_linebreak()
   let range = range(
   		3)
-  let l = range->
-  	map('string(v:key)')
+  let l = range
+	->map('string(v:key)')
   assert_equal(['0', '1', '2'], l)
 
   l = range
--- a/src/version.c
+++ b/src/version.c
@@ -755,6 +755,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1278,
+/**/
     1277,
 /**/
     1276,
--- a/src/vim9compile.c
+++ b/src/vim9compile.c
@@ -3773,8 +3773,7 @@ compile_subscript(
 
 	    p += 2;
 	    *arg = skipwhite(p);
-	    if (may_get_next_line(p, arg, cctx) == FAIL)
-		return FAIL;
+	    // No line break supported right after "->".
 	    if (**arg == '{')
 	    {
 		// lambda call:  list->{lambda}
@@ -3785,6 +3784,11 @@ compile_subscript(
 	    {
 		// method call:  list->method()
 		p = *arg;
+		if (!eval_isnamec1(*p))
+		{
+		    semsg(_(e_trailing_arg), p);
+		    return FAIL;
+		}
 		if (ASCII_ISALPHA(*p) && p[1] == ':')
 		    p += 2;
 		for ( ; eval_isnamec1(*p); ++p)
@@ -7045,7 +7049,7 @@ compile_def_function(ufunc_T *ufunc, int
 		&& !(*line == '#' && (line == cctx.ctx_line_start
 						    || VIM_ISWHITE(line[-1]))))
 	{
-	    semsg(_("E488: Trailing characters: %s"), line);
+	    semsg(_(e_trailing_arg), line);
 	    goto erret;
 	}
 	else