0
0
mirror of https://github.com/vim/vim.git synced 2025-09-23 03:43:49 -04:00

patch 8.2.2628: Vim9: #{ can still be used at the script level

Problem:    Vim9: #{ can still be used at the script level.
Solution:   Give an error for #{ like in a :def function.
This commit is contained in:
Bram Moolenaar
2021-03-20 13:29:38 +01:00
parent 4355894869
commit 5c7a299c16
4 changed files with 15 additions and 7 deletions

View File

@@ -2228,7 +2228,8 @@ eval0(
if (!aborting() if (!aborting()
&& did_emsg == did_emsg_before && did_emsg == did_emsg_before
&& called_emsg == called_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); semsg(_(e_invexpr2), arg);
// Some of the expression may not have been consumed. Do not check for // Some of the expression may not have been consumed. Do not check for
@@ -3362,7 +3363,11 @@ eval7(
/* /*
* Dictionary: #{key: val, key: val} * 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; ++*arg;
ret = eval_dict(arg, rettv, evalarg, TRUE); ret = eval_dict(arg, rettv, evalarg, TRUE);

View File

@@ -5234,7 +5234,8 @@ ends_excmd2(char_u *cmd_start UNUSED, char_u *cmd)
return TRUE; return TRUE;
#ifdef FEAT_EVAL #ifdef FEAT_EVAL
if (in_vim9script()) if (in_vim9script())
return c == '#' && (cmd == cmd_start || VIM_ISWHITE(cmd[-1])); return c == '#' && cmd[1] != '{'
&& (cmd == cmd_start || VIM_ISWHITE(cmd[-1]));
#endif #endif
return c == '"'; return c == '"';
} }

View File

@@ -2159,10 +2159,10 @@ def Test_expr7_dict()
CheckDefAndScriptSuccess(lines) CheckDefAndScriptSuccess(lines)
# legacy syntax doesn't work # legacy syntax doesn't work
CheckDefFailure(["var x = #{key: 8}"], 'E1170:', 1) CheckDefAndScriptFailure(["var x = #{key: 8}"], 'E1170:', 1)
CheckDefFailure(["var x = 'a' #{a: 1}"], 'E1170:', 1) CheckDefAndScriptFailure(["var x = 'a' #{a: 1}"], 'E1170:', 1)
CheckDefFailure(["var x = 'a' .. #{a: 1}"], 'E1170:', 1) CheckDefAndScriptFailure(["var x = 'a' .. #{a: 1}"], 'E1170:', 1)
CheckDefFailure(["var x = true ? #{a: 1}"], 'E1170:', 1) CheckDefAndScriptFailure(["var x = true ? #{a: 1}"], 'E1170:', 1)
CheckDefFailure(["var x = {a:8}"], 'E1069:', 1) CheckDefFailure(["var x = {a:8}"], 'E1069:', 1)
CheckDefFailure(["var x = {a : 8}"], 'E1068:', 1) CheckDefFailure(["var x = {a : 8}"], 'E1068:', 1)

View File

@@ -750,6 +750,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
2628,
/**/ /**/
2627, 2627,
/**/ /**/