patch 8.2.2305: Vim9: "++var" and "--var" are silently accepted
Problem: Vim9: "++var" and "--var" are silently accepted.
Solution: Give an error message.
diff --git a/src/eval.c b/src/eval.c
index 571e96f..02cfd7d 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -3188,6 +3188,28 @@
return OK;
}
+ int
+eval_leader(char_u **arg, int vim9)
+{
+ char_u *s = *arg;
+ char_u *p = *arg;
+
+ while (*p == '!' || *p == '-' || *p == '+')
+ {
+ char_u *n = skipwhite(p + 1);
+
+ // ++, --, -+ and +- are not accepted in Vim9 script
+ if (vim9 && (*p == '-' || *p == '+') && (*n == '-' || *n == '+'))
+ {
+ semsg(_(e_invexpr2), s);
+ return FAIL;
+ }
+ p = n;
+ }
+ *arg = p;
+ return OK;
+}
+
/*
* Handle sixth level expression:
* number number constant
@@ -3243,8 +3265,8 @@
* Skip '!', '-' and '+' characters. They are handled later.
*/
start_leader = *arg;
- while (**arg == '!' || **arg == '-' || **arg == '+')
- *arg = skipwhite(*arg + 1);
+ if (eval_leader(arg, in_vim9script()) == FAIL)
+ return FAIL;
end_leader = *arg;
if (**arg == '.' && (!isdigit(*(*arg + 1))