patch 8.2.2565: Vim9: "..=" not always recognized
Problem: Vim9: "..=" not always recognized.
Solution: Do not consider "..=" to be string concatenation. (closes #7905)
diff --git a/src/eval.c b/src/eval.c
index bf01ae0..6b12a97 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -2849,11 +2849,12 @@
int vim9script = in_vim9script();
// "." is only string concatenation when scriptversion is 1
- // "+=" and "-=" are assignment
+ // "+=", "-=" and "..=" are assignments
p = eval_next_non_blank(*arg, evalarg, &getnext);
op = *p;
concat = op == '.' && (*(p + 1) == '.' || current_sctx.sc_version < 2);
- if ((op != '+' && op != '-' && !concat) || p[1] == '=')
+ if ((op != '+' && op != '-' && !concat) || p[1] == '='
+ || (p[1] == '.' && p[2] == '='))
break;
evaluate = evalarg == NULL ? 0 : (evalarg->eval_flags & EVAL_EVALUATE);
@@ -3080,9 +3081,10 @@
#endif
int error;
+ // "*=", "/=" and "%=" are assignments
p = eval_next_non_blank(*arg, evalarg, &getnext);
op = *p;
- if (op != '*' && op != '/' && op != '%')
+ if ((op != '*' && op != '/' && op != '%') || p[1] == '=')
break;
evaluate = evalarg == NULL ? 0 : (evalarg->eval_flags & EVAL_EVALUATE);