changeset 25774:9edad9a8cca6 v8.2.3422

patch 8.2.3422: Vim9: no failure if return type differs from returned var Commit: https://github.com/vim/vim/commit/efc084e3353d6854b6dac8b240f70cb0abb838ad Author: Bram Moolenaar <Bram@vim.org> Date: Thu Sep 9 22:30:52 2021 +0200 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 https://github.com/vim/vim/issues/8847)
author Bram Moolenaar <Bram@vim.org>
date Thu, 09 Sep 2021 22:45:05 +0200
parents 11b656e74444
children 90bcb4296e14
files src/list.c src/testdir/test_vim9_func.vim src/version.c
diffstat 3 files changed, 26 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/list.c
+++ b/src/list.c
@@ -1217,6 +1217,7 @@ list_copy(list_T *orig, int deep, int co
     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
--- 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<string>
+        var l: list<any>
+        l->add('string')
+        return l
+      enddef
+      echo Func()
+  END
+  CheckScriptFailure(lines, 'E1012:')
+  lines =<< trim END
+      vim9script
+      def Func(): list<string>
+        var l: list<any>
+        l += ['string']
+        return l
+      enddef
+      echo Func()
+  END
+  CheckScriptFailure(lines, 'E1012:')
+enddef
+
 func Increment()
   let g:counter += 1
 endfunc
--- a/src/version.c
+++ b/src/version.c
@@ -756,6 +756,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    3422,
+/**/
     3421,
 /**/
     3420,