diff options
author | Bram Moolenaar <Bram@vim.org> | 2021-03-22 20:49:02 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2021-03-22 20:49:02 +0100 |
commit | 49f1e9ec3e7f4e1b3572367d02a83c2b6ebbed97 (patch) | |
tree | 715f1f7291ce6c1a8dd544ec0bc7844d13e728b3 | |
parent | da1dbed0dfac00952b42982f8fffa42c4f5ed0c8 (diff) | |
download | vim-git-49f1e9ec3e7f4e1b3572367d02a83c2b6ebbed97.tar.gz |
patch 8.2.2645: using inline function is not properly testedv8.2.2645
Problem: Using inline function is not properly tested.
Solution: Add test cases, esp. for errors. Minor code improvements.
-rw-r--r-- | src/errors.h | 2 | ||||
-rw-r--r-- | src/testdir/test_vim9_expr.vim | 33 | ||||
-rw-r--r-- | src/testdir/test_vim9_func.vim | 10 | ||||
-rw-r--r-- | src/userfunc.c | 17 | ||||
-rw-r--r-- | src/version.c | 2 |
5 files changed, 57 insertions, 7 deletions
diff --git a/src/errors.h b/src/errors.h index 300802034..e610d28ad 100644 --- a/src/errors.h +++ b/src/errors.h @@ -381,3 +381,5 @@ EXTERN char e_missing_end_block[] INIT(= N_("E1171: Missing } after inline function")); EXTERN char e_cannot_use_default_values_in_lambda[] INIT(= N_("E1172: Cannot use default values in a lambda")); +EXTERN char e_text_found_after_enddef_str[] + INIT(= N_("E1173: Text found after enddef: %s")); diff --git a/src/testdir/test_vim9_expr.vim b/src/testdir/test_vim9_expr.vim index c181b203f..7a9b1e49c 100644 --- a/src/testdir/test_vim9_expr.vim +++ b/src/testdir/test_vim9_expr.vim @@ -1961,6 +1961,11 @@ def Test_expr7_lambda_block() return 'no' }) assert_equal(['no', 'yes', 'no'], dll) + + sandbox var Safe = (nr: number): number => { + return nr + 7 + } + assert_equal(10, Safe(3)) END CheckDefAndScriptSuccess(lines) @@ -1968,6 +1973,34 @@ def Test_expr7_lambda_block() map([1, 2], (k, v) => { redrawt }) END CheckDefAndScriptFailure(lines, 'E488') + + lines =<< trim END + var Func = (nr: int) => { + echo nr + } + END + CheckDefAndScriptFailure(lines, 'E1010', 1) + + lines =<< trim END + var Func = (nr: number): int => { + return nr + } + END + CheckDefAndScriptFailure(lines, 'E1010', 1) + + lines =<< trim END + var Func = (nr: number): int => { + return nr + END + CheckDefAndScriptFailure(lines, 'E1171', 1) # line nr is function start + + lines =<< trim END + vim9script + var Func = (nr: number): int => { + var ll =<< ENDIT + nothing + END + CheckScriptFailure(lines, 'E1145: Missing heredoc end marker: ENDIT', 2) enddef def NewLambdaWithComments(): func diff --git a/src/testdir/test_vim9_func.vim b/src/testdir/test_vim9_func.vim index 2697c29e4..275541294 100644 --- a/src/testdir/test_vim9_func.vim +++ b/src/testdir/test_vim9_func.vim @@ -86,6 +86,16 @@ def Test_endfunc_enddef() enddef END CheckScriptFailure(lines, 'E1152:', 4) + + lines =<< trim END + def Ok() + echo 'hello' + enddef | echo 'there' + def Bad() + echo 'hello' + enddef there + END + CheckScriptFailure(lines, 'E1173: Text found after enddef: there', 6) enddef def Test_missing_endfunc_enddef() diff --git a/src/userfunc.c b/src/userfunc.c index c9c7bc791..57669419d 100644 --- a/src/userfunc.c +++ b/src/userfunc.c @@ -731,13 +731,16 @@ get_function_body( else if (line_arg != NULL && *skipwhite(line_arg) != NUL) nextcmd = line_arg; else if (*p != NUL && *p != (vim9_function ? '#' : '"') - && p_verbose > 0 - && eap->cmdidx != CMD_block) - give_warning2(eap->cmdidx == CMD_def - ? (char_u *)_("W1001: Text found after :enddef: %s") - : (char_u *)_("W22: Text found after :endfunction: %s"), - p, TRUE); - if (nextcmd != NULL) + && (vim9_function || p_verbose > 0)) + { + if (eap->cmdidx == CMD_def) + semsg(_(e_text_found_after_enddef_str), p); + else + give_warning2((char_u *) + _("W22: Text found after :endfunction: %s"), + p, TRUE); + } + if (nextcmd != NULL && *skipwhite(nextcmd) != NUL) { // Another command follows. If the line came from "eap" // we can simply point into it, otherwise we need to diff --git a/src/version.c b/src/version.c index 6fda8fcda..9b21d12c0 100644 --- a/src/version.c +++ b/src/version.c @@ -751,6 +751,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 2645, +/**/ 2644, /**/ 2643, |