* Call eval1() and give an error message if not done at a lower level.
*/
static int
-eval1_emsg(char_u **arg, typval_T *rettv, int evaluate)
+eval1_emsg(char_u **arg, typval_T *rettv, exarg_T *eap)
{
char_u *start = *arg;
int ret;
int did_emsg_before = did_emsg;
int called_emsg_before = called_emsg;
+ evalarg_T evalarg;
+
+ fill_evalarg_from_eap(&evalarg, eap, eap != NULL && eap->skip);
- ret = eval1(arg, rettv, evaluate ? &EVALARG_EVALUATE : NULL);
+ ret = eval1(arg, rettv, &evalarg);
if (ret == FAIL)
{
// Report the invalid expression unless the expression evaluation has
&& called_emsg == called_emsg_before)
semsg(_(e_invexpr2), start);
}
+ clear_evalarg(&evalarg, eap);
return ret;
}
if (s == NULL)
return FAIL;
s = skipwhite(s);
- if (eval1_emsg(&s, rettv, TRUE) == FAIL)
+ if (eval1_emsg(&s, rettv, NULL) == FAIL)
return FAIL;
if (*s != NUL) // check for trailing chars after expr
{
++emsg_skip;
while (!ends_excmd2(eap->cmd, arg) || *arg == '"')
{
- ret = eval1_emsg(&arg, &rettv, !eap->skip);
+ ret = eval1_emsg(&arg, &rettv, eap);
if (ret == FAIL)
break;
call CheckDefFailure(['execute "cmd"# comment'], 'E488:')
enddef
+def Test_execute_cmd_vimscript()
+ " only checks line continuation
+ let lines =<< trim END
+ vim9script
+ execute 'g:someVar'
+ .. ' = ' ..
+ '28'
+ assert_equal(28, g:someVar)
+ unlet g:someVar
+ END
+ CheckScriptSuccess(lines)
+enddef
+
def Test_echo_cmd()
echo 'some' # comment
echon 'thing'
call CheckDefFailure(['echomsg "xxx"# comment'], 'E488:')
enddef
+def Test_echomsg_cmd_vimscript()
+ " only checks line continuation
+ let lines =<< trim END
+ vim9script
+ echomsg 'here'
+ .. ' is ' ..
+ 'a message'
+ assert_match('^here is a message$', Screenline(&lines))
+ END
+ CheckScriptSuccess(lines)
+enddef
+
def Test_echoerr_cmd()
try
echoerr 'something' 'wrong' # comment
endtry
enddef
+def Test_echoerr_cmd_vimscript()
+ " only checks line continuation
+ let lines =<< trim END
+ vim9script
+ try
+ echoerr 'this'
+ .. ' is ' ..
+ 'wrong'
+ catch
+ assert_match('this is wrong', v:exception)
+ endtry
+ END
+ CheckScriptSuccess(lines)
+enddef
+
def Test_for_outside_of_function()
let lines =<< trim END
vim9script