summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2021-03-20 13:29:38 +0100
committerBram Moolenaar <Bram@vim.org>2021-03-20 13:29:38 +0100
commit5c7a299c1652b28977c30e3e3a5ab93c65e7f7ed (patch)
treec14eaf648415c5eeccb3e9feb4cfda533c4cde73
parent4355894869355c185e7810e67d52802453576e81 (diff)
downloadvim-git-5c7a299c1652b28977c30e3e3a5ab93c65e7f7ed.tar.gz
patch 8.2.2628: Vim9: #{ can still be used at the script levelv8.2.2628
Problem: Vim9: #{ can still be used at the script level. Solution: Give an error for #{ like in a :def function.
-rw-r--r--src/eval.c9
-rw-r--r--src/ex_docmd.c3
-rw-r--r--src/testdir/test_vim9_expr.vim8
-rw-r--r--src/version.c2
4 files changed, 15 insertions, 7 deletions
diff --git a/src/eval.c b/src/eval.c
index 8e964de70..aa5f5b824 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -2228,7 +2228,8 @@ eval0(
if (!aborting()
&& did_emsg == did_emsg_before
&& called_emsg == called_emsg_before
- && (flags & EVAL_CONSTANT) == 0)
+ && (flags & EVAL_CONSTANT) == 0
+ && (!in_vim9script() || !vim9_bad_comment(p)))
semsg(_(e_invexpr2), arg);
// Some of the expression may not have been consumed. Do not check for
@@ -3362,7 +3363,11 @@ eval7(
/*
* Dictionary: #{key: val, key: val}
*/
- case '#': if (!in_vim9script() && (*arg)[1] == '{')
+ case '#': if (in_vim9script())
+ {
+ ret = vim9_bad_comment(*arg) ? FAIL : NOTDONE;
+ }
+ else if ((*arg)[1] == '{')
{
++*arg;
ret = eval_dict(arg, rettv, evalarg, TRUE);
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index 477d140bd..67bcc7370 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -5234,7 +5234,8 @@ ends_excmd2(char_u *cmd_start UNUSED, char_u *cmd)
return TRUE;
#ifdef FEAT_EVAL
if (in_vim9script())
- return c == '#' && (cmd == cmd_start || VIM_ISWHITE(cmd[-1]));
+ return c == '#' && cmd[1] != '{'
+ && (cmd == cmd_start || VIM_ISWHITE(cmd[-1]));
#endif
return c == '"';
}
diff --git a/src/testdir/test_vim9_expr.vim b/src/testdir/test_vim9_expr.vim
index 10468410f..de6eabd1e 100644
--- a/src/testdir/test_vim9_expr.vim
+++ b/src/testdir/test_vim9_expr.vim
@@ -2159,10 +2159,10 @@ def Test_expr7_dict()
CheckDefAndScriptSuccess(lines)
# legacy syntax doesn't work
- CheckDefFailure(["var x = #{key: 8}"], 'E1170:', 1)
- CheckDefFailure(["var x = 'a' #{a: 1}"], 'E1170:', 1)
- CheckDefFailure(["var x = 'a' .. #{a: 1}"], 'E1170:', 1)
- CheckDefFailure(["var x = true ? #{a: 1}"], 'E1170:', 1)
+ CheckDefAndScriptFailure(["var x = #{key: 8}"], 'E1170:', 1)
+ CheckDefAndScriptFailure(["var x = 'a' #{a: 1}"], 'E1170:', 1)
+ CheckDefAndScriptFailure(["var x = 'a' .. #{a: 1}"], 'E1170:', 1)
+ CheckDefAndScriptFailure(["var x = true ? #{a: 1}"], 'E1170:', 1)
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 7c4db55a6..bcf8b6d2b 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 */
/**/
+ 2628,
+/**/
2627,
/**/
2626,