Mercurial > vim
comparison src/testdir/test_vim9_func.vim @ 27464:a14c4d3e3260 v8.2.4260
patch 8.2.4260: Vim9: can still use a global function without g:
Commit: https://github.com/vim/vim/commit/848faddb870f3ba4d84fcacd1cccb5cdbbfd9c41
Author: Bram Moolenaar <Bram@vim.org>
Date: Sun Jan 30 15:28:30 2022 +0000
patch 8.2.4260: Vim9: can still use a global function without g:
Problem: Vim9: can still use a global function without g: at the script
level.
Solution: Also check for g: at the script level. (issue #9637)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sun, 30 Jan 2022 16:30:04 +0100 |
parents | 4c16acb2525f |
children | 55613f0d59bc |
comparison
equal
deleted
inserted
replaced
27463:c50f682d1183 | 27464:a14c4d3e3260 |
---|---|
338 enddef | 338 enddef |
339 | 339 |
340 def Test_return_something() | 340 def Test_return_something() |
341 g:ReturnString()->assert_equal('string') | 341 g:ReturnString()->assert_equal('string') |
342 g:ReturnNumber()->assert_equal(123) | 342 g:ReturnNumber()->assert_equal(123) |
343 assert_fails('ReturnGlobal()', 'E1012: Type mismatch; expected number but got string', '', 1, 'ReturnGlobal') | 343 assert_fails('g:ReturnGlobal()', 'E1012: Type mismatch; expected number but got string', '', 1, 'ReturnGlobal') |
344 | 344 |
345 var lines =<< trim END | 345 var lines =<< trim END |
346 vim9script | 346 vim9script |
347 | 347 |
348 def Msg() | 348 def Msg() |
941 lines =<< trim END | 941 lines =<< trim END |
942 vim9script | 942 vim9script |
943 def g:Func(): string | 943 def g:Func(): string |
944 return 'global' | 944 return 'global' |
945 enddef | 945 enddef |
946 assert_equal('global', Func()) | 946 assert_equal('global', g:Func()) |
947 delfunc g:Func | 947 delfunc g:Func |
948 END | 948 END |
949 v9.CheckScriptSuccess(lines) | 949 v9.CheckScriptSuccess(lines) |
950 | 950 |
951 # This does not shadow "i" which is visible only inside the for loop | 951 # This does not shadow "i" which is visible only inside the for loop |
1496 return join(arg, ',') | 1496 return join(arg, ',') |
1497 enddef | 1497 enddef |
1498 | 1498 |
1499 def Test_func_type_varargs() | 1499 def Test_func_type_varargs() |
1500 var RefDefArg: func(?string) | 1500 var RefDefArg: func(?string) |
1501 RefDefArg = FuncOneDefArg | 1501 RefDefArg = g:FuncOneDefArg |
1502 RefDefArg() | 1502 RefDefArg() |
1503 s:value->assert_equal('text') | 1503 s:value->assert_equal('text') |
1504 RefDefArg('some') | 1504 RefDefArg('some') |
1505 s:value->assert_equal('some') | 1505 s:value->assert_equal('some') |
1506 | 1506 |
1507 var RefDef2Arg: func(?number, ?string): string | 1507 var RefDef2Arg: func(?number, ?string): string |
1508 RefDef2Arg = FuncTwoDefArg | 1508 RefDef2Arg = g:FuncTwoDefArg |
1509 RefDef2Arg()->assert_equal('123text') | 1509 RefDef2Arg()->assert_equal('123text') |
1510 RefDef2Arg(99)->assert_equal('99text') | 1510 RefDef2Arg(99)->assert_equal('99text') |
1511 RefDef2Arg(77, 'some')->assert_equal('77some') | 1511 RefDef2Arg(77, 'some')->assert_equal('77some') |
1512 | 1512 |
1513 v9.CheckDefFailure(['var RefWrong: func(string?)'], 'E1010:') | 1513 v9.CheckDefFailure(['var RefWrong: func(string?)'], 'E1010:') |
1514 v9.CheckDefFailure(['var RefWrong: func(?string, string)'], 'E1007:') | 1514 v9.CheckDefFailure(['var RefWrong: func(?string, string)'], 'E1007:') |
1515 | 1515 |
1516 var RefVarargs: func(...list<string>): string | 1516 var RefVarargs: func(...list<string>): string |
1517 RefVarargs = FuncVarargs | 1517 RefVarargs = g:FuncVarargs |
1518 RefVarargs()->assert_equal('') | 1518 RefVarargs()->assert_equal('') |
1519 RefVarargs('one')->assert_equal('one') | 1519 RefVarargs('one')->assert_equal('one') |
1520 RefVarargs('one', 'two')->assert_equal('one,two') | 1520 RefVarargs('one', 'two')->assert_equal('one,two') |
1521 | 1521 |
1522 v9.CheckDefFailure(['var RefWrong: func(...list<string>, string)'], 'E110:') | 1522 v9.CheckDefFailure(['var RefWrong: func(...list<string>, string)'], 'E110:') |
1719 return arg | 1719 return arg |
1720 enddef | 1720 enddef |
1721 | 1721 |
1722 def Test_error_in_nested_function() | 1722 def Test_error_in_nested_function() |
1723 # Error in called function requires unwinding the call stack. | 1723 # Error in called function requires unwinding the call stack. |
1724 assert_fails('FuncWithForwardCall()', 'E1096:', '', 1, 'FuncWithForwardCall') | 1724 assert_fails('g:FuncWithForwardCall()', 'E1096:', '', 1, 'FuncWithForwardCall') |
1725 enddef | 1725 enddef |
1726 | 1726 |
1727 def Test_nested_function_with_nextcmd() | 1727 def Test_nested_function_with_nextcmd() |
1728 var lines =<< trim END | 1728 var lines =<< trim END |
1729 vim9script | 1729 vim9script |
2197 Ref2 = g:FuncNoArgRetNumber | 2197 Ref2 = g:FuncNoArgRetNumber |
2198 Ref2()->assert_equal(1234) | 2198 Ref2()->assert_equal(1234) |
2199 s:funcResult->assert_equal(22) | 2199 s:funcResult->assert_equal(22) |
2200 | 2200 |
2201 s:funcResult = 0 | 2201 s:funcResult = 0 |
2202 Ref2 = FuncOneArgRetNumber | 2202 Ref2 = g:FuncOneArgRetNumber |
2203 Ref2(13)->assert_equal(13) | 2203 Ref2(13)->assert_equal(13) |
2204 s:funcResult->assert_equal(13) | 2204 s:funcResult->assert_equal(13) |
2205 enddef | 2205 enddef |
2206 | 2206 |
2207 def Test_repeat_return_type() | 2207 def Test_repeat_return_type() |
2230 def Test_func_type_part() | 2230 def Test_func_type_part() |
2231 var RefVoid: func: void | 2231 var RefVoid: func: void |
2232 RefVoid = g:FuncNoArgNoRet | 2232 RefVoid = g:FuncNoArgNoRet |
2233 RefVoid = g:FuncOneArgNoRet | 2233 RefVoid = g:FuncOneArgNoRet |
2234 v9.CheckDefFailure(['var RefVoid: func: void', 'RefVoid = g:FuncNoArgRetNumber'], 'E1012: Type mismatch; expected func(...) but got func(): number') | 2234 v9.CheckDefFailure(['var RefVoid: func: void', 'RefVoid = g:FuncNoArgRetNumber'], 'E1012: Type mismatch; expected func(...) but got func(): number') |
2235 v9.CheckDefFailure(['var RefVoid: func: void', 'RefVoid = FuncNoArgRetString'], 'E1012: Type mismatch; expected func(...) but got func(): string') | 2235 v9.CheckDefFailure(['var RefVoid: func: void', 'RefVoid = g:FuncNoArgRetString'], 'E1012: Type mismatch; expected func(...) but got func(): string') |
2236 | 2236 |
2237 var RefAny: func(): any | 2237 var RefAny: func(): any |
2238 RefAny = g:FuncNoArgRetNumber | 2238 RefAny = g:FuncNoArgRetNumber |
2239 RefAny = FuncNoArgRetString | 2239 RefAny = g:FuncNoArgRetString |
2240 v9.CheckDefFailure(['var RefAny: func(): any', 'RefAny = g:FuncNoArgNoRet'], 'E1012: Type mismatch; expected func(): any but got func()') | 2240 v9.CheckDefFailure(['var RefAny: func(): any', 'RefAny = g:FuncNoArgNoRet'], 'E1012: Type mismatch; expected func(): any but got func()') |
2241 v9.CheckDefFailure(['var RefAny: func(): any', 'RefAny = g:FuncOneArgNoRet'], 'E1012: Type mismatch; expected func(): any but got func(number)') | 2241 v9.CheckDefFailure(['var RefAny: func(): any', 'RefAny = g:FuncOneArgNoRet'], 'E1012: Type mismatch; expected func(): any but got func(number)') |
2242 | 2242 |
2243 var RefAnyNoArgs: func: any = RefAny | 2243 var RefAnyNoArgs: func: any = RefAny |
2244 | 2244 |
2245 var RefNr: func: number | 2245 var RefNr: func: number |
2246 RefNr = g:FuncNoArgRetNumber | 2246 RefNr = g:FuncNoArgRetNumber |
2247 RefNr = FuncOneArgRetNumber | 2247 RefNr = g:FuncOneArgRetNumber |
2248 v9.CheckDefFailure(['var RefNr: func: number', 'RefNr = g:FuncNoArgNoRet'], 'E1012: Type mismatch; expected func(...): number but got func()') | 2248 v9.CheckDefFailure(['var RefNr: func: number', 'RefNr = g:FuncNoArgNoRet'], 'E1012: Type mismatch; expected func(...): number but got func()') |
2249 v9.CheckDefFailure(['var RefNr: func: number', 'RefNr = FuncNoArgRetString'], 'E1012: Type mismatch; expected func(...): number but got func(): string') | 2249 v9.CheckDefFailure(['var RefNr: func: number', 'RefNr = g:FuncNoArgRetString'], 'E1012: Type mismatch; expected func(...): number but got func(): string') |
2250 | 2250 |
2251 var RefStr: func: string | 2251 var RefStr: func: string |
2252 RefStr = FuncNoArgRetString | 2252 RefStr = g:FuncNoArgRetString |
2253 RefStr = FuncOneArgRetString | 2253 RefStr = FuncOneArgRetString |
2254 v9.CheckDefFailure(['var RefStr: func: string', 'RefStr = g:FuncNoArgNoRet'], 'E1012: Type mismatch; expected func(...): string but got func()') | 2254 v9.CheckDefFailure(['var RefStr: func: string', 'RefStr = g:FuncNoArgNoRet'], 'E1012: Type mismatch; expected func(...): string but got func()') |
2255 v9.CheckDefFailure(['var RefStr: func: string', 'RefStr = g:FuncNoArgRetNumber'], 'E1012: Type mismatch; expected func(...): string but got func(): number') | 2255 v9.CheckDefFailure(['var RefStr: func: string', 'RefStr = g:FuncNoArgRetNumber'], 'E1012: Type mismatch; expected func(...): string but got func(): number') |
2256 enddef | 2256 enddef |
2257 | 2257 |
2258 def Test_func_type_fails() | 2258 def Test_func_type_fails() |
2259 v9.CheckDefFailure(['var ref1: func()'], 'E704:') | 2259 v9.CheckDefFailure(['var ref1: func()'], 'E704:') |
2260 | 2260 |
2261 v9.CheckDefFailure(['var Ref1: func()', 'Ref1 = g:FuncNoArgRetNumber'], 'E1012: Type mismatch; expected func() but got func(): number') | 2261 v9.CheckDefFailure(['var Ref1: func()', 'Ref1 = g:FuncNoArgRetNumber'], 'E1012: Type mismatch; expected func() but got func(): number') |
2262 v9.CheckDefFailure(['var Ref1: func()', 'Ref1 = g:FuncOneArgNoRet'], 'E1012: Type mismatch; expected func() but got func(number)') | 2262 v9.CheckDefFailure(['var Ref1: func()', 'Ref1 = g:FuncOneArgNoRet'], 'E1012: Type mismatch; expected func() but got func(number)') |
2263 v9.CheckDefFailure(['var Ref1: func()', 'Ref1 = FuncOneArgRetNumber'], 'E1012: Type mismatch; expected func() but got func(number): number') | 2263 v9.CheckDefFailure(['var Ref1: func()', 'Ref1 = g:FuncOneArgRetNumber'], 'E1012: Type mismatch; expected func() but got func(number): number') |
2264 v9.CheckDefFailure(['var Ref1: func(bool)', 'Ref1 = g:FuncTwoArgNoRet'], 'E1012: Type mismatch; expected func(bool) but got func(bool, number)') | 2264 v9.CheckDefFailure(['var Ref1: func(bool)', 'Ref1 = g:FuncTwoArgNoRet'], 'E1012: Type mismatch; expected func(bool) but got func(bool, number)') |
2265 v9.CheckDefFailure(['var Ref1: func(?bool)', 'Ref1 = g:FuncTwoArgNoRet'], 'E1012: Type mismatch; expected func(?bool) but got func(bool, number)') | 2265 v9.CheckDefFailure(['var Ref1: func(?bool)', 'Ref1 = g:FuncTwoArgNoRet'], 'E1012: Type mismatch; expected func(?bool) but got func(bool, number)') |
2266 v9.CheckDefFailure(['var Ref1: func(...bool)', 'Ref1 = g:FuncTwoArgNoRet'], 'E1012: Type mismatch; expected func(...bool) but got func(bool, number)') | 2266 v9.CheckDefFailure(['var Ref1: func(...bool)', 'Ref1 = g:FuncTwoArgNoRet'], 'E1012: Type mismatch; expected func(...bool) but got func(bool, number)') |
2267 | 2267 |
2268 v9.CheckDefFailure(['var RefWrong: func(string ,number)'], 'E1068:') | 2268 v9.CheckDefFailure(['var RefWrong: func(string ,number)'], 'E1068:') |
3353 END | 3353 END |
3354 v9.CheckScriptSuccess(lines) | 3354 v9.CheckScriptSuccess(lines) |
3355 enddef | 3355 enddef |
3356 | 3356 |
3357 def Test_opfunc() | 3357 def Test_opfunc() |
3358 nnoremap <F3> <cmd>set opfunc=Opfunc<cr>g@ | 3358 nnoremap <F3> <cmd>set opfunc=g:Opfunc<cr>g@ |
3359 def g:Opfunc(_: any): string | 3359 def g:Opfunc(_: any): string |
3360 setline(1, 'ASDF') | 3360 setline(1, 'ASDF') |
3361 return '' | 3361 return '' |
3362 enddef | 3362 enddef |
3363 new | 3363 new |