patch 9.1.1040: Vim9: imported type cannot be used as func return type

Commit: 
https://github.com/vim/vim/commit/d79ea47079a70def4f458f59b65c181488633bf6
Author: Yegappan Lakshmanan <yegap...@yahoo.com>
Date:   Mon Jan 20 21:09:13 2025 +0100

    patch 9.1.1040: Vim9: imported type cannot be used as func return type
    
    Problem:  Vim9: imported type cannot be used as func return type
              (Dayvid Albuquerque)
    Solution: temporarily reset the is_export flag (Yegappan Lakshmanan)
    
    fixes: #16489
    closes: #16492
    
    Signed-off-by: Yegappan Lakshmanan <yegap...@yahoo.com>
    Signed-off-by: Christian Brabandt <c...@256bit.org>

diff --git a/src/testdir/test_vim9_import.vim b/src/testdir/test_vim9_import.vim
index 4a3e23914..ff81f4a53 100644
--- a/src/testdir/test_vim9_import.vim
+++ b/src/testdir/test_vim9_import.vim
@@ -3387,4 +3387,37 @@ def Test_import_locked_var()
   v9.CheckScriptFailure(lines, 'E741: Value is locked: Foo', 3)
 enddef
 
+" Test for using an autoload imported class as the function return type
+def Test_imported_class_as_def_func_rettype()
+  var lines =<< trim END
+    vim9script
+
+    export class Foo
+      var name: string = "foo"
+    endclass
+  END
+  writefile(lines, 'Ximportclassrettype1.vim', 'D')
+
+  lines =<< trim END
+    vim9script
+
+    import autoload "./Ximportclassrettype1.vim" as A
+
+    export def CreateFoo(): A.Foo
+      return A.Foo.new()
+    enddef
+  END
+  writefile(lines, 'Ximportclassrettype2.vim', 'D')
+
+  lines =<< trim END
+    vim9script
+
+    import './Ximportclassrettype2.vim' as B
+
+    var foo = B.CreateFoo()
+    assert_equal('foo', foo.name)
+  END
+  v9.CheckScriptSuccess(lines)
+enddef
+
 " vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker
diff --git a/src/userfunc.c b/src/userfunc.c
index 06be445af..91c971e8f 100644
--- a/src/userfunc.c
+++ b/src/userfunc.c
@@ -5472,11 +5472,19 @@ define_function(
        // The function may use script variables from the context.
        function_using_block_scopes(fp, cstack);
 
+       // The argument types and the return type may use an imported type.
+       // In that case, the imported file will be sourced.  To avoid treating
+       // everything in the imported file as exported, temporarily reset
+       // is_export.
+       int save_is_export = is_export;
+       is_export = FALSE;
+
        if (parse_argument_types(fp, &argtypes, varargs, &arg_objm,
                                        obj_members, obj_member_count) == FAIL)
        {
            SOURCING_LNUM = lnum_save;
            free_fp = fp_allocated;
+           is_export = save_is_export;
            goto erret;
        }
        varargs = FALSE;
@@ -5486,8 +5494,10 @@ define_function(
        {
            SOURCING_LNUM = lnum_save;
            free_fp = fp_allocated;
+           is_export = save_is_export;
            goto erret;
        }
+       is_export = save_is_export;
        SOURCING_LNUM = lnum_save;
     }
     else
diff --git a/src/version.c b/src/version.c
index 3a3ee5694..8e5315957 100644
--- a/src/version.c
+++ b/src/version.c
@@ -13,7 +13,7 @@
  * Vim originated from Stevie version 3.6 (Fish disk 217) by GRWalter (Fred)
  * It has been changed beyond recognition since then.
  *
- * Differences between version 8.2 and 9.0 can be found with ":help version9".
+ * Differences between version 8.2 and 9.1 can be found with ":help version9".
  * Differences between version 7.4 and 8.x can be found with ":help version8".
  * Differences between version 6.4 and 7.x can be found with ":help version7".
  * Differences between version 5.8 and 6.x can be found with ":help version6".
@@ -704,6 +704,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1040,
 /**/
     1039,
 /**/

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to vim_dev+unsubscr...@googlegroups.com.
To view this discussion visit 
https://groups.google.com/d/msgid/vim_dev/E1tZyM6-007pTY-14%40256bit.org.

Raspunde prin e-mail lui