summaryrefslogtreecommitdiffstats
path: root/src/ex_docmd.c
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2021-04-12 21:21:02 +0200
committerBram Moolenaar <Bram@vim.org>2021-04-12 21:21:02 +0200
commit68452177ca4cda4a9d5f93892e437447cf9404c8 (patch)
tree67db842620f7929316586ef2883977864402bc70 /src/ex_docmd.c
parentcfc3023cb6ce5aaec13f49bc4b821feb05e3fb03 (diff)
patch 8.2.2757: Vim9: blob tests for legacy and Vim9 script are separatev8.2.2757
Problem: Vim9: blob tests for legacy and Vim9 script are separate. Solution: Add CheckLegacyAndVim9Success(). Make blob index assign work.
Diffstat (limited to 'src/ex_docmd.c')
-rw-r--r--src/ex_docmd.c21
1 files changed, 12 insertions, 9 deletions
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index 7c1c448551..83f49d0d37 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -3429,22 +3429,25 @@ find_ex_command(
// "varname.key" is an expression.
|| (*p == '.' && ASCII_ISALPHA(p[1]))))
{
- char_u *after = p;
+ char_u *after = eap->cmd;
// When followed by "=" or "+=" then it is an assignment.
+ // Skip over the whole thing, it can be:
+ // name.member = val
+ // name[a : b] = val
+ // name[idx] = val
+ // name[idx].member = val
+ // etc.
+ eap->cmdidx = CMD_eval;
++emsg_silent;
- if (*after == '.')
- after = skipwhite(after + 1);
if (skip_expr(&after, NULL) == OK)
+ {
after = skipwhite(after);
- else
- after = (char_u *)"";
- if (*after == '=' || (*after != NUL && after[1] == '=')
+ if (*after == '=' || (*after != NUL && after[1] == '=')
|| (after[0] == '.' && after[1] == '.'
&& after[2] == '='))
- eap->cmdidx = CMD_var;
- else
- eap->cmdidx = CMD_eval;
+ eap->cmdidx = CMD_var;
+ }
--emsg_silent;
return eap->cmd;
}