Mercurial > vim
changeset 26678:e16806237a70 v8.2.3868
patch 8.2.3868: Vim9: function test fails
Commit: https://github.com/vim/vim/commit/1b5f7a6202406b7d7ac804960602350e42b8be80
Author: Bram Moolenaar <Bram@vim.org>
Date: Tue Dec 21 13:30:42 2021 +0000
patch 8.2.3868: Vim9: function test fails
Problem: Vim9: function test fails.
Solution: Add missing changes. Add test for earlier patch.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Tue, 21 Dec 2021 14:45:03 +0100 |
parents | 51db19c22522 |
children | 2f3b13eae139 |
files | src/testdir/test_vim9_disassemble.vim src/version.c src/vim9type.c |
diffstat | 3 files changed, 33 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- 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
--- 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,
--- 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