comparison src/testdir/test_vim9_func.vim @ 22284:6b385c2b9ff5 v8.2.1691

patch 8.2.1691: Vim9: list<any> is not accepted where list<number> is expected Commit: https://github.com/vim/vim/commit/5e654230777ad21363a929dce3cfe0387da031a7 Author: Bram Moolenaar <Bram@vim.org> Date: Wed Sep 16 15:22:00 2020 +0200 patch 8.2.1691: Vim9: list<any> is not accepted where list<number> is expected Problem: Vim9: list<any> is not accepted where list<number> is expected. Solution: Add functions to allocate and free a type_T, use it in ISN_CHECKTYPE. (closes #6959)
author Bram Moolenaar <Bram@vim.org>
date Wed, 16 Sep 2020 15:30:07 +0200
parents e0a4d029cb87
children 3515f341e8ac
comparison
equal deleted inserted replaced
22283:84bd68382a9a 22284:6b385c2b9ff5
28 enddef 28 enddef
29 29
30 def Test_return_something() 30 def Test_return_something()
31 ReturnString()->assert_equal('string') 31 ReturnString()->assert_equal('string')
32 ReturnNumber()->assert_equal(123) 32 ReturnNumber()->assert_equal(123)
33 assert_fails('ReturnGlobal()', 'E1029: Expected number but got string', '', 1, 'ReturnGlobal') 33 assert_fails('ReturnGlobal()', 'E1012: Type mismatch; expected number but got string', '', 1, 'ReturnGlobal')
34 enddef 34 enddef
35 35
36 def Test_missing_return() 36 def Test_missing_return()
37 CheckDefFailure(['def Missing(): number', 37 CheckDefFailure(['def Missing(): number',
38 ' if g:cond', 38 ' if g:cond',
485 def UseNumber(nr: number) 485 def UseNumber(nr: number)
486 echo nr 486 echo nr
487 enddef 487 enddef
488 let Funcref: func(string) = function('UseNumber') 488 let Funcref: func(string) = function('UseNumber')
489 END 489 END
490 CheckScriptFailure(lines, 'E1012: type mismatch, expected func(string) but got func(number)') 490 CheckScriptFailure(lines, 'E1012: Type mismatch; expected func(string) but got func(number)')
491 491
492 lines =<< trim END 492 lines =<< trim END
493 vim9script 493 vim9script
494 def EchoNr(nr = 34) 494 def EchoNr(nr = 34)
495 g:echo = nr 495 g:echo = nr
974 974
975 def Test_func_type_part() 975 def Test_func_type_part()
976 let RefVoid: func: void 976 let RefVoid: func: void
977 RefVoid = FuncNoArgNoRet 977 RefVoid = FuncNoArgNoRet
978 RefVoid = FuncOneArgNoRet 978 RefVoid = FuncOneArgNoRet
979 CheckDefFailure(['let RefVoid: func: void', 'RefVoid = FuncNoArgRetNumber'], 'E1012: type mismatch, expected func() but got func(): number') 979 CheckDefFailure(['let RefVoid: func: void', 'RefVoid = FuncNoArgRetNumber'], 'E1012: Type mismatch; expected func(...) but got func(): number')
980 CheckDefFailure(['let RefVoid: func: void', 'RefVoid = FuncNoArgRetString'], 'E1012: type mismatch, expected func() but got func(): string') 980 CheckDefFailure(['let RefVoid: func: void', 'RefVoid = FuncNoArgRetString'], 'E1012: Type mismatch; expected func(...) but got func(): string')
981 981
982 let RefAny: func(): any 982 let RefAny: func(): any
983 RefAny = FuncNoArgRetNumber 983 RefAny = FuncNoArgRetNumber
984 RefAny = FuncNoArgRetString 984 RefAny = FuncNoArgRetString
985 CheckDefFailure(['let RefAny: func(): any', 'RefAny = FuncNoArgNoRet'], 'E1012: type mismatch, expected func(): any but got func()') 985 CheckDefFailure(['let RefAny: func(): any', 'RefAny = FuncNoArgNoRet'], 'E1012: Type mismatch; expected func(): any but got func()')
986 CheckDefFailure(['let RefAny: func(): any', 'RefAny = FuncOneArgNoRet'], 'E1012: type mismatch, expected func(): any but got func(number)') 986 CheckDefFailure(['let RefAny: func(): any', 'RefAny = FuncOneArgNoRet'], 'E1012: Type mismatch; expected func(): any but got func(number)')
987 987
988 let RefNr: func: number 988 let RefNr: func: number
989 RefNr = FuncNoArgRetNumber 989 RefNr = FuncNoArgRetNumber
990 RefNr = FuncOneArgRetNumber 990 RefNr = FuncOneArgRetNumber
991 CheckDefFailure(['let RefNr: func: number', 'RefNr = FuncNoArgNoRet'], 'E1012: type mismatch, expected func(): number but got func()') 991 CheckDefFailure(['let RefNr: func: number', 'RefNr = FuncNoArgNoRet'], 'E1012: Type mismatch; expected func(...): number but got func()')
992 CheckDefFailure(['let RefNr: func: number', 'RefNr = FuncNoArgRetString'], 'E1012: type mismatch, expected func(): number but got func(): string') 992 CheckDefFailure(['let RefNr: func: number', 'RefNr = FuncNoArgRetString'], 'E1012: Type mismatch; expected func(...): number but got func(): string')
993 993
994 let RefStr: func: string 994 let RefStr: func: string
995 RefStr = FuncNoArgRetString 995 RefStr = FuncNoArgRetString
996 RefStr = FuncOneArgRetString 996 RefStr = FuncOneArgRetString
997 CheckDefFailure(['let RefStr: func: string', 'RefStr = FuncNoArgNoRet'], 'E1012: type mismatch, expected func(): string but got func()') 997 CheckDefFailure(['let RefStr: func: string', 'RefStr = FuncNoArgNoRet'], 'E1012: Type mismatch; expected func(...): string but got func()')
998 CheckDefFailure(['let RefStr: func: string', 'RefStr = FuncNoArgRetNumber'], 'E1012: type mismatch, expected func(): string but got func(): number') 998 CheckDefFailure(['let RefStr: func: string', 'RefStr = FuncNoArgRetNumber'], 'E1012: Type mismatch; expected func(...): string but got func(): number')
999 enddef 999 enddef
1000 1000
1001 def Test_func_type_fails() 1001 def Test_func_type_fails()
1002 CheckDefFailure(['let ref1: func()'], 'E704:') 1002 CheckDefFailure(['let ref1: func()'], 'E704:')
1003 1003
1004 CheckDefFailure(['let Ref1: func()', 'Ref1 = FuncNoArgRetNumber'], 'E1012: type mismatch, expected func() but got func(): number') 1004 CheckDefFailure(['let Ref1: func()', 'Ref1 = FuncNoArgRetNumber'], 'E1012: Type mismatch; expected func() but got func(): number')
1005 CheckDefFailure(['let Ref1: func()', 'Ref1 = FuncOneArgNoRet'], 'E1012: type mismatch, expected func() but got func(number)') 1005 CheckDefFailure(['let Ref1: func()', 'Ref1 = FuncOneArgNoRet'], 'E1012: Type mismatch; expected func() but got func(number)')
1006 CheckDefFailure(['let Ref1: func()', 'Ref1 = FuncOneArgRetNumber'], 'E1012: type mismatch, expected func() but got func(number): number') 1006 CheckDefFailure(['let Ref1: func()', 'Ref1 = FuncOneArgRetNumber'], 'E1012: Type mismatch; expected func() but got func(number): number')
1007 CheckDefFailure(['let Ref1: func(bool)', 'Ref1 = FuncTwoArgNoRet'], 'E1012: type mismatch, expected func(bool) but got func(bool, number)') 1007 CheckDefFailure(['let Ref1: func(bool)', 'Ref1 = FuncTwoArgNoRet'], 'E1012: Type mismatch; expected func(bool) but got func(bool, number)')
1008 CheckDefFailure(['let Ref1: func(?bool)', 'Ref1 = FuncTwoArgNoRet'], 'E1012: type mismatch, expected func(?bool) but got func(bool, number)') 1008 CheckDefFailure(['let Ref1: func(?bool)', 'Ref1 = FuncTwoArgNoRet'], 'E1012: Type mismatch; expected func(?bool) but got func(bool, number)')
1009 CheckDefFailure(['let Ref1: func(...bool)', 'Ref1 = FuncTwoArgNoRet'], 'E1012: type mismatch, expected func(...bool) but got func(bool, number)') 1009 CheckDefFailure(['let Ref1: func(...bool)', 'Ref1 = FuncTwoArgNoRet'], 'E1012: Type mismatch; expected func(...bool) but got func(bool, number)')
1010 1010
1011 CheckDefFailure(['let RefWrong: func(string ,number)'], 'E1068:') 1011 CheckDefFailure(['let RefWrong: func(string ,number)'], 'E1068:')
1012 CheckDefFailure(['let RefWrong: func(string,number)'], 'E1069:') 1012 CheckDefFailure(['let RefWrong: func(string,number)'], 'E1069:')
1013 CheckDefFailure(['let RefWrong: func(bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool)'], 'E1005:') 1013 CheckDefFailure(['let RefWrong: func(bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool)'], 'E1005:')
1014 CheckDefFailure(['let RefWrong: func(bool):string'], 'E1069:') 1014 CheckDefFailure(['let RefWrong: func(bool):string'], 'E1069:')
1024 1024
1025 let str: string 1025 let str: string
1026 str = FuncOneArgRetAny('yes') 1026 str = FuncOneArgRetAny('yes')
1027 str->assert_equal('yes') 1027 str->assert_equal('yes')
1028 1028
1029 CheckDefFailure(['let str: string', 'str = FuncNoArgRetNumber()'], 'E1012: type mismatch, expected string but got number') 1029 CheckDefFailure(['let str: string', 'str = FuncNoArgRetNumber()'], 'E1012: Type mismatch; expected string but got number')
1030 enddef 1030 enddef
1031 1031
1032 def MultiLine( 1032 def MultiLine(
1033 arg1: string, 1033 arg1: string,
1034 arg2 = 1234, 1034 arg2 = 1234,
1202 1202
1203 def ReadRef(Ref: func(): list<string>): string 1203 def ReadRef(Ref: func(): list<string>): string
1204 return join(Ref(), ' ') 1204 return join(Ref(), ' ')
1205 enddef 1205 enddef
1206 1206
1207 def ExtendRef(Ref: func(string), add: string) 1207 def ExtendRef(Ref: func(string): list<string>, add: string)
1208 Ref(add) 1208 Ref(add)
1209 enddef 1209 enddef
1210 1210
1211 def Test_closure_two_indirect_refs() 1211 def Test_closure_two_indirect_refs()
1212 MakeTwoRefs() 1212 MakeTwoRefs()
1406 def Wrong_dict_key_type(items: list<number>): list<number> 1406 def Wrong_dict_key_type(items: list<number>): list<number>
1407 return filter(items, {_, val -> get({val: 1}, 'x')}) 1407 return filter(items, {_, val -> get({val: 1}, 'x')})
1408 enddef 1408 enddef
1409 1409
1410 def Test_wrong_dict_key_type() 1410 def Test_wrong_dict_key_type()
1411 assert_fails('Wrong_dict_key_type([1, 2, 3])', 'E1029:') 1411 assert_fails('Wrong_dict_key_type([1, 2, 3])', 'E1012:')
1412 enddef 1412 enddef
1413 1413
1414 def Line_continuation_in_def(dir: string = ''): string 1414 def Line_continuation_in_def(dir: string = ''): string
1415 let path: string = empty(dir) 1415 let path: string = empty(dir)
1416 \ ? 'empty' 1416 \ ? 'empty'
1420 1420
1421 def Test_line_continuation_in_def() 1421 def Test_line_continuation_in_def()
1422 Line_continuation_in_def('.')->assert_equal('full') 1422 Line_continuation_in_def('.')->assert_equal('full')
1423 enddef 1423 enddef
1424 1424
1425 def Line_continuation_in_lambda(): list<number> 1425 def Line_continuation_in_lambda(): list<string>
1426 let x = range(97, 100) 1426 let x = range(97, 100)
1427 ->map({_, v -> nr2char(v) 1427 ->map({_, v -> nr2char(v)
1428 ->toupper()}) 1428 ->toupper()})
1429 ->reverse() 1429 ->reverse()
1430 return x 1430 return x