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