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)