0
0
mirror of https://github.com/vim/vim.git synced 2025-10-03 05:14:07 -04:00

patch 8.2.1798: Vim9: trinary operator condition is too permissive

Problem:    Vim9: trinary operator condition is too permissive.
Solution:   Use tv_get_bool_chk().
This commit is contained in:
Bram Moolenaar
2020-10-04 16:06:05 +02:00
parent 6abd3dc257
commit 1310660557
10 changed files with 215 additions and 36 deletions

View File

@@ -18,27 +18,27 @@ def Test_expr1_trinary()
'one' :
'two')
if has('float')
assert_equal('one', 0.1 ? 'one' : 'two')
assert_equal('one', !!0.1 ? 'one' : 'two')
endif
assert_equal('one', 'x' ? 'one' : 'two')
assert_equal('one', 'x'
assert_equal('one', !!'x' ? 'one' : 'two')
assert_equal('one', !!'x'
? 'one'
: 'two')
assert_equal('one', 0z1234 ? 'one' : 'two')
assert_equal('one', [0] ? 'one' : 'two')
assert_equal('one', #{x: 0} ? 'one' : 'two')
assert_equal('one', !!0z1234 ? 'one' : 'two')
assert_equal('one', !![0] ? 'one' : 'two')
assert_equal('one', !!#{x: 0} ? 'one' : 'two')
var name = 1
assert_equal('one', name ? 'one' : 'two')
assert_equal('two', false ? 'one' : 'two')
assert_equal('two', 0 ? 'one' : 'two')
if has('float')
assert_equal('two', 0.0 ? 'one' : 'two')
assert_equal('two', !!0.0 ? 'one' : 'two')
endif
assert_equal('two', '' ? 'one' : 'two')
assert_equal('two', 0z ? 'one' : 'two')
assert_equal('two', [] ? 'one' : 'two')
assert_equal('two', {} ? 'one' : 'two')
assert_equal('two', !!'' ? 'one' : 'two')
assert_equal('two', !!0z ? 'one' : 'two')
assert_equal('two', !![] ? 'one' : 'two')
assert_equal('two', !!{} ? 'one' : 'two')
name = 0
assert_equal('two', name ? 'one' : 'two')
@@ -117,6 +117,24 @@ def Test_expr1_trinary_vimscript()
END
CheckScriptFailure(lines, 'E1004:', 2)
lines =<< trim END
vim9script
var name = 'x' ? 1 : 2
END
CheckScriptFailure(lines, 'E1030:', 2)
lines =<< trim END
vim9script
var name = [] ? 1 : 2
END
CheckScriptFailure(lines, 'E745:', 2)
lines =<< trim END
vim9script
var name = {} ? 1 : 2
END
CheckScriptFailure(lines, 'E728:', 2)
# check after failure eval_flags is reset
lines =<< trim END
vim9script
@@ -152,6 +170,15 @@ func Test_expr1_trinary_fails()
call CheckDefFailure(["var x = 1 ? 'one' :'two'"], msg, 1)
call CheckDefFailure(["var x = 1 ? 'one':'two'"], msg, 1)
call CheckDefFailure(["var x = 'x' ? 'one' : 'two'"], 'E1030:', 1)
call CheckDefFailure(["var x = 0z1234 ? 'one' : 'two'"], 'E974:', 1)
call CheckDefExecFailure(["var x = [] ? 'one' : 'two'"], 'E745:', 1)
call CheckDefExecFailure(["var x = {} ? 'one' : 'two'"], 'E728:', 1)
if has('float')
call CheckDefFailure(["var x = 0.1 ? 'one' : 'two'"], 'E805:', 1)
endif
" missing argument detected even when common type is used
call CheckDefFailure([
\ 'var X = FuncOne',