diff options
author | Bram Moolenaar <Bram@vim.org> | 2020-07-23 15:38:03 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2020-07-23 15:38:03 +0200 |
commit | dd1a9af00f6954b176c5875af0a91acde72572c8 (patch) | |
tree | c006671907d83194061107b980678d1d576e2f5f | |
parent | 7a87b4e3fe91c18a616536fe49154c4bb3da0a93 (diff) |
patch 8.2.1278: Vim9: line break after "->" only allowed in :def functionv8.2.1278
Problem: Vim9: line break after "->" only allowed in :def function.
Solution: Only allow line break after "->". (closes #6492)
-rw-r--r-- | src/globals.h | 1 | ||||
-rw-r--r-- | src/testdir/test_vim9_expr.vim | 9 | ||||
-rw-r--r-- | src/version.c | 2 | ||||
-rw-r--r-- | src/vim9compile.c | 10 |
4 files changed, 16 insertions, 6 deletions
diff --git a/src/globals.h b/src/globals.h index 5e2306baba..77c3641ec7 100644 --- a/src/globals.h +++ b/src/globals.h @@ -1730,6 +1730,7 @@ EXTERN char e_longname[] INIT(= N_("E75: Name too long")); 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'")); diff --git a/src/testdir/test_vim9_expr.vim b/src/testdir/test_vim9_expr.vim index d6cbd037d3..b0a83f49ab 100644 --- 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 diff --git a/src/version.c b/src/version.c index 45714aa550..1e78c015ee 100644 --- 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, diff --git a/src/vim9compile.c b/src/vim9compile.c index fa7171c8a4..394433a127 100644 --- 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 set_return_type, cctx_T *outer_cctx) && !(*line == '#' && (line == cctx.ctx_line_start || VIM_ISWHITE(line[-1])))) { - semsg(_("E488: Trailing characters: %s"), line); + semsg(_(e_trailing_arg), line); goto erret; } else |