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.