Mercurial > vim
diff src/vim9compile.c @ 23088:285cde4b8d0e v8.2.2090
patch 8.2.2090: Vim9: dict does not accept a key in quotes
Commit: https://github.com/vim/vim/commit/c5e6a7179d7dee4315b412b56e172bb1ff092d3e
Author: Bram Moolenaar <Bram@vim.org>
Date: Fri Dec 4 19:12:14 2020 +0100
patch 8.2.2090: Vim9: dict does not accept a key in quotes
Problem: Vim9: dict does not accept a key in quotes.
Solution: Recognize a key in single or double quotes.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Fri, 04 Dec 2020 19:15:03 +0100 |
parents | 2120e4b40e12 |
children | 9c3a6c33c0e5 |
line wrap: on
line diff
--- a/src/vim9compile.c +++ b/src/vim9compile.c @@ -3024,26 +3024,11 @@ compile_dict(char_u **arg, cctx_T *cctx, if (**arg == '}') break; - // {name: value} uses "name" as a literal key and - // {[expr]: value} uses an evaluated key. - if (**arg != '[') - { - char_u *end = skip_literal_key(*arg); - - if (end == *arg) - { - semsg(_(e_invalid_key_str), *arg); - return FAIL; - } - key = vim_strnsave(*arg, end - *arg); - if (generate_PUSHS(cctx, key) == FAIL) - return FAIL; - *arg = end; - } - else + if (**arg == '[') { isn_T *isn; + // {[expr]: value} uses an evaluated key. *arg = skipwhite(*arg + 1); if (compile_expr0(arg, cctx) == FAIL) return FAIL; @@ -3066,6 +3051,17 @@ compile_dict(char_u **arg, cctx_T *cctx, } ++*arg; } + else + { + // {"name": value}, + // {'name': value}, + // {name: value} use "name" as a literal key + key = get_literal_key(arg); + if (key == NULL) + return FAIL; + if (generate_PUSHS(cctx, key) == FAIL) + return FAIL; + } // Check for duplicate keys, if using string keys. if (key != NULL)