diff src/ex_docmd.c @ 21122:839ace6773aa v8.2.1112

patch 8.2.1112: Vim9: no line continuation allowed in method call Commit: https://github.com/vim/vim/commit/5f195938d4d489aa288bdb54ee6112a34aed1df9 Author: Bram Moolenaar <Bram@vim.org> Date: Wed Jul 1 20:07:14 2020 +0200 patch 8.2.1112: Vim9: no line continuation allowed in method call Problem: Vim9: no line continuation allowed in method call. Solution: Handle line continuation in expression before method call.
author Bram Moolenaar <Bram@vim.org>
date Wed, 01 Jul 2020 20:15:03 +0200
parents a7c202f5cbe9
children 4a1e8086759b
line wrap: on
line diff
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -3219,7 +3219,7 @@ find_ex_command(
      * "lvar = value", "lvar(arg)", "[1, 2 3]->Func()"
      */
     p = eap->cmd;
-    if (lookup != NULL && (*p == '('
+    if (lookup != NULL && (*p == '(' || *p == '[' || *p == '{'
 	       || ((p = to_name_const_end(eap->cmd)) > eap->cmd && *p != NUL)))
     {
 	int oplen;
@@ -3230,8 +3230,9 @@ find_ex_command(
 	// "g:varname" is an expression.
 	// "varname->expr" is an expression.
 	// "(..." is an expression.
+	// "{..." is an dict expression.
 	if (*p == '('
-		|| *p == '['
+		|| *p == '{'
 		|| p[1] == ':'
 		|| (*p == '-' && p[1] == '>'))
 	{
@@ -3239,12 +3240,12 @@ find_ex_command(
 	    return eap->cmd;
 	}
 
+	// Recognize an assignment if we recognize the variable name:
+	// "g:var = expr"
+	// "var = expr"  where "var" is a local var name.
 	oplen = assignment_len(skipwhite(p), &heredoc);
 	if (oplen > 0)
 	{
-	    // Recognize an assignment if we recognize the variable name:
-	    // "g:var = expr"
-	    // "var = expr"  where "var" is a local var name.
 	    if (((p - eap->cmd) > 2 && eap->cmd[1] == ':')
 		    || lookup(eap->cmd, p - eap->cmd, cctx) != NULL)
 	    {
@@ -3252,6 +3253,15 @@ find_ex_command(
 		return eap->cmd;
 	    }
 	}
+
+	// "[...]->Method()" is a list expression.  But "[a, b] = Func()" is
+	// an assignment.
+	if (*p == '[' && (eval_list(&p, NULL, NULL, FALSE) == FAIL
+						      || *skipwhite(p) != '='))
+	{
+	    eap->cmdidx = CMD_eval;
+	    return eap->cmd;
+	}
     }
 #endif