patch 8.2.1683: Vim9: assignment test fails
Problem: Vim9: assignment test fails.
Solution: Include changes to find Ex command.
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index ed52b46..bc01b69 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -3224,19 +3224,33 @@
// "g:varname" is an expression.
|| eap->cmd[1] == ':'
)
- : (
- // "varname[]" is an expression.
- *p == '['
// "varname->func()" is an expression.
- || (*p == '-' && p[1] == '>')
- // "varname.expr" is an expression.
- || (*p == '.' && ASCII_ISALPHA(p[1]))
- )))
+ : (*p == '-' && p[1] == '>')))
{
eap->cmdidx = CMD_eval;
return eap->cmd;
}
+ if (p != eap->cmd && (
+ // "varname[]" is an expression.
+ *p == '['
+ // "varname.key" is an expression.
+ || (*p == '.' && ASCII_ISALPHA(p[1]))))
+ {
+ char_u *after = p;
+
+ // When followed by "=" or "+=" then it is an assignment.
+ ++emsg_silent;
+ if (skip_expr(&after) == OK
+ && (*after == '='
+ || (*after != NUL && after[1] == '=')))
+ eap->cmdidx = CMD_let;
+ else
+ eap->cmdidx = CMD_eval;
+ --emsg_silent;
+ return eap->cmd;
+ }
+
// "[...]->Method()" is a list expression, but "[a, b] = Func()" is
// an assignment.
// If there is no line break inside the "[...]" then "p" is