]> granicus.if.org Git - vim/commitdiff
patch 8.2.2445: Vim9: no proper error for lambda missing return type v8.2.2445
authorBram Moolenaar <Bram@vim.org>
Sun, 31 Jan 2021 21:18:29 +0000 (22:18 +0100)
committerBram Moolenaar <Bram@vim.org>
Sun, 31 Jan 2021 21:18:29 +0000 (22:18 +0100)
Problem:    Vim9: no proper error for lambda missing return type.
Solution:   Check for this error. (closes #7758)

src/errors.h
src/testdir/test_vim9_func.vim
src/userfunc.c
src/version.c

index c27da7cc3530e8b9213a62f28f1edd8d3436cf85..990fb86ee6ce157bce7a6709fa175fb9552e930d 100644 (file)
@@ -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"));
index a5855adcbc7eeeb6ba12336a4a9d2320b22ad60d..73ff693fa9659ff6b019ffe29b15f43bd85bbcc6 100644 (file)
@@ -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"'
index 0f28b028e7e5ddd6d04b02902d9f38ea1589b676..701edaf30ddb2de626c416efaef8ed2b14f1ea3d 100644 (file)
@@ -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.
index b320943a3a4ce660501beacee5539bd60c17dd91..9fa14cbe871da050aa27d7796b846dac43a5b6d3 100644 (file)
@@ -750,6 +750,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    2445,
 /**/
     2444,
 /**/