@@ -5249,6 +5249,102 @@ def Test_defer_lambda_funcref()
52495249 v9.CheckSourceSuccess (lines )
52505250enddef
52515251
5252+ " Test for using defer with a lambda and a command block
5253+ def Test_defer_lambda_func ()
5254+ var lines = << trim END
5255+ vim9script
5256+ var result = ' '
5257+ def Foo ()
5258+ result = ' xxx'
5259+ defer (a: number , b: string ): number = > {
5260+ result = $ ' {a}:{b}'
5261+ return 0
5262+ }(10 , ' aaa' )
5263+ result = ' yyy'
5264+ enddef
5265+ Foo ()
5266+ assert_equal (' 10:aaa' , result)
5267+ END
5268+ v9.CheckScriptSuccess (lines )
5269+
5270+ # Error : argument type mismatch
5271+ lines = << trim END
5272+ vim9script
5273+ def Foo ()
5274+ defer (a: number , b: string ): number = > {
5275+ return 0
5276+ }(10 , 20 )
5277+ enddef
5278+ defcompile
5279+ END
5280+ v9.CheckScriptFailure (lines , ' E1013: Argument 2: type mismatch, expected string but got number' , 1 )
5281+
5282+ # Error : not enough arguments
5283+ lines = << trim END
5284+ vim9script
5285+ def Foo ()
5286+ defer (a: number ) = > {
5287+ }()
5288+ enddef
5289+ defcompile
5290+ END
5291+ v9.CheckScriptFailure (lines , ' E119: Not enough arguments for function: (a: number) => {' , 1 )
5292+
5293+ # Error : too many arguments
5294+ lines = << trim END
5295+ vim9script
5296+ def Foo ()
5297+ defer () = > {
5298+ }(10 )
5299+ enddef
5300+ defcompile
5301+ END
5302+ v9.CheckScriptFailure (lines , ' E118: Too many arguments for function: () => {' , 1 )
5303+
5304+ # Error : invalid command in command - block
5305+ lines = << trim END
5306+ vim9script
5307+ def Foo ()
5308+ defer () = > {
5309+ xxx
5310+ }()
5311+ enddef
5312+ defcompile
5313+ END
5314+ v9.CheckScriptFailure (lines , ' E476: Invalid command: xxx' , 1 )
5315+
5316+ # Error : missing return
5317+ lines = << trim END
5318+ vim9script
5319+ def Foo ()
5320+ defer (): number = > {
5321+ }()
5322+ enddef
5323+ defcompile
5324+ END
5325+ v9.CheckScriptFailure (lines , ' E1027: Missing return statement' , 1 )
5326+
5327+ # Error : missing lambda body
5328+ lines = << trim END
5329+ vim9script
5330+ def Foo ()
5331+ defer (a: number ): number
5332+ enddef
5333+ defcompile
5334+ END
5335+ v9.CheckScriptFailure (lines , ' E1028: Compiling :def function failed' , 1 )
5336+
5337+ # Error : invalid lambda syntax
5338+ lines = << trim END
5339+ vim9script
5340+ def Foo ()
5341+ defer (
5342+ enddef
5343+ defcompile
5344+ END
5345+ v9.CheckScriptFailure (lines , ' E1028: Compiling :def function failed' , 1 )
5346+ enddef
5347+
52525348" Test for using an non-existing type in a "for" statement.
52535349def Test_invalid_type_in_for ()
52545350 var lines = << trim END
0 commit comments