patch 8.1.1114: confusing overloaded operator "." for string concatenation

Problem:    Confusing overloaded operator "." for string concatenation.
Solution:   Add ".." for string concatenation.  Also "let a ..= b".
diff --git a/src/eval.c b/src/eval.c
index ec2dc9a..78e2c60 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -1234,6 +1234,7 @@
  * ":let var /= expr"		assignment command.
  * ":let var %= expr"		assignment command.
  * ":let var .= expr"		assignment command.
+ * ":let var ..= expr"		assignment command.
  * ":let [var1, var2] = expr"	unpack list.
  */
     void
@@ -1255,8 +1256,8 @@
     if (argend > arg && argend[-1] == '.')  // for var.='str'
 	--argend;
     expr = skipwhite(argend);
-    if (*expr != '=' && !(vim_strchr((char_u *)"+-*/%.", *expr) != NULL
-			  && expr[1] == '='))
+    if (*expr != '=' && !((vim_strchr((char_u *)"+-*/%.", *expr) != NULL
+			   && expr[1] == '=') || STRNCMP(expr, "..=", 3) == 0))
     {
 	/*
 	 * ":let" without "=": list variables
@@ -1286,7 +1287,11 @@
 	if (*expr != '=')
 	{
 	    if (vim_strchr((char_u *)"+-*/%.", *expr) != NULL)
+	    {
 		op[0] = *expr;   // +=, -=, *=, /=, %= or .=
+		if (expr[0] == '.' && expr[1] == '.') // ..=
+		    ++expr;
+	    }
 	    expr = skipwhite(expr + 2);
 	}
 	else
@@ -3813,6 +3818,7 @@
  *	+	number addition
  *	-	number subtraction
  *	.	string concatenation
+ *	..	string concatenation
  *
  * "arg" must point to the first non-white of the expression.
  * "arg" is advanced to the next non-white after the recognized expression.
@@ -3872,6 +3878,8 @@
 	/*
 	 * Get the second variable.
 	 */
+	if (op == '.' && *(*arg + 1) == '.')  // .. string concatenation
+	    ++*arg;
 	*arg = skipwhite(*arg + 1);
 	if (eval6(arg, &var2, evaluate, op == '.') == FAIL)
 	{