patch 8.2.1977: Vim9: error for using a string in a condition is confusing
Problem: Vim9: error for using a string in a condition is confusing.
Solution: Give a more specific error. Also adjust the compile time type
checking for || and &&.
diff --git a/src/testdir/test_vim9_disassemble.vim b/src/testdir/test_vim9_disassemble.vim
index 07974d3..37748a1 100644
--- a/src/testdir/test_vim9_disassemble.vim
+++ b/src/testdir/test_vim9_disassemble.vim
@@ -707,6 +707,7 @@
'if has("gui_running")\_s*' ..
'\d PUSHS "gui_running"\_s*' ..
'\d BCALL has(argc 1)\_s*' ..
+ '\d COND2BOOL\_s*' ..
'\d JUMP_IF_FALSE -> \d\_s*' ..
' echo "yes"\_s*' ..
'\d PUSHS "yes"\_s*' ..
@@ -760,14 +761,15 @@
assert_match('ReturnInIf\_s*' ..
'if g:cond\_s*' ..
'0 LOADG g:cond\_s*' ..
- '1 JUMP_IF_FALSE -> 4\_s*' ..
+ '1 COND2BOOL\_s*' ..
+ '2 JUMP_IF_FALSE -> 5\_s*' ..
'return "yes"\_s*' ..
- '2 PUSHS "yes"\_s*' ..
- '3 RETURN\_s*' ..
+ '3 PUSHS "yes"\_s*' ..
+ '4 RETURN\_s*' ..
'else\_s*' ..
' return "no"\_s*' ..
- '4 PUSHS "no"\_s*' ..
- '5 RETURN$',
+ '5 PUSHS "no"\_s*' ..
+ '6 RETURN$',
instr)
enddef
@@ -1357,16 +1359,17 @@
assert_match('ReturnBool\_s*' ..
'var name: bool = 1 && 0 || 1\_s*' ..
'0 PUSHNR 1\_s*' ..
- '1 JUMP_IF_COND_FALSE -> 3\_s*' ..
- '2 PUSHNR 0\_s*' ..
- '3 COND2BOOL\_s*' ..
- '4 JUMP_IF_COND_TRUE -> 6\_s*' ..
- '5 PUSHNR 1\_s*' ..
- '6 2BOOL (!!val)\_s*' ..
+ '1 2BOOL (!!val)\_s*' ..
+ '2 JUMP_IF_COND_FALSE -> 5\_s*' ..
+ '3 PUSHNR 0\_s*' ..
+ '4 2BOOL (!!val)\_s*' ..
+ '5 JUMP_IF_COND_TRUE -> 8\_s*' ..
+ '6 PUSHNR 1\_s*' ..
+ '7 2BOOL (!!val)\_s*' ..
'\d STORE $0\_s*' ..
'return name\_s*' ..
- '\d LOAD $0\_s*' ..
- '\d RETURN',
+ '\d\+ LOAD $0\_s*' ..
+ '\d\+ RETURN',
instr)
assert_equal(true, InvertBool())
enddef