mirror of
https://github.com/vim/vim.git
synced 2025-09-24 03:44:06 -04:00
patch 8.2.3055: strange error for assigning to "x.key" on non-dictionary
Problem: Strange error for assigning to "x.key" on non-dictionary. Solution: Add a specific error message. (closes #8451)
This commit is contained in:
@@ -448,3 +448,5 @@ EXTERN char e_libsodium_decryption_failed_premature[]
|
||||
INIT(= N_("E1201: Decryption failed: pre-mature end of file!"));
|
||||
EXTERN char e_no_white_space_allowed_after_str_str[]
|
||||
INIT(= N_("E1202: No white space allowed after '%s': %s"));
|
||||
EXTERN char e_dot_can_only_be_used_on_dictionary_str[]
|
||||
INIT(= N_("E1203: Dot can only be used on a dictionary: %s"));
|
||||
|
@@ -924,8 +924,14 @@ get_lval(
|
||||
lp->ll_tv = &v->di_tv;
|
||||
var1.v_type = VAR_UNKNOWN;
|
||||
var2.v_type = VAR_UNKNOWN;
|
||||
while (*p == '[' || (*p == '.' && lp->ll_tv->v_type == VAR_DICT))
|
||||
while (*p == '[' || (*p == '.' && p[1] != '=' && p[1] != '.'))
|
||||
{
|
||||
if (*p == '.' && lp->ll_tv->v_type != VAR_DICT)
|
||||
{
|
||||
if (!quiet)
|
||||
semsg(_(e_dot_can_only_be_used_on_dictionary_str), name);
|
||||
return NULL;
|
||||
}
|
||||
if (!(lp->ll_tv->v_type == VAR_LIST && lp->ll_tv->vval.v_list != NULL)
|
||||
&& !(lp->ll_tv->v_type == VAR_DICT)
|
||||
&& !(lp->ll_tv->v_type == VAR_BLOB
|
||||
|
@@ -293,7 +293,7 @@ func Test_let_errors()
|
||||
let s = "var"
|
||||
let var = 1
|
||||
call assert_fails('let var += [1,2]', 'E734:')
|
||||
call assert_fails('let {s}.1 = 2', 'E18:')
|
||||
call assert_fails('let {s}.1 = 2', 'E1203:')
|
||||
call assert_fails('let a[1] = 5', 'E121:')
|
||||
let l = [[1,2]]
|
||||
call assert_fails('let l[:][0] = [5]', 'E708:')
|
||||
|
@@ -294,6 +294,9 @@ func Test_dict_assign()
|
||||
let d.1 = 1
|
||||
let d._ = 2
|
||||
call assert_equal({'1': 1, '_': 2}, d)
|
||||
|
||||
let n = 0
|
||||
call assert_fails('let n.key = 3', 'E1203: Dot can only be used on a dictionary: n.key = 3')
|
||||
endfunc
|
||||
|
||||
" Function in script-local List or Dict
|
||||
|
@@ -787,6 +787,12 @@ def Test_assignment_dict()
|
||||
d.dd[0] = 0
|
||||
END
|
||||
CheckDefExecFailure(lines, 'E1148:', 2)
|
||||
|
||||
lines =<< trim END
|
||||
var n: any
|
||||
n.key = 5
|
||||
END
|
||||
CheckDefExecAndScriptFailure2(lines, 'E1148:', 'E1203: Dot can only be used on a dictionary: n.key = 5', 2)
|
||||
enddef
|
||||
|
||||
def Test_assignment_local()
|
||||
|
@@ -755,6 +755,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
3055,
|
||||
/**/
|
||||
3054,
|
||||
/**/
|
||||
|
Reference in New Issue
Block a user