summaryrefslogtreecommitdiff
path: root/src/vim9compile.c
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2022-03-18 19:44:48 +0000
committerBram Moolenaar <Bram@vim.org>2022-03-18 19:44:48 +0000
commit2e17fef225a58f478dc24ab1aaa20390c9abce57 (patch)
tree6454370682bf9c4cb2b927cf254090b210d3b5b0 /src/vim9compile.c
parentf35fd8e5d484be0e3fdd7c3c24f690083f91264d (diff)
downloadvim-git-2e17fef225a58f478dc24ab1aaa20390c9abce57.tar.gz
patch 8.2.4589: cannot index the g: dictionaryv8.2.4589
Problem: Cannot index the g: dictionary. Solution: Recognize using "g:[key]". (closes #9969)
Diffstat (limited to 'src/vim9compile.c')
-rw-r--r--src/vim9compile.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/src/vim9compile.c b/src/vim9compile.c
index fa5f067f5..e6c2233a7 100644
--- a/src/vim9compile.c
+++ b/src/vim9compile.c
@@ -1000,7 +1000,12 @@ generate_loadvar(
break;
case dest_global:
if (vim_strchr(name, AUTOLOAD_CHAR) == NULL)
- generate_LOAD(cctx, ISN_LOADG, 0, name + 2, type);
+ {
+ if (name[2] == NUL)
+ generate_instr_type(cctx, ISN_LOADGDICT, &t_dict_any);
+ else
+ generate_LOAD(cctx, ISN_LOADG, 0, name + 2, type);
+ }
else
generate_LOAD(cctx, ISN_LOADAUTO, 0, name, type);
break;
@@ -2413,17 +2418,19 @@ may_compile_assignment(exarg_T *eap, char_u **line, cctx_T *cctx)
// Recognize an assignment if we recognize the variable
// name:
+ // "&opt = expr"
+ // "$ENV = expr"
+ // "@r = expr"
// "g:var = expr"
+ // "g:[key] = expr"
// "local = expr" where "local" is a local var.
// "script = expr" where "script" is a script-local var.
// "import = expr" where "import" is an imported var
- // "&opt = expr"
- // "$ENV = expr"
- // "@r = expr"
if (*eap->cmd == '&'
|| *eap->cmd == '$'
|| *eap->cmd == '@'
|| ((len) > 2 && eap->cmd[1] == ':')
+ || STRNCMP(eap->cmd, "g:[", 3) == 0
|| variable_exists(eap->cmd, len, cctx))
{
*line = compile_assignment(eap->cmd, eap, CMD_SIZE, cctx);