Mercurial > vim
diff src/vim9compile.c @ 28129:dd2ed5345f20 v8.2.4589
patch 8.2.4589: cannot index the g: dictionary
Commit: https://github.com/vim/vim/commit/2e17fef225a58f478dc24ab1aaa20390c9abce57
Author: Bram Moolenaar <Bram@vim.org>
Date: Fri Mar 18 19:44:48 2022 +0000
patch 8.2.4589: cannot index the g: dictionary
Problem: Cannot index the g: dictionary.
Solution: Recognize using "g:[key]". (closes https://github.com/vim/vim/issues/9969)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Fri, 18 Mar 2022 20:45:04 +0100 |
parents | 3bc0a639dfb0 |
children | d8bf200cd761 |
line wrap: on
line diff
--- 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, cha // 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);