patch 8.2.2861: Vim9: "legacy return" is not recognized as a return statement
Problem: Vim9: "legacy return" is not recognized as a return statement.
Solution: Specifically check for a return command. (closes #8213)
diff --git a/src/testdir/test_vim9_expr.vim b/src/testdir/test_vim9_expr.vim
index 718db8b..fe5de29 100644
--- a/src/testdir/test_vim9_expr.vim
+++ b/src/testdir/test_vim9_expr.vim
@@ -2777,6 +2777,10 @@
CheckDefAndScriptFailure(lines, 'E15:')
enddef
+def LegacyReturn(): string
+ legacy return #{key: 'ok'}.key
+enddef
+
def Test_expr7_legacy_script()
var lines =<< trim END
let s:legacy = 'legacy'
@@ -2790,6 +2794,17 @@
call assert_equal('legacy', GetLocalPrefix())
END
CheckScriptSuccess(lines)
+
+ assert_equal('ok', LegacyReturn())
+
+ lines =<< trim END
+ vim9script
+ def GetNumber(): number
+ legacy return range(3)->map('v:val + 1')
+ enddef
+ echo GetNumber()
+ END
+ CheckScriptFailure(lines, 'E1012: Type mismatch; expected number but got list<number>')
enddef
def Echo(arg: any): string