summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2021-03-22 20:49:02 +0100
committerBram Moolenaar <Bram@vim.org>2021-03-22 20:49:02 +0100
commit49f1e9ec3e7f4e1b3572367d02a83c2b6ebbed97 (patch)
tree715f1f7291ce6c1a8dd544ec0bc7844d13e728b3
parentda1dbed0dfac00952b42982f8fffa42c4f5ed0c8 (diff)
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.h2
-rw-r--r--src/testdir/test_vim9_expr.vim33
-rw-r--r--src/testdir/test_vim9_func.vim10
-rw-r--r--src/userfunc.c17
-rw-r--r--src/version.c2
5 files changed, 57 insertions, 7 deletions
diff --git a/src/errors.h b/src/errors.h
index 300802034f..e610d28ad0 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 c181b203f7..7a9b1e49c8 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 2697c29e44..275541294e 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 c9c7bc7911..57669419d2 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 6fda8fcda0..9b21d12c0c 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,