summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2021-12-21 13:30:42 +0000
committerBram Moolenaar <Bram@vim.org>2021-12-21 13:30:42 +0000
commit1b5f7a6202406b7d7ac804960602350e42b8be80 (patch)
treed67e7c69a056d30e19464071cad2629ef62b677d
parentd92813a59877c707e4b64bea6d786aad152acb45 (diff)
downloadvim-git-1b5f7a6202406b7d7ac804960602350e42b8be80.tar.gz
patch 8.2.3868: Vim9: function test failsv8.2.3868
Problem: Vim9: function test fails. Solution: Add missing changes. Add test for earlier patch.
-rw-r--r--src/testdir/test_vim9_disassemble.vim36
-rw-r--r--src/version.c2
-rw-r--r--src/vim9type.c7
3 files changed, 33 insertions, 12 deletions
diff --git a/src/testdir/test_vim9_disassemble.vim b/src/testdir/test_vim9_disassemble.vim
index 76fd3fac1..b1ba6750a 100644
--- a/src/testdir/test_vim9_disassemble.vim
+++ b/src/testdir/test_vim9_disassemble.vim
@@ -2328,27 +2328,43 @@ def s:ElseifConstant()
elseif false
echo "false"
endif
+ if 0
+ echo "yes"
+ elseif 0
+ echo "no"
+ endif
enddef
def Test_debug_elseif_constant()
- var res = execute('disass s:ElseifConstant')
+ var res = execute('disass debug s:ElseifConstant')
assert_match('<SNR>\d*_ElseifConstant\_s*' ..
'if g:value\_s*' ..
- '0 LOADG g:value\_s*' ..
- '1 COND2BOOL\_s*' ..
- '2 JUMP_IF_FALSE -> 6\_s*' ..
+ '0 DEBUG line 1-1 varcount 0\_s*' ..
+ '1 LOADG g:value\_s*' ..
+ '2 COND2BOOL\_s*' ..
+ '3 JUMP_IF_FALSE -> 8\_s*' ..
'echo "one"\_s*' ..
- '3 PUSHS "one"\_s*' ..
- '4 ECHO 1\_s*' ..
+ '4 DEBUG line 2-2 varcount 0\_s*' ..
+ '5 PUSHS "one"\_s*' ..
+ '6 ECHO 1\_s*' ..
'elseif true\_s*' ..
- '5 JUMP -> 8\_s*' ..
+ '7 JUMP -> 12\_s*' ..
+ '8 DEBUG line 3-3 varcount 0\_s*' ..
'echo "true"\_s*' ..
- '6 PUSHS "true"\_s*' ..
- '7 ECHO 1\_s*' ..
+ '9 DEBUG line 4-4 varcount 0\_s*' ..
+ '10 PUSHS "true"\_s*' ..
+ '11 ECHO 1\_s*' ..
'elseif false\_s*' ..
'echo "false"\_s*' ..
'endif\_s*' ..
- '\d RETURN void*',
+ 'if 0\_s*' ..
+ '12 DEBUG line 8-8 varcount 0\_s*' ..
+ 'echo "yes"\_s*' ..
+ 'elseif 0\_s*' ..
+ '13 DEBUG line 11-10 varcount 0\_s*' ..
+ 'echo "no"\_s*' ..
+ 'endif\_s*' ..
+ '14 RETURN void*',
res)
enddef
diff --git a/src/version.c b/src/version.c
index aa699a219..782267f4b 100644
--- a/src/version.c
+++ b/src/version.c
@@ -750,6 +750,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 3868,
+/**/
3867,
/**/
3866,
diff --git a/src/vim9type.c b/src/vim9type.c
index f8b1272f1..438c51197 100644
--- a/src/vim9type.c
+++ b/src/vim9type.c
@@ -567,7 +567,9 @@ check_type_maybe(
{
// tt_type should match, except that a "partial" can be assigned to a
// variable with type "func".
+ // And "unknown" (using global variable) needs a runtime type check.
if (!(expected->tt_type == actual->tt_type
+ || actual->tt_type == VAR_UNKNOWN
|| (expected->tt_type == VAR_FUNC
&& actual->tt_type == VAR_PARTIAL)))
{
@@ -582,7 +584,7 @@ check_type_maybe(
if (expected->tt_type == VAR_DICT || expected->tt_type == VAR_LIST)
{
// "unknown" is used for an empty list or dict
- if (actual->tt_member != &t_unknown)
+ if (actual->tt_member != NULL && actual->tt_member != &t_unknown)
ret = check_type(expected->tt_member, actual->tt_member,
FALSE, where);
}
@@ -592,7 +594,8 @@ check_type_maybe(
// nothing, thus there is no point in checking.
if (expected->tt_member != &t_unknown)
{
- if (actual->tt_member != &t_unknown)
+ if (actual->tt_member != NULL
+ && actual->tt_member != &t_unknown)
ret = check_type(expected->tt_member, actual->tt_member,
FALSE, where);
else