summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorChristian Brabandt <cb@256bit.org>2023-09-11 20:08:50 +0200
committerChristian Brabandt <cb@256bit.org>2023-09-11 20:08:50 +0200
commit504543f98be2ddb6d49ea2f7e996112868fc54ed (patch)
treec412ecaa12ca562cb0b8fc3dbb51ba1ad97924c2 /src
parent6b9c2025496e415856ad70b819de83a48267c582 (diff)
patch 9.0.1897: Vim9: confusing error with .= in compiled functionsv9.0.1897
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>
Diffstat (limited to 'src')
-rw-r--r--src/testdir/test_vim9_cmd.vim19
-rw-r--r--src/version.c2
-rw-r--r--src/vim9compile.c9
3 files changed, 29 insertions, 1 deletions
diff --git a/src/testdir/test_vim9_cmd.vim b/src/testdir/test_vim9_cmd.vim
index 0fe6e7ca01..a9e10e797c 100644
--- a/src/testdir/test_vim9_cmd.vim
+++ b/src/testdir/test_vim9_cmd.vim
@@ -79,6 +79,25 @@ def Test_vim9cmd()
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()
diff --git a/src/version.c b/src/version.c
index 937f8b8ab9..aaa50da4b3 100644
--- a/src/version.c
+++ b/src/version.c
@@ -700,6 +700,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1897,
+/**/
1896,
/**/
1895,
diff --git a/src/vim9compile.c b/src/vim9compile.c
index 7d24f21c8d..cc4aa46386 100644
--- a/src/vim9compile.c
+++ b/src/vim9compile.c
@@ -1669,7 +1669,14 @@ compile_lhs(
{
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;
}
}