summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/errors.h2
-rw-r--r--src/testdir/test_vim9_func.vim7
-rw-r--r--src/userfunc.c8
-rw-r--r--src/version.c2
4 files changed, 18 insertions, 1 deletions
diff --git a/src/errors.h b/src/errors.h
index c27da7cc3..990fb86ee 100644
--- a/src/errors.h
+++ b/src/errors.h
@@ -349,3 +349,5 @@ EXTERN char e_cannot_define_autocommands_for_all_events[]
INIT(= N_("E1155: Cannot define autocommands for ALL events"));
EXTERN char e_cannot_change_arglist_recursively[]
INIT(= N_("E1156: Cannot change the argument list recursively"));
+EXTERN char e_missing_return_type[]
+ INIT(= N_("E1157: Missing return type"));
diff --git a/src/testdir/test_vim9_func.vim b/src/testdir/test_vim9_func.vim
index a5855adcb..73ff693fa 100644
--- a/src/testdir/test_vim9_func.vim
+++ b/src/testdir/test_vim9_func.vim
@@ -687,6 +687,13 @@ def Test_call_lambda_args()
CheckDefAndScriptFailure(lines, 'E1012:')
enddef
+def Test_lambda_return_type()
+ var lines =<< trim END
+ var Ref = (): => 123
+ END
+ CheckDefAndScriptFailure(lines, 'E1157:', 1)
+enddef
+
def Test_lambda_uses_assigned_var()
CheckDefSuccess([
'var x: any = "aaa"'
diff --git a/src/userfunc.c b/src/userfunc.c
index 0f28b028e..701edaf30 100644
--- a/src/userfunc.c
+++ b/src/userfunc.c
@@ -491,6 +491,11 @@ skip_arrow(
s = skipwhite(s + 1);
*ret_type = s;
s = skip_type(s, TRUE);
+ if (s == *ret_type)
+ {
+ emsg(_(e_missing_return_type));
+ return NULL;
+ }
}
bef = s;
s = skipwhite(s);
@@ -543,6 +548,7 @@ get_lambda_tv(
char_u *tofree2 = NULL;
int equal_arrow = **arg == '(';
int white_error = FALSE;
+ int called_emsg_start = called_emsg;
if (equal_arrow && !in_vim9script())
return NOTDONE;
@@ -560,7 +566,7 @@ get_lambda_tv(
{
if (types_optional)
ga_clear_strings(&argtypes);
- return NOTDONE;
+ return called_emsg == called_emsg_start ? NOTDONE : FAIL;
}
// Parse the arguments for real.
diff --git a/src/version.c b/src/version.c
index b320943a3..9fa14cbe8 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 */
/**/
+ 2445,
+/**/
2444,
/**/
2443,