summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/testdir/test_vim9_expr.vim2
-rw-r--r--src/version.c2
-rw-r--r--src/vim9execute.c9
3 files changed, 10 insertions, 3 deletions
diff --git a/src/testdir/test_vim9_expr.vim b/src/testdir/test_vim9_expr.vim
index 656718c49..2d741e495 100644
--- a/src/testdir/test_vim9_expr.vim
+++ b/src/testdir/test_vim9_expr.vim
@@ -1902,6 +1902,8 @@ def Test_expr7_dict()
var dictdict: dict<dict<string>> = #{one: #{a: 'text'}, two: #{}}
dictdict = #{one: #{}, two: #{a: 'text'}}
dictdict = #{one: #{}, two: #{}}
+
+ assert_equal({'': 0}, {matchstr('string', 'wont match'): 0})
CheckDefFailure(["var x = #{a:8}"], 'E1069:', 1)
CheckDefFailure(["var x = #{a : 8}"], 'E1068:', 1)
diff --git a/src/version.c b/src/version.c
index d677744ee..98a3ab153 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1952,
+/**/
1951,
/**/
1950,
diff --git a/src/vim9execute.c b/src/vim9execute.c
index 33027871a..eb0e1db63 100644
--- a/src/vim9execute.c
+++ b/src/vim9execute.c
@@ -1738,6 +1738,7 @@ call_def_function(
int count = iptr->isn_arg.number;
dict_T *dict = dict_alloc();
dictitem_T *item;
+ char_u *key;
if (dict == NULL)
goto failed;
@@ -1746,15 +1747,17 @@ call_def_function(
// have already checked key type is VAR_STRING
tv = STACK_TV_BOT(2 * (idx - count));
// check key is unique
- item = dict_find(dict, tv->vval.v_string, -1);
+ key = tv->vval.v_string == NULL
+ ? (char_u *)"" : tv->vval.v_string;
+ item = dict_find(dict, key, -1);
if (item != NULL)
{
SOURCING_LNUM = iptr->isn_lnum;
- semsg(_(e_duplicate_key), tv->vval.v_string);
+ semsg(_(e_duplicate_key), key);
dict_unref(dict);
goto on_error;
}
- item = dictitem_alloc(tv->vval.v_string);
+ item = dictitem_alloc(key);
clear_tv(tv);
if (item == NULL)
{