Problem: Vim9: confusing error with .= in compiled functions
Solution: Check in error condition, if .= was attempted and in that case
give a different error message.
closes: #12972
closes: #13066
Signed-off-by: Christian Brabandt <cb@256bit.org>
legacy echo version
END
v9.CheckScriptSuccess(lines)
+
+ lines =<< trim END
+ vim9script
+ def Func()
+ var d: dict<string>
+ d.k .= ''
+ enddef
+ defcompile
+ END
+ v9.CheckScriptFailure(lines, 'E985:')
+ lines =<< trim END
+ vim9script
+ def Func()
+ var d: dict<string>
+ d.k ,= ''
+ enddef
+ defcompile
+ END
+ v9.CheckScriptFailure(lines, 'E1017:')
enddef
def Test_defcompile_fails()
static int included_patches[] =
{ /* Add new patch number below this line */
+/**/
+ 1897,
/**/
1896,
/**/
{
if (is_decl)
{
- semsg(_(e_variable_already_declared_str), lhs->lhs_name);
+ // if we come here with what looks like an assignment like .=
+ // but which has been reject by assignment_len() from may_compile_assignment
+ // give a better error message
+ char_u *p = skipwhite(lhs->lhs_end);
+ if (p[0] == '.' && p[1] == '=')
+ emsg(_(e_dot_equal_not_supported_with_script_version_two));
+ else
+ semsg(_(e_variable_already_declared_str), lhs->lhs_name);
return FAIL;
}
}