From efc084e3353d6854b6dac8b240f70cb0abb838ad Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Thu, 9 Sep 2021 22:30:52 +0200 Subject: patch 8.2.3422: Vim9: no failure if return type differs from returned var Problem: Vim9: no failure if return type differs from returned variable. Solution: Copy type when copying a list. (closes #8847) --- src/list.c | 1 + src/testdir/test_vim9_func.vim | 23 +++++++++++++++++++++++ src/version.c | 2 ++ 3 files changed, 26 insertions(+) diff --git a/src/list.c b/src/list.c index 76101bac5..336bf3ba7 100644 --- a/src/list.c +++ b/src/list.c @@ -1217,6 +1217,7 @@ list_copy(list_T *orig, int deep, int copyID) copy = list_alloc(); if (copy != NULL) { + copy->lv_type = orig->lv_type; if (copyID != 0) { // Do this before adding the items, because one of the items may diff --git a/src/testdir/test_vim9_func.vim b/src/testdir/test_vim9_func.vim index 09f80e9d1..4e2f70e05 100644 --- a/src/testdir/test_vim9_func.vim +++ b/src/testdir/test_vim9_func.vim @@ -438,6 +438,29 @@ def Test_return_invalid() CheckScriptFailure(lines, 'E1010:') enddef +def Test_return_list_any() + var lines =<< trim END + vim9script + def Func(): list + var l: list + l->add('string') + return l + enddef + echo Func() + END + CheckScriptFailure(lines, 'E1012:') + lines =<< trim END + vim9script + def Func(): list + var l: list + l += ['string'] + return l + enddef + echo Func() + END + CheckScriptFailure(lines, 'E1012:') +enddef + func Increment() let g:counter += 1 endfunc diff --git a/src/version.c b/src/version.c index d1767f349..8cd295c1b 100644 --- a/src/version.c +++ b/src/version.c @@ -755,6 +755,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 3422, /**/ 3421, /**/ -- cgit v1.2.1