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
/*
* 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);
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 == '"';
}
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)