]> granicus.if.org Git - vim/commitdiff
patch 8.2.2017: missing part of the dict change v8.2.2017
authorBram Moolenaar <Bram@vim.org>
Thu, 19 Nov 2020 18:01:43 +0000 (19:01 +0100)
committerBram Moolenaar <Bram@vim.org>
Thu, 19 Nov 2020 18:01:43 +0000 (19:01 +0100)
Problem:    Missing part of the dict change.
Solution:   Also change the script level dict.

src/dict.c
src/version.c

index b3ef35a8022c0c4355895c1b29de8258e030b968..3b965d0ac222c67f1a287b93ee5cb51fd9242750 100644 (file)
@@ -111,6 +111,7 @@ dict_free_contents(dict_T *d)
 
 /*
  * Clear hashtab "ht" and dict items it contains.
+ * If "ht" is not freed then you should call hash_init() next!
  */
     void
 hashtab_free_contents(hashtab_T *ht)
@@ -850,10 +851,32 @@ eval_dict(char_u **arg, typval_T *rettv, evalarg_T *evalarg, int literal)
     *arg = skipwhite_and_linebreak(*arg + 1, evalarg);
     while (**arg != '}' && **arg != NUL)
     {
-       if ((literal
-               ? get_literal_key(arg, &tvkey)
-               : eval1(arg, &tvkey, evalarg)) == FAIL) // recursive!
-           goto failret;
+       char_u *p = to_name_end(*arg, FALSE);
+
+       if (literal || (vim9script && *p == ':'))
+       {
+           if (get_literal_key(arg, &tvkey) == FAIL)
+               goto failret;
+       }
+       else
+       {
+           int         has_bracket = vim9script && **arg == '[';
+
+           if (has_bracket)
+               *arg = skipwhite(*arg + 1);
+           if (eval1(arg, &tvkey, evalarg) == FAIL)    // recursive!
+               goto failret;
+           if (has_bracket)
+           {
+               *arg = skipwhite(*arg);
+               if (**arg != ']')
+               {
+                   emsg(_(e_missing_matching_bracket_after_dict_key));
+                   return FAIL;
+               }
+               ++*arg;
+           }
+       }
 
        // the colon should come right after the key, but this wasn't checked
        // previously, so only require it in Vim9 script.
index 01cf3c935ced64635516f3290a7cb8356c67ded1..03f8a3f705daf6f9c2f5b758e4ddcb69fd9ee830 100644 (file)
@@ -750,6 +750,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    2017,
 /**/
     2016,
 /**/