mirror of
https://github.com/vim/vim.git
synced 2025-10-08 06:04:08 -04:00
patch 8.2.2895: Vim9: random characters appear in some error messages
Problem: Vim9: random characters appear in some error messages. Solution: Pass the correct pointer. (closes #8277)
This commit is contained in:
17
src/eval.c
17
src/eval.c
@@ -2358,7 +2358,7 @@ eval1(char_u **arg, typval_T *rettv, evalarg_T *evalarg)
|
|||||||
++*arg;
|
++*arg;
|
||||||
if (evaluate && vim9script && !IS_WHITE_OR_NUL((*arg)[1]))
|
if (evaluate && vim9script && !IS_WHITE_OR_NUL((*arg)[1]))
|
||||||
{
|
{
|
||||||
error_white_both(p, op_falsy ? 2 : 1);
|
error_white_both(*arg - (op_falsy ? 1 : 0), op_falsy ? 2 : 1);
|
||||||
clear_tv(rettv);
|
clear_tv(rettv);
|
||||||
return FAIL;
|
return FAIL;
|
||||||
}
|
}
|
||||||
@@ -2406,7 +2406,7 @@ eval1(char_u **arg, typval_T *rettv, evalarg_T *evalarg)
|
|||||||
*/
|
*/
|
||||||
if (evaluate && vim9script && !IS_WHITE_OR_NUL((*arg)[1]))
|
if (evaluate && vim9script && !IS_WHITE_OR_NUL((*arg)[1]))
|
||||||
{
|
{
|
||||||
error_white_both(p, 1);
|
error_white_both(*arg, 1);
|
||||||
clear_tv(rettv);
|
clear_tv(rettv);
|
||||||
evalarg_used->eval_flags = orig_flags;
|
evalarg_used->eval_flags = orig_flags;
|
||||||
return FAIL;
|
return FAIL;
|
||||||
@@ -2511,7 +2511,7 @@ eval2(char_u **arg, typval_T *rettv, evalarg_T *evalarg)
|
|||||||
*/
|
*/
|
||||||
if (evaluate && in_vim9script() && !IS_WHITE_OR_NUL((*arg)[2]))
|
if (evaluate && in_vim9script() && !IS_WHITE_OR_NUL((*arg)[2]))
|
||||||
{
|
{
|
||||||
error_white_both(p, 2);
|
error_white_both(*arg, 2);
|
||||||
clear_tv(rettv);
|
clear_tv(rettv);
|
||||||
return FAIL;
|
return FAIL;
|
||||||
}
|
}
|
||||||
@@ -2637,7 +2637,7 @@ eval3(char_u **arg, typval_T *rettv, evalarg_T *evalarg)
|
|||||||
*/
|
*/
|
||||||
if (evaluate && in_vim9script() && !IS_WHITE_OR_NUL((*arg)[2]))
|
if (evaluate && in_vim9script() && !IS_WHITE_OR_NUL((*arg)[2]))
|
||||||
{
|
{
|
||||||
error_white_both(p, 2);
|
error_white_both(*arg, 2);
|
||||||
clear_tv(rettv);
|
clear_tv(rettv);
|
||||||
return FAIL;
|
return FAIL;
|
||||||
}
|
}
|
||||||
@@ -2735,10 +2735,13 @@ eval4(char_u **arg, typval_T *rettv, evalarg_T *evalarg)
|
|||||||
? 0 : (evalarg->eval_flags & EVAL_EVALUATE);
|
? 0 : (evalarg->eval_flags & EVAL_EVALUATE);
|
||||||
|
|
||||||
if (getnext)
|
if (getnext)
|
||||||
|
{
|
||||||
*arg = eval_next_line(evalarg);
|
*arg = eval_next_line(evalarg);
|
||||||
|
p = *arg;
|
||||||
|
}
|
||||||
else if (evaluate && vim9script && !VIM_ISWHITE(**arg))
|
else if (evaluate && vim9script && !VIM_ISWHITE(**arg))
|
||||||
{
|
{
|
||||||
error_white_both(p, len);
|
error_white_both(*arg, len);
|
||||||
clear_tv(rettv);
|
clear_tv(rettv);
|
||||||
return FAIL;
|
return FAIL;
|
||||||
}
|
}
|
||||||
@@ -2898,7 +2901,7 @@ eval5(char_u **arg, typval_T *rettv, evalarg_T *evalarg)
|
|||||||
{
|
{
|
||||||
if (evaluate && vim9script && !VIM_ISWHITE(**arg))
|
if (evaluate && vim9script && !VIM_ISWHITE(**arg))
|
||||||
{
|
{
|
||||||
error_white_both(p, oplen);
|
error_white_both(*arg, oplen);
|
||||||
clear_tv(rettv);
|
clear_tv(rettv);
|
||||||
return FAIL;
|
return FAIL;
|
||||||
}
|
}
|
||||||
@@ -3130,7 +3133,7 @@ eval6(
|
|||||||
{
|
{
|
||||||
if (evaluate && in_vim9script() && !VIM_ISWHITE(**arg))
|
if (evaluate && in_vim9script() && !VIM_ISWHITE(**arg))
|
||||||
{
|
{
|
||||||
error_white_both(p, 1);
|
error_white_both(*arg, 1);
|
||||||
clear_tv(rettv);
|
clear_tv(rettv);
|
||||||
return FAIL;
|
return FAIL;
|
||||||
}
|
}
|
||||||
|
@@ -172,11 +172,23 @@ func Test_expr1_trinary_fails()
|
|||||||
call CheckDefAndScriptFailure(["var x = 1? 'one' : 'two'"], msg, 1)
|
call CheckDefAndScriptFailure(["var x = 1? 'one' : 'two'"], msg, 1)
|
||||||
call CheckDefAndScriptFailure(["var x = 1 ?'one' : 'two'"], msg, 1)
|
call CheckDefAndScriptFailure(["var x = 1 ?'one' : 'two'"], msg, 1)
|
||||||
call CheckDefAndScriptFailure(["var x = 1?'one' : 'two'"], msg, 1)
|
call CheckDefAndScriptFailure(["var x = 1?'one' : 'two'"], msg, 1)
|
||||||
|
let lines =<< trim END
|
||||||
|
var x = 1
|
||||||
|
?'one' : 'two'
|
||||||
|
# comment
|
||||||
|
END
|
||||||
|
call CheckDefAndScriptFailure(lines, 'E1004: White space required before and after ''?'' at "?''one'' : ''two''"', 2)
|
||||||
|
|
||||||
let msg = "White space required before and after ':'"
|
let msg = "White space required before and after ':'"
|
||||||
call CheckDefAndScriptFailure(["var x = 1 ? 'one': 'two'"], msg, 1)
|
call CheckDefAndScriptFailure(["var x = 1 ? 'one': 'two'"], msg, 1)
|
||||||
call CheckDefAndScriptFailure(["var x = 1 ? 'one' :'two'"], msg, 1)
|
call CheckDefAndScriptFailure(["var x = 1 ? 'one' :'two'"], msg, 1)
|
||||||
call CheckDefAndScriptFailure(["var x = 1 ? 'one':'two'"], msg, 1)
|
call CheckDefAndScriptFailure(["var x = 1 ? 'one':'two'"], msg, 1)
|
||||||
|
let lines =<< trim END
|
||||||
|
var x = 1 ? 'one'
|
||||||
|
:'two'
|
||||||
|
# Comment
|
||||||
|
END
|
||||||
|
call CheckDefAndScriptFailure(lines, 'E1004: White space required before and after '':'' at ":''two''"', 2)
|
||||||
|
|
||||||
call CheckDefAndScriptFailure(["var x = 'x' ? 'one' : 'two'"], 'E1135:', 1)
|
call CheckDefAndScriptFailure(["var x = 'x' ? 'one' : 'two'"], 'E1135:', 1)
|
||||||
call CheckDefAndScriptFailure(["var x = 0z1234 ? 'one' : 'two'"], 'E974:', 1)
|
call CheckDefAndScriptFailure(["var x = 0z1234 ? 'one' : 'two'"], 'E974:', 1)
|
||||||
@@ -229,6 +241,12 @@ def Test_expr1_falsy()
|
|||||||
call CheckDefAndScriptFailure(["var x = 1?? 'one' : 'two'"], msg, 1)
|
call CheckDefAndScriptFailure(["var x = 1?? 'one' : 'two'"], msg, 1)
|
||||||
call CheckDefAndScriptFailure(["var x = 1 ??'one' : 'two'"], msg, 1)
|
call CheckDefAndScriptFailure(["var x = 1 ??'one' : 'two'"], msg, 1)
|
||||||
call CheckDefAndScriptFailure(["var x = 1??'one' : 'two'"], msg, 1)
|
call CheckDefAndScriptFailure(["var x = 1??'one' : 'two'"], msg, 1)
|
||||||
|
lines =<< trim END
|
||||||
|
var x = 1
|
||||||
|
??'one' : 'two'
|
||||||
|
#comment
|
||||||
|
END
|
||||||
|
CheckDefAndScriptFailure(lines, 'E1004: White space required before and after ''??'' at "??''one'' : ''two''"', 2)
|
||||||
enddef
|
enddef
|
||||||
|
|
||||||
def Record(val: any): any
|
def Record(val: any): any
|
||||||
@@ -376,6 +394,13 @@ def Test_expr2_fails()
|
|||||||
|
|
||||||
call CheckDefAndScriptFailure2(["var x = [] || false"], 'E1012: Type mismatch; expected bool but got list<unknown>', 'E745:', 1)
|
call CheckDefAndScriptFailure2(["var x = [] || false"], 'E1012: Type mismatch; expected bool but got list<unknown>', 'E745:', 1)
|
||||||
|
|
||||||
|
var lines =<< trim END
|
||||||
|
vim9script
|
||||||
|
echo false
|
||||||
|
||true
|
||||||
|
# comment
|
||||||
|
END
|
||||||
|
CheckScriptFailure(lines, 'E1004: White space required before and after ''||'' at "||true"', 3)
|
||||||
enddef
|
enddef
|
||||||
|
|
||||||
" test &&
|
" test &&
|
||||||
@@ -476,13 +501,19 @@ def Test_expr3_fails()
|
|||||||
CheckDefAndScriptFailure(["var x = 1&&2"], msg, 1)
|
CheckDefAndScriptFailure(["var x = 1&&2"], msg, 1)
|
||||||
CheckDefAndScriptFailure(["var x = 1 &&2"], msg, 1)
|
CheckDefAndScriptFailure(["var x = 1 &&2"], msg, 1)
|
||||||
CheckDefAndScriptFailure(["var x = 1&& 2"], msg, 1)
|
CheckDefAndScriptFailure(["var x = 1&& 2"], msg, 1)
|
||||||
|
var lines =<< trim END
|
||||||
|
var x = 1
|
||||||
|
&&2
|
||||||
|
# comment
|
||||||
|
END
|
||||||
|
CheckDefAndScriptFailure(lines, 'E1004: White space required before and after ''&&'' at "&&2"', 2)
|
||||||
|
|
||||||
g:vals = []
|
g:vals = []
|
||||||
CheckDefAndScriptFailure2(["if 'yes' && 0", 'echo 0', 'endif'], 'E1012: Type mismatch; expected bool but got string', 'E1135: Using a String as a Bool', 1)
|
CheckDefAndScriptFailure2(["if 'yes' && 0", 'echo 0', 'endif'], 'E1012: Type mismatch; expected bool but got string', 'E1135: Using a String as a Bool', 1)
|
||||||
|
|
||||||
CheckDefExecAndScriptFailure(['assert_equal(false, Record(1) && Record(4) && Record(0))'], 'E1023: Using a Number as a Bool: 4', 1)
|
CheckDefExecAndScriptFailure(['assert_equal(false, Record(1) && Record(4) && Record(0))'], 'E1023: Using a Number as a Bool: 4', 1)
|
||||||
|
|
||||||
var lines =<< trim END
|
lines =<< trim END
|
||||||
if 3
|
if 3
|
||||||
&& true
|
&& true
|
||||||
endif
|
endif
|
||||||
@@ -976,6 +1007,12 @@ def Test_expr4_vim9script()
|
|||||||
END
|
END
|
||||||
CheckDefAndScriptFailure(lines, 'E1004:', 1)
|
CheckDefAndScriptFailure(lines, 'E1004:', 1)
|
||||||
|
|
||||||
|
for op in ['==', '>', '>=', '<', '<=', '=~', '!~', 'is', 'isnot']
|
||||||
|
lines = ["echo 'aaa'", op .. "'bbb'", '# comment']
|
||||||
|
var msg = printf("E1004: White space required before and after '%s'", op)
|
||||||
|
CheckDefAndScriptFailure(lines, msg, 2)
|
||||||
|
endfor
|
||||||
|
|
||||||
lines =<< trim END
|
lines =<< trim END
|
||||||
echo len('xxx') == 3
|
echo len('xxx') == 3
|
||||||
END
|
END
|
||||||
@@ -1264,6 +1301,12 @@ def Test_expr5_vim9script()
|
|||||||
bwipe!
|
bwipe!
|
||||||
END
|
END
|
||||||
CheckDefAndScriptFailure(lines, "E1004: White space required before and after '/' at \"/pattern", 3)
|
CheckDefAndScriptFailure(lines, "E1004: White space required before and after '/' at \"/pattern", 3)
|
||||||
|
|
||||||
|
for op in ['+', '-']
|
||||||
|
lines = ['var x = 1', op .. '2', '# comment']
|
||||||
|
var msg = printf("E1004: White space required before and after '%s' at \"%s2\"", op, op)
|
||||||
|
CheckDefAndScriptFailure(lines, msg, 2)
|
||||||
|
endfor
|
||||||
enddef
|
enddef
|
||||||
|
|
||||||
def Test_expr5_vim9script_channel()
|
def Test_expr5_vim9script_channel()
|
||||||
@@ -1545,6 +1588,12 @@ func Test_expr6_fails()
|
|||||||
if has('float')
|
if has('float')
|
||||||
call CheckDefAndScriptFailure2(["var x = 0.7[1]"], 'E1107:', 'E806:', 1)
|
call CheckDefAndScriptFailure2(["var x = 0.7[1]"], 'E1107:', 'E806:', 1)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
for op in ['*', '/', '%']
|
||||||
|
let lines = ['var x = 1', op .. '2', '# comment']
|
||||||
|
let msg = printf("E1004: White space required before and after '%s' at \"%s2\"", op, op)
|
||||||
|
call CheckDefAndScriptFailure(lines, msg, 2)
|
||||||
|
endfor
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
func Test_expr6_float_fails()
|
func Test_expr6_float_fails()
|
||||||
|
@@ -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 */
|
||||||
|
/**/
|
||||||
|
2895,
|
||||||
/**/
|
/**/
|
||||||
2894,
|
2894,
|
||||||
/**/
|
/**/
|
||||||
|
@@ -5187,7 +5187,7 @@ compile_expr1(char_u **arg, cctx_T *cctx, ppconst_T *ppconst)
|
|||||||
if (!IS_WHITE_OR_NUL(**arg) || !IS_WHITE_OR_NUL(p[1 + op_falsy]))
|
if (!IS_WHITE_OR_NUL(**arg) || !IS_WHITE_OR_NUL(p[1 + op_falsy]))
|
||||||
{
|
{
|
||||||
semsg(_(e_white_space_required_before_and_after_str_at_str),
|
semsg(_(e_white_space_required_before_and_after_str_at_str),
|
||||||
op_falsy ? "??" : "?", *arg);
|
op_falsy ? "??" : "?", p);
|
||||||
return FAIL;
|
return FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user