]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 8.2.4055: Vim9: line break in expression causes v:errmsg to be fillec v8.2.4055
authorBram Moolenaar <Bram@vim.org>
Mon, 10 Jan 2022 18:50:52 +0000 (18:50 +0000)
committerBram Moolenaar <Bram@vim.org>
Mon, 10 Jan 2022 18:50:52 +0000 (18:50 +0000)
Problem:    Vim9: line break in expression causes v:errmsg to be filled.
            (Yegappan Lakshmanan)
Solution:   Do not give an error when skipping over an expression.

src/testdir/test_vim9_expr.vim
src/userfunc.c
src/version.c

index 52237e33fdfe8a43fa8078870df8ed49903fc8fd..039387dc3148caf9bfd1237da6ff0469be263008 100644 (file)
@@ -3147,6 +3147,22 @@ def Test_expr7_method_call()
   CheckDefExecFailure(lines, 'E1013:')
 enddef
 
+def Test_expr7_method_call_linebreak()
+  # this was giving an error when skipping over the expression
+  var lines =<< trim END
+      vim9script
+      def Test()
+        var a: dict<any> = {b: {}}
+        a.b->extend({f1: 1,
+                         f2: 2})
+        echo a
+      enddef
+      defcompile
+      assert_equal('', v:errmsg)
+  END
+  CheckScriptSuccess(lines)
+enddef
+
 
 def Test_expr7_not()
   var lines =<< trim END
index a3ff38c0a1c1c0da9d536fb5f543f02d175e7d71..48f5890e8b1c4c8acaeb51f72761329312b79050 100644 (file)
@@ -1703,6 +1703,8 @@ get_func_tv(
     typval_T   argvars[MAX_FUNC_ARGS + 1];     // vars for arguments
     int                argcount = 0;           // number of arguments found
     int                vim9script = in_vim9script();
+    int                evaluate = evalarg == NULL
+                              ? FALSE : (evalarg->eval_flags & EVAL_EVALUATE);
 
     /*
      * Get the arguments.
@@ -1728,7 +1730,9 @@ get_func_tv(
        {
            if (*argp != ',' && *skipwhite(argp) == ',')
            {
-               semsg(_(e_no_white_space_allowed_before_str_str), ",", argp);
+               if (evaluate)
+                   semsg(_(e_no_white_space_allowed_before_str_str),
+                                                                   ",", argp);
                ret = FAIL;
                break;
            }
@@ -1739,7 +1743,8 @@ get_func_tv(
            break;
        if (vim9script && !IS_WHITE_OR_NUL(argp[1]))
        {
-           semsg(_(e_white_space_required_after_str_str), ",", argp);
+           if (evaluate)
+               semsg(_(e_white_space_required_after_str_str), ",", argp);
            ret = FAIL;
            break;
        }
@@ -1778,7 +1783,7 @@ get_func_tv(
 
        funcargs.ga_len -= i;
     }
-    else if (!aborting())
+    else if (!aborting() && evaluate)
     {
        if (argcount == MAX_FUNC_ARGS)
            emsg_funcname(e_too_many_arguments_for_function_str_2, name);
index 7d080c40b00280d034d9606a4f19cced642459fa..e46a3802b58e09d7366e132312e3bdcb751b19ab 100644 (file)
@@ -750,6 +750,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    4055,
 /**/
     4054,
 /**/