Mercurial > vim
changeset 22804:af26fadf333d v8.2.1950
patch 8.2.1950: Vim9: crash when compiling function fails when getting type
Commit: https://github.com/vim/vim/commit/9c13f76275047a4d6302c077fb40bc9c397ff027
Author: Bram Moolenaar <Bram@vim.org>
Date: Wed Nov 4 12:00:53 2020 +0100
patch 8.2.1950: Vim9: crash when compiling function fails when getting type
Problem: Vim9: crash when compiling function fails when getting type.
Solution: Handle NULL type. (closes https://github.com/vim/vim/issues/7253)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Wed, 04 Nov 2020 12:15:03 +0100 |
parents | afac564db1c3 |
children | 4ee5efad0df5 |
files | src/testdir/test_vim9_expr.vim src/version.c src/vim9type.c |
diffstat | 3 files changed, 23 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/testdir/test_vim9_expr.vim +++ b/src/testdir/test_vim9_expr.vim @@ -1749,6 +1749,15 @@ def Test_expr7_list_vim9script() var l: list<string> = [234, 'x'] END CheckScriptFailure(lines, 'E1012:', 2) + + lines =<< trim END + vim9script + def Failing() + job_stop() + enddef + var list = [Failing] + END + CheckScriptFailure(lines, 'E119:', 1) enddef def LambdaWithComments(): func @@ -2009,6 +2018,15 @@ def Test_expr7_dict_vim9script() var l: dict<string> = #{a: 234, b: 'x'} END CheckScriptFailure(lines, 'E1012:', 2) + + lines =<< trim END + vim9script + def Failing() + job_stop() + enddef + var dict = #{name: Failing} + END + CheckScriptFailure(lines, 'E119:', 1) enddef let g:oneString = 'one'
--- a/src/version.c +++ b/src/version.c @@ -751,6 +751,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1950, +/**/ 1949, /**/ 1948,
--- a/src/vim9type.c +++ b/src/vim9type.c @@ -108,7 +108,7 @@ get_list_type(type_T *member_type, garra type_T *type; // recognize commonly used types - if (member_type->tt_type == VAR_ANY) + if (member_type == NULL || member_type->tt_type == VAR_ANY) return &t_list_any; if (member_type->tt_type == VAR_VOID || member_type->tt_type == VAR_UNKNOWN) @@ -137,7 +137,7 @@ get_dict_type(type_T *member_type, garra type_T *type; // recognize commonly used types - if (member_type->tt_type == VAR_ANY) + if (member_type == NULL || member_type->tt_type == VAR_ANY) return &t_dict_any; if (member_type->tt_type == VAR_VOID || member_type->tt_type == VAR_UNKNOWN) @@ -408,6 +408,7 @@ typval2type_vimvar(typval_T *tv, garray_ /* * Return FAIL if "expected" and "actual" don't match. + * When "argidx" > 0 it is included in the error message. */ int check_typval_type(type_T *expected, typval_T *actual_tv, int argidx)