patch 8.2.3695: confusing error for missing key
Problem: Confusing error for missing key.
Solution: Use the actualy key for the error. (closes #9241)
diff --git a/src/eval.c b/src/eval.c
index 0e8b6a6..bebe2f0 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -4287,12 +4287,18 @@
return FAIL;
}
- item = dict_find(rettv->vval.v_dict, key, (int)keylen);
+ item = dict_find(rettv->vval.v_dict, key, keylen);
- if (item == NULL && verbose)
- semsg(_(e_dictkey), key);
if (item == NULL)
+ {
+ if (verbose)
+ {
+ if (keylen > 0)
+ key[keylen] = NUL;
+ semsg(_(e_dictkey), key);
+ }
return FAIL;
+ }
copy_tv(&item->di_tv, &tmp);
clear_tv(rettv);
diff --git a/src/testdir/test_listdict.vim b/src/testdir/test_listdict.vim
index 2eda9a8..0b024a0 100644
--- a/src/testdir/test_listdict.vim
+++ b/src/testdir/test_listdict.vim
@@ -455,6 +455,25 @@
call CheckLegacyAndVim9Failure(lines, 'E716:')
let lines =<< trim END
+ let d = {'a-b': 55}
+ echo d.a-b
+ END
+ call CheckScriptFailure(lines, 'E716: Key not present in Dictionary: "a"')
+
+ let lines =<< trim END
+ vim9script
+ var d = {'a-b': 55}
+ echo d.a-b
+ END
+ call CheckScriptFailure(lines, 'E716: Key not present in Dictionary: "a"')
+
+ let lines =<< trim END
+ var d = {'a-b': 55}
+ echo d.a-b
+ END
+ call CheckDefFailure(lines, 'E1004: White space required before and after ''-''')
+
+ let lines =<< trim END
let d = {1: 'a', 3: 'c'}
call remove(d, [])
END
diff --git a/src/version.c b/src/version.c
index 623afb2..e4c8589 100644
--- a/src/version.c
+++ b/src/version.c
@@ -758,6 +758,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 3695,
+/**/
3694,
/**/
3693,