Mercurial > vim
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 |