f = rettv->vval.v_float;
else
#endif
+ {
+ while (VIM_ISWHITE(end_leader[-1]))
+ --end_leader;
if (in_vim9script() && end_leader[-1] == '!')
val = tv2bool(rettv);
else
val = tv_get_number_chk(rettv, &error);
+ }
if (error)
{
clear_tv(rettv);
assert_equal(true, !!'asdf')
assert_equal(true, !![2])
+ assert_equal(true, ! false)
+ assert_equal(true, !! true)
+ assert_equal(true, ! ! true)
+ assert_equal(true, !!! false)
+ assert_equal(true, ! ! ! false)
+
+ g:true = true
+ g:false = false
+ assert_equal(true, ! g:false)
+ assert_equal(true, !! g:true)
+ assert_equal(true, ! ! g:true)
+ assert_equal(true, !!! g:false)
+ assert_equal(true, ! ! ! g:false)
+ unlet g:true
+ unlet g:false
+
assert_equal(true, !test_null_partial())
assert_equal(false, !{-> 'yes'})
assert_equal(false, ![1, 2, 3]->reverse())
assert_equal(true, ![]->reverse())
END
- CheckDefSuccess(lines)
- CheckScriptSuccess(['vim9script'] + lines)
+ CheckDefAndScriptSuccess(lines)
enddef
func Test_expr7_fails()
++p;
break;
}
- else
+ else if (*p == '!')
{
int v = tv2bool(rettv);
}
else
{
- int invert = TRUE;
+ int invert = *p == '!';
- while (p > start && p[-1] == '!')
+ while (p > start && (p[-1] == '!' || VIM_ISWHITE(p[-1])))
{
+ if (p[-1] == '!')
+ invert = !invert;
--p;
- invert = !invert;
}
if (generate_2BOOL(cctx, invert) == FAIL)
return FAIL;