annotate src/testdir/test_vim9_func.vim @ 24208:7a21b2581dce v8.2.2645

patch 8.2.2645: using inline function is not properly tested Commit: https://github.com/vim/vim/commit/49f1e9ec3e7f4e1b3572367d02a83c2b6ebbed97 Author: Bram Moolenaar <Bram@vim.org> Date: Mon Mar 22 20:49:02 2021 +0100 patch 8.2.2645: using inline function is not properly tested Problem: Using inline function is not properly tested. Solution: Add test cases, esp. for errors. Minor code improvements.
author Bram Moolenaar <Bram@vim.org>
date Mon, 22 Mar 2021 21:00:03 +0100
parents a358fa462560
children 40e27d96e395
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1 " Test various aspects of the Vim9 script language.
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3 source check.vim
22155
de47cb7b41e6 patch 8.2.1627: Vim9: cannot pass "true" to submatch/term_gettty/term_start
Bram Moolenaar <Bram@vim.org>
parents: 22149
diff changeset
4 source term_util.vim
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
5 source view_util.vim
20279
49b50843e725 patch 8.2.0695: Vim9: cannot define a function inside a function
Bram Moolenaar <Bram@vim.org>
parents: 20275
diff changeset
6 source vim9.vim
21172
96ae8622cfb6 patch 8.2.1137: Vim9: modifiers not cleared after compiling function
Bram Moolenaar <Bram@vim.org>
parents: 21170
diff changeset
7 source screendump.vim
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
8
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
9 func Test_def_basic()
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
10 def SomeFunc(): string
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
11 return 'yes'
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
12 enddef
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
13 call SomeFunc()->assert_equal('yes')
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
14 endfunc
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
15
22586
622294200ccd patch 8.2.1841: Vim9: test for compilation error fails in normal build
Bram Moolenaar <Bram@vim.org>
parents: 22584
diff changeset
16 func Test_compiling_error()
622294200ccd patch 8.2.1841: Vim9: test for compilation error fails in normal build
Bram Moolenaar <Bram@vim.org>
parents: 22584
diff changeset
17 " use a terminal to see the whole error message
22584
c271498e03b2 patch 8.2.1840: Vim9: error message is not clear about compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22541
diff changeset
18 CheckRunVimInTerminal
c271498e03b2 patch 8.2.1840: Vim9: error message is not clear about compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22541
diff changeset
19
22586
622294200ccd patch 8.2.1841: Vim9: test for compilation error fails in normal build
Bram Moolenaar <Bram@vim.org>
parents: 22584
diff changeset
20 call TestCompilingError()
622294200ccd patch 8.2.1841: Vim9: test for compilation error fails in normal build
Bram Moolenaar <Bram@vim.org>
parents: 22584
diff changeset
21 endfunc
622294200ccd patch 8.2.1841: Vim9: test for compilation error fails in normal build
Bram Moolenaar <Bram@vim.org>
parents: 22584
diff changeset
22
622294200ccd patch 8.2.1841: Vim9: test for compilation error fails in normal build
Bram Moolenaar <Bram@vim.org>
parents: 22584
diff changeset
23 def TestCompilingError()
22584
c271498e03b2 patch 8.2.1840: Vim9: error message is not clear about compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22541
diff changeset
24 var lines =<< trim END
c271498e03b2 patch 8.2.1840: Vim9: error message is not clear about compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22541
diff changeset
25 vim9script
c271498e03b2 patch 8.2.1840: Vim9: error message is not clear about compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22541
diff changeset
26 def Fails()
c271498e03b2 patch 8.2.1840: Vim9: error message is not clear about compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22541
diff changeset
27 echo nothing
c271498e03b2 patch 8.2.1840: Vim9: error message is not clear about compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22541
diff changeset
28 enddef
c271498e03b2 patch 8.2.1840: Vim9: error message is not clear about compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22541
diff changeset
29 defcompile
c271498e03b2 patch 8.2.1840: Vim9: error message is not clear about compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22541
diff changeset
30 END
c271498e03b2 patch 8.2.1840: Vim9: error message is not clear about compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22541
diff changeset
31 call writefile(lines, 'XTest_compile_error')
c271498e03b2 patch 8.2.1840: Vim9: error message is not clear about compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22541
diff changeset
32 var buf = RunVimInTerminal('-S XTest_compile_error',
23072
4b398a229b0b patch 8.2.2082: Vim9: can still use the depricated #{} dict syntax
Bram Moolenaar <Bram@vim.org>
parents: 23009
diff changeset
33 {rows: 10, wait_for_ruler: 0})
23940
949238ccbd50 patch 8.2.2512: Vim9: compiling error test sometimes fails
Bram Moolenaar <Bram@vim.org>
parents: 23925
diff changeset
34 call WaitForAssert(() => assert_match('Error detected while compiling command line.*Fails.*Variable not found: nothing',
949238ccbd50 patch 8.2.2512: Vim9: compiling error test sometimes fails
Bram Moolenaar <Bram@vim.org>
parents: 23925
diff changeset
35 Term_getlines(buf, range(1, 9))))
22584
c271498e03b2 patch 8.2.1840: Vim9: error message is not clear about compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22541
diff changeset
36
c271498e03b2 patch 8.2.1840: Vim9: error message is not clear about compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22541
diff changeset
37 # clean up
c271498e03b2 patch 8.2.1840: Vim9: error message is not clear about compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22541
diff changeset
38 call StopVimInTerminal(buf)
c271498e03b2 patch 8.2.1840: Vim9: error message is not clear about compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22541
diff changeset
39 call delete('XTest_compile_error')
c271498e03b2 patch 8.2.1840: Vim9: error message is not clear about compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22541
diff changeset
40 enddef
c271498e03b2 patch 8.2.1840: Vim9: error message is not clear about compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22541
diff changeset
41
22908
54219df706b5 patch 8.2.2001: Vim9: :def function does not apply 'maxfuncdepth'
Bram Moolenaar <Bram@vim.org>
parents: 22816
diff changeset
42 def CallRecursive(n: number): number
54219df706b5 patch 8.2.2001: Vim9: :def function does not apply 'maxfuncdepth'
Bram Moolenaar <Bram@vim.org>
parents: 22816
diff changeset
43 return CallRecursive(n + 1)
54219df706b5 patch 8.2.2001: Vim9: :def function does not apply 'maxfuncdepth'
Bram Moolenaar <Bram@vim.org>
parents: 22816
diff changeset
44 enddef
54219df706b5 patch 8.2.2001: Vim9: :def function does not apply 'maxfuncdepth'
Bram Moolenaar <Bram@vim.org>
parents: 22816
diff changeset
45
54219df706b5 patch 8.2.2001: Vim9: :def function does not apply 'maxfuncdepth'
Bram Moolenaar <Bram@vim.org>
parents: 22816
diff changeset
46 def CallMapRecursive(l: list<number>): number
23428
5807e3958e38 patch 8.2.2257: Vim9: using -> for lambda is ambiguous
Bram Moolenaar <Bram@vim.org>
parents: 23426
diff changeset
47 return map(l, (_, v) => CallMapRecursive([v]))[0]
22908
54219df706b5 patch 8.2.2001: Vim9: :def function does not apply 'maxfuncdepth'
Bram Moolenaar <Bram@vim.org>
parents: 22816
diff changeset
48 enddef
54219df706b5 patch 8.2.2001: Vim9: :def function does not apply 'maxfuncdepth'
Bram Moolenaar <Bram@vim.org>
parents: 22816
diff changeset
49
54219df706b5 patch 8.2.2001: Vim9: :def function does not apply 'maxfuncdepth'
Bram Moolenaar <Bram@vim.org>
parents: 22816
diff changeset
50 def Test_funcdepth_error()
54219df706b5 patch 8.2.2001: Vim9: :def function does not apply 'maxfuncdepth'
Bram Moolenaar <Bram@vim.org>
parents: 22816
diff changeset
51 set maxfuncdepth=10
54219df706b5 patch 8.2.2001: Vim9: :def function does not apply 'maxfuncdepth'
Bram Moolenaar <Bram@vim.org>
parents: 22816
diff changeset
52
54219df706b5 patch 8.2.2001: Vim9: :def function does not apply 'maxfuncdepth'
Bram Moolenaar <Bram@vim.org>
parents: 22816
diff changeset
53 var caught = false
54219df706b5 patch 8.2.2001: Vim9: :def function does not apply 'maxfuncdepth'
Bram Moolenaar <Bram@vim.org>
parents: 22816
diff changeset
54 try
54219df706b5 patch 8.2.2001: Vim9: :def function does not apply 'maxfuncdepth'
Bram Moolenaar <Bram@vim.org>
parents: 22816
diff changeset
55 CallRecursive(1)
54219df706b5 patch 8.2.2001: Vim9: :def function does not apply 'maxfuncdepth'
Bram Moolenaar <Bram@vim.org>
parents: 22816
diff changeset
56 catch /E132:/
54219df706b5 patch 8.2.2001: Vim9: :def function does not apply 'maxfuncdepth'
Bram Moolenaar <Bram@vim.org>
parents: 22816
diff changeset
57 caught = true
54219df706b5 patch 8.2.2001: Vim9: :def function does not apply 'maxfuncdepth'
Bram Moolenaar <Bram@vim.org>
parents: 22816
diff changeset
58 endtry
54219df706b5 patch 8.2.2001: Vim9: :def function does not apply 'maxfuncdepth'
Bram Moolenaar <Bram@vim.org>
parents: 22816
diff changeset
59 assert_true(caught)
54219df706b5 patch 8.2.2001: Vim9: :def function does not apply 'maxfuncdepth'
Bram Moolenaar <Bram@vim.org>
parents: 22816
diff changeset
60
54219df706b5 patch 8.2.2001: Vim9: :def function does not apply 'maxfuncdepth'
Bram Moolenaar <Bram@vim.org>
parents: 22816
diff changeset
61 caught = false
54219df706b5 patch 8.2.2001: Vim9: :def function does not apply 'maxfuncdepth'
Bram Moolenaar <Bram@vim.org>
parents: 22816
diff changeset
62 try
54219df706b5 patch 8.2.2001: Vim9: :def function does not apply 'maxfuncdepth'
Bram Moolenaar <Bram@vim.org>
parents: 22816
diff changeset
63 CallMapRecursive([1])
54219df706b5 patch 8.2.2001: Vim9: :def function does not apply 'maxfuncdepth'
Bram Moolenaar <Bram@vim.org>
parents: 22816
diff changeset
64 catch /E132:/
54219df706b5 patch 8.2.2001: Vim9: :def function does not apply 'maxfuncdepth'
Bram Moolenaar <Bram@vim.org>
parents: 22816
diff changeset
65 caught = true
54219df706b5 patch 8.2.2001: Vim9: :def function does not apply 'maxfuncdepth'
Bram Moolenaar <Bram@vim.org>
parents: 22816
diff changeset
66 endtry
54219df706b5 patch 8.2.2001: Vim9: :def function does not apply 'maxfuncdepth'
Bram Moolenaar <Bram@vim.org>
parents: 22816
diff changeset
67 assert_true(caught)
54219df706b5 patch 8.2.2001: Vim9: :def function does not apply 'maxfuncdepth'
Bram Moolenaar <Bram@vim.org>
parents: 22816
diff changeset
68
54219df706b5 patch 8.2.2001: Vim9: :def function does not apply 'maxfuncdepth'
Bram Moolenaar <Bram@vim.org>
parents: 22816
diff changeset
69 set maxfuncdepth&
54219df706b5 patch 8.2.2001: Vim9: :def function does not apply 'maxfuncdepth'
Bram Moolenaar <Bram@vim.org>
parents: 22816
diff changeset
70 enddef
54219df706b5 patch 8.2.2001: Vim9: :def function does not apply 'maxfuncdepth'
Bram Moolenaar <Bram@vim.org>
parents: 22816
diff changeset
71
23442
f00d6ff51046 patch 8.2.2264: Vim9: no error for mismatched :endfunc or :enddef
Bram Moolenaar <Bram@vim.org>
parents: 23428
diff changeset
72 def Test_endfunc_enddef()
f00d6ff51046 patch 8.2.2264: Vim9: no error for mismatched :endfunc or :enddef
Bram Moolenaar <Bram@vim.org>
parents: 23428
diff changeset
73 var lines =<< trim END
f00d6ff51046 patch 8.2.2264: Vim9: no error for mismatched :endfunc or :enddef
Bram Moolenaar <Bram@vim.org>
parents: 23428
diff changeset
74 def Test()
f00d6ff51046 patch 8.2.2264: Vim9: no error for mismatched :endfunc or :enddef
Bram Moolenaar <Bram@vim.org>
parents: 23428
diff changeset
75 echo 'test'
f00d6ff51046 patch 8.2.2264: Vim9: no error for mismatched :endfunc or :enddef
Bram Moolenaar <Bram@vim.org>
parents: 23428
diff changeset
76 endfunc
f00d6ff51046 patch 8.2.2264: Vim9: no error for mismatched :endfunc or :enddef
Bram Moolenaar <Bram@vim.org>
parents: 23428
diff changeset
77 enddef
f00d6ff51046 patch 8.2.2264: Vim9: no error for mismatched :endfunc or :enddef
Bram Moolenaar <Bram@vim.org>
parents: 23428
diff changeset
78 END
f00d6ff51046 patch 8.2.2264: Vim9: no error for mismatched :endfunc or :enddef
Bram Moolenaar <Bram@vim.org>
parents: 23428
diff changeset
79 CheckScriptFailure(lines, 'E1151:', 3)
f00d6ff51046 patch 8.2.2264: Vim9: no error for mismatched :endfunc or :enddef
Bram Moolenaar <Bram@vim.org>
parents: 23428
diff changeset
80
f00d6ff51046 patch 8.2.2264: Vim9: no error for mismatched :endfunc or :enddef
Bram Moolenaar <Bram@vim.org>
parents: 23428
diff changeset
81 lines =<< trim END
f00d6ff51046 patch 8.2.2264: Vim9: no error for mismatched :endfunc or :enddef
Bram Moolenaar <Bram@vim.org>
parents: 23428
diff changeset
82 def Test()
f00d6ff51046 patch 8.2.2264: Vim9: no error for mismatched :endfunc or :enddef
Bram Moolenaar <Bram@vim.org>
parents: 23428
diff changeset
83 func Nested()
f00d6ff51046 patch 8.2.2264: Vim9: no error for mismatched :endfunc or :enddef
Bram Moolenaar <Bram@vim.org>
parents: 23428
diff changeset
84 echo 'test'
f00d6ff51046 patch 8.2.2264: Vim9: no error for mismatched :endfunc or :enddef
Bram Moolenaar <Bram@vim.org>
parents: 23428
diff changeset
85 enddef
f00d6ff51046 patch 8.2.2264: Vim9: no error for mismatched :endfunc or :enddef
Bram Moolenaar <Bram@vim.org>
parents: 23428
diff changeset
86 enddef
f00d6ff51046 patch 8.2.2264: Vim9: no error for mismatched :endfunc or :enddef
Bram Moolenaar <Bram@vim.org>
parents: 23428
diff changeset
87 END
f00d6ff51046 patch 8.2.2264: Vim9: no error for mismatched :endfunc or :enddef
Bram Moolenaar <Bram@vim.org>
parents: 23428
diff changeset
88 CheckScriptFailure(lines, 'E1152:', 4)
24208
7a21b2581dce patch 8.2.2645: using inline function is not properly tested
Bram Moolenaar <Bram@vim.org>
parents: 24156
diff changeset
89
7a21b2581dce patch 8.2.2645: using inline function is not properly tested
Bram Moolenaar <Bram@vim.org>
parents: 24156
diff changeset
90 lines =<< trim END
7a21b2581dce patch 8.2.2645: using inline function is not properly tested
Bram Moolenaar <Bram@vim.org>
parents: 24156
diff changeset
91 def Ok()
7a21b2581dce patch 8.2.2645: using inline function is not properly tested
Bram Moolenaar <Bram@vim.org>
parents: 24156
diff changeset
92 echo 'hello'
7a21b2581dce patch 8.2.2645: using inline function is not properly tested
Bram Moolenaar <Bram@vim.org>
parents: 24156
diff changeset
93 enddef | echo 'there'
7a21b2581dce patch 8.2.2645: using inline function is not properly tested
Bram Moolenaar <Bram@vim.org>
parents: 24156
diff changeset
94 def Bad()
7a21b2581dce patch 8.2.2645: using inline function is not properly tested
Bram Moolenaar <Bram@vim.org>
parents: 24156
diff changeset
95 echo 'hello'
7a21b2581dce patch 8.2.2645: using inline function is not properly tested
Bram Moolenaar <Bram@vim.org>
parents: 24156
diff changeset
96 enddef there
7a21b2581dce patch 8.2.2645: using inline function is not properly tested
Bram Moolenaar <Bram@vim.org>
parents: 24156
diff changeset
97 END
7a21b2581dce patch 8.2.2645: using inline function is not properly tested
Bram Moolenaar <Bram@vim.org>
parents: 24156
diff changeset
98 CheckScriptFailure(lines, 'E1173: Text found after enddef: there', 6)
23442
f00d6ff51046 patch 8.2.2264: Vim9: no error for mismatched :endfunc or :enddef
Bram Moolenaar <Bram@vim.org>
parents: 23428
diff changeset
99 enddef
f00d6ff51046 patch 8.2.2264: Vim9: no error for mismatched :endfunc or :enddef
Bram Moolenaar <Bram@vim.org>
parents: 23428
diff changeset
100
23444
7278e86c2f70 patch 8.2.2265: error message for missing endfunc/enddef is last line
Bram Moolenaar <Bram@vim.org>
parents: 23442
diff changeset
101 def Test_missing_endfunc_enddef()
7278e86c2f70 patch 8.2.2265: error message for missing endfunc/enddef is last line
Bram Moolenaar <Bram@vim.org>
parents: 23442
diff changeset
102 var lines =<< trim END
7278e86c2f70 patch 8.2.2265: error message for missing endfunc/enddef is last line
Bram Moolenaar <Bram@vim.org>
parents: 23442
diff changeset
103 vim9script
7278e86c2f70 patch 8.2.2265: error message for missing endfunc/enddef is last line
Bram Moolenaar <Bram@vim.org>
parents: 23442
diff changeset
104 def Test()
7278e86c2f70 patch 8.2.2265: error message for missing endfunc/enddef is last line
Bram Moolenaar <Bram@vim.org>
parents: 23442
diff changeset
105 echo 'test'
7278e86c2f70 patch 8.2.2265: error message for missing endfunc/enddef is last line
Bram Moolenaar <Bram@vim.org>
parents: 23442
diff changeset
106 endef
7278e86c2f70 patch 8.2.2265: error message for missing endfunc/enddef is last line
Bram Moolenaar <Bram@vim.org>
parents: 23442
diff changeset
107 END
7278e86c2f70 patch 8.2.2265: error message for missing endfunc/enddef is last line
Bram Moolenaar <Bram@vim.org>
parents: 23442
diff changeset
108 CheckScriptFailure(lines, 'E1057:', 2)
7278e86c2f70 patch 8.2.2265: error message for missing endfunc/enddef is last line
Bram Moolenaar <Bram@vim.org>
parents: 23442
diff changeset
109
7278e86c2f70 patch 8.2.2265: error message for missing endfunc/enddef is last line
Bram Moolenaar <Bram@vim.org>
parents: 23442
diff changeset
110 lines =<< trim END
7278e86c2f70 patch 8.2.2265: error message for missing endfunc/enddef is last line
Bram Moolenaar <Bram@vim.org>
parents: 23442
diff changeset
111 vim9script
7278e86c2f70 patch 8.2.2265: error message for missing endfunc/enddef is last line
Bram Moolenaar <Bram@vim.org>
parents: 23442
diff changeset
112 func Some()
7278e86c2f70 patch 8.2.2265: error message for missing endfunc/enddef is last line
Bram Moolenaar <Bram@vim.org>
parents: 23442
diff changeset
113 echo 'test'
7278e86c2f70 patch 8.2.2265: error message for missing endfunc/enddef is last line
Bram Moolenaar <Bram@vim.org>
parents: 23442
diff changeset
114 enfffunc
7278e86c2f70 patch 8.2.2265: error message for missing endfunc/enddef is last line
Bram Moolenaar <Bram@vim.org>
parents: 23442
diff changeset
115 END
7278e86c2f70 patch 8.2.2265: error message for missing endfunc/enddef is last line
Bram Moolenaar <Bram@vim.org>
parents: 23442
diff changeset
116 CheckScriptFailure(lines, 'E126:', 2)
7278e86c2f70 patch 8.2.2265: error message for missing endfunc/enddef is last line
Bram Moolenaar <Bram@vim.org>
parents: 23442
diff changeset
117 enddef
7278e86c2f70 patch 8.2.2265: error message for missing endfunc/enddef is last line
Bram Moolenaar <Bram@vim.org>
parents: 23442
diff changeset
118
23727
7d0959080545 patch 8.2.2405: Vim9: no need to allow white space before "(" for :def
Bram Moolenaar <Bram@vim.org>
parents: 23691
diff changeset
119 def Test_white_space_before_paren()
7d0959080545 patch 8.2.2405: Vim9: no need to allow white space before "(" for :def
Bram Moolenaar <Bram@vim.org>
parents: 23691
diff changeset
120 var lines =<< trim END
7d0959080545 patch 8.2.2405: Vim9: no need to allow white space before "(" for :def
Bram Moolenaar <Bram@vim.org>
parents: 23691
diff changeset
121 vim9script
7d0959080545 patch 8.2.2405: Vim9: no need to allow white space before "(" for :def
Bram Moolenaar <Bram@vim.org>
parents: 23691
diff changeset
122 def Test ()
7d0959080545 patch 8.2.2405: Vim9: no need to allow white space before "(" for :def
Bram Moolenaar <Bram@vim.org>
parents: 23691
diff changeset
123 echo 'test'
7d0959080545 patch 8.2.2405: Vim9: no need to allow white space before "(" for :def
Bram Moolenaar <Bram@vim.org>
parents: 23691
diff changeset
124 enddef
7d0959080545 patch 8.2.2405: Vim9: no need to allow white space before "(" for :def
Bram Moolenaar <Bram@vim.org>
parents: 23691
diff changeset
125 END
7d0959080545 patch 8.2.2405: Vim9: no need to allow white space before "(" for :def
Bram Moolenaar <Bram@vim.org>
parents: 23691
diff changeset
126 CheckScriptFailure(lines, 'E1068:', 2)
7d0959080545 patch 8.2.2405: Vim9: no need to allow white space before "(" for :def
Bram Moolenaar <Bram@vim.org>
parents: 23691
diff changeset
127
7d0959080545 patch 8.2.2405: Vim9: no need to allow white space before "(" for :def
Bram Moolenaar <Bram@vim.org>
parents: 23691
diff changeset
128 lines =<< trim END
7d0959080545 patch 8.2.2405: Vim9: no need to allow white space before "(" for :def
Bram Moolenaar <Bram@vim.org>
parents: 23691
diff changeset
129 vim9script
7d0959080545 patch 8.2.2405: Vim9: no need to allow white space before "(" for :def
Bram Moolenaar <Bram@vim.org>
parents: 23691
diff changeset
130 func Test ()
7d0959080545 patch 8.2.2405: Vim9: no need to allow white space before "(" for :def
Bram Moolenaar <Bram@vim.org>
parents: 23691
diff changeset
131 echo 'test'
7d0959080545 patch 8.2.2405: Vim9: no need to allow white space before "(" for :def
Bram Moolenaar <Bram@vim.org>
parents: 23691
diff changeset
132 endfunc
7d0959080545 patch 8.2.2405: Vim9: no need to allow white space before "(" for :def
Bram Moolenaar <Bram@vim.org>
parents: 23691
diff changeset
133 END
7d0959080545 patch 8.2.2405: Vim9: no need to allow white space before "(" for :def
Bram Moolenaar <Bram@vim.org>
parents: 23691
diff changeset
134 CheckScriptFailure(lines, 'E1068:', 2)
7d0959080545 patch 8.2.2405: Vim9: no need to allow white space before "(" for :def
Bram Moolenaar <Bram@vim.org>
parents: 23691
diff changeset
135
7d0959080545 patch 8.2.2405: Vim9: no need to allow white space before "(" for :def
Bram Moolenaar <Bram@vim.org>
parents: 23691
diff changeset
136 lines =<< trim END
7d0959080545 patch 8.2.2405: Vim9: no need to allow white space before "(" for :def
Bram Moolenaar <Bram@vim.org>
parents: 23691
diff changeset
137 def Test ()
7d0959080545 patch 8.2.2405: Vim9: no need to allow white space before "(" for :def
Bram Moolenaar <Bram@vim.org>
parents: 23691
diff changeset
138 echo 'test'
7d0959080545 patch 8.2.2405: Vim9: no need to allow white space before "(" for :def
Bram Moolenaar <Bram@vim.org>
parents: 23691
diff changeset
139 enddef
7d0959080545 patch 8.2.2405: Vim9: no need to allow white space before "(" for :def
Bram Moolenaar <Bram@vim.org>
parents: 23691
diff changeset
140 END
7d0959080545 patch 8.2.2405: Vim9: no need to allow white space before "(" for :def
Bram Moolenaar <Bram@vim.org>
parents: 23691
diff changeset
141 CheckScriptFailure(lines, 'E1068:', 1)
7d0959080545 patch 8.2.2405: Vim9: no need to allow white space before "(" for :def
Bram Moolenaar <Bram@vim.org>
parents: 23691
diff changeset
142
7d0959080545 patch 8.2.2405: Vim9: no need to allow white space before "(" for :def
Bram Moolenaar <Bram@vim.org>
parents: 23691
diff changeset
143 lines =<< trim END
7d0959080545 patch 8.2.2405: Vim9: no need to allow white space before "(" for :def
Bram Moolenaar <Bram@vim.org>
parents: 23691
diff changeset
144 func Test ()
7d0959080545 patch 8.2.2405: Vim9: no need to allow white space before "(" for :def
Bram Moolenaar <Bram@vim.org>
parents: 23691
diff changeset
145 echo 'test'
7d0959080545 patch 8.2.2405: Vim9: no need to allow white space before "(" for :def
Bram Moolenaar <Bram@vim.org>
parents: 23691
diff changeset
146 endfunc
7d0959080545 patch 8.2.2405: Vim9: no need to allow white space before "(" for :def
Bram Moolenaar <Bram@vim.org>
parents: 23691
diff changeset
147 END
7d0959080545 patch 8.2.2405: Vim9: no need to allow white space before "(" for :def
Bram Moolenaar <Bram@vim.org>
parents: 23691
diff changeset
148 CheckScriptSuccess(lines)
7d0959080545 patch 8.2.2405: Vim9: no need to allow white space before "(" for :def
Bram Moolenaar <Bram@vim.org>
parents: 23691
diff changeset
149 enddef
7d0959080545 patch 8.2.2405: Vim9: no need to allow white space before "(" for :def
Bram Moolenaar <Bram@vim.org>
parents: 23691
diff changeset
150
23545
987fb6e8a376 patch 8.2.2315: Vim9: "enddef" as dict key misintepreted as function end
Bram Moolenaar <Bram@vim.org>
parents: 23531
diff changeset
151 def Test_enddef_dict_key()
987fb6e8a376 patch 8.2.2315: Vim9: "enddef" as dict key misintepreted as function end
Bram Moolenaar <Bram@vim.org>
parents: 23531
diff changeset
152 var d = {
987fb6e8a376 patch 8.2.2315: Vim9: "enddef" as dict key misintepreted as function end
Bram Moolenaar <Bram@vim.org>
parents: 23531
diff changeset
153 enddef: 'x',
987fb6e8a376 patch 8.2.2315: Vim9: "enddef" as dict key misintepreted as function end
Bram Moolenaar <Bram@vim.org>
parents: 23531
diff changeset
154 endfunc: 'y',
987fb6e8a376 patch 8.2.2315: Vim9: "enddef" as dict key misintepreted as function end
Bram Moolenaar <Bram@vim.org>
parents: 23531
diff changeset
155 }
987fb6e8a376 patch 8.2.2315: Vim9: "enddef" as dict key misintepreted as function end
Bram Moolenaar <Bram@vim.org>
parents: 23531
diff changeset
156 assert_equal({enddef: 'x', endfunc: 'y'}, d)
987fb6e8a376 patch 8.2.2315: Vim9: "enddef" as dict key misintepreted as function end
Bram Moolenaar <Bram@vim.org>
parents: 23531
diff changeset
157 enddef
987fb6e8a376 patch 8.2.2315: Vim9: "enddef" as dict key misintepreted as function end
Bram Moolenaar <Bram@vim.org>
parents: 23531
diff changeset
158
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
159 def ReturnString(): string
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
160 return 'string'
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
161 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
162
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
163 def ReturnNumber(): number
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
164 return 123
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
165 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
166
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
167 let g:notNumber = 'string'
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
168
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
169 def ReturnGlobal(): number
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
170 return g:notNumber
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
171 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
172
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
173 def Test_return_something()
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
174 ReturnString()->assert_equal('string')
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
175 ReturnNumber()->assert_equal(123)
22284
6b385c2b9ff5 patch 8.2.1691: Vim9: list<any> is not accepted where list<number> is expected
Bram Moolenaar <Bram@vim.org>
parents: 22264
diff changeset
176 assert_fails('ReturnGlobal()', 'E1012: Type mismatch; expected number but got string', '', 1, 'ReturnGlobal')
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
177 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
178
23691
0d56d4f107d8 patch 8.2.2387: runtime type check does not mention argument index
Bram Moolenaar <Bram@vim.org>
parents: 23689
diff changeset
179 def Test_check_argument_type()
0d56d4f107d8 patch 8.2.2387: runtime type check does not mention argument index
Bram Moolenaar <Bram@vim.org>
parents: 23689
diff changeset
180 var lines =<< trim END
0d56d4f107d8 patch 8.2.2387: runtime type check does not mention argument index
Bram Moolenaar <Bram@vim.org>
parents: 23689
diff changeset
181 vim9script
0d56d4f107d8 patch 8.2.2387: runtime type check does not mention argument index
Bram Moolenaar <Bram@vim.org>
parents: 23689
diff changeset
182 def Val(a: number, b: number): number
0d56d4f107d8 patch 8.2.2387: runtime type check does not mention argument index
Bram Moolenaar <Bram@vim.org>
parents: 23689
diff changeset
183 return 0
0d56d4f107d8 patch 8.2.2387: runtime type check does not mention argument index
Bram Moolenaar <Bram@vim.org>
parents: 23689
diff changeset
184 enddef
0d56d4f107d8 patch 8.2.2387: runtime type check does not mention argument index
Bram Moolenaar <Bram@vim.org>
parents: 23689
diff changeset
185 def Func()
0d56d4f107d8 patch 8.2.2387: runtime type check does not mention argument index
Bram Moolenaar <Bram@vim.org>
parents: 23689
diff changeset
186 var x: any = true
0d56d4f107d8 patch 8.2.2387: runtime type check does not mention argument index
Bram Moolenaar <Bram@vim.org>
parents: 23689
diff changeset
187 Val(0, x)
0d56d4f107d8 patch 8.2.2387: runtime type check does not mention argument index
Bram Moolenaar <Bram@vim.org>
parents: 23689
diff changeset
188 enddef
0d56d4f107d8 patch 8.2.2387: runtime type check does not mention argument index
Bram Moolenaar <Bram@vim.org>
parents: 23689
diff changeset
189 disass Func
0d56d4f107d8 patch 8.2.2387: runtime type check does not mention argument index
Bram Moolenaar <Bram@vim.org>
parents: 23689
diff changeset
190 Func()
0d56d4f107d8 patch 8.2.2387: runtime type check does not mention argument index
Bram Moolenaar <Bram@vim.org>
parents: 23689
diff changeset
191 END
0d56d4f107d8 patch 8.2.2387: runtime type check does not mention argument index
Bram Moolenaar <Bram@vim.org>
parents: 23689
diff changeset
192 CheckScriptFailure(lines, 'E1013: Argument 2: type mismatch, expected number but got bool', 2)
0d56d4f107d8 patch 8.2.2387: runtime type check does not mention argument index
Bram Moolenaar <Bram@vim.org>
parents: 23689
diff changeset
193 enddef
0d56d4f107d8 patch 8.2.2387: runtime type check does not mention argument index
Bram Moolenaar <Bram@vim.org>
parents: 23689
diff changeset
194
20909
0d7465881b06 patch 8.2.1006: Vim9: require unnecessary return statement
Bram Moolenaar <Bram@vim.org>
parents: 20903
diff changeset
195 def Test_missing_return()
0d7465881b06 patch 8.2.1006: Vim9: require unnecessary return statement
Bram Moolenaar <Bram@vim.org>
parents: 20903
diff changeset
196 CheckDefFailure(['def Missing(): number',
0d7465881b06 patch 8.2.1006: Vim9: require unnecessary return statement
Bram Moolenaar <Bram@vim.org>
parents: 20903
diff changeset
197 ' if g:cond',
0d7465881b06 patch 8.2.1006: Vim9: require unnecessary return statement
Bram Moolenaar <Bram@vim.org>
parents: 20903
diff changeset
198 ' echo "no return"',
0d7465881b06 patch 8.2.1006: Vim9: require unnecessary return statement
Bram Moolenaar <Bram@vim.org>
parents: 20903
diff changeset
199 ' else',
0d7465881b06 patch 8.2.1006: Vim9: require unnecessary return statement
Bram Moolenaar <Bram@vim.org>
parents: 20903
diff changeset
200 ' return 0',
0d7465881b06 patch 8.2.1006: Vim9: require unnecessary return statement
Bram Moolenaar <Bram@vim.org>
parents: 20903
diff changeset
201 ' endif'
0d7465881b06 patch 8.2.1006: Vim9: require unnecessary return statement
Bram Moolenaar <Bram@vim.org>
parents: 20903
diff changeset
202 'enddef'], 'E1027:')
0d7465881b06 patch 8.2.1006: Vim9: require unnecessary return statement
Bram Moolenaar <Bram@vim.org>
parents: 20903
diff changeset
203 CheckDefFailure(['def Missing(): number',
0d7465881b06 patch 8.2.1006: Vim9: require unnecessary return statement
Bram Moolenaar <Bram@vim.org>
parents: 20903
diff changeset
204 ' if g:cond',
0d7465881b06 patch 8.2.1006: Vim9: require unnecessary return statement
Bram Moolenaar <Bram@vim.org>
parents: 20903
diff changeset
205 ' return 1',
0d7465881b06 patch 8.2.1006: Vim9: require unnecessary return statement
Bram Moolenaar <Bram@vim.org>
parents: 20903
diff changeset
206 ' else',
0d7465881b06 patch 8.2.1006: Vim9: require unnecessary return statement
Bram Moolenaar <Bram@vim.org>
parents: 20903
diff changeset
207 ' echo "no return"',
0d7465881b06 patch 8.2.1006: Vim9: require unnecessary return statement
Bram Moolenaar <Bram@vim.org>
parents: 20903
diff changeset
208 ' endif'
0d7465881b06 patch 8.2.1006: Vim9: require unnecessary return statement
Bram Moolenaar <Bram@vim.org>
parents: 20903
diff changeset
209 'enddef'], 'E1027:')
0d7465881b06 patch 8.2.1006: Vim9: require unnecessary return statement
Bram Moolenaar <Bram@vim.org>
parents: 20903
diff changeset
210 CheckDefFailure(['def Missing(): number',
0d7465881b06 patch 8.2.1006: Vim9: require unnecessary return statement
Bram Moolenaar <Bram@vim.org>
parents: 20903
diff changeset
211 ' if g:cond',
0d7465881b06 patch 8.2.1006: Vim9: require unnecessary return statement
Bram Moolenaar <Bram@vim.org>
parents: 20903
diff changeset
212 ' return 1',
0d7465881b06 patch 8.2.1006: Vim9: require unnecessary return statement
Bram Moolenaar <Bram@vim.org>
parents: 20903
diff changeset
213 ' else',
0d7465881b06 patch 8.2.1006: Vim9: require unnecessary return statement
Bram Moolenaar <Bram@vim.org>
parents: 20903
diff changeset
214 ' return 2',
0d7465881b06 patch 8.2.1006: Vim9: require unnecessary return statement
Bram Moolenaar <Bram@vim.org>
parents: 20903
diff changeset
215 ' endif'
0d7465881b06 patch 8.2.1006: Vim9: require unnecessary return statement
Bram Moolenaar <Bram@vim.org>
parents: 20903
diff changeset
216 ' return 3'
0d7465881b06 patch 8.2.1006: Vim9: require unnecessary return statement
Bram Moolenaar <Bram@vim.org>
parents: 20903
diff changeset
217 'enddef'], 'E1095:')
0d7465881b06 patch 8.2.1006: Vim9: require unnecessary return statement
Bram Moolenaar <Bram@vim.org>
parents: 20903
diff changeset
218 enddef
0d7465881b06 patch 8.2.1006: Vim9: require unnecessary return statement
Bram Moolenaar <Bram@vim.org>
parents: 20903
diff changeset
219
22620
b5d68d8a5187 patch 8.2.1858: Vim9: filter functions return number instead of bool
Bram Moolenaar <Bram@vim.org>
parents: 22586
diff changeset
220 def Test_return_bool()
b5d68d8a5187 patch 8.2.1858: Vim9: filter functions return number instead of bool
Bram Moolenaar <Bram@vim.org>
parents: 22586
diff changeset
221 var lines =<< trim END
b5d68d8a5187 patch 8.2.1858: Vim9: filter functions return number instead of bool
Bram Moolenaar <Bram@vim.org>
parents: 22586
diff changeset
222 vim9script
b5d68d8a5187 patch 8.2.1858: Vim9: filter functions return number instead of bool
Bram Moolenaar <Bram@vim.org>
parents: 22586
diff changeset
223 def MenuFilter(id: number, key: string): bool
b5d68d8a5187 patch 8.2.1858: Vim9: filter functions return number instead of bool
Bram Moolenaar <Bram@vim.org>
parents: 22586
diff changeset
224 return popup_filter_menu(id, key)
b5d68d8a5187 patch 8.2.1858: Vim9: filter functions return number instead of bool
Bram Moolenaar <Bram@vim.org>
parents: 22586
diff changeset
225 enddef
b5d68d8a5187 patch 8.2.1858: Vim9: filter functions return number instead of bool
Bram Moolenaar <Bram@vim.org>
parents: 22586
diff changeset
226 def YesnoFilter(id: number, key: string): bool
b5d68d8a5187 patch 8.2.1858: Vim9: filter functions return number instead of bool
Bram Moolenaar <Bram@vim.org>
parents: 22586
diff changeset
227 return popup_filter_yesno(id, key)
b5d68d8a5187 patch 8.2.1858: Vim9: filter functions return number instead of bool
Bram Moolenaar <Bram@vim.org>
parents: 22586
diff changeset
228 enddef
b5d68d8a5187 patch 8.2.1858: Vim9: filter functions return number instead of bool
Bram Moolenaar <Bram@vim.org>
parents: 22586
diff changeset
229 defcompile
b5d68d8a5187 patch 8.2.1858: Vim9: filter functions return number instead of bool
Bram Moolenaar <Bram@vim.org>
parents: 22586
diff changeset
230 END
b5d68d8a5187 patch 8.2.1858: Vim9: filter functions return number instead of bool
Bram Moolenaar <Bram@vim.org>
parents: 22586
diff changeset
231 CheckScriptSuccess(lines)
b5d68d8a5187 patch 8.2.1858: Vim9: filter functions return number instead of bool
Bram Moolenaar <Bram@vim.org>
parents: 22586
diff changeset
232 enddef
b5d68d8a5187 patch 8.2.1858: Vim9: filter functions return number instead of bool
Bram Moolenaar <Bram@vim.org>
parents: 22586
diff changeset
233
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
234 let s:nothing = 0
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
235 def ReturnNothing()
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
236 s:nothing = 1
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
237 if true
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
238 return
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
239 endif
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
240 s:nothing = 2
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
241 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
242
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
243 def Test_return_nothing()
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
244 ReturnNothing()
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
245 s:nothing->assert_equal(1)
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
246 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
247
23630
ca98d85e92da patch 8.2.2357: Vim9: crash when parsing function return type fails
Bram Moolenaar <Bram@vim.org>
parents: 23565
diff changeset
248 def Test_return_invalid()
ca98d85e92da patch 8.2.2357: Vim9: crash when parsing function return type fails
Bram Moolenaar <Bram@vim.org>
parents: 23565
diff changeset
249 var lines =<< trim END
ca98d85e92da patch 8.2.2357: Vim9: crash when parsing function return type fails
Bram Moolenaar <Bram@vim.org>
parents: 23565
diff changeset
250 vim9script
ca98d85e92da patch 8.2.2357: Vim9: crash when parsing function return type fails
Bram Moolenaar <Bram@vim.org>
parents: 23565
diff changeset
251 def Func(): invalid
ca98d85e92da patch 8.2.2357: Vim9: crash when parsing function return type fails
Bram Moolenaar <Bram@vim.org>
parents: 23565
diff changeset
252 return xxx
ca98d85e92da patch 8.2.2357: Vim9: crash when parsing function return type fails
Bram Moolenaar <Bram@vim.org>
parents: 23565
diff changeset
253 enddef
ca98d85e92da patch 8.2.2357: Vim9: crash when parsing function return type fails
Bram Moolenaar <Bram@vim.org>
parents: 23565
diff changeset
254 defcompile
ca98d85e92da patch 8.2.2357: Vim9: crash when parsing function return type fails
Bram Moolenaar <Bram@vim.org>
parents: 23565
diff changeset
255 END
ca98d85e92da patch 8.2.2357: Vim9: crash when parsing function return type fails
Bram Moolenaar <Bram@vim.org>
parents: 23565
diff changeset
256 CheckScriptFailure(lines, 'E1010:', 2)
23925
e979bf909fd8 patch 8.2.2505: Vim9: crash after defining function with invalid return type
Bram Moolenaar <Bram@vim.org>
parents: 23923
diff changeset
257
e979bf909fd8 patch 8.2.2505: Vim9: crash after defining function with invalid return type
Bram Moolenaar <Bram@vim.org>
parents: 23923
diff changeset
258 lines =<< trim END
e979bf909fd8 patch 8.2.2505: Vim9: crash after defining function with invalid return type
Bram Moolenaar <Bram@vim.org>
parents: 23923
diff changeset
259 vim9script
e979bf909fd8 patch 8.2.2505: Vim9: crash after defining function with invalid return type
Bram Moolenaar <Bram@vim.org>
parents: 23923
diff changeset
260 def Test(Fun: func(number): number): list<number>
e979bf909fd8 patch 8.2.2505: Vim9: crash after defining function with invalid return type
Bram Moolenaar <Bram@vim.org>
parents: 23923
diff changeset
261 return map([1, 2, 3], (_, i) => Fun(i))
e979bf909fd8 patch 8.2.2505: Vim9: crash after defining function with invalid return type
Bram Moolenaar <Bram@vim.org>
parents: 23923
diff changeset
262 enddef
e979bf909fd8 patch 8.2.2505: Vim9: crash after defining function with invalid return type
Bram Moolenaar <Bram@vim.org>
parents: 23923
diff changeset
263 defcompile
e979bf909fd8 patch 8.2.2505: Vim9: crash after defining function with invalid return type
Bram Moolenaar <Bram@vim.org>
parents: 23923
diff changeset
264 def Inc(nr: number): nr
e979bf909fd8 patch 8.2.2505: Vim9: crash after defining function with invalid return type
Bram Moolenaar <Bram@vim.org>
parents: 23923
diff changeset
265 return nr + 2
e979bf909fd8 patch 8.2.2505: Vim9: crash after defining function with invalid return type
Bram Moolenaar <Bram@vim.org>
parents: 23923
diff changeset
266 enddef
e979bf909fd8 patch 8.2.2505: Vim9: crash after defining function with invalid return type
Bram Moolenaar <Bram@vim.org>
parents: 23923
diff changeset
267 echo Test(Inc)
e979bf909fd8 patch 8.2.2505: Vim9: crash after defining function with invalid return type
Bram Moolenaar <Bram@vim.org>
parents: 23923
diff changeset
268 END
e979bf909fd8 patch 8.2.2505: Vim9: crash after defining function with invalid return type
Bram Moolenaar <Bram@vim.org>
parents: 23923
diff changeset
269 # doing this twice was leaking memory
e979bf909fd8 patch 8.2.2505: Vim9: crash after defining function with invalid return type
Bram Moolenaar <Bram@vim.org>
parents: 23923
diff changeset
270 CheckScriptFailure(lines, 'E1010:')
e979bf909fd8 patch 8.2.2505: Vim9: crash after defining function with invalid return type
Bram Moolenaar <Bram@vim.org>
parents: 23923
diff changeset
271 CheckScriptFailure(lines, 'E1010:')
23630
ca98d85e92da patch 8.2.2357: Vim9: crash when parsing function return type fails
Bram Moolenaar <Bram@vim.org>
parents: 23565
diff changeset
272 enddef
ca98d85e92da patch 8.2.2357: Vim9: crash when parsing function return type fails
Bram Moolenaar <Bram@vim.org>
parents: 23565
diff changeset
273
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
274 func Increment()
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
275 let g:counter += 1
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
276 endfunc
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
277
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
278 def Test_call_ufunc_count()
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
279 g:counter = 1
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
280 Increment()
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
281 Increment()
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
282 Increment()
21353
fb8c8fcb7b60 patch 8.2.1227: Vim9: allowing both quoted and # comments is confusing
Bram Moolenaar <Bram@vim.org>
parents: 21347
diff changeset
283 # works with and without :call
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
284 g:counter->assert_equal(4)
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
285 eval g:counter->assert_equal(4)
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
286 unlet g:counter
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
287 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
288
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
289 def MyVarargs(arg: string, ...rest: list<string>): string
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
290 var res = arg
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
291 for s in rest
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
292 res ..= ',' .. s
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
293 endfor
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
294 return res
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
295 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
296
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
297 def Test_call_varargs()
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
298 MyVarargs('one')->assert_equal('one')
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
299 MyVarargs('one', 'two')->assert_equal('one,two')
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
300 MyVarargs('one', 'two', 'three')->assert_equal('one,two,three')
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
301 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
302
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
303 def MyDefaultArgs(name = 'string'): string
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
304 return name
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
305 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
306
21345
5dd4cbc1e9e6 patch 8.2.1223: Vim9: invalid type error for function default value
Bram Moolenaar <Bram@vim.org>
parents: 21335
diff changeset
307 def MyDefaultSecond(name: string, second: bool = true): string
5dd4cbc1e9e6 patch 8.2.1223: Vim9: invalid type error for function default value
Bram Moolenaar <Bram@vim.org>
parents: 21335
diff changeset
308 return second ? name : 'none'
5dd4cbc1e9e6 patch 8.2.1223: Vim9: invalid type error for function default value
Bram Moolenaar <Bram@vim.org>
parents: 21335
diff changeset
309 enddef
5dd4cbc1e9e6 patch 8.2.1223: Vim9: invalid type error for function default value
Bram Moolenaar <Bram@vim.org>
parents: 21335
diff changeset
310
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
311 def Test_call_default_args()
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
312 MyDefaultArgs()->assert_equal('string')
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
313 MyDefaultArgs('one')->assert_equal('one')
22163
b6d36f0b4f03 patch 8.2.1631: test_fails() does not check the context of the line number
Bram Moolenaar <Bram@vim.org>
parents: 22159
diff changeset
314 assert_fails('MyDefaultArgs("one", "two")', 'E118:', '', 3, 'Test_call_default_args')
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
315
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
316 MyDefaultSecond('test')->assert_equal('test')
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
317 MyDefaultSecond('test', true)->assert_equal('test')
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
318 MyDefaultSecond('test', false)->assert_equal('none')
21345
5dd4cbc1e9e6 patch 8.2.1223: Vim9: invalid type error for function default value
Bram Moolenaar <Bram@vim.org>
parents: 21335
diff changeset
319
20528
489cb75c76b6 patch 8.2.0818: Vim9: using a discovery phase doesn't work well
Bram Moolenaar <Bram@vim.org>
parents: 20433
diff changeset
320 CheckScriptFailure(['def Func(arg: number = asdf)', 'enddef', 'defcompile'], 'E1001:')
23092
c713358da074 patch 8.2.2092: Vim9: unpredictable errors for script tests
Bram Moolenaar <Bram@vim.org>
parents: 23074
diff changeset
321 delfunc g:Func
22296
006b8ab9d554 patch 8.2.1697: inconsistent capitalization of error messages
Bram Moolenaar <Bram@vim.org>
parents: 22292
diff changeset
322 CheckScriptFailure(['def Func(arg: number = "text")', 'enddef', 'defcompile'], 'E1013: Argument 1: type mismatch, expected number but got string')
23092
c713358da074 patch 8.2.2092: Vim9: unpredictable errors for script tests
Bram Moolenaar <Bram@vim.org>
parents: 23074
diff changeset
323 delfunc g:Func
24097
26d3c1539bcc patch 8.2.2590: Vim9: default argument value may cause internal error
Bram Moolenaar <Bram@vim.org>
parents: 24069
diff changeset
324
26d3c1539bcc patch 8.2.2590: Vim9: default argument value may cause internal error
Bram Moolenaar <Bram@vim.org>
parents: 24069
diff changeset
325 var lines =<< trim END
26d3c1539bcc patch 8.2.2590: Vim9: default argument value may cause internal error
Bram Moolenaar <Bram@vim.org>
parents: 24069
diff changeset
326 vim9script
26d3c1539bcc patch 8.2.2590: Vim9: default argument value may cause internal error
Bram Moolenaar <Bram@vim.org>
parents: 24069
diff changeset
327 def Func(a = b == 0 ? 1 : 2, b = 0)
26d3c1539bcc patch 8.2.2590: Vim9: default argument value may cause internal error
Bram Moolenaar <Bram@vim.org>
parents: 24069
diff changeset
328 enddef
26d3c1539bcc patch 8.2.2590: Vim9: default argument value may cause internal error
Bram Moolenaar <Bram@vim.org>
parents: 24069
diff changeset
329 defcompile
26d3c1539bcc patch 8.2.2590: Vim9: default argument value may cause internal error
Bram Moolenaar <Bram@vim.org>
parents: 24069
diff changeset
330 END
26d3c1539bcc patch 8.2.2590: Vim9: default argument value may cause internal error
Bram Moolenaar <Bram@vim.org>
parents: 24069
diff changeset
331 CheckScriptFailure(lines, 'E1001: Variable not found: b')
20279
49b50843e725 patch 8.2.0695: Vim9: cannot define a function inside a function
Bram Moolenaar <Bram@vim.org>
parents: 20275
diff changeset
332 enddef
49b50843e725 patch 8.2.0695: Vim9: cannot define a function inside a function
Bram Moolenaar <Bram@vim.org>
parents: 20275
diff changeset
333
23511
7e8703464f01 patch 8.2.2298: Vim9: comment right after "(" of function not recognized
Bram Moolenaar <Bram@vim.org>
parents: 23481
diff changeset
334 def FuncWithComment( # comment
7e8703464f01 patch 8.2.2298: Vim9: comment right after "(" of function not recognized
Bram Moolenaar <Bram@vim.org>
parents: 23481
diff changeset
335 a: number, #comment
7e8703464f01 patch 8.2.2298: Vim9: comment right after "(" of function not recognized
Bram Moolenaar <Bram@vim.org>
parents: 23481
diff changeset
336 b: bool, # comment
7e8703464f01 patch 8.2.2298: Vim9: comment right after "(" of function not recognized
Bram Moolenaar <Bram@vim.org>
parents: 23481
diff changeset
337 c: string) #comment
7e8703464f01 patch 8.2.2298: Vim9: comment right after "(" of function not recognized
Bram Moolenaar <Bram@vim.org>
parents: 23481
diff changeset
338 assert_equal(4, a)
7e8703464f01 patch 8.2.2298: Vim9: comment right after "(" of function not recognized
Bram Moolenaar <Bram@vim.org>
parents: 23481
diff changeset
339 assert_equal(true, b)
7e8703464f01 patch 8.2.2298: Vim9: comment right after "(" of function not recognized
Bram Moolenaar <Bram@vim.org>
parents: 23481
diff changeset
340 assert_equal('yes', c)
7e8703464f01 patch 8.2.2298: Vim9: comment right after "(" of function not recognized
Bram Moolenaar <Bram@vim.org>
parents: 23481
diff changeset
341 enddef
7e8703464f01 patch 8.2.2298: Vim9: comment right after "(" of function not recognized
Bram Moolenaar <Bram@vim.org>
parents: 23481
diff changeset
342
7e8703464f01 patch 8.2.2298: Vim9: comment right after "(" of function not recognized
Bram Moolenaar <Bram@vim.org>
parents: 23481
diff changeset
343 def Test_func_with_comments()
7e8703464f01 patch 8.2.2298: Vim9: comment right after "(" of function not recognized
Bram Moolenaar <Bram@vim.org>
parents: 23481
diff changeset
344 FuncWithComment(4, true, 'yes')
7e8703464f01 patch 8.2.2298: Vim9: comment right after "(" of function not recognized
Bram Moolenaar <Bram@vim.org>
parents: 23481
diff changeset
345
7e8703464f01 patch 8.2.2298: Vim9: comment right after "(" of function not recognized
Bram Moolenaar <Bram@vim.org>
parents: 23481
diff changeset
346 var lines =<< trim END
7e8703464f01 patch 8.2.2298: Vim9: comment right after "(" of function not recognized
Bram Moolenaar <Bram@vim.org>
parents: 23481
diff changeset
347 def Func(# comment
7e8703464f01 patch 8.2.2298: Vim9: comment right after "(" of function not recognized
Bram Moolenaar <Bram@vim.org>
parents: 23481
diff changeset
348 arg: string)
7e8703464f01 patch 8.2.2298: Vim9: comment right after "(" of function not recognized
Bram Moolenaar <Bram@vim.org>
parents: 23481
diff changeset
349 enddef
7e8703464f01 patch 8.2.2298: Vim9: comment right after "(" of function not recognized
Bram Moolenaar <Bram@vim.org>
parents: 23481
diff changeset
350 END
7e8703464f01 patch 8.2.2298: Vim9: comment right after "(" of function not recognized
Bram Moolenaar <Bram@vim.org>
parents: 23481
diff changeset
351 CheckScriptFailure(lines, 'E125:', 1)
7e8703464f01 patch 8.2.2298: Vim9: comment right after "(" of function not recognized
Bram Moolenaar <Bram@vim.org>
parents: 23481
diff changeset
352
7e8703464f01 patch 8.2.2298: Vim9: comment right after "(" of function not recognized
Bram Moolenaar <Bram@vim.org>
parents: 23481
diff changeset
353 lines =<< trim END
7e8703464f01 patch 8.2.2298: Vim9: comment right after "(" of function not recognized
Bram Moolenaar <Bram@vim.org>
parents: 23481
diff changeset
354 def Func(
7e8703464f01 patch 8.2.2298: Vim9: comment right after "(" of function not recognized
Bram Moolenaar <Bram@vim.org>
parents: 23481
diff changeset
355 arg: string# comment
7e8703464f01 patch 8.2.2298: Vim9: comment right after "(" of function not recognized
Bram Moolenaar <Bram@vim.org>
parents: 23481
diff changeset
356 )
7e8703464f01 patch 8.2.2298: Vim9: comment right after "(" of function not recognized
Bram Moolenaar <Bram@vim.org>
parents: 23481
diff changeset
357 enddef
7e8703464f01 patch 8.2.2298: Vim9: comment right after "(" of function not recognized
Bram Moolenaar <Bram@vim.org>
parents: 23481
diff changeset
358 END
7e8703464f01 patch 8.2.2298: Vim9: comment right after "(" of function not recognized
Bram Moolenaar <Bram@vim.org>
parents: 23481
diff changeset
359 CheckScriptFailure(lines, 'E475:', 2)
7e8703464f01 patch 8.2.2298: Vim9: comment right after "(" of function not recognized
Bram Moolenaar <Bram@vim.org>
parents: 23481
diff changeset
360
7e8703464f01 patch 8.2.2298: Vim9: comment right after "(" of function not recognized
Bram Moolenaar <Bram@vim.org>
parents: 23481
diff changeset
361 lines =<< trim END
7e8703464f01 patch 8.2.2298: Vim9: comment right after "(" of function not recognized
Bram Moolenaar <Bram@vim.org>
parents: 23481
diff changeset
362 def Func(
7e8703464f01 patch 8.2.2298: Vim9: comment right after "(" of function not recognized
Bram Moolenaar <Bram@vim.org>
parents: 23481
diff changeset
363 arg: string
7e8703464f01 patch 8.2.2298: Vim9: comment right after "(" of function not recognized
Bram Moolenaar <Bram@vim.org>
parents: 23481
diff changeset
364 )# comment
7e8703464f01 patch 8.2.2298: Vim9: comment right after "(" of function not recognized
Bram Moolenaar <Bram@vim.org>
parents: 23481
diff changeset
365 enddef
7e8703464f01 patch 8.2.2298: Vim9: comment right after "(" of function not recognized
Bram Moolenaar <Bram@vim.org>
parents: 23481
diff changeset
366 END
7e8703464f01 patch 8.2.2298: Vim9: comment right after "(" of function not recognized
Bram Moolenaar <Bram@vim.org>
parents: 23481
diff changeset
367 CheckScriptFailure(lines, 'E488:', 3)
7e8703464f01 patch 8.2.2298: Vim9: comment right after "(" of function not recognized
Bram Moolenaar <Bram@vim.org>
parents: 23481
diff changeset
368 enddef
7e8703464f01 patch 8.2.2298: Vim9: comment right after "(" of function not recognized
Bram Moolenaar <Bram@vim.org>
parents: 23481
diff changeset
369
20279
49b50843e725 patch 8.2.0695: Vim9: cannot define a function inside a function
Bram Moolenaar <Bram@vim.org>
parents: 20275
diff changeset
370 def Test_nested_function()
49b50843e725 patch 8.2.0695: Vim9: cannot define a function inside a function
Bram Moolenaar <Bram@vim.org>
parents: 20275
diff changeset
371 def Nested(arg: string): string
49b50843e725 patch 8.2.0695: Vim9: cannot define a function inside a function
Bram Moolenaar <Bram@vim.org>
parents: 20275
diff changeset
372 return 'nested ' .. arg
49b50843e725 patch 8.2.0695: Vim9: cannot define a function inside a function
Bram Moolenaar <Bram@vim.org>
parents: 20275
diff changeset
373 enddef
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
374 Nested('function')->assert_equal('nested function')
20279
49b50843e725 patch 8.2.0695: Vim9: cannot define a function inside a function
Bram Moolenaar <Bram@vim.org>
parents: 20275
diff changeset
375
20281
ab8c8fd0f868 patch 8.2.0696: Vim9: nested function does not work properly
Bram Moolenaar <Bram@vim.org>
parents: 20279
diff changeset
376 CheckDefFailure(['def Nested()', 'enddef', 'Nested(66)'], 'E118:')
ab8c8fd0f868 patch 8.2.0696: Vim9: nested function does not work properly
Bram Moolenaar <Bram@vim.org>
parents: 20279
diff changeset
377 CheckDefFailure(['def Nested(arg: string)', 'enddef', 'Nested()'], 'E119:')
ab8c8fd0f868 patch 8.2.0696: Vim9: nested function does not work properly
Bram Moolenaar <Bram@vim.org>
parents: 20279
diff changeset
378
20279
49b50843e725 patch 8.2.0695: Vim9: cannot define a function inside a function
Bram Moolenaar <Bram@vim.org>
parents: 20275
diff changeset
379 CheckDefFailure(['func Nested()', 'endfunc'], 'E1086:')
21602
7028f45bf0ea patch 8.2.1351: Vim9: no proper error if using namespace for nested function
Bram Moolenaar <Bram@vim.org>
parents: 21588
diff changeset
380 CheckDefFailure(['def s:Nested()', 'enddef'], 'E1075:')
7028f45bf0ea patch 8.2.1351: Vim9: no proper error if using namespace for nested function
Bram Moolenaar <Bram@vim.org>
parents: 21588
diff changeset
381 CheckDefFailure(['def b:Nested()', 'enddef'], 'E1075:')
22216
f9b4576a618b patch 8.2.1657: Vim9: no proper error for nested ":def!"
Bram Moolenaar <Bram@vim.org>
parents: 22214
diff changeset
382
23112
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
383 var lines =<< trim END
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
384 def Outer()
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
385 def Inner()
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
386 # comment
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
387 enddef
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
388 def Inner()
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
389 enddef
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
390 enddef
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
391 END
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
392 CheckDefFailure(lines, 'E1073:')
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
393
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
394 lines =<< trim END
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
395 def Outer()
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
396 def Inner()
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
397 # comment
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
398 enddef
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
399 def! Inner()
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
400 enddef
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
401 enddef
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
402 END
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
403 CheckDefFailure(lines, 'E1117:')
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
404
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
405 # nested function inside conditional
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
406 lines =<< trim END
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
407 vim9script
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
408 var thecount = 0
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
409 if true
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
410 def Test(): number
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
411 def TheFunc(): number
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
412 thecount += 1
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
413 return thecount
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
414 enddef
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
415 return TheFunc()
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
416 enddef
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
417 endif
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
418 defcompile
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
419 assert_equal(1, Test())
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
420 assert_equal(2, Test())
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
421 END
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
422 CheckScriptSuccess(lines)
24152
c308076e225e patch 8.2.2617: Vim9: script variable in block not found by function
Bram Moolenaar <Bram@vim.org>
parents: 24097
diff changeset
423
c308076e225e patch 8.2.2617: Vim9: script variable in block not found by function
Bram Moolenaar <Bram@vim.org>
parents: 24097
diff changeset
424 # also works when "thecount" is inside the "if" block
c308076e225e patch 8.2.2617: Vim9: script variable in block not found by function
Bram Moolenaar <Bram@vim.org>
parents: 24097
diff changeset
425 lines =<< trim END
c308076e225e patch 8.2.2617: Vim9: script variable in block not found by function
Bram Moolenaar <Bram@vim.org>
parents: 24097
diff changeset
426 vim9script
c308076e225e patch 8.2.2617: Vim9: script variable in block not found by function
Bram Moolenaar <Bram@vim.org>
parents: 24097
diff changeset
427 if true
c308076e225e patch 8.2.2617: Vim9: script variable in block not found by function
Bram Moolenaar <Bram@vim.org>
parents: 24097
diff changeset
428 var thecount = 0
c308076e225e patch 8.2.2617: Vim9: script variable in block not found by function
Bram Moolenaar <Bram@vim.org>
parents: 24097
diff changeset
429 def Test(): number
c308076e225e patch 8.2.2617: Vim9: script variable in block not found by function
Bram Moolenaar <Bram@vim.org>
parents: 24097
diff changeset
430 def TheFunc(): number
c308076e225e patch 8.2.2617: Vim9: script variable in block not found by function
Bram Moolenaar <Bram@vim.org>
parents: 24097
diff changeset
431 thecount += 1
c308076e225e patch 8.2.2617: Vim9: script variable in block not found by function
Bram Moolenaar <Bram@vim.org>
parents: 24097
diff changeset
432 return thecount
c308076e225e patch 8.2.2617: Vim9: script variable in block not found by function
Bram Moolenaar <Bram@vim.org>
parents: 24097
diff changeset
433 enddef
c308076e225e patch 8.2.2617: Vim9: script variable in block not found by function
Bram Moolenaar <Bram@vim.org>
parents: 24097
diff changeset
434 return TheFunc()
c308076e225e patch 8.2.2617: Vim9: script variable in block not found by function
Bram Moolenaar <Bram@vim.org>
parents: 24097
diff changeset
435 enddef
c308076e225e patch 8.2.2617: Vim9: script variable in block not found by function
Bram Moolenaar <Bram@vim.org>
parents: 24097
diff changeset
436 endif
c308076e225e patch 8.2.2617: Vim9: script variable in block not found by function
Bram Moolenaar <Bram@vim.org>
parents: 24097
diff changeset
437 defcompile
c308076e225e patch 8.2.2617: Vim9: script variable in block not found by function
Bram Moolenaar <Bram@vim.org>
parents: 24097
diff changeset
438 assert_equal(1, Test())
c308076e225e patch 8.2.2617: Vim9: script variable in block not found by function
Bram Moolenaar <Bram@vim.org>
parents: 24097
diff changeset
439 assert_equal(2, Test())
c308076e225e patch 8.2.2617: Vim9: script variable in block not found by function
Bram Moolenaar <Bram@vim.org>
parents: 24097
diff changeset
440 END
c308076e225e patch 8.2.2617: Vim9: script variable in block not found by function
Bram Moolenaar <Bram@vim.org>
parents: 24097
diff changeset
441 CheckScriptSuccess(lines)
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
442 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
443
23426
c3c690c8fcbf patch 8.2.2256: Vim9: cannot use function( after line break in :def function
Bram Moolenaar <Bram@vim.org>
parents: 23299
diff changeset
444 def Test_not_nested_function()
c3c690c8fcbf patch 8.2.2256: Vim9: cannot use function( after line break in :def function
Bram Moolenaar <Bram@vim.org>
parents: 23299
diff changeset
445 echo printf('%d',
c3c690c8fcbf patch 8.2.2256: Vim9: cannot use function( after line break in :def function
Bram Moolenaar <Bram@vim.org>
parents: 23299
diff changeset
446 function('len')('xxx'))
c3c690c8fcbf patch 8.2.2256: Vim9: cannot use function( after line break in :def function
Bram Moolenaar <Bram@vim.org>
parents: 23299
diff changeset
447 enddef
c3c690c8fcbf patch 8.2.2256: Vim9: cannot use function( after line break in :def function
Bram Moolenaar <Bram@vim.org>
parents: 23299
diff changeset
448
21566
1e3e5058041c patch 8.2.1333: Vim9: memory leak when using nested global function
Bram Moolenaar <Bram@vim.org>
parents: 21564
diff changeset
449 func Test_call_default_args_from_func()
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
450 call MyDefaultArgs()->assert_equal('string')
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
451 call MyDefaultArgs('one')->assert_equal('one')
22163
b6d36f0b4f03 patch 8.2.1631: test_fails() does not check the context of the line number
Bram Moolenaar <Bram@vim.org>
parents: 22159
diff changeset
452 call assert_fails('call MyDefaultArgs("one", "two")', 'E118:', '', 3, 'Test_call_default_args_from_func')
21566
1e3e5058041c patch 8.2.1333: Vim9: memory leak when using nested global function
Bram Moolenaar <Bram@vim.org>
parents: 21564
diff changeset
453 endfunc
1e3e5058041c patch 8.2.1333: Vim9: memory leak when using nested global function
Bram Moolenaar <Bram@vim.org>
parents: 21564
diff changeset
454
21558
1c4d4aa22b37 patch 8.2.1329: Vim9: cannot define global function inside :def function
Bram Moolenaar <Bram@vim.org>
parents: 21544
diff changeset
455 def Test_nested_global_function()
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
456 var lines =<< trim END
21558
1c4d4aa22b37 patch 8.2.1329: Vim9: cannot define global function inside :def function
Bram Moolenaar <Bram@vim.org>
parents: 21544
diff changeset
457 vim9script
1c4d4aa22b37 patch 8.2.1329: Vim9: cannot define global function inside :def function
Bram Moolenaar <Bram@vim.org>
parents: 21544
diff changeset
458 def Outer()
1c4d4aa22b37 patch 8.2.1329: Vim9: cannot define global function inside :def function
Bram Moolenaar <Bram@vim.org>
parents: 21544
diff changeset
459 def g:Inner(): string
1c4d4aa22b37 patch 8.2.1329: Vim9: cannot define global function inside :def function
Bram Moolenaar <Bram@vim.org>
parents: 21544
diff changeset
460 return 'inner'
1c4d4aa22b37 patch 8.2.1329: Vim9: cannot define global function inside :def function
Bram Moolenaar <Bram@vim.org>
parents: 21544
diff changeset
461 enddef
1c4d4aa22b37 patch 8.2.1329: Vim9: cannot define global function inside :def function
Bram Moolenaar <Bram@vim.org>
parents: 21544
diff changeset
462 enddef
21566
1e3e5058041c patch 8.2.1333: Vim9: memory leak when using nested global function
Bram Moolenaar <Bram@vim.org>
parents: 21564
diff changeset
463 defcompile
1e3e5058041c patch 8.2.1333: Vim9: memory leak when using nested global function
Bram Moolenaar <Bram@vim.org>
parents: 21564
diff changeset
464 Outer()
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
465 g:Inner()->assert_equal('inner')
21566
1e3e5058041c patch 8.2.1333: Vim9: memory leak when using nested global function
Bram Moolenaar <Bram@vim.org>
parents: 21564
diff changeset
466 delfunc g:Inner
1e3e5058041c patch 8.2.1333: Vim9: memory leak when using nested global function
Bram Moolenaar <Bram@vim.org>
parents: 21564
diff changeset
467 Outer()
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
468 g:Inner()->assert_equal('inner')
21566
1e3e5058041c patch 8.2.1333: Vim9: memory leak when using nested global function
Bram Moolenaar <Bram@vim.org>
parents: 21564
diff changeset
469 delfunc g:Inner
1e3e5058041c patch 8.2.1333: Vim9: memory leak when using nested global function
Bram Moolenaar <Bram@vim.org>
parents: 21564
diff changeset
470 Outer()
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
471 g:Inner()->assert_equal('inner')
21566
1e3e5058041c patch 8.2.1333: Vim9: memory leak when using nested global function
Bram Moolenaar <Bram@vim.org>
parents: 21564
diff changeset
472 delfunc g:Inner
21558
1c4d4aa22b37 patch 8.2.1329: Vim9: cannot define global function inside :def function
Bram Moolenaar <Bram@vim.org>
parents: 21544
diff changeset
473 END
1c4d4aa22b37 patch 8.2.1329: Vim9: cannot define global function inside :def function
Bram Moolenaar <Bram@vim.org>
parents: 21544
diff changeset
474 CheckScriptSuccess(lines)
21588
9ade1da22402 patch 8.2.1344: Vim9: No test for trying to redefine global function
Bram Moolenaar <Bram@vim.org>
parents: 21586
diff changeset
475
9ade1da22402 patch 8.2.1344: Vim9: No test for trying to redefine global function
Bram Moolenaar <Bram@vim.org>
parents: 21586
diff changeset
476 lines =<< trim END
9ade1da22402 patch 8.2.1344: Vim9: No test for trying to redefine global function
Bram Moolenaar <Bram@vim.org>
parents: 21586
diff changeset
477 vim9script
9ade1da22402 patch 8.2.1344: Vim9: No test for trying to redefine global function
Bram Moolenaar <Bram@vim.org>
parents: 21586
diff changeset
478 def Outer()
9ade1da22402 patch 8.2.1344: Vim9: No test for trying to redefine global function
Bram Moolenaar <Bram@vim.org>
parents: 21586
diff changeset
479 def g:Inner(): string
9ade1da22402 patch 8.2.1344: Vim9: No test for trying to redefine global function
Bram Moolenaar <Bram@vim.org>
parents: 21586
diff changeset
480 return 'inner'
9ade1da22402 patch 8.2.1344: Vim9: No test for trying to redefine global function
Bram Moolenaar <Bram@vim.org>
parents: 21586
diff changeset
481 enddef
9ade1da22402 patch 8.2.1344: Vim9: No test for trying to redefine global function
Bram Moolenaar <Bram@vim.org>
parents: 21586
diff changeset
482 enddef
9ade1da22402 patch 8.2.1344: Vim9: No test for trying to redefine global function
Bram Moolenaar <Bram@vim.org>
parents: 21586
diff changeset
483 defcompile
9ade1da22402 patch 8.2.1344: Vim9: No test for trying to redefine global function
Bram Moolenaar <Bram@vim.org>
parents: 21586
diff changeset
484 Outer()
9ade1da22402 patch 8.2.1344: Vim9: No test for trying to redefine global function
Bram Moolenaar <Bram@vim.org>
parents: 21586
diff changeset
485 Outer()
9ade1da22402 patch 8.2.1344: Vim9: No test for trying to redefine global function
Bram Moolenaar <Bram@vim.org>
parents: 21586
diff changeset
486 END
9ade1da22402 patch 8.2.1344: Vim9: No test for trying to redefine global function
Bram Moolenaar <Bram@vim.org>
parents: 21586
diff changeset
487 CheckScriptFailure(lines, "E122:")
23285
112fa621b127 patch 8.2.2188: Vim9: crash when calling global function from :def function
Bram Moolenaar <Bram@vim.org>
parents: 23281
diff changeset
488 delfunc g:Inner
21604
d9c45474cac1 patch 8.2.1352: Vim9: no error for shadowing a script-local function
Bram Moolenaar <Bram@vim.org>
parents: 21602
diff changeset
489
d9c45474cac1 patch 8.2.1352: Vim9: no error for shadowing a script-local function
Bram Moolenaar <Bram@vim.org>
parents: 21602
diff changeset
490 lines =<< trim END
d9c45474cac1 patch 8.2.1352: Vim9: no error for shadowing a script-local function
Bram Moolenaar <Bram@vim.org>
parents: 21602
diff changeset
491 vim9script
23291
8e1427ac2bce patch 8.2.2191: Vim9: using wrong name with lambda in nested function
Bram Moolenaar <Bram@vim.org>
parents: 23289
diff changeset
492 def Outer()
8e1427ac2bce patch 8.2.2191: Vim9: using wrong name with lambda in nested function
Bram Moolenaar <Bram@vim.org>
parents: 23289
diff changeset
493 def g:Inner()
23428
5807e3958e38 patch 8.2.2257: Vim9: using -> for lambda is ambiguous
Bram Moolenaar <Bram@vim.org>
parents: 23426
diff changeset
494 echo map([1, 2, 3], (_, v) => v + 1)
23291
8e1427ac2bce patch 8.2.2191: Vim9: using wrong name with lambda in nested function
Bram Moolenaar <Bram@vim.org>
parents: 23289
diff changeset
495 enddef
8e1427ac2bce patch 8.2.2191: Vim9: using wrong name with lambda in nested function
Bram Moolenaar <Bram@vim.org>
parents: 23289
diff changeset
496 g:Inner()
8e1427ac2bce patch 8.2.2191: Vim9: using wrong name with lambda in nested function
Bram Moolenaar <Bram@vim.org>
parents: 23289
diff changeset
497 enddef
8e1427ac2bce patch 8.2.2191: Vim9: using wrong name with lambda in nested function
Bram Moolenaar <Bram@vim.org>
parents: 23289
diff changeset
498 Outer()
8e1427ac2bce patch 8.2.2191: Vim9: using wrong name with lambda in nested function
Bram Moolenaar <Bram@vim.org>
parents: 23289
diff changeset
499 END
8e1427ac2bce patch 8.2.2191: Vim9: using wrong name with lambda in nested function
Bram Moolenaar <Bram@vim.org>
parents: 23289
diff changeset
500 CheckScriptSuccess(lines)
8e1427ac2bce patch 8.2.2191: Vim9: using wrong name with lambda in nested function
Bram Moolenaar <Bram@vim.org>
parents: 23289
diff changeset
501 delfunc g:Inner
8e1427ac2bce patch 8.2.2191: Vim9: using wrong name with lambda in nested function
Bram Moolenaar <Bram@vim.org>
parents: 23289
diff changeset
502
8e1427ac2bce patch 8.2.2191: Vim9: using wrong name with lambda in nested function
Bram Moolenaar <Bram@vim.org>
parents: 23289
diff changeset
503 lines =<< trim END
8e1427ac2bce patch 8.2.2191: Vim9: using wrong name with lambda in nested function
Bram Moolenaar <Bram@vim.org>
parents: 23289
diff changeset
504 vim9script
21604
d9c45474cac1 patch 8.2.1352: Vim9: no error for shadowing a script-local function
Bram Moolenaar <Bram@vim.org>
parents: 21602
diff changeset
505 def Func()
d9c45474cac1 patch 8.2.1352: Vim9: no error for shadowing a script-local function
Bram Moolenaar <Bram@vim.org>
parents: 21602
diff changeset
506 echo 'script'
d9c45474cac1 patch 8.2.1352: Vim9: no error for shadowing a script-local function
Bram Moolenaar <Bram@vim.org>
parents: 21602
diff changeset
507 enddef
d9c45474cac1 patch 8.2.1352: Vim9: no error for shadowing a script-local function
Bram Moolenaar <Bram@vim.org>
parents: 21602
diff changeset
508 def Outer()
d9c45474cac1 patch 8.2.1352: Vim9: no error for shadowing a script-local function
Bram Moolenaar <Bram@vim.org>
parents: 21602
diff changeset
509 def Func()
d9c45474cac1 patch 8.2.1352: Vim9: no error for shadowing a script-local function
Bram Moolenaar <Bram@vim.org>
parents: 21602
diff changeset
510 echo 'inner'
d9c45474cac1 patch 8.2.1352: Vim9: no error for shadowing a script-local function
Bram Moolenaar <Bram@vim.org>
parents: 21602
diff changeset
511 enddef
d9c45474cac1 patch 8.2.1352: Vim9: no error for shadowing a script-local function
Bram Moolenaar <Bram@vim.org>
parents: 21602
diff changeset
512 enddef
d9c45474cac1 patch 8.2.1352: Vim9: no error for shadowing a script-local function
Bram Moolenaar <Bram@vim.org>
parents: 21602
diff changeset
513 defcompile
d9c45474cac1 patch 8.2.1352: Vim9: no error for shadowing a script-local function
Bram Moolenaar <Bram@vim.org>
parents: 21602
diff changeset
514 END
d9c45474cac1 patch 8.2.1352: Vim9: no error for shadowing a script-local function
Bram Moolenaar <Bram@vim.org>
parents: 21602
diff changeset
515 CheckScriptFailure(lines, "E1073:")
21558
1c4d4aa22b37 patch 8.2.1329: Vim9: cannot define global function inside :def function
Bram Moolenaar <Bram@vim.org>
parents: 21544
diff changeset
516 enddef
1c4d4aa22b37 patch 8.2.1329: Vim9: cannot define global function inside :def function
Bram Moolenaar <Bram@vim.org>
parents: 21544
diff changeset
517
22973
4c97c0747017 patch 8.2.2033: Vim9: :def without argument gives compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22969
diff changeset
518 def DefListAll()
4c97c0747017 patch 8.2.2033: Vim9: :def without argument gives compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22969
diff changeset
519 def
4c97c0747017 patch 8.2.2033: Vim9: :def without argument gives compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22969
diff changeset
520 enddef
4c97c0747017 patch 8.2.2033: Vim9: :def without argument gives compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22969
diff changeset
521
4c97c0747017 patch 8.2.2033: Vim9: :def without argument gives compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22969
diff changeset
522 def DefListOne()
4c97c0747017 patch 8.2.2033: Vim9: :def without argument gives compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22969
diff changeset
523 def DefListOne
4c97c0747017 patch 8.2.2033: Vim9: :def without argument gives compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22969
diff changeset
524 enddef
4c97c0747017 patch 8.2.2033: Vim9: :def without argument gives compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22969
diff changeset
525
4c97c0747017 patch 8.2.2033: Vim9: :def without argument gives compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22969
diff changeset
526 def DefListMatches()
4c97c0747017 patch 8.2.2033: Vim9: :def without argument gives compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22969
diff changeset
527 def /DefList
4c97c0747017 patch 8.2.2033: Vim9: :def without argument gives compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22969
diff changeset
528 enddef
4c97c0747017 patch 8.2.2033: Vim9: :def without argument gives compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22969
diff changeset
529
4c97c0747017 patch 8.2.2033: Vim9: :def without argument gives compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22969
diff changeset
530 def Test_nested_def_list()
4c97c0747017 patch 8.2.2033: Vim9: :def without argument gives compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22969
diff changeset
531 var funcs = split(execute('call DefListAll()'), "\n")
4c97c0747017 patch 8.2.2033: Vim9: :def without argument gives compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22969
diff changeset
532 assert_true(len(funcs) > 10)
4c97c0747017 patch 8.2.2033: Vim9: :def without argument gives compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22969
diff changeset
533 assert_true(funcs->index('def DefListAll()') >= 0)
4c97c0747017 patch 8.2.2033: Vim9: :def without argument gives compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22969
diff changeset
534
4c97c0747017 patch 8.2.2033: Vim9: :def without argument gives compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22969
diff changeset
535 funcs = split(execute('call DefListOne()'), "\n")
4c97c0747017 patch 8.2.2033: Vim9: :def without argument gives compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22969
diff changeset
536 assert_equal([' def DefListOne()', '1 def DefListOne', ' enddef'], funcs)
4c97c0747017 patch 8.2.2033: Vim9: :def without argument gives compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22969
diff changeset
537
4c97c0747017 patch 8.2.2033: Vim9: :def without argument gives compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22969
diff changeset
538 funcs = split(execute('call DefListMatches()'), "\n")
4c97c0747017 patch 8.2.2033: Vim9: :def without argument gives compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22969
diff changeset
539 assert_true(len(funcs) >= 3)
4c97c0747017 patch 8.2.2033: Vim9: :def without argument gives compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22969
diff changeset
540 assert_true(funcs->index('def DefListAll()') >= 0)
4c97c0747017 patch 8.2.2033: Vim9: :def without argument gives compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22969
diff changeset
541 assert_true(funcs->index('def DefListOne()') >= 0)
4c97c0747017 patch 8.2.2033: Vim9: :def without argument gives compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22969
diff changeset
542 assert_true(funcs->index('def DefListMatches()') >= 0)
23112
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
543
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
544 var lines =<< trim END
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
545 vim9script
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
546 def Func()
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
547 def +Func+
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
548 enddef
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
549 defcompile
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
550 END
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
551 CheckScriptFailure(lines, 'E476:', 1)
22973
4c97c0747017 patch 8.2.2033: Vim9: :def without argument gives compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22969
diff changeset
552 enddef
4c97c0747017 patch 8.2.2033: Vim9: :def without argument gives compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22969
diff changeset
553
21586
5470c36ed7e6 patch 8.2.1343: Vim9: cannot find global function when using g:
Bram Moolenaar <Bram@vim.org>
parents: 21566
diff changeset
554 def Test_global_local_function()
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
555 var lines =<< trim END
21586
5470c36ed7e6 patch 8.2.1343: Vim9: cannot find global function when using g:
Bram Moolenaar <Bram@vim.org>
parents: 21566
diff changeset
556 vim9script
5470c36ed7e6 patch 8.2.1343: Vim9: cannot find global function when using g:
Bram Moolenaar <Bram@vim.org>
parents: 21566
diff changeset
557 def g:Func(): string
5470c36ed7e6 patch 8.2.1343: Vim9: cannot find global function when using g:
Bram Moolenaar <Bram@vim.org>
parents: 21566
diff changeset
558 return 'global'
5470c36ed7e6 patch 8.2.1343: Vim9: cannot find global function when using g:
Bram Moolenaar <Bram@vim.org>
parents: 21566
diff changeset
559 enddef
5470c36ed7e6 patch 8.2.1343: Vim9: cannot find global function when using g:
Bram Moolenaar <Bram@vim.org>
parents: 21566
diff changeset
560 def Func(): string
5470c36ed7e6 patch 8.2.1343: Vim9: cannot find global function when using g:
Bram Moolenaar <Bram@vim.org>
parents: 21566
diff changeset
561 return 'local'
5470c36ed7e6 patch 8.2.1343: Vim9: cannot find global function when using g:
Bram Moolenaar <Bram@vim.org>
parents: 21566
diff changeset
562 enddef
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
563 g:Func()->assert_equal('global')
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
564 Func()->assert_equal('local')
23092
c713358da074 patch 8.2.2092: Vim9: unpredictable errors for script tests
Bram Moolenaar <Bram@vim.org>
parents: 23074
diff changeset
565 delfunc g:Func
21586
5470c36ed7e6 patch 8.2.1343: Vim9: cannot find global function when using g:
Bram Moolenaar <Bram@vim.org>
parents: 21566
diff changeset
566 END
5470c36ed7e6 patch 8.2.1343: Vim9: cannot find global function when using g:
Bram Moolenaar <Bram@vim.org>
parents: 21566
diff changeset
567 CheckScriptSuccess(lines)
21747
7e1316c6d0eb patch 8.2.1423: Vim9: find global function when looking for script-local
Bram Moolenaar <Bram@vim.org>
parents: 21693
diff changeset
568
7e1316c6d0eb patch 8.2.1423: Vim9: find global function when looking for script-local
Bram Moolenaar <Bram@vim.org>
parents: 21693
diff changeset
569 lines =<< trim END
7e1316c6d0eb patch 8.2.1423: Vim9: find global function when looking for script-local
Bram Moolenaar <Bram@vim.org>
parents: 21693
diff changeset
570 vim9script
7e1316c6d0eb patch 8.2.1423: Vim9: find global function when looking for script-local
Bram Moolenaar <Bram@vim.org>
parents: 21693
diff changeset
571 def g:Funcy()
7e1316c6d0eb patch 8.2.1423: Vim9: find global function when looking for script-local
Bram Moolenaar <Bram@vim.org>
parents: 21693
diff changeset
572 echo 'funcy'
7e1316c6d0eb patch 8.2.1423: Vim9: find global function when looking for script-local
Bram Moolenaar <Bram@vim.org>
parents: 21693
diff changeset
573 enddef
7e1316c6d0eb patch 8.2.1423: Vim9: find global function when looking for script-local
Bram Moolenaar <Bram@vim.org>
parents: 21693
diff changeset
574 s:Funcy()
7e1316c6d0eb patch 8.2.1423: Vim9: find global function when looking for script-local
Bram Moolenaar <Bram@vim.org>
parents: 21693
diff changeset
575 END
7e1316c6d0eb patch 8.2.1423: Vim9: find global function when looking for script-local
Bram Moolenaar <Bram@vim.org>
parents: 21693
diff changeset
576 CheckScriptFailure(lines, 'E117:')
21586
5470c36ed7e6 patch 8.2.1343: Vim9: cannot find global function when using g:
Bram Moolenaar <Bram@vim.org>
parents: 21566
diff changeset
577 enddef
5470c36ed7e6 patch 8.2.1343: Vim9: cannot find global function when using g:
Bram Moolenaar <Bram@vim.org>
parents: 21566
diff changeset
578
22236
3d0632b260fd patch 8.2.1667: local function name cannot shadow a global function name
Bram Moolenaar <Bram@vim.org>
parents: 22222
diff changeset
579 def Test_local_function_shadows_global()
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
580 var lines =<< trim END
22236
3d0632b260fd patch 8.2.1667: local function name cannot shadow a global function name
Bram Moolenaar <Bram@vim.org>
parents: 22222
diff changeset
581 vim9script
3d0632b260fd patch 8.2.1667: local function name cannot shadow a global function name
Bram Moolenaar <Bram@vim.org>
parents: 22222
diff changeset
582 def g:Gfunc(): string
3d0632b260fd patch 8.2.1667: local function name cannot shadow a global function name
Bram Moolenaar <Bram@vim.org>
parents: 22222
diff changeset
583 return 'global'
3d0632b260fd patch 8.2.1667: local function name cannot shadow a global function name
Bram Moolenaar <Bram@vim.org>
parents: 22222
diff changeset
584 enddef
3d0632b260fd patch 8.2.1667: local function name cannot shadow a global function name
Bram Moolenaar <Bram@vim.org>
parents: 22222
diff changeset
585 def AnotherFunc(): number
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
586 var Gfunc = function('len')
22236
3d0632b260fd patch 8.2.1667: local function name cannot shadow a global function name
Bram Moolenaar <Bram@vim.org>
parents: 22222
diff changeset
587 return Gfunc('testing')
3d0632b260fd patch 8.2.1667: local function name cannot shadow a global function name
Bram Moolenaar <Bram@vim.org>
parents: 22222
diff changeset
588 enddef
3d0632b260fd patch 8.2.1667: local function name cannot shadow a global function name
Bram Moolenaar <Bram@vim.org>
parents: 22222
diff changeset
589 g:Gfunc()->assert_equal('global')
3d0632b260fd patch 8.2.1667: local function name cannot shadow a global function name
Bram Moolenaar <Bram@vim.org>
parents: 22222
diff changeset
590 AnotherFunc()->assert_equal(7)
3d0632b260fd patch 8.2.1667: local function name cannot shadow a global function name
Bram Moolenaar <Bram@vim.org>
parents: 22222
diff changeset
591 delfunc g:Gfunc
3d0632b260fd patch 8.2.1667: local function name cannot shadow a global function name
Bram Moolenaar <Bram@vim.org>
parents: 22222
diff changeset
592 END
3d0632b260fd patch 8.2.1667: local function name cannot shadow a global function name
Bram Moolenaar <Bram@vim.org>
parents: 22222
diff changeset
593 CheckScriptSuccess(lines)
3d0632b260fd patch 8.2.1667: local function name cannot shadow a global function name
Bram Moolenaar <Bram@vim.org>
parents: 22222
diff changeset
594
3d0632b260fd patch 8.2.1667: local function name cannot shadow a global function name
Bram Moolenaar <Bram@vim.org>
parents: 22222
diff changeset
595 lines =<< trim END
3d0632b260fd patch 8.2.1667: local function name cannot shadow a global function name
Bram Moolenaar <Bram@vim.org>
parents: 22222
diff changeset
596 vim9script
3d0632b260fd patch 8.2.1667: local function name cannot shadow a global function name
Bram Moolenaar <Bram@vim.org>
parents: 22222
diff changeset
597 def g:Func(): string
3d0632b260fd patch 8.2.1667: local function name cannot shadow a global function name
Bram Moolenaar <Bram@vim.org>
parents: 22222
diff changeset
598 return 'global'
3d0632b260fd patch 8.2.1667: local function name cannot shadow a global function name
Bram Moolenaar <Bram@vim.org>
parents: 22222
diff changeset
599 enddef
3d0632b260fd patch 8.2.1667: local function name cannot shadow a global function name
Bram Moolenaar <Bram@vim.org>
parents: 22222
diff changeset
600 def AnotherFunc()
3d0632b260fd patch 8.2.1667: local function name cannot shadow a global function name
Bram Moolenaar <Bram@vim.org>
parents: 22222
diff changeset
601 g:Func = function('len')
3d0632b260fd patch 8.2.1667: local function name cannot shadow a global function name
Bram Moolenaar <Bram@vim.org>
parents: 22222
diff changeset
602 enddef
3d0632b260fd patch 8.2.1667: local function name cannot shadow a global function name
Bram Moolenaar <Bram@vim.org>
parents: 22222
diff changeset
603 AnotherFunc()
3d0632b260fd patch 8.2.1667: local function name cannot shadow a global function name
Bram Moolenaar <Bram@vim.org>
parents: 22222
diff changeset
604 END
3d0632b260fd patch 8.2.1667: local function name cannot shadow a global function name
Bram Moolenaar <Bram@vim.org>
parents: 22222
diff changeset
605 CheckScriptFailure(lines, 'E705:')
3d0632b260fd patch 8.2.1667: local function name cannot shadow a global function name
Bram Moolenaar <Bram@vim.org>
parents: 22222
diff changeset
606 delfunc g:Func
3d0632b260fd patch 8.2.1667: local function name cannot shadow a global function name
Bram Moolenaar <Bram@vim.org>
parents: 22222
diff changeset
607 enddef
3d0632b260fd patch 8.2.1667: local function name cannot shadow a global function name
Bram Moolenaar <Bram@vim.org>
parents: 22222
diff changeset
608
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
609 func TakesOneArg(arg)
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
610 echo a:arg
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
611 endfunc
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
612
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
613 def Test_call_wrong_args()
22147
d55008685870 patch 8.2.1623: Vim9: using :call where it is not needed
Bram Moolenaar <Bram@vim.org>
parents: 22139
diff changeset
614 CheckDefFailure(['TakesOneArg()'], 'E119:')
d55008685870 patch 8.2.1623: Vim9: using :call where it is not needed
Bram Moolenaar <Bram@vim.org>
parents: 22139
diff changeset
615 CheckDefFailure(['TakesOneArg(11, 22)'], 'E118:')
d55008685870 patch 8.2.1623: Vim9: using :call where it is not needed
Bram Moolenaar <Bram@vim.org>
parents: 22139
diff changeset
616 CheckDefFailure(['bufnr(xxx)'], 'E1001:')
d55008685870 patch 8.2.1623: Vim9: using :call where it is not needed
Bram Moolenaar <Bram@vim.org>
parents: 22139
diff changeset
617 CheckScriptFailure(['def Func(Ref: func(s: string))'], 'E475:')
21969
ba2415df82d7 patch 8.2.1534: Vim9: type error for argument type is not at call position
Bram Moolenaar <Bram@vim.org>
parents: 21967
diff changeset
618
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
619 var lines =<< trim END
21969
ba2415df82d7 patch 8.2.1534: Vim9: type error for argument type is not at call position
Bram Moolenaar <Bram@vim.org>
parents: 21967
diff changeset
620 vim9script
ba2415df82d7 patch 8.2.1534: Vim9: type error for argument type is not at call position
Bram Moolenaar <Bram@vim.org>
parents: 21967
diff changeset
621 def Func(s: string)
ba2415df82d7 patch 8.2.1534: Vim9: type error for argument type is not at call position
Bram Moolenaar <Bram@vim.org>
parents: 21967
diff changeset
622 echo s
ba2415df82d7 patch 8.2.1534: Vim9: type error for argument type is not at call position
Bram Moolenaar <Bram@vim.org>
parents: 21967
diff changeset
623 enddef
ba2415df82d7 patch 8.2.1534: Vim9: type error for argument type is not at call position
Bram Moolenaar <Bram@vim.org>
parents: 21967
diff changeset
624 Func([])
ba2415df82d7 patch 8.2.1534: Vim9: type error for argument type is not at call position
Bram Moolenaar <Bram@vim.org>
parents: 21967
diff changeset
625 END
22296
006b8ab9d554 patch 8.2.1697: inconsistent capitalization of error messages
Bram Moolenaar <Bram@vim.org>
parents: 22292
diff changeset
626 CheckScriptFailure(lines, 'E1013: Argument 1: type mismatch, expected string but got list<unknown>', 5)
22318
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
627
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
628 lines =<< trim END
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
629 vim9script
23996
c192411b27e8 patch 8.2.2540: Vim9: no error for using script var name for argument
Bram Moolenaar <Bram@vim.org>
parents: 23940
diff changeset
630 var name = 'piet'
c192411b27e8 patch 8.2.2540: Vim9: no error for using script var name for argument
Bram Moolenaar <Bram@vim.org>
parents: 23940
diff changeset
631 def FuncOne(name: string)
c192411b27e8 patch 8.2.2540: Vim9: no error for using script var name for argument
Bram Moolenaar <Bram@vim.org>
parents: 23940
diff changeset
632 echo nr
c192411b27e8 patch 8.2.2540: Vim9: no error for using script var name for argument
Bram Moolenaar <Bram@vim.org>
parents: 23940
diff changeset
633 enddef
c192411b27e8 patch 8.2.2540: Vim9: no error for using script var name for argument
Bram Moolenaar <Bram@vim.org>
parents: 23940
diff changeset
634 END
24033
308d29307910 patch 8.2.2558: no error if a lambda argument shadows a variable
Bram Moolenaar <Bram@vim.org>
parents: 23996
diff changeset
635 CheckScriptFailure(lines, 'E1168:')
23996
c192411b27e8 patch 8.2.2540: Vim9: no error for using script var name for argument
Bram Moolenaar <Bram@vim.org>
parents: 23940
diff changeset
636
c192411b27e8 patch 8.2.2540: Vim9: no error for using script var name for argument
Bram Moolenaar <Bram@vim.org>
parents: 23940
diff changeset
637 lines =<< trim END
c192411b27e8 patch 8.2.2540: Vim9: no error for using script var name for argument
Bram Moolenaar <Bram@vim.org>
parents: 23940
diff changeset
638 vim9script
22318
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
639 def FuncOne(nr: number)
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
640 echo nr
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
641 enddef
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
642 def FuncTwo()
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
643 FuncOne()
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
644 enddef
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
645 defcompile
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
646 END
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
647 writefile(lines, 'Xscript')
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
648 var didCatch = false
22318
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
649 try
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
650 source Xscript
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
651 catch
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
652 assert_match('E119: Not enough arguments for function: <SNR>\d\+_FuncOne', v:exception)
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
653 assert_match('Xscript\[8\]..function <SNR>\d\+_FuncTwo, line 1', v:throwpoint)
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
654 didCatch = true
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
655 endtry
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
656 assert_true(didCatch)
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
657
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
658 lines =<< trim END
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
659 vim9script
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
660 def FuncOne(nr: number)
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
661 echo nr
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
662 enddef
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
663 def FuncTwo()
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
664 FuncOne(1, 2)
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
665 enddef
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
666 defcompile
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
667 END
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
668 writefile(lines, 'Xscript')
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
669 didCatch = false
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
670 try
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
671 source Xscript
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
672 catch
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
673 assert_match('E118: Too many arguments for function: <SNR>\d\+_FuncOne', v:exception)
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
674 assert_match('Xscript\[8\]..function <SNR>\d\+_FuncTwo, line 1', v:throwpoint)
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
675 didCatch = true
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
676 endtry
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
677 assert_true(didCatch)
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
678
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
679 delete('Xscript')
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
680 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
681
23252
35583da6397e patch 8.2.2172: Vim9: number of arguments is not always checked
Bram Moolenaar <Bram@vim.org>
parents: 23249
diff changeset
682 def Test_call_funcref_wrong_args()
35583da6397e patch 8.2.2172: Vim9: number of arguments is not always checked
Bram Moolenaar <Bram@vim.org>
parents: 23249
diff changeset
683 var head =<< trim END
35583da6397e patch 8.2.2172: Vim9: number of arguments is not always checked
Bram Moolenaar <Bram@vim.org>
parents: 23249
diff changeset
684 vim9script
35583da6397e patch 8.2.2172: Vim9: number of arguments is not always checked
Bram Moolenaar <Bram@vim.org>
parents: 23249
diff changeset
685 def Func3(a1: string, a2: number, a3: list<number>)
35583da6397e patch 8.2.2172: Vim9: number of arguments is not always checked
Bram Moolenaar <Bram@vim.org>
parents: 23249
diff changeset
686 echo a1 .. a2 .. a3[0]
35583da6397e patch 8.2.2172: Vim9: number of arguments is not always checked
Bram Moolenaar <Bram@vim.org>
parents: 23249
diff changeset
687 enddef
35583da6397e patch 8.2.2172: Vim9: number of arguments is not always checked
Bram Moolenaar <Bram@vim.org>
parents: 23249
diff changeset
688 def Testme()
35583da6397e patch 8.2.2172: Vim9: number of arguments is not always checked
Bram Moolenaar <Bram@vim.org>
parents: 23249
diff changeset
689 var funcMap: dict<func> = {func: Func3}
35583da6397e patch 8.2.2172: Vim9: number of arguments is not always checked
Bram Moolenaar <Bram@vim.org>
parents: 23249
diff changeset
690 END
35583da6397e patch 8.2.2172: Vim9: number of arguments is not always checked
Bram Moolenaar <Bram@vim.org>
parents: 23249
diff changeset
691 var tail =<< trim END
35583da6397e patch 8.2.2172: Vim9: number of arguments is not always checked
Bram Moolenaar <Bram@vim.org>
parents: 23249
diff changeset
692 enddef
35583da6397e patch 8.2.2172: Vim9: number of arguments is not always checked
Bram Moolenaar <Bram@vim.org>
parents: 23249
diff changeset
693 Testme()
35583da6397e patch 8.2.2172: Vim9: number of arguments is not always checked
Bram Moolenaar <Bram@vim.org>
parents: 23249
diff changeset
694 END
35583da6397e patch 8.2.2172: Vim9: number of arguments is not always checked
Bram Moolenaar <Bram@vim.org>
parents: 23249
diff changeset
695 CheckScriptSuccess(head + ["funcMap['func']('str', 123, [1, 2, 3])"] + tail)
35583da6397e patch 8.2.2172: Vim9: number of arguments is not always checked
Bram Moolenaar <Bram@vim.org>
parents: 23249
diff changeset
696
35583da6397e patch 8.2.2172: Vim9: number of arguments is not always checked
Bram Moolenaar <Bram@vim.org>
parents: 23249
diff changeset
697 CheckScriptFailure(head + ["funcMap['func']('str', 123)"] + tail, 'E119:')
35583da6397e patch 8.2.2172: Vim9: number of arguments is not always checked
Bram Moolenaar <Bram@vim.org>
parents: 23249
diff changeset
698 CheckScriptFailure(head + ["funcMap['func']('str', 123, [1], 4)"] + tail, 'E118:')
23527
27ca5534a408 patch 8.2.2306: Vim9: when using function reference type is not checked
Bram Moolenaar <Bram@vim.org>
parents: 23511
diff changeset
699
27ca5534a408 patch 8.2.2306: Vim9: when using function reference type is not checked
Bram Moolenaar <Bram@vim.org>
parents: 23511
diff changeset
700 var lines =<< trim END
27ca5534a408 patch 8.2.2306: Vim9: when using function reference type is not checked
Bram Moolenaar <Bram@vim.org>
parents: 23511
diff changeset
701 vim9script
27ca5534a408 patch 8.2.2306: Vim9: when using function reference type is not checked
Bram Moolenaar <Bram@vim.org>
parents: 23511
diff changeset
702 var Ref: func(number): any
27ca5534a408 patch 8.2.2306: Vim9: when using function reference type is not checked
Bram Moolenaar <Bram@vim.org>
parents: 23511
diff changeset
703 Ref = (j) => !j
27ca5534a408 patch 8.2.2306: Vim9: when using function reference type is not checked
Bram Moolenaar <Bram@vim.org>
parents: 23511
diff changeset
704 echo Ref(false)
27ca5534a408 patch 8.2.2306: Vim9: when using function reference type is not checked
Bram Moolenaar <Bram@vim.org>
parents: 23511
diff changeset
705 END
27ca5534a408 patch 8.2.2306: Vim9: when using function reference type is not checked
Bram Moolenaar <Bram@vim.org>
parents: 23511
diff changeset
706 CheckScriptFailure(lines, 'E1013: Argument 1: type mismatch, expected number but got bool', 4)
27ca5534a408 patch 8.2.2306: Vim9: when using function reference type is not checked
Bram Moolenaar <Bram@vim.org>
parents: 23511
diff changeset
707
27ca5534a408 patch 8.2.2306: Vim9: when using function reference type is not checked
Bram Moolenaar <Bram@vim.org>
parents: 23511
diff changeset
708 lines =<< trim END
27ca5534a408 patch 8.2.2306: Vim9: when using function reference type is not checked
Bram Moolenaar <Bram@vim.org>
parents: 23511
diff changeset
709 vim9script
27ca5534a408 patch 8.2.2306: Vim9: when using function reference type is not checked
Bram Moolenaar <Bram@vim.org>
parents: 23511
diff changeset
710 var Ref: func(number): any
27ca5534a408 patch 8.2.2306: Vim9: when using function reference type is not checked
Bram Moolenaar <Bram@vim.org>
parents: 23511
diff changeset
711 Ref = (j) => !j
27ca5534a408 patch 8.2.2306: Vim9: when using function reference type is not checked
Bram Moolenaar <Bram@vim.org>
parents: 23511
diff changeset
712 call Ref(false)
27ca5534a408 patch 8.2.2306: Vim9: when using function reference type is not checked
Bram Moolenaar <Bram@vim.org>
parents: 23511
diff changeset
713 END
27ca5534a408 patch 8.2.2306: Vim9: when using function reference type is not checked
Bram Moolenaar <Bram@vim.org>
parents: 23511
diff changeset
714 CheckScriptFailure(lines, 'E1013: Argument 1: type mismatch, expected number but got bool', 4)
23252
35583da6397e patch 8.2.2172: Vim9: number of arguments is not always checked
Bram Moolenaar <Bram@vim.org>
parents: 23249
diff changeset
715 enddef
35583da6397e patch 8.2.2172: Vim9: number of arguments is not always checked
Bram Moolenaar <Bram@vim.org>
parents: 23249
diff changeset
716
22816
8a5369f5f2b4 patch 8.2.1956: Vim9: cannot specify argument types for lambda
Bram Moolenaar <Bram@vim.org>
parents: 22760
diff changeset
717 def Test_call_lambda_args()
23428
5807e3958e38 patch 8.2.2257: Vim9: using -> for lambda is ambiguous
Bram Moolenaar <Bram@vim.org>
parents: 23426
diff changeset
718 CheckDefFailure(['echo ((i) => 0)()'],
5807e3958e38 patch 8.2.2257: Vim9: using -> for lambda is ambiguous
Bram Moolenaar <Bram@vim.org>
parents: 23426
diff changeset
719 'E119: Not enough arguments for function: ((i) => 0)()')
22816
8a5369f5f2b4 patch 8.2.1956: Vim9: cannot specify argument types for lambda
Bram Moolenaar <Bram@vim.org>
parents: 22760
diff changeset
720
8a5369f5f2b4 patch 8.2.1956: Vim9: cannot specify argument types for lambda
Bram Moolenaar <Bram@vim.org>
parents: 22760
diff changeset
721 var lines =<< trim END
23428
5807e3958e38 patch 8.2.2257: Vim9: using -> for lambda is ambiguous
Bram Moolenaar <Bram@vim.org>
parents: 23426
diff changeset
722 var Ref = (x: number, y: number) => x + y
22816
8a5369f5f2b4 patch 8.2.1956: Vim9: cannot specify argument types for lambda
Bram Moolenaar <Bram@vim.org>
parents: 22760
diff changeset
723 echo Ref(1, 'x')
8a5369f5f2b4 patch 8.2.1956: Vim9: cannot specify argument types for lambda
Bram Moolenaar <Bram@vim.org>
parents: 22760
diff changeset
724 END
8a5369f5f2b4 patch 8.2.1956: Vim9: cannot specify argument types for lambda
Bram Moolenaar <Bram@vim.org>
parents: 22760
diff changeset
725 CheckDefFailure(lines, 'E1013: Argument 2: type mismatch, expected number but got string')
23481
62fe9a7fd582 patch 8.2.2283: Vim9: crash when lambda has fewer arguments than expected
Bram Moolenaar <Bram@vim.org>
parents: 23444
diff changeset
726
62fe9a7fd582 patch 8.2.2283: Vim9: crash when lambda has fewer arguments than expected
Bram Moolenaar <Bram@vim.org>
parents: 23444
diff changeset
727 lines =<< trim END
62fe9a7fd582 patch 8.2.2283: Vim9: crash when lambda has fewer arguments than expected
Bram Moolenaar <Bram@vim.org>
parents: 23444
diff changeset
728 var Ref: func(job, string, number)
62fe9a7fd582 patch 8.2.2283: Vim9: crash when lambda has fewer arguments than expected
Bram Moolenaar <Bram@vim.org>
parents: 23444
diff changeset
729 Ref = (x, y) => 0
62fe9a7fd582 patch 8.2.2283: Vim9: crash when lambda has fewer arguments than expected
Bram Moolenaar <Bram@vim.org>
parents: 23444
diff changeset
730 END
62fe9a7fd582 patch 8.2.2283: Vim9: crash when lambda has fewer arguments than expected
Bram Moolenaar <Bram@vim.org>
parents: 23444
diff changeset
731 CheckDefAndScriptFailure(lines, 'E1012:')
62fe9a7fd582 patch 8.2.2283: Vim9: crash when lambda has fewer arguments than expected
Bram Moolenaar <Bram@vim.org>
parents: 23444
diff changeset
732
62fe9a7fd582 patch 8.2.2283: Vim9: crash when lambda has fewer arguments than expected
Bram Moolenaar <Bram@vim.org>
parents: 23444
diff changeset
733 lines =<< trim END
62fe9a7fd582 patch 8.2.2283: Vim9: crash when lambda has fewer arguments than expected
Bram Moolenaar <Bram@vim.org>
parents: 23444
diff changeset
734 var Ref: func(job, string)
62fe9a7fd582 patch 8.2.2283: Vim9: crash when lambda has fewer arguments than expected
Bram Moolenaar <Bram@vim.org>
parents: 23444
diff changeset
735 Ref = (x, y, z) => 0
62fe9a7fd582 patch 8.2.2283: Vim9: crash when lambda has fewer arguments than expected
Bram Moolenaar <Bram@vim.org>
parents: 23444
diff changeset
736 END
62fe9a7fd582 patch 8.2.2283: Vim9: crash when lambda has fewer arguments than expected
Bram Moolenaar <Bram@vim.org>
parents: 23444
diff changeset
737 CheckDefAndScriptFailure(lines, 'E1012:')
24033
308d29307910 patch 8.2.2558: no error if a lambda argument shadows a variable
Bram Moolenaar <Bram@vim.org>
parents: 23996
diff changeset
738
308d29307910 patch 8.2.2558: no error if a lambda argument shadows a variable
Bram Moolenaar <Bram@vim.org>
parents: 23996
diff changeset
739 lines =<< trim END
308d29307910 patch 8.2.2558: no error if a lambda argument shadows a variable
Bram Moolenaar <Bram@vim.org>
parents: 23996
diff changeset
740 var one = 1
308d29307910 patch 8.2.2558: no error if a lambda argument shadows a variable
Bram Moolenaar <Bram@vim.org>
parents: 23996
diff changeset
741 var l = [1, 2, 3]
308d29307910 patch 8.2.2558: no error if a lambda argument shadows a variable
Bram Moolenaar <Bram@vim.org>
parents: 23996
diff changeset
742 echo map(l, (one) => one)
308d29307910 patch 8.2.2558: no error if a lambda argument shadows a variable
Bram Moolenaar <Bram@vim.org>
parents: 23996
diff changeset
743 END
308d29307910 patch 8.2.2558: no error if a lambda argument shadows a variable
Bram Moolenaar <Bram@vim.org>
parents: 23996
diff changeset
744 CheckDefFailure(lines, 'E1167:')
308d29307910 patch 8.2.2558: no error if a lambda argument shadows a variable
Bram Moolenaar <Bram@vim.org>
parents: 23996
diff changeset
745 CheckScriptFailure(['vim9script'] + lines, 'E1168:')
308d29307910 patch 8.2.2558: no error if a lambda argument shadows a variable
Bram Moolenaar <Bram@vim.org>
parents: 23996
diff changeset
746
308d29307910 patch 8.2.2558: no error if a lambda argument shadows a variable
Bram Moolenaar <Bram@vim.org>
parents: 23996
diff changeset
747 lines =<< trim END
308d29307910 patch 8.2.2558: no error if a lambda argument shadows a variable
Bram Moolenaar <Bram@vim.org>
parents: 23996
diff changeset
748 def ShadowLocal()
308d29307910 patch 8.2.2558: no error if a lambda argument shadows a variable
Bram Moolenaar <Bram@vim.org>
parents: 23996
diff changeset
749 var one = 1
308d29307910 patch 8.2.2558: no error if a lambda argument shadows a variable
Bram Moolenaar <Bram@vim.org>
parents: 23996
diff changeset
750 var l = [1, 2, 3]
308d29307910 patch 8.2.2558: no error if a lambda argument shadows a variable
Bram Moolenaar <Bram@vim.org>
parents: 23996
diff changeset
751 echo map(l, (one) => one)
308d29307910 patch 8.2.2558: no error if a lambda argument shadows a variable
Bram Moolenaar <Bram@vim.org>
parents: 23996
diff changeset
752 enddef
308d29307910 patch 8.2.2558: no error if a lambda argument shadows a variable
Bram Moolenaar <Bram@vim.org>
parents: 23996
diff changeset
753 END
308d29307910 patch 8.2.2558: no error if a lambda argument shadows a variable
Bram Moolenaar <Bram@vim.org>
parents: 23996
diff changeset
754 CheckDefFailure(lines, 'E1167:')
308d29307910 patch 8.2.2558: no error if a lambda argument shadows a variable
Bram Moolenaar <Bram@vim.org>
parents: 23996
diff changeset
755
308d29307910 patch 8.2.2558: no error if a lambda argument shadows a variable
Bram Moolenaar <Bram@vim.org>
parents: 23996
diff changeset
756 lines =<< trim END
308d29307910 patch 8.2.2558: no error if a lambda argument shadows a variable
Bram Moolenaar <Bram@vim.org>
parents: 23996
diff changeset
757 def Shadowarg(one: number)
308d29307910 patch 8.2.2558: no error if a lambda argument shadows a variable
Bram Moolenaar <Bram@vim.org>
parents: 23996
diff changeset
758 var l = [1, 2, 3]
308d29307910 patch 8.2.2558: no error if a lambda argument shadows a variable
Bram Moolenaar <Bram@vim.org>
parents: 23996
diff changeset
759 echo map(l, (one) => one)
308d29307910 patch 8.2.2558: no error if a lambda argument shadows a variable
Bram Moolenaar <Bram@vim.org>
parents: 23996
diff changeset
760 enddef
308d29307910 patch 8.2.2558: no error if a lambda argument shadows a variable
Bram Moolenaar <Bram@vim.org>
parents: 23996
diff changeset
761 END
308d29307910 patch 8.2.2558: no error if a lambda argument shadows a variable
Bram Moolenaar <Bram@vim.org>
parents: 23996
diff changeset
762 CheckDefFailure(lines, 'E1167:')
22816
8a5369f5f2b4 patch 8.2.1956: Vim9: cannot specify argument types for lambda
Bram Moolenaar <Bram@vim.org>
parents: 22760
diff changeset
763 enddef
8a5369f5f2b4 patch 8.2.1956: Vim9: cannot specify argument types for lambda
Bram Moolenaar <Bram@vim.org>
parents: 22760
diff changeset
764
24156
a358fa462560 patch 8.2.2619: Vim9: no test for return type of lambda
Bram Moolenaar <Bram@vim.org>
parents: 24152
diff changeset
765 def FilterWithCond(x: string, Cond: func(string): bool): bool
a358fa462560 patch 8.2.2619: Vim9: no test for return type of lambda
Bram Moolenaar <Bram@vim.org>
parents: 24152
diff changeset
766 return Cond(x)
a358fa462560 patch 8.2.2619: Vim9: no test for return type of lambda
Bram Moolenaar <Bram@vim.org>
parents: 24152
diff changeset
767 enddef
a358fa462560 patch 8.2.2619: Vim9: no test for return type of lambda
Bram Moolenaar <Bram@vim.org>
parents: 24152
diff changeset
768
23808
baf9069f64ca patch 8.2.2445: Vim9: no proper error for lambda missing return type
Bram Moolenaar <Bram@vim.org>
parents: 23727
diff changeset
769 def Test_lambda_return_type()
baf9069f64ca patch 8.2.2445: Vim9: no proper error for lambda missing return type
Bram Moolenaar <Bram@vim.org>
parents: 23727
diff changeset
770 var lines =<< trim END
baf9069f64ca patch 8.2.2445: Vim9: no proper error for lambda missing return type
Bram Moolenaar <Bram@vim.org>
parents: 23727
diff changeset
771 var Ref = (): => 123
baf9069f64ca patch 8.2.2445: Vim9: no proper error for lambda missing return type
Bram Moolenaar <Bram@vim.org>
parents: 23727
diff changeset
772 END
baf9069f64ca patch 8.2.2445: Vim9: no proper error for lambda missing return type
Bram Moolenaar <Bram@vim.org>
parents: 23727
diff changeset
773 CheckDefAndScriptFailure(lines, 'E1157:', 1)
24156
a358fa462560 patch 8.2.2619: Vim9: no test for return type of lambda
Bram Moolenaar <Bram@vim.org>
parents: 24152
diff changeset
774
a358fa462560 patch 8.2.2619: Vim9: no test for return type of lambda
Bram Moolenaar <Bram@vim.org>
parents: 24152
diff changeset
775 # this works
a358fa462560 patch 8.2.2619: Vim9: no test for return type of lambda
Bram Moolenaar <Bram@vim.org>
parents: 24152
diff changeset
776 for x in ['foo', 'boo']
a358fa462560 patch 8.2.2619: Vim9: no test for return type of lambda
Bram Moolenaar <Bram@vim.org>
parents: 24152
diff changeset
777 echo FilterWithCond(x, (v) => v =~ '^b')
a358fa462560 patch 8.2.2619: Vim9: no test for return type of lambda
Bram Moolenaar <Bram@vim.org>
parents: 24152
diff changeset
778 endfor
a358fa462560 patch 8.2.2619: Vim9: no test for return type of lambda
Bram Moolenaar <Bram@vim.org>
parents: 24152
diff changeset
779
a358fa462560 patch 8.2.2619: Vim9: no test for return type of lambda
Bram Moolenaar <Bram@vim.org>
parents: 24152
diff changeset
780 # this fails
a358fa462560 patch 8.2.2619: Vim9: no test for return type of lambda
Bram Moolenaar <Bram@vim.org>
parents: 24152
diff changeset
781 lines =<< trim END
a358fa462560 patch 8.2.2619: Vim9: no test for return type of lambda
Bram Moolenaar <Bram@vim.org>
parents: 24152
diff changeset
782 echo FilterWithCond('foo', (v) => v .. '^b')
a358fa462560 patch 8.2.2619: Vim9: no test for return type of lambda
Bram Moolenaar <Bram@vim.org>
parents: 24152
diff changeset
783 END
a358fa462560 patch 8.2.2619: Vim9: no test for return type of lambda
Bram Moolenaar <Bram@vim.org>
parents: 24152
diff changeset
784 CheckDefAndScriptFailure(lines, 'E1013: Argument 2: type mismatch, expected func(string): bool but got func(any): string', 1)
23808
baf9069f64ca patch 8.2.2445: Vim9: no proper error for lambda missing return type
Bram Moolenaar <Bram@vim.org>
parents: 23727
diff changeset
785 enddef
baf9069f64ca patch 8.2.2445: Vim9: no proper error for lambda missing return type
Bram Moolenaar <Bram@vim.org>
parents: 23727
diff changeset
786
23171
bb7531f77529 patch 8.2.2131: Vim9: crash when lambda uses same var as assignment
Bram Moolenaar <Bram@vim.org>
parents: 23112
diff changeset
787 def Test_lambda_uses_assigned_var()
bb7531f77529 patch 8.2.2131: Vim9: crash when lambda uses same var as assignment
Bram Moolenaar <Bram@vim.org>
parents: 23112
diff changeset
788 CheckDefSuccess([
bb7531f77529 patch 8.2.2131: Vim9: crash when lambda uses same var as assignment
Bram Moolenaar <Bram@vim.org>
parents: 23112
diff changeset
789 'var x: any = "aaa"'
23428
5807e3958e38 patch 8.2.2257: Vim9: using -> for lambda is ambiguous
Bram Moolenaar <Bram@vim.org>
parents: 23426
diff changeset
790 'x = filter(["bbb"], (_, v) => v =~ x)'])
23171
bb7531f77529 patch 8.2.2131: Vim9: crash when lambda uses same var as assignment
Bram Moolenaar <Bram@vim.org>
parents: 23112
diff changeset
791 enddef
bb7531f77529 patch 8.2.2131: Vim9: crash when lambda uses same var as assignment
Bram Moolenaar <Bram@vim.org>
parents: 23112
diff changeset
792
24061
d6489b4eb14e patch 8.2.2572: Vim9: crash when getting the types for a legacy function
Bram Moolenaar <Bram@vim.org>
parents: 24033
diff changeset
793 def Test_pass_legacy_lambda_to_def_func()
d6489b4eb14e patch 8.2.2572: Vim9: crash when getting the types for a legacy function
Bram Moolenaar <Bram@vim.org>
parents: 24033
diff changeset
794 var lines =<< trim END
d6489b4eb14e patch 8.2.2572: Vim9: crash when getting the types for a legacy function
Bram Moolenaar <Bram@vim.org>
parents: 24033
diff changeset
795 vim9script
d6489b4eb14e patch 8.2.2572: Vim9: crash when getting the types for a legacy function
Bram Moolenaar <Bram@vim.org>
parents: 24033
diff changeset
796 func Foo()
d6489b4eb14e patch 8.2.2572: Vim9: crash when getting the types for a legacy function
Bram Moolenaar <Bram@vim.org>
parents: 24033
diff changeset
797 eval s:Bar({x -> 0})
d6489b4eb14e patch 8.2.2572: Vim9: crash when getting the types for a legacy function
Bram Moolenaar <Bram@vim.org>
parents: 24033
diff changeset
798 endfunc
d6489b4eb14e patch 8.2.2572: Vim9: crash when getting the types for a legacy function
Bram Moolenaar <Bram@vim.org>
parents: 24033
diff changeset
799 def Bar(y: any)
d6489b4eb14e patch 8.2.2572: Vim9: crash when getting the types for a legacy function
Bram Moolenaar <Bram@vim.org>
parents: 24033
diff changeset
800 enddef
d6489b4eb14e patch 8.2.2572: Vim9: crash when getting the types for a legacy function
Bram Moolenaar <Bram@vim.org>
parents: 24033
diff changeset
801 Foo()
d6489b4eb14e patch 8.2.2572: Vim9: crash when getting the types for a legacy function
Bram Moolenaar <Bram@vim.org>
parents: 24033
diff changeset
802 END
d6489b4eb14e patch 8.2.2572: Vim9: crash when getting the types for a legacy function
Bram Moolenaar <Bram@vim.org>
parents: 24033
diff changeset
803 CheckScriptSuccess(lines)
d6489b4eb14e patch 8.2.2572: Vim9: crash when getting the types for a legacy function
Bram Moolenaar <Bram@vim.org>
parents: 24033
diff changeset
804 enddef
d6489b4eb14e patch 8.2.2572: Vim9: crash when getting the types for a legacy function
Bram Moolenaar <Bram@vim.org>
parents: 24033
diff changeset
805
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
806 " Default arg and varargs
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
807 def MyDefVarargs(one: string, two = 'foo', ...rest: list<string>): string
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
808 var res = one .. ',' .. two
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
809 for s in rest
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
810 res ..= ',' .. s
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
811 endfor
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
812 return res
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
813 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
814
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
815 def Test_call_def_varargs()
22163
b6d36f0b4f03 patch 8.2.1631: test_fails() does not check the context of the line number
Bram Moolenaar <Bram@vim.org>
parents: 22159
diff changeset
816 assert_fails('MyDefVarargs()', 'E119:', '', 1, 'Test_call_def_varargs')
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
817 MyDefVarargs('one')->assert_equal('one,foo')
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
818 MyDefVarargs('one', 'two')->assert_equal('one,two')
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
819 MyDefVarargs('one', 'two', 'three')->assert_equal('one,two,three')
21481
279b3415947f patch 8.2.1291: Vim9: type of varargs items is not checked
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
820 CheckDefFailure(['MyDefVarargs("one", 22)'],
22296
006b8ab9d554 patch 8.2.1697: inconsistent capitalization of error messages
Bram Moolenaar <Bram@vim.org>
parents: 22292
diff changeset
821 'E1013: Argument 2: type mismatch, expected string but got number')
21481
279b3415947f patch 8.2.1291: Vim9: type of varargs items is not checked
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
822 CheckDefFailure(['MyDefVarargs("one", "two", 123)'],
22296
006b8ab9d554 patch 8.2.1697: inconsistent capitalization of error messages
Bram Moolenaar <Bram@vim.org>
parents: 22292
diff changeset
823 'E1013: Argument 3: type mismatch, expected string but got number')
21481
279b3415947f patch 8.2.1291: Vim9: type of varargs items is not checked
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
824
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
825 var lines =<< trim END
21481
279b3415947f patch 8.2.1291: Vim9: type of varargs items is not checked
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
826 vim9script
279b3415947f patch 8.2.1291: Vim9: type of varargs items is not checked
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
827 def Func(...l: list<string>)
279b3415947f patch 8.2.1291: Vim9: type of varargs items is not checked
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
828 echo l
279b3415947f patch 8.2.1291: Vim9: type of varargs items is not checked
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
829 enddef
279b3415947f patch 8.2.1291: Vim9: type of varargs items is not checked
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
830 Func('a', 'b', 'c')
279b3415947f patch 8.2.1291: Vim9: type of varargs items is not checked
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
831 END
279b3415947f patch 8.2.1291: Vim9: type of varargs items is not checked
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
832 CheckScriptSuccess(lines)
279b3415947f patch 8.2.1291: Vim9: type of varargs items is not checked
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
833
279b3415947f patch 8.2.1291: Vim9: type of varargs items is not checked
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
834 lines =<< trim END
279b3415947f patch 8.2.1291: Vim9: type of varargs items is not checked
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
835 vim9script
279b3415947f patch 8.2.1291: Vim9: type of varargs items is not checked
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
836 def Func(...l: list<string>)
279b3415947f patch 8.2.1291: Vim9: type of varargs items is not checked
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
837 echo l
279b3415947f patch 8.2.1291: Vim9: type of varargs items is not checked
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
838 enddef
279b3415947f patch 8.2.1291: Vim9: type of varargs items is not checked
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
839 Func()
279b3415947f patch 8.2.1291: Vim9: type of varargs items is not checked
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
840 END
279b3415947f patch 8.2.1291: Vim9: type of varargs items is not checked
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
841 CheckScriptSuccess(lines)
279b3415947f patch 8.2.1291: Vim9: type of varargs items is not checked
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
842
279b3415947f patch 8.2.1291: Vim9: type of varargs items is not checked
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
843 lines =<< trim END
279b3415947f patch 8.2.1291: Vim9: type of varargs items is not checked
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
844 vim9script
22292
3515f341e8ac patch 8.2.1695: Vim9: crash when using varargs type "any"
Bram Moolenaar <Bram@vim.org>
parents: 22284
diff changeset
845 def Func(...l: any)
3515f341e8ac patch 8.2.1695: Vim9: crash when using varargs type "any"
Bram Moolenaar <Bram@vim.org>
parents: 22284
diff changeset
846 echo l
3515f341e8ac patch 8.2.1695: Vim9: crash when using varargs type "any"
Bram Moolenaar <Bram@vim.org>
parents: 22284
diff changeset
847 enddef
3515f341e8ac patch 8.2.1695: Vim9: crash when using varargs type "any"
Bram Moolenaar <Bram@vim.org>
parents: 22284
diff changeset
848 Func(0)
3515f341e8ac patch 8.2.1695: Vim9: crash when using varargs type "any"
Bram Moolenaar <Bram@vim.org>
parents: 22284
diff changeset
849 END
3515f341e8ac patch 8.2.1695: Vim9: crash when using varargs type "any"
Bram Moolenaar <Bram@vim.org>
parents: 22284
diff changeset
850 CheckScriptSuccess(lines)
3515f341e8ac patch 8.2.1695: Vim9: crash when using varargs type "any"
Bram Moolenaar <Bram@vim.org>
parents: 22284
diff changeset
851
3515f341e8ac patch 8.2.1695: Vim9: crash when using varargs type "any"
Bram Moolenaar <Bram@vim.org>
parents: 22284
diff changeset
852 lines =<< trim END
3515f341e8ac patch 8.2.1695: Vim9: crash when using varargs type "any"
Bram Moolenaar <Bram@vim.org>
parents: 22284
diff changeset
853 vim9script
22349
b66a2e046c2e patch 8.2.1723: Vim9: Variable argument name cannot start with underscore
Bram Moolenaar <Bram@vim.org>
parents: 22339
diff changeset
854 def Func(..._l: list<string>)
b66a2e046c2e patch 8.2.1723: Vim9: Variable argument name cannot start with underscore
Bram Moolenaar <Bram@vim.org>
parents: 22339
diff changeset
855 echo _l
b66a2e046c2e patch 8.2.1723: Vim9: Variable argument name cannot start with underscore
Bram Moolenaar <Bram@vim.org>
parents: 22339
diff changeset
856 enddef
b66a2e046c2e patch 8.2.1723: Vim9: Variable argument name cannot start with underscore
Bram Moolenaar <Bram@vim.org>
parents: 22339
diff changeset
857 Func('a', 'b', 'c')
b66a2e046c2e patch 8.2.1723: Vim9: Variable argument name cannot start with underscore
Bram Moolenaar <Bram@vim.org>
parents: 22339
diff changeset
858 END
b66a2e046c2e patch 8.2.1723: Vim9: Variable argument name cannot start with underscore
Bram Moolenaar <Bram@vim.org>
parents: 22339
diff changeset
859 CheckScriptSuccess(lines)
b66a2e046c2e patch 8.2.1723: Vim9: Variable argument name cannot start with underscore
Bram Moolenaar <Bram@vim.org>
parents: 22339
diff changeset
860
b66a2e046c2e patch 8.2.1723: Vim9: Variable argument name cannot start with underscore
Bram Moolenaar <Bram@vim.org>
parents: 22339
diff changeset
861 lines =<< trim END
b66a2e046c2e patch 8.2.1723: Vim9: Variable argument name cannot start with underscore
Bram Moolenaar <Bram@vim.org>
parents: 22339
diff changeset
862 vim9script
21481
279b3415947f patch 8.2.1291: Vim9: type of varargs items is not checked
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
863 def Func(...l: list<string>)
279b3415947f patch 8.2.1291: Vim9: type of varargs items is not checked
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
864 echo l
279b3415947f patch 8.2.1291: Vim9: type of varargs items is not checked
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
865 enddef
279b3415947f patch 8.2.1291: Vim9: type of varargs items is not checked
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
866 Func(1, 2, 3)
279b3415947f patch 8.2.1291: Vim9: type of varargs items is not checked
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
867 END
22296
006b8ab9d554 patch 8.2.1697: inconsistent capitalization of error messages
Bram Moolenaar <Bram@vim.org>
parents: 22292
diff changeset
868 CheckScriptFailure(lines, 'E1013: Argument 1: type mismatch')
21481
279b3415947f patch 8.2.1291: Vim9: type of varargs items is not checked
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
869
279b3415947f patch 8.2.1291: Vim9: type of varargs items is not checked
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
870 lines =<< trim END
279b3415947f patch 8.2.1291: Vim9: type of varargs items is not checked
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
871 vim9script
279b3415947f patch 8.2.1291: Vim9: type of varargs items is not checked
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
872 def Func(...l: list<string>)
279b3415947f patch 8.2.1291: Vim9: type of varargs items is not checked
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
873 echo l
279b3415947f patch 8.2.1291: Vim9: type of varargs items is not checked
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
874 enddef
279b3415947f patch 8.2.1291: Vim9: type of varargs items is not checked
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
875 Func('a', 9)
279b3415947f patch 8.2.1291: Vim9: type of varargs items is not checked
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
876 END
22296
006b8ab9d554 patch 8.2.1697: inconsistent capitalization of error messages
Bram Moolenaar <Bram@vim.org>
parents: 22292
diff changeset
877 CheckScriptFailure(lines, 'E1013: Argument 2: type mismatch')
21481
279b3415947f patch 8.2.1291: Vim9: type of varargs items is not checked
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
878
279b3415947f patch 8.2.1291: Vim9: type of varargs items is not checked
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
879 lines =<< trim END
279b3415947f patch 8.2.1291: Vim9: type of varargs items is not checked
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
880 vim9script
279b3415947f patch 8.2.1291: Vim9: type of varargs items is not checked
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
881 def Func(...l: list<string>)
279b3415947f patch 8.2.1291: Vim9: type of varargs items is not checked
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
882 echo l
279b3415947f patch 8.2.1291: Vim9: type of varargs items is not checked
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
883 enddef
279b3415947f patch 8.2.1291: Vim9: type of varargs items is not checked
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
884 Func(1, 'a')
279b3415947f patch 8.2.1291: Vim9: type of varargs items is not checked
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
885 END
22296
006b8ab9d554 patch 8.2.1697: inconsistent capitalization of error messages
Bram Moolenaar <Bram@vim.org>
parents: 22292
diff changeset
886 CheckScriptFailure(lines, 'E1013: Argument 1: type mismatch')
23879
9ddf1a537fc2 patch 8.2.2481: Vim9: confusing error when variable arguments have default
Bram Moolenaar <Bram@vim.org>
parents: 23808
diff changeset
887
9ddf1a537fc2 patch 8.2.2481: Vim9: confusing error when variable arguments have default
Bram Moolenaar <Bram@vim.org>
parents: 23808
diff changeset
888 lines =<< trim END
9ddf1a537fc2 patch 8.2.2481: Vim9: confusing error when variable arguments have default
Bram Moolenaar <Bram@vim.org>
parents: 23808
diff changeset
889 vim9script
9ddf1a537fc2 patch 8.2.2481: Vim9: confusing error when variable arguments have default
Bram Moolenaar <Bram@vim.org>
parents: 23808
diff changeset
890 def Func( # some comment
9ddf1a537fc2 patch 8.2.2481: Vim9: confusing error when variable arguments have default
Bram Moolenaar <Bram@vim.org>
parents: 23808
diff changeset
891 ...l = []
9ddf1a537fc2 patch 8.2.2481: Vim9: confusing error when variable arguments have default
Bram Moolenaar <Bram@vim.org>
parents: 23808
diff changeset
892 )
9ddf1a537fc2 patch 8.2.2481: Vim9: confusing error when variable arguments have default
Bram Moolenaar <Bram@vim.org>
parents: 23808
diff changeset
893 echo l
9ddf1a537fc2 patch 8.2.2481: Vim9: confusing error when variable arguments have default
Bram Moolenaar <Bram@vim.org>
parents: 23808
diff changeset
894 enddef
9ddf1a537fc2 patch 8.2.2481: Vim9: confusing error when variable arguments have default
Bram Moolenaar <Bram@vim.org>
parents: 23808
diff changeset
895 END
9ddf1a537fc2 patch 8.2.2481: Vim9: confusing error when variable arguments have default
Bram Moolenaar <Bram@vim.org>
parents: 23808
diff changeset
896 CheckScriptFailure(lines, 'E1160:')
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
897 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
898
19975
4e8e0ce576af patch 8.2.0543: Vim9: function with varargs does not work properly
Bram Moolenaar <Bram@vim.org>
parents: 19946
diff changeset
899 let s:value = ''
4e8e0ce576af patch 8.2.0543: Vim9: function with varargs does not work properly
Bram Moolenaar <Bram@vim.org>
parents: 19946
diff changeset
900
4e8e0ce576af patch 8.2.0543: Vim9: function with varargs does not work properly
Bram Moolenaar <Bram@vim.org>
parents: 19946
diff changeset
901 def FuncOneDefArg(opt = 'text')
4e8e0ce576af patch 8.2.0543: Vim9: function with varargs does not work properly
Bram Moolenaar <Bram@vim.org>
parents: 19946
diff changeset
902 s:value = opt
4e8e0ce576af patch 8.2.0543: Vim9: function with varargs does not work properly
Bram Moolenaar <Bram@vim.org>
parents: 19946
diff changeset
903 enddef
4e8e0ce576af patch 8.2.0543: Vim9: function with varargs does not work properly
Bram Moolenaar <Bram@vim.org>
parents: 19946
diff changeset
904
4e8e0ce576af patch 8.2.0543: Vim9: function with varargs does not work properly
Bram Moolenaar <Bram@vim.org>
parents: 19946
diff changeset
905 def FuncTwoDefArg(nr = 123, opt = 'text'): string
4e8e0ce576af patch 8.2.0543: Vim9: function with varargs does not work properly
Bram Moolenaar <Bram@vim.org>
parents: 19946
diff changeset
906 return nr .. opt
4e8e0ce576af patch 8.2.0543: Vim9: function with varargs does not work properly
Bram Moolenaar <Bram@vim.org>
parents: 19946
diff changeset
907 enddef
4e8e0ce576af patch 8.2.0543: Vim9: function with varargs does not work properly
Bram Moolenaar <Bram@vim.org>
parents: 19946
diff changeset
908
4e8e0ce576af patch 8.2.0543: Vim9: function with varargs does not work properly
Bram Moolenaar <Bram@vim.org>
parents: 19946
diff changeset
909 def FuncVarargs(...arg: list<string>): string
4e8e0ce576af patch 8.2.0543: Vim9: function with varargs does not work properly
Bram Moolenaar <Bram@vim.org>
parents: 19946
diff changeset
910 return join(arg, ',')
4e8e0ce576af patch 8.2.0543: Vim9: function with varargs does not work properly
Bram Moolenaar <Bram@vim.org>
parents: 19946
diff changeset
911 enddef
4e8e0ce576af patch 8.2.0543: Vim9: function with varargs does not work properly
Bram Moolenaar <Bram@vim.org>
parents: 19946
diff changeset
912
4e8e0ce576af patch 8.2.0543: Vim9: function with varargs does not work properly
Bram Moolenaar <Bram@vim.org>
parents: 19946
diff changeset
913 def Test_func_type_varargs()
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
914 var RefDefArg: func(?string)
19975
4e8e0ce576af patch 8.2.0543: Vim9: function with varargs does not work properly
Bram Moolenaar <Bram@vim.org>
parents: 19946
diff changeset
915 RefDefArg = FuncOneDefArg
4e8e0ce576af patch 8.2.0543: Vim9: function with varargs does not work properly
Bram Moolenaar <Bram@vim.org>
parents: 19946
diff changeset
916 RefDefArg()
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
917 s:value->assert_equal('text')
19975
4e8e0ce576af patch 8.2.0543: Vim9: function with varargs does not work properly
Bram Moolenaar <Bram@vim.org>
parents: 19946
diff changeset
918 RefDefArg('some')
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
919 s:value->assert_equal('some')
19975
4e8e0ce576af patch 8.2.0543: Vim9: function with varargs does not work properly
Bram Moolenaar <Bram@vim.org>
parents: 19946
diff changeset
920
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
921 var RefDef2Arg: func(?number, ?string): string
19975
4e8e0ce576af patch 8.2.0543: Vim9: function with varargs does not work properly
Bram Moolenaar <Bram@vim.org>
parents: 19946
diff changeset
922 RefDef2Arg = FuncTwoDefArg
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
923 RefDef2Arg()->assert_equal('123text')
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
924 RefDef2Arg(99)->assert_equal('99text')
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
925 RefDef2Arg(77, 'some')->assert_equal('77some')
19975
4e8e0ce576af patch 8.2.0543: Vim9: function with varargs does not work properly
Bram Moolenaar <Bram@vim.org>
parents: 19946
diff changeset
926
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
927 CheckDefFailure(['var RefWrong: func(string?)'], 'E1010:')
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
928 CheckDefFailure(['var RefWrong: func(?string, string)'], 'E1007:')
19975
4e8e0ce576af patch 8.2.0543: Vim9: function with varargs does not work properly
Bram Moolenaar <Bram@vim.org>
parents: 19946
diff changeset
929
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
930 var RefVarargs: func(...list<string>): string
19975
4e8e0ce576af patch 8.2.0543: Vim9: function with varargs does not work properly
Bram Moolenaar <Bram@vim.org>
parents: 19946
diff changeset
931 RefVarargs = FuncVarargs
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
932 RefVarargs()->assert_equal('')
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
933 RefVarargs('one')->assert_equal('one')
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
934 RefVarargs('one', 'two')->assert_equal('one,two')
19975
4e8e0ce576af patch 8.2.0543: Vim9: function with varargs does not work properly
Bram Moolenaar <Bram@vim.org>
parents: 19946
diff changeset
935
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
936 CheckDefFailure(['var RefWrong: func(...list<string>, string)'], 'E110:')
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
937 CheckDefFailure(['var RefWrong: func(...list<string>, ?string)'], 'E110:')
19975
4e8e0ce576af patch 8.2.0543: Vim9: function with varargs does not work properly
Bram Moolenaar <Bram@vim.org>
parents: 19946
diff changeset
938 enddef
4e8e0ce576af patch 8.2.0543: Vim9: function with varargs does not work properly
Bram Moolenaar <Bram@vim.org>
parents: 19946
diff changeset
939
19944
3055cd26e139 patch 8.2.0528: Vim9: function arguments insufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 19942
diff changeset
940 " Only varargs
3055cd26e139 patch 8.2.0528: Vim9: function arguments insufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 19942
diff changeset
941 def MyVarargsOnly(...args: list<string>): string
3055cd26e139 patch 8.2.0528: Vim9: function arguments insufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 19942
diff changeset
942 return join(args, ',')
3055cd26e139 patch 8.2.0528: Vim9: function arguments insufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 19942
diff changeset
943 enddef
3055cd26e139 patch 8.2.0528: Vim9: function arguments insufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 19942
diff changeset
944
3055cd26e139 patch 8.2.0528: Vim9: function arguments insufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 19942
diff changeset
945 def Test_call_varargs_only()
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
946 MyVarargsOnly()->assert_equal('')
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
947 MyVarargsOnly('one')->assert_equal('one')
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
948 MyVarargsOnly('one', 'two')->assert_equal('one,two')
22296
006b8ab9d554 patch 8.2.1697: inconsistent capitalization of error messages
Bram Moolenaar <Bram@vim.org>
parents: 22292
diff changeset
949 CheckDefFailure(['MyVarargsOnly(1)'], 'E1013: Argument 1: type mismatch, expected string but got number')
006b8ab9d554 patch 8.2.1697: inconsistent capitalization of error messages
Bram Moolenaar <Bram@vim.org>
parents: 22292
diff changeset
950 CheckDefFailure(['MyVarargsOnly("one", 2)'], 'E1013: Argument 2: type mismatch, expected string but got number')
19944
3055cd26e139 patch 8.2.0528: Vim9: function arguments insufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 19942
diff changeset
951 enddef
3055cd26e139 patch 8.2.0528: Vim9: function arguments insufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 19942
diff changeset
952
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
953 def Test_using_var_as_arg()
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
954 writefile(['def Func(x: number)', 'var x = 234', 'enddef', 'defcompile'], 'Xdef')
22163
b6d36f0b4f03 patch 8.2.1631: test_fails() does not check the context of the line number
Bram Moolenaar <Bram@vim.org>
parents: 22159
diff changeset
955 assert_fails('so Xdef', 'E1006:', '', 1, 'Func')
22147
d55008685870 patch 8.2.1623: Vim9: using :call where it is not needed
Bram Moolenaar <Bram@vim.org>
parents: 22139
diff changeset
956 delete('Xdef')
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
957 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
958
20355
fc2d76e0994c patch 8.2.0733: Vim9: assigning to dict or list argument does not work
Bram Moolenaar <Bram@vim.org>
parents: 20303
diff changeset
959 def DictArg(arg: dict<string>)
fc2d76e0994c patch 8.2.0733: Vim9: assigning to dict or list argument does not work
Bram Moolenaar <Bram@vim.org>
parents: 20303
diff changeset
960 arg['key'] = 'value'
fc2d76e0994c patch 8.2.0733: Vim9: assigning to dict or list argument does not work
Bram Moolenaar <Bram@vim.org>
parents: 20303
diff changeset
961 enddef
fc2d76e0994c patch 8.2.0733: Vim9: assigning to dict or list argument does not work
Bram Moolenaar <Bram@vim.org>
parents: 20303
diff changeset
962
fc2d76e0994c patch 8.2.0733: Vim9: assigning to dict or list argument does not work
Bram Moolenaar <Bram@vim.org>
parents: 20303
diff changeset
963 def ListArg(arg: list<string>)
fc2d76e0994c patch 8.2.0733: Vim9: assigning to dict or list argument does not work
Bram Moolenaar <Bram@vim.org>
parents: 20303
diff changeset
964 arg[0] = 'value'
fc2d76e0994c patch 8.2.0733: Vim9: assigning to dict or list argument does not work
Bram Moolenaar <Bram@vim.org>
parents: 20303
diff changeset
965 enddef
fc2d76e0994c patch 8.2.0733: Vim9: assigning to dict or list argument does not work
Bram Moolenaar <Bram@vim.org>
parents: 20303
diff changeset
966
fc2d76e0994c patch 8.2.0733: Vim9: assigning to dict or list argument does not work
Bram Moolenaar <Bram@vim.org>
parents: 20303
diff changeset
967 def Test_assign_to_argument()
21353
fb8c8fcb7b60 patch 8.2.1227: Vim9: allowing both quoted and # comments is confusing
Bram Moolenaar <Bram@vim.org>
parents: 21347
diff changeset
968 # works for dict and list
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
969 var d: dict<string> = {}
20355
fc2d76e0994c patch 8.2.0733: Vim9: assigning to dict or list argument does not work
Bram Moolenaar <Bram@vim.org>
parents: 20303
diff changeset
970 DictArg(d)
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
971 d['key']->assert_equal('value')
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
972 var l: list<string> = []
20355
fc2d76e0994c patch 8.2.0733: Vim9: assigning to dict or list argument does not work
Bram Moolenaar <Bram@vim.org>
parents: 20303
diff changeset
973 ListArg(l)
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
974 l[0]->assert_equal('value')
20355
fc2d76e0994c patch 8.2.0733: Vim9: assigning to dict or list argument does not work
Bram Moolenaar <Bram@vim.org>
parents: 20303
diff changeset
975
22147
d55008685870 patch 8.2.1623: Vim9: using :call where it is not needed
Bram Moolenaar <Bram@vim.org>
parents: 22139
diff changeset
976 CheckScriptFailure(['def Func(arg: number)', 'arg = 3', 'enddef', 'defcompile'], 'E1090:')
23092
c713358da074 patch 8.2.2092: Vim9: unpredictable errors for script tests
Bram Moolenaar <Bram@vim.org>
parents: 23074
diff changeset
977 delfunc! g:Func
20355
fc2d76e0994c patch 8.2.0733: Vim9: assigning to dict or list argument does not work
Bram Moolenaar <Bram@vim.org>
parents: 20303
diff changeset
978 enddef
fc2d76e0994c patch 8.2.0733: Vim9: assigning to dict or list argument does not work
Bram Moolenaar <Bram@vim.org>
parents: 20303
diff changeset
979
22339
56f674e7518c patch 8.2.1718: Vim9: :def function disallows "firstline" for no good reason
Bram Moolenaar <Bram@vim.org>
parents: 22318
diff changeset
980 " These argument names are reserved in legacy functions.
56f674e7518c patch 8.2.1718: Vim9: :def function disallows "firstline" for no good reason
Bram Moolenaar <Bram@vim.org>
parents: 22318
diff changeset
981 def WithReservedNames(firstline: string, lastline: string): string
56f674e7518c patch 8.2.1718: Vim9: :def function disallows "firstline" for no good reason
Bram Moolenaar <Bram@vim.org>
parents: 22318
diff changeset
982 return firstline .. lastline
56f674e7518c patch 8.2.1718: Vim9: :def function disallows "firstline" for no good reason
Bram Moolenaar <Bram@vim.org>
parents: 22318
diff changeset
983 enddef
56f674e7518c patch 8.2.1718: Vim9: :def function disallows "firstline" for no good reason
Bram Moolenaar <Bram@vim.org>
parents: 22318
diff changeset
984
56f674e7518c patch 8.2.1718: Vim9: :def function disallows "firstline" for no good reason
Bram Moolenaar <Bram@vim.org>
parents: 22318
diff changeset
985 def Test_argument_names()
56f674e7518c patch 8.2.1718: Vim9: :def function disallows "firstline" for no good reason
Bram Moolenaar <Bram@vim.org>
parents: 22318
diff changeset
986 assert_equal('OK', WithReservedNames('O', 'K'))
56f674e7518c patch 8.2.1718: Vim9: :def function disallows "firstline" for no good reason
Bram Moolenaar <Bram@vim.org>
parents: 22318
diff changeset
987 enddef
56f674e7518c patch 8.2.1718: Vim9: :def function disallows "firstline" for no good reason
Bram Moolenaar <Bram@vim.org>
parents: 22318
diff changeset
988
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
989 def Test_call_func_defined_later()
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
990 g:DefinedLater('one')->assert_equal('one')
22163
b6d36f0b4f03 patch 8.2.1631: test_fails() does not check the context of the line number
Bram Moolenaar <Bram@vim.org>
parents: 22159
diff changeset
991 assert_fails('NotDefined("one")', 'E117:', '', 2, 'Test_call_func_defined_later')
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
992 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
993
20140
39a18a0df429 patch 8.2.0625: Vim9: confusing error when calling unknown function
Bram Moolenaar <Bram@vim.org>
parents: 20029
diff changeset
994 func DefinedLater(arg)
39a18a0df429 patch 8.2.0625: Vim9: confusing error when calling unknown function
Bram Moolenaar <Bram@vim.org>
parents: 20029
diff changeset
995 return a:arg
39a18a0df429 patch 8.2.0625: Vim9: confusing error when calling unknown function
Bram Moolenaar <Bram@vim.org>
parents: 20029
diff changeset
996 endfunc
39a18a0df429 patch 8.2.0625: Vim9: confusing error when calling unknown function
Bram Moolenaar <Bram@vim.org>
parents: 20029
diff changeset
997
39a18a0df429 patch 8.2.0625: Vim9: confusing error when calling unknown function
Bram Moolenaar <Bram@vim.org>
parents: 20029
diff changeset
998 def Test_call_funcref()
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
999 g:SomeFunc('abc')->assert_equal(3)
22163
b6d36f0b4f03 patch 8.2.1631: test_fails() does not check the context of the line number
Bram Moolenaar <Bram@vim.org>
parents: 22159
diff changeset
1000 assert_fails('NotAFunc()', 'E117:', '', 2, 'Test_call_funcref') # comment after call
b6d36f0b4f03 patch 8.2.1631: test_fails() does not check the context of the line number
Bram Moolenaar <Bram@vim.org>
parents: 22159
diff changeset
1001 assert_fails('g:NotAFunc()', 'E117:', '', 3, 'Test_call_funcref')
21439
166c15374bda patch 8.2.1270: Vim9: not skipping over function type declaration
Bram Moolenaar <Bram@vim.org>
parents: 21383
diff changeset
1002
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1003 var lines =<< trim END
21439
166c15374bda patch 8.2.1270: Vim9: not skipping over function type declaration
Bram Moolenaar <Bram@vim.org>
parents: 21383
diff changeset
1004 vim9script
166c15374bda patch 8.2.1270: Vim9: not skipping over function type declaration
Bram Moolenaar <Bram@vim.org>
parents: 21383
diff changeset
1005 def RetNumber(): number
166c15374bda patch 8.2.1270: Vim9: not skipping over function type declaration
Bram Moolenaar <Bram@vim.org>
parents: 21383
diff changeset
1006 return 123
166c15374bda patch 8.2.1270: Vim9: not skipping over function type declaration
Bram Moolenaar <Bram@vim.org>
parents: 21383
diff changeset
1007 enddef
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1008 var Funcref: func: number = function('RetNumber')
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1009 Funcref()->assert_equal(123)
21439
166c15374bda patch 8.2.1270: Vim9: not skipping over function type declaration
Bram Moolenaar <Bram@vim.org>
parents: 21383
diff changeset
1010 END
166c15374bda patch 8.2.1270: Vim9: not skipping over function type declaration
Bram Moolenaar <Bram@vim.org>
parents: 21383
diff changeset
1011 CheckScriptSuccess(lines)
21441
78d97ee2c707 patch 8.2.1271: Vim9: Error for Funcref function argument type
Bram Moolenaar <Bram@vim.org>
parents: 21439
diff changeset
1012
78d97ee2c707 patch 8.2.1271: Vim9: Error for Funcref function argument type
Bram Moolenaar <Bram@vim.org>
parents: 21439
diff changeset
1013 lines =<< trim END
78d97ee2c707 patch 8.2.1271: Vim9: Error for Funcref function argument type
Bram Moolenaar <Bram@vim.org>
parents: 21439
diff changeset
1014 vim9script
78d97ee2c707 patch 8.2.1271: Vim9: Error for Funcref function argument type
Bram Moolenaar <Bram@vim.org>
parents: 21439
diff changeset
1015 def RetNumber(): number
78d97ee2c707 patch 8.2.1271: Vim9: Error for Funcref function argument type
Bram Moolenaar <Bram@vim.org>
parents: 21439
diff changeset
1016 return 123
78d97ee2c707 patch 8.2.1271: Vim9: Error for Funcref function argument type
Bram Moolenaar <Bram@vim.org>
parents: 21439
diff changeset
1017 enddef
78d97ee2c707 patch 8.2.1271: Vim9: Error for Funcref function argument type
Bram Moolenaar <Bram@vim.org>
parents: 21439
diff changeset
1018 def Bar(F: func: number): number
78d97ee2c707 patch 8.2.1271: Vim9: Error for Funcref function argument type
Bram Moolenaar <Bram@vim.org>
parents: 21439
diff changeset
1019 return F()
78d97ee2c707 patch 8.2.1271: Vim9: Error for Funcref function argument type
Bram Moolenaar <Bram@vim.org>
parents: 21439
diff changeset
1020 enddef
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1021 var Funcref = function('RetNumber')
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1022 Bar(Funcref)->assert_equal(123)
21441
78d97ee2c707 patch 8.2.1271: Vim9: Error for Funcref function argument type
Bram Moolenaar <Bram@vim.org>
parents: 21439
diff changeset
1023 END
78d97ee2c707 patch 8.2.1271: Vim9: Error for Funcref function argument type
Bram Moolenaar <Bram@vim.org>
parents: 21439
diff changeset
1024 CheckScriptSuccess(lines)
21467
49072a858baf patch 8.2.1284: Vim9: skipping over type includes following white space
Bram Moolenaar <Bram@vim.org>
parents: 21463
diff changeset
1025
49072a858baf patch 8.2.1284: Vim9: skipping over type includes following white space
Bram Moolenaar <Bram@vim.org>
parents: 21463
diff changeset
1026 lines =<< trim END
49072a858baf patch 8.2.1284: Vim9: skipping over type includes following white space
Bram Moolenaar <Bram@vim.org>
parents: 21463
diff changeset
1027 vim9script
49072a858baf patch 8.2.1284: Vim9: skipping over type includes following white space
Bram Moolenaar <Bram@vim.org>
parents: 21463
diff changeset
1028 def UseNumber(nr: number)
49072a858baf patch 8.2.1284: Vim9: skipping over type includes following white space
Bram Moolenaar <Bram@vim.org>
parents: 21463
diff changeset
1029 echo nr
49072a858baf patch 8.2.1284: Vim9: skipping over type includes following white space
Bram Moolenaar <Bram@vim.org>
parents: 21463
diff changeset
1030 enddef
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1031 var Funcref: func(number) = function('UseNumber')
21467
49072a858baf patch 8.2.1284: Vim9: skipping over type includes following white space
Bram Moolenaar <Bram@vim.org>
parents: 21463
diff changeset
1032 Funcref(123)
49072a858baf patch 8.2.1284: Vim9: skipping over type includes following white space
Bram Moolenaar <Bram@vim.org>
parents: 21463
diff changeset
1033 END
49072a858baf patch 8.2.1284: Vim9: skipping over type includes following white space
Bram Moolenaar <Bram@vim.org>
parents: 21463
diff changeset
1034 CheckScriptSuccess(lines)
21469
4d156aead799 patch 8.2.1285: Vim9: argument types are not checked on assignment
Bram Moolenaar <Bram@vim.org>
parents: 21467
diff changeset
1035
4d156aead799 patch 8.2.1285: Vim9: argument types are not checked on assignment
Bram Moolenaar <Bram@vim.org>
parents: 21467
diff changeset
1036 lines =<< trim END
4d156aead799 patch 8.2.1285: Vim9: argument types are not checked on assignment
Bram Moolenaar <Bram@vim.org>
parents: 21467
diff changeset
1037 vim9script
4d156aead799 patch 8.2.1285: Vim9: argument types are not checked on assignment
Bram Moolenaar <Bram@vim.org>
parents: 21467
diff changeset
1038 def UseNumber(nr: number)
4d156aead799 patch 8.2.1285: Vim9: argument types are not checked on assignment
Bram Moolenaar <Bram@vim.org>
parents: 21467
diff changeset
1039 echo nr
4d156aead799 patch 8.2.1285: Vim9: argument types are not checked on assignment
Bram Moolenaar <Bram@vim.org>
parents: 21467
diff changeset
1040 enddef
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1041 var Funcref: func(string) = function('UseNumber')
21469
4d156aead799 patch 8.2.1285: Vim9: argument types are not checked on assignment
Bram Moolenaar <Bram@vim.org>
parents: 21467
diff changeset
1042 END
22284
6b385c2b9ff5 patch 8.2.1691: Vim9: list<any> is not accepted where list<number> is expected
Bram Moolenaar <Bram@vim.org>
parents: 22264
diff changeset
1043 CheckScriptFailure(lines, 'E1012: Type mismatch; expected func(string) but got func(number)')
21500
574517d682cf patch 8.2.1300: Vim9: optional argument type not parsed properly
Bram Moolenaar <Bram@vim.org>
parents: 21481
diff changeset
1044
574517d682cf patch 8.2.1300: Vim9: optional argument type not parsed properly
Bram Moolenaar <Bram@vim.org>
parents: 21481
diff changeset
1045 lines =<< trim END
574517d682cf patch 8.2.1300: Vim9: optional argument type not parsed properly
Bram Moolenaar <Bram@vim.org>
parents: 21481
diff changeset
1046 vim9script
574517d682cf patch 8.2.1300: Vim9: optional argument type not parsed properly
Bram Moolenaar <Bram@vim.org>
parents: 21481
diff changeset
1047 def EchoNr(nr = 34)
574517d682cf patch 8.2.1300: Vim9: optional argument type not parsed properly
Bram Moolenaar <Bram@vim.org>
parents: 21481
diff changeset
1048 g:echo = nr
574517d682cf patch 8.2.1300: Vim9: optional argument type not parsed properly
Bram Moolenaar <Bram@vim.org>
parents: 21481
diff changeset
1049 enddef
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1050 var Funcref: func(?number) = function('EchoNr')
21500
574517d682cf patch 8.2.1300: Vim9: optional argument type not parsed properly
Bram Moolenaar <Bram@vim.org>
parents: 21481
diff changeset
1051 Funcref()
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1052 g:echo->assert_equal(34)
21500
574517d682cf patch 8.2.1300: Vim9: optional argument type not parsed properly
Bram Moolenaar <Bram@vim.org>
parents: 21481
diff changeset
1053 Funcref(123)
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1054 g:echo->assert_equal(123)
21500
574517d682cf patch 8.2.1300: Vim9: optional argument type not parsed properly
Bram Moolenaar <Bram@vim.org>
parents: 21481
diff changeset
1055 END
574517d682cf patch 8.2.1300: Vim9: optional argument type not parsed properly
Bram Moolenaar <Bram@vim.org>
parents: 21481
diff changeset
1056 CheckScriptSuccess(lines)
21502
179697662a5a patch 8.2.1301: Vim9: varargs argument type not parsed properly
Bram Moolenaar <Bram@vim.org>
parents: 21500
diff changeset
1057
179697662a5a patch 8.2.1301: Vim9: varargs argument type not parsed properly
Bram Moolenaar <Bram@vim.org>
parents: 21500
diff changeset
1058 lines =<< trim END
179697662a5a patch 8.2.1301: Vim9: varargs argument type not parsed properly
Bram Moolenaar <Bram@vim.org>
parents: 21500
diff changeset
1059 vim9script
179697662a5a patch 8.2.1301: Vim9: varargs argument type not parsed properly
Bram Moolenaar <Bram@vim.org>
parents: 21500
diff changeset
1060 def EchoList(...l: list<number>)
179697662a5a patch 8.2.1301: Vim9: varargs argument type not parsed properly
Bram Moolenaar <Bram@vim.org>
parents: 21500
diff changeset
1061 g:echo = l
179697662a5a patch 8.2.1301: Vim9: varargs argument type not parsed properly
Bram Moolenaar <Bram@vim.org>
parents: 21500
diff changeset
1062 enddef
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1063 var Funcref: func(...list<number>) = function('EchoList')
21502
179697662a5a patch 8.2.1301: Vim9: varargs argument type not parsed properly
Bram Moolenaar <Bram@vim.org>
parents: 21500
diff changeset
1064 Funcref()
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1065 g:echo->assert_equal([])
21502
179697662a5a patch 8.2.1301: Vim9: varargs argument type not parsed properly
Bram Moolenaar <Bram@vim.org>
parents: 21500
diff changeset
1066 Funcref(1, 2, 3)
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1067 g:echo->assert_equal([1, 2, 3])
21502
179697662a5a patch 8.2.1301: Vim9: varargs argument type not parsed properly
Bram Moolenaar <Bram@vim.org>
parents: 21500
diff changeset
1068 END
179697662a5a patch 8.2.1301: Vim9: varargs argument type not parsed properly
Bram Moolenaar <Bram@vim.org>
parents: 21500
diff changeset
1069 CheckScriptSuccess(lines)
21504
e87a97868bbc patch 8.2.1302: Vim9: varargs arg after optional arg does not work
Bram Moolenaar <Bram@vim.org>
parents: 21502
diff changeset
1070
e87a97868bbc patch 8.2.1302: Vim9: varargs arg after optional arg does not work
Bram Moolenaar <Bram@vim.org>
parents: 21502
diff changeset
1071 lines =<< trim END
e87a97868bbc patch 8.2.1302: Vim9: varargs arg after optional arg does not work
Bram Moolenaar <Bram@vim.org>
parents: 21502
diff changeset
1072 vim9script
e87a97868bbc patch 8.2.1302: Vim9: varargs arg after optional arg does not work
Bram Moolenaar <Bram@vim.org>
parents: 21502
diff changeset
1073 def OptAndVar(nr: number, opt = 12, ...l: list<number>): number
e87a97868bbc patch 8.2.1302: Vim9: varargs arg after optional arg does not work
Bram Moolenaar <Bram@vim.org>
parents: 21502
diff changeset
1074 g:optarg = opt
e87a97868bbc patch 8.2.1302: Vim9: varargs arg after optional arg does not work
Bram Moolenaar <Bram@vim.org>
parents: 21502
diff changeset
1075 g:listarg = l
e87a97868bbc patch 8.2.1302: Vim9: varargs arg after optional arg does not work
Bram Moolenaar <Bram@vim.org>
parents: 21502
diff changeset
1076 return nr
e87a97868bbc patch 8.2.1302: Vim9: varargs arg after optional arg does not work
Bram Moolenaar <Bram@vim.org>
parents: 21502
diff changeset
1077 enddef
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1078 var Funcref: func(number, ?number, ...list<number>): number = function('OptAndVar')
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1079 Funcref(10)->assert_equal(10)
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1080 g:optarg->assert_equal(12)
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1081 g:listarg->assert_equal([])
21504
e87a97868bbc patch 8.2.1302: Vim9: varargs arg after optional arg does not work
Bram Moolenaar <Bram@vim.org>
parents: 21502
diff changeset
1082
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1083 Funcref(11, 22)->assert_equal(11)
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1084 g:optarg->assert_equal(22)
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1085 g:listarg->assert_equal([])
21504
e87a97868bbc patch 8.2.1302: Vim9: varargs arg after optional arg does not work
Bram Moolenaar <Bram@vim.org>
parents: 21502
diff changeset
1086
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1087 Funcref(17, 18, 1, 2, 3)->assert_equal(17)
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1088 g:optarg->assert_equal(18)
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1089 g:listarg->assert_equal([1, 2, 3])
21504
e87a97868bbc patch 8.2.1302: Vim9: varargs arg after optional arg does not work
Bram Moolenaar <Bram@vim.org>
parents: 21502
diff changeset
1090 END
e87a97868bbc patch 8.2.1302: Vim9: varargs arg after optional arg does not work
Bram Moolenaar <Bram@vim.org>
parents: 21502
diff changeset
1091 CheckScriptSuccess(lines)
20140
39a18a0df429 patch 8.2.0625: Vim9: confusing error when calling unknown function
Bram Moolenaar <Bram@vim.org>
parents: 20029
diff changeset
1092 enddef
39a18a0df429 patch 8.2.0625: Vim9: confusing error when calling unknown function
Bram Moolenaar <Bram@vim.org>
parents: 20029
diff changeset
1093
39a18a0df429 patch 8.2.0625: Vim9: confusing error when calling unknown function
Bram Moolenaar <Bram@vim.org>
parents: 20029
diff changeset
1094 let SomeFunc = function('len')
39a18a0df429 patch 8.2.0625: Vim9: confusing error when calling unknown function
Bram Moolenaar <Bram@vim.org>
parents: 20029
diff changeset
1095 let NotAFunc = 'text'
39a18a0df429 patch 8.2.0625: Vim9: confusing error when calling unknown function
Bram Moolenaar <Bram@vim.org>
parents: 20029
diff changeset
1096
19993
efe864a7ce4f patch 8.2.0552: Vim9: some errors not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 19985
diff changeset
1097 def CombineFuncrefTypes()
21353
fb8c8fcb7b60 patch 8.2.1227: Vim9: allowing both quoted and # comments is confusing
Bram Moolenaar <Bram@vim.org>
parents: 21347
diff changeset
1098 # same arguments, different return type
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1099 var Ref1: func(bool): string
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1100 var Ref2: func(bool): number
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1101 var Ref3: func(bool): any
19993
efe864a7ce4f patch 8.2.0552: Vim9: some errors not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 19985
diff changeset
1102 Ref3 = g:cond ? Ref1 : Ref2
efe864a7ce4f patch 8.2.0552: Vim9: some errors not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 19985
diff changeset
1103
21353
fb8c8fcb7b60 patch 8.2.1227: Vim9: allowing both quoted and # comments is confusing
Bram Moolenaar <Bram@vim.org>
parents: 21347
diff changeset
1104 # different number of arguments
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1105 var Refa1: func(bool): number
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1106 var Refa2: func(bool, number): number
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1107 var Refa3: func: number
19993
efe864a7ce4f patch 8.2.0552: Vim9: some errors not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 19985
diff changeset
1108 Refa3 = g:cond ? Refa1 : Refa2
efe864a7ce4f patch 8.2.0552: Vim9: some errors not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 19985
diff changeset
1109
21353
fb8c8fcb7b60 patch 8.2.1227: Vim9: allowing both quoted and # comments is confusing
Bram Moolenaar <Bram@vim.org>
parents: 21347
diff changeset
1110 # different argument types
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1111 var Refb1: func(bool, string): number
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1112 var Refb2: func(string, number): number
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1113 var Refb3: func(any, any): number
19993
efe864a7ce4f patch 8.2.0552: Vim9: some errors not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 19985
diff changeset
1114 Refb3 = g:cond ? Refb1 : Refb2
efe864a7ce4f patch 8.2.0552: Vim9: some errors not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 19985
diff changeset
1115 enddef
efe864a7ce4f patch 8.2.0552: Vim9: some errors not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 19985
diff changeset
1116
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1117 def FuncWithForwardCall()
20140
39a18a0df429 patch 8.2.0625: Vim9: confusing error when calling unknown function
Bram Moolenaar <Bram@vim.org>
parents: 20029
diff changeset
1118 return g:DefinedEvenLater("yes")
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1119 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1120
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1121 def DefinedEvenLater(arg: string): string
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1122 return arg
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1123 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1124
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1125 def Test_error_in_nested_function()
21353
fb8c8fcb7b60 patch 8.2.1227: Vim9: allowing both quoted and # comments is confusing
Bram Moolenaar <Bram@vim.org>
parents: 21347
diff changeset
1126 # Error in called function requires unwinding the call stack.
22165
c512e6f57ff2 patch 8.2.1632: not checking the context of test_fails()
Bram Moolenaar <Bram@vim.org>
parents: 22163
diff changeset
1127 assert_fails('FuncWithForwardCall()', 'E1096:', '', 1, 'FuncWithForwardCall')
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1128 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1129
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1130 def Test_return_type_wrong()
21693
4e4fd845553d patch 8.2.1396: Vim9: no error for unexpectedly returning a value
Bram Moolenaar <Bram@vim.org>
parents: 21689
diff changeset
1131 CheckScriptFailure([
4e4fd845553d patch 8.2.1396: Vim9: no error for unexpectedly returning a value
Bram Moolenaar <Bram@vim.org>
parents: 21689
diff changeset
1132 'def Func(): number',
4e4fd845553d patch 8.2.1396: Vim9: no error for unexpectedly returning a value
Bram Moolenaar <Bram@vim.org>
parents: 21689
diff changeset
1133 'return "a"',
4e4fd845553d patch 8.2.1396: Vim9: no error for unexpectedly returning a value
Bram Moolenaar <Bram@vim.org>
parents: 21689
diff changeset
1134 'enddef',
4e4fd845553d patch 8.2.1396: Vim9: no error for unexpectedly returning a value
Bram Moolenaar <Bram@vim.org>
parents: 21689
diff changeset
1135 'defcompile'], 'expected number but got string')
23092
c713358da074 patch 8.2.2092: Vim9: unpredictable errors for script tests
Bram Moolenaar <Bram@vim.org>
parents: 23074
diff changeset
1136 delfunc! g:Func
21693
4e4fd845553d patch 8.2.1396: Vim9: no error for unexpectedly returning a value
Bram Moolenaar <Bram@vim.org>
parents: 21689
diff changeset
1137 CheckScriptFailure([
4e4fd845553d patch 8.2.1396: Vim9: no error for unexpectedly returning a value
Bram Moolenaar <Bram@vim.org>
parents: 21689
diff changeset
1138 'def Func(): string',
4e4fd845553d patch 8.2.1396: Vim9: no error for unexpectedly returning a value
Bram Moolenaar <Bram@vim.org>
parents: 21689
diff changeset
1139 'return 1',
4e4fd845553d patch 8.2.1396: Vim9: no error for unexpectedly returning a value
Bram Moolenaar <Bram@vim.org>
parents: 21689
diff changeset
1140 'enddef',
4e4fd845553d patch 8.2.1396: Vim9: no error for unexpectedly returning a value
Bram Moolenaar <Bram@vim.org>
parents: 21689
diff changeset
1141 'defcompile'], 'expected string but got number')
23092
c713358da074 patch 8.2.2092: Vim9: unpredictable errors for script tests
Bram Moolenaar <Bram@vim.org>
parents: 23074
diff changeset
1142 delfunc! g:Func
21693
4e4fd845553d patch 8.2.1396: Vim9: no error for unexpectedly returning a value
Bram Moolenaar <Bram@vim.org>
parents: 21689
diff changeset
1143 CheckScriptFailure([
4e4fd845553d patch 8.2.1396: Vim9: no error for unexpectedly returning a value
Bram Moolenaar <Bram@vim.org>
parents: 21689
diff changeset
1144 'def Func(): void',
4e4fd845553d patch 8.2.1396: Vim9: no error for unexpectedly returning a value
Bram Moolenaar <Bram@vim.org>
parents: 21689
diff changeset
1145 'return "a"',
4e4fd845553d patch 8.2.1396: Vim9: no error for unexpectedly returning a value
Bram Moolenaar <Bram@vim.org>
parents: 21689
diff changeset
1146 'enddef',
4e4fd845553d patch 8.2.1396: Vim9: no error for unexpectedly returning a value
Bram Moolenaar <Bram@vim.org>
parents: 21689
diff changeset
1147 'defcompile'],
4e4fd845553d patch 8.2.1396: Vim9: no error for unexpectedly returning a value
Bram Moolenaar <Bram@vim.org>
parents: 21689
diff changeset
1148 'E1096: Returning a value in a function without a return type')
23092
c713358da074 patch 8.2.2092: Vim9: unpredictable errors for script tests
Bram Moolenaar <Bram@vim.org>
parents: 23074
diff changeset
1149 delfunc! g:Func
21693
4e4fd845553d patch 8.2.1396: Vim9: no error for unexpectedly returning a value
Bram Moolenaar <Bram@vim.org>
parents: 21689
diff changeset
1150 CheckScriptFailure([
4e4fd845553d patch 8.2.1396: Vim9: no error for unexpectedly returning a value
Bram Moolenaar <Bram@vim.org>
parents: 21689
diff changeset
1151 'def Func()',
4e4fd845553d patch 8.2.1396: Vim9: no error for unexpectedly returning a value
Bram Moolenaar <Bram@vim.org>
parents: 21689
diff changeset
1152 'return "a"',
4e4fd845553d patch 8.2.1396: Vim9: no error for unexpectedly returning a value
Bram Moolenaar <Bram@vim.org>
parents: 21689
diff changeset
1153 'enddef',
4e4fd845553d patch 8.2.1396: Vim9: no error for unexpectedly returning a value
Bram Moolenaar <Bram@vim.org>
parents: 21689
diff changeset
1154 'defcompile'],
4e4fd845553d patch 8.2.1396: Vim9: no error for unexpectedly returning a value
Bram Moolenaar <Bram@vim.org>
parents: 21689
diff changeset
1155 'E1096: Returning a value in a function without a return type')
23092
c713358da074 patch 8.2.2092: Vim9: unpredictable errors for script tests
Bram Moolenaar <Bram@vim.org>
parents: 23074
diff changeset
1156 delfunc! g:Func
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1157
21693
4e4fd845553d patch 8.2.1396: Vim9: no error for unexpectedly returning a value
Bram Moolenaar <Bram@vim.org>
parents: 21689
diff changeset
1158 CheckScriptFailure([
4e4fd845553d patch 8.2.1396: Vim9: no error for unexpectedly returning a value
Bram Moolenaar <Bram@vim.org>
parents: 21689
diff changeset
1159 'def Func(): number',
4e4fd845553d patch 8.2.1396: Vim9: no error for unexpectedly returning a value
Bram Moolenaar <Bram@vim.org>
parents: 21689
diff changeset
1160 'return',
4e4fd845553d patch 8.2.1396: Vim9: no error for unexpectedly returning a value
Bram Moolenaar <Bram@vim.org>
parents: 21689
diff changeset
1161 'enddef',
4e4fd845553d patch 8.2.1396: Vim9: no error for unexpectedly returning a value
Bram Moolenaar <Bram@vim.org>
parents: 21689
diff changeset
1162 'defcompile'], 'E1003:')
23092
c713358da074 patch 8.2.2092: Vim9: unpredictable errors for script tests
Bram Moolenaar <Bram@vim.org>
parents: 23074
diff changeset
1163 delfunc! g:Func
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1164
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1165 CheckScriptFailure(['def Func(): list', 'return []', 'enddef'], 'E1008:')
23092
c713358da074 patch 8.2.2092: Vim9: unpredictable errors for script tests
Bram Moolenaar <Bram@vim.org>
parents: 23074
diff changeset
1166 delfunc! g:Func
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1167 CheckScriptFailure(['def Func(): dict', 'return {}', 'enddef'], 'E1008:')
23092
c713358da074 patch 8.2.2092: Vim9: unpredictable errors for script tests
Bram Moolenaar <Bram@vim.org>
parents: 23074
diff changeset
1168 delfunc! g:Func
19932
2c4d9ca33769 patch 8.2.0522: several errors are not tested for
Bram Moolenaar <Bram@vim.org>
parents: 19926
diff changeset
1169 CheckScriptFailure(['def Func()', 'return 1'], 'E1057:')
23092
c713358da074 patch 8.2.2092: Vim9: unpredictable errors for script tests
Bram Moolenaar <Bram@vim.org>
parents: 23074
diff changeset
1170 delfunc! g:Func
21693
4e4fd845553d patch 8.2.1396: Vim9: no error for unexpectedly returning a value
Bram Moolenaar <Bram@vim.org>
parents: 21689
diff changeset
1171
4e4fd845553d patch 8.2.1396: Vim9: no error for unexpectedly returning a value
Bram Moolenaar <Bram@vim.org>
parents: 21689
diff changeset
1172 CheckScriptFailure([
4e4fd845553d patch 8.2.1396: Vim9: no error for unexpectedly returning a value
Bram Moolenaar <Bram@vim.org>
parents: 21689
diff changeset
1173 'vim9script',
4e4fd845553d patch 8.2.1396: Vim9: no error for unexpectedly returning a value
Bram Moolenaar <Bram@vim.org>
parents: 21689
diff changeset
1174 'def FuncB()',
4e4fd845553d patch 8.2.1396: Vim9: no error for unexpectedly returning a value
Bram Moolenaar <Bram@vim.org>
parents: 21689
diff changeset
1175 ' return 123',
4e4fd845553d patch 8.2.1396: Vim9: no error for unexpectedly returning a value
Bram Moolenaar <Bram@vim.org>
parents: 21689
diff changeset
1176 'enddef',
4e4fd845553d patch 8.2.1396: Vim9: no error for unexpectedly returning a value
Bram Moolenaar <Bram@vim.org>
parents: 21689
diff changeset
1177 'def FuncA()',
4e4fd845553d patch 8.2.1396: Vim9: no error for unexpectedly returning a value
Bram Moolenaar <Bram@vim.org>
parents: 21689
diff changeset
1178 ' FuncB()',
4e4fd845553d patch 8.2.1396: Vim9: no error for unexpectedly returning a value
Bram Moolenaar <Bram@vim.org>
parents: 21689
diff changeset
1179 'enddef',
4e4fd845553d patch 8.2.1396: Vim9: no error for unexpectedly returning a value
Bram Moolenaar <Bram@vim.org>
parents: 21689
diff changeset
1180 'defcompile'], 'E1096:')
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1181 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1182
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1183 def Test_arg_type_wrong()
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1184 CheckScriptFailure(['def Func3(items: list)', 'echo "a"', 'enddef'], 'E1008: Missing <type>')
19932
2c4d9ca33769 patch 8.2.0522: several errors are not tested for
Bram Moolenaar <Bram@vim.org>
parents: 19926
diff changeset
1185 CheckScriptFailure(['def Func4(...)', 'echo "a"', 'enddef'], 'E1055: Missing name after ...')
20142
fe8d0a4344df patch 8.2.0626: Vim9: wrong syntax of function in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents: 20140
diff changeset
1186 CheckScriptFailure(['def Func5(items:string)', 'echo "a"'], 'E1069:')
20029
8fb1cf4c44d5 patch 8.2.0570: Vim9: no error when omitting type from argument
Bram Moolenaar <Bram@vim.org>
parents: 20023
diff changeset
1187 CheckScriptFailure(['def Func5(items)', 'echo "a"'], 'E1077:')
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1188 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1189
24069
324408c61b20 patch 8.2.2576: Vim9: defining a :func function checks for white space
Bram Moolenaar <Bram@vim.org>
parents: 24065
diff changeset
1190 def Test_white_space_after_comma()
324408c61b20 patch 8.2.2576: Vim9: defining a :func function checks for white space
Bram Moolenaar <Bram@vim.org>
parents: 24065
diff changeset
1191 var lines =<< trim END
324408c61b20 patch 8.2.2576: Vim9: defining a :func function checks for white space
Bram Moolenaar <Bram@vim.org>
parents: 24065
diff changeset
1192 vim9script
324408c61b20 patch 8.2.2576: Vim9: defining a :func function checks for white space
Bram Moolenaar <Bram@vim.org>
parents: 24065
diff changeset
1193 def Func(a: number,b: number)
324408c61b20 patch 8.2.2576: Vim9: defining a :func function checks for white space
Bram Moolenaar <Bram@vim.org>
parents: 24065
diff changeset
1194 enddef
324408c61b20 patch 8.2.2576: Vim9: defining a :func function checks for white space
Bram Moolenaar <Bram@vim.org>
parents: 24065
diff changeset
1195 END
324408c61b20 patch 8.2.2576: Vim9: defining a :func function checks for white space
Bram Moolenaar <Bram@vim.org>
parents: 24065
diff changeset
1196 CheckScriptFailure(lines, 'E1069:')
324408c61b20 patch 8.2.2576: Vim9: defining a :func function checks for white space
Bram Moolenaar <Bram@vim.org>
parents: 24065
diff changeset
1197
324408c61b20 patch 8.2.2576: Vim9: defining a :func function checks for white space
Bram Moolenaar <Bram@vim.org>
parents: 24065
diff changeset
1198 # OK in legacy function
324408c61b20 patch 8.2.2576: Vim9: defining a :func function checks for white space
Bram Moolenaar <Bram@vim.org>
parents: 24065
diff changeset
1199 lines =<< trim END
324408c61b20 patch 8.2.2576: Vim9: defining a :func function checks for white space
Bram Moolenaar <Bram@vim.org>
parents: 24065
diff changeset
1200 vim9script
324408c61b20 patch 8.2.2576: Vim9: defining a :func function checks for white space
Bram Moolenaar <Bram@vim.org>
parents: 24065
diff changeset
1201 func Func(a,b)
324408c61b20 patch 8.2.2576: Vim9: defining a :func function checks for white space
Bram Moolenaar <Bram@vim.org>
parents: 24065
diff changeset
1202 endfunc
324408c61b20 patch 8.2.2576: Vim9: defining a :func function checks for white space
Bram Moolenaar <Bram@vim.org>
parents: 24065
diff changeset
1203 END
324408c61b20 patch 8.2.2576: Vim9: defining a :func function checks for white space
Bram Moolenaar <Bram@vim.org>
parents: 24065
diff changeset
1204 CheckScriptSuccess(lines)
324408c61b20 patch 8.2.2576: Vim9: defining a :func function checks for white space
Bram Moolenaar <Bram@vim.org>
parents: 24065
diff changeset
1205 enddef
324408c61b20 patch 8.2.2576: Vim9: defining a :func function checks for white space
Bram Moolenaar <Bram@vim.org>
parents: 24065
diff changeset
1206
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1207 def Test_vim9script_call()
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1208 var lines =<< trim END
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1209 vim9script
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1210 var name = ''
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1211 def MyFunc(arg: string)
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1212 name = arg
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1213 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1214 MyFunc('foobar')
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1215 name->assert_equal('foobar')
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1216
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1217 var str = 'barfoo'
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1218 str->MyFunc()
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1219 name->assert_equal('barfoo')
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1220
20945
0653b9b72091 patch 8.2.1024: Vim9: no error for using "let g:var = val"
Bram Moolenaar <Bram@vim.org>
parents: 20909
diff changeset
1221 g:value = 'value'
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1222 g:value->MyFunc()
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1223 name->assert_equal('value')
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1224
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1225 var listvar = []
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1226 def ListFunc(arg: list<number>)
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1227 listvar = arg
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1228 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1229 [1, 2, 3]->ListFunc()
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1230 listvar->assert_equal([1, 2, 3])
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1231
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1232 var dictvar = {}
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1233 def DictFunc(arg: dict<number>)
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1234 dictvar = arg
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1235 enddef
23072
4b398a229b0b patch 8.2.2082: Vim9: can still use the depricated #{} dict syntax
Bram Moolenaar <Bram@vim.org>
parents: 23009
diff changeset
1236 {a: 1, b: 2}->DictFunc()
4b398a229b0b patch 8.2.2082: Vim9: can still use the depricated #{} dict syntax
Bram Moolenaar <Bram@vim.org>
parents: 23009
diff changeset
1237 dictvar->assert_equal({a: 1, b: 2})
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1238 def CompiledDict()
23072
4b398a229b0b patch 8.2.2082: Vim9: can still use the depricated #{} dict syntax
Bram Moolenaar <Bram@vim.org>
parents: 23009
diff changeset
1239 {a: 3, b: 4}->DictFunc()
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1240 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1241 CompiledDict()
23072
4b398a229b0b patch 8.2.2082: Vim9: can still use the depricated #{} dict syntax
Bram Moolenaar <Bram@vim.org>
parents: 23009
diff changeset
1242 dictvar->assert_equal({a: 3, b: 4})
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1243
23072
4b398a229b0b patch 8.2.2082: Vim9: can still use the depricated #{} dict syntax
Bram Moolenaar <Bram@vim.org>
parents: 23009
diff changeset
1244 {a: 3, b: 4}->DictFunc()
4b398a229b0b patch 8.2.2082: Vim9: can still use the depricated #{} dict syntax
Bram Moolenaar <Bram@vim.org>
parents: 23009
diff changeset
1245 dictvar->assert_equal({a: 3, b: 4})
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1246
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1247 ('text')->MyFunc()
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1248 name->assert_equal('text')
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1249 ("some")->MyFunc()
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1250 name->assert_equal('some')
21118
b0baa80cb53f patch 8.2.1110: Vim9: line continuation does not work in function arguments
Bram Moolenaar <Bram@vim.org>
parents: 21089
diff changeset
1251
21475
eec2d2120cde patch 8.2.1288: Vim9: cannot use mark in range
Bram Moolenaar <Bram@vim.org>
parents: 21469
diff changeset
1252 # line starting with single quote is not a mark
21544
6c67c86a202a patch 8.2.1322: Vim9: method on double quoted string doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 21504
diff changeset
1253 # line starting with double quote can be a method call
21335
af3663df42bf patch 8.2.1218: Vim9: cannot use 'text'->func()
Bram Moolenaar <Bram@vim.org>
parents: 21303
diff changeset
1254 'asdfasdf'->MyFunc()
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1255 name->assert_equal('asdfasdf')
21544
6c67c86a202a patch 8.2.1322: Vim9: method on double quoted string doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 21504
diff changeset
1256 "xyz"->MyFunc()
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1257 name->assert_equal('xyz')
21335
af3663df42bf patch 8.2.1218: Vim9: cannot use 'text'->func()
Bram Moolenaar <Bram@vim.org>
parents: 21303
diff changeset
1258
af3663df42bf patch 8.2.1218: Vim9: cannot use 'text'->func()
Bram Moolenaar <Bram@vim.org>
parents: 21303
diff changeset
1259 def UseString()
af3663df42bf patch 8.2.1218: Vim9: cannot use 'text'->func()
Bram Moolenaar <Bram@vim.org>
parents: 21303
diff changeset
1260 'xyork'->MyFunc()
af3663df42bf patch 8.2.1218: Vim9: cannot use 'text'->func()
Bram Moolenaar <Bram@vim.org>
parents: 21303
diff changeset
1261 enddef
af3663df42bf patch 8.2.1218: Vim9: cannot use 'text'->func()
Bram Moolenaar <Bram@vim.org>
parents: 21303
diff changeset
1262 UseString()
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1263 name->assert_equal('xyork')
21335
af3663df42bf patch 8.2.1218: Vim9: cannot use 'text'->func()
Bram Moolenaar <Bram@vim.org>
parents: 21303
diff changeset
1264
21544
6c67c86a202a patch 8.2.1322: Vim9: method on double quoted string doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 21504
diff changeset
1265 def UseString2()
6c67c86a202a patch 8.2.1322: Vim9: method on double quoted string doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 21504
diff changeset
1266 "knife"->MyFunc()
6c67c86a202a patch 8.2.1322: Vim9: method on double quoted string doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 21504
diff changeset
1267 enddef
6c67c86a202a patch 8.2.1322: Vim9: method on double quoted string doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 21504
diff changeset
1268 UseString2()
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1269 name->assert_equal('knife')
21544
6c67c86a202a patch 8.2.1322: Vim9: method on double quoted string doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 21504
diff changeset
1270
21475
eec2d2120cde patch 8.2.1288: Vim9: cannot use mark in range
Bram Moolenaar <Bram@vim.org>
parents: 21469
diff changeset
1271 # prepending a colon makes it a mark
eec2d2120cde patch 8.2.1288: Vim9: cannot use mark in range
Bram Moolenaar <Bram@vim.org>
parents: 21469
diff changeset
1272 new
eec2d2120cde patch 8.2.1288: Vim9: cannot use mark in range
Bram Moolenaar <Bram@vim.org>
parents: 21469
diff changeset
1273 setline(1, ['aaa', 'bbb', 'ccc'])
eec2d2120cde patch 8.2.1288: Vim9: cannot use mark in range
Bram Moolenaar <Bram@vim.org>
parents: 21469
diff changeset
1274 normal! 3Gmt1G
eec2d2120cde patch 8.2.1288: Vim9: cannot use mark in range
Bram Moolenaar <Bram@vim.org>
parents: 21469
diff changeset
1275 :'t
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1276 getcurpos()[1]->assert_equal(3)
21475
eec2d2120cde patch 8.2.1288: Vim9: cannot use mark in range
Bram Moolenaar <Bram@vim.org>
parents: 21469
diff changeset
1277 bwipe!
eec2d2120cde patch 8.2.1288: Vim9: cannot use mark in range
Bram Moolenaar <Bram@vim.org>
parents: 21469
diff changeset
1278
21118
b0baa80cb53f patch 8.2.1110: Vim9: line continuation does not work in function arguments
Bram Moolenaar <Bram@vim.org>
parents: 21089
diff changeset
1279 MyFunc(
b0baa80cb53f patch 8.2.1110: Vim9: line continuation does not work in function arguments
Bram Moolenaar <Bram@vim.org>
parents: 21089
diff changeset
1280 'continued'
b0baa80cb53f patch 8.2.1110: Vim9: line continuation does not work in function arguments
Bram Moolenaar <Bram@vim.org>
parents: 21089
diff changeset
1281 )
b0baa80cb53f patch 8.2.1110: Vim9: line continuation does not work in function arguments
Bram Moolenaar <Bram@vim.org>
parents: 21089
diff changeset
1282 assert_equal('continued',
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1283 name
21118
b0baa80cb53f patch 8.2.1110: Vim9: line continuation does not work in function arguments
Bram Moolenaar <Bram@vim.org>
parents: 21089
diff changeset
1284 )
b0baa80cb53f patch 8.2.1110: Vim9: line continuation does not work in function arguments
Bram Moolenaar <Bram@vim.org>
parents: 21089
diff changeset
1285
b0baa80cb53f patch 8.2.1110: Vim9: line continuation does not work in function arguments
Bram Moolenaar <Bram@vim.org>
parents: 21089
diff changeset
1286 call MyFunc(
b0baa80cb53f patch 8.2.1110: Vim9: line continuation does not work in function arguments
Bram Moolenaar <Bram@vim.org>
parents: 21089
diff changeset
1287 'more'
b0baa80cb53f patch 8.2.1110: Vim9: line continuation does not work in function arguments
Bram Moolenaar <Bram@vim.org>
parents: 21089
diff changeset
1288 ..
b0baa80cb53f patch 8.2.1110: Vim9: line continuation does not work in function arguments
Bram Moolenaar <Bram@vim.org>
parents: 21089
diff changeset
1289 'lines'
b0baa80cb53f patch 8.2.1110: Vim9: line continuation does not work in function arguments
Bram Moolenaar <Bram@vim.org>
parents: 21089
diff changeset
1290 )
b0baa80cb53f patch 8.2.1110: Vim9: line continuation does not work in function arguments
Bram Moolenaar <Bram@vim.org>
parents: 21089
diff changeset
1291 assert_equal(
b0baa80cb53f patch 8.2.1110: Vim9: line continuation does not work in function arguments
Bram Moolenaar <Bram@vim.org>
parents: 21089
diff changeset
1292 'morelines',
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1293 name)
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1294 END
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1295 writefile(lines, 'Xcall.vim')
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1296 source Xcall.vim
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1297 delete('Xcall.vim')
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1298 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1299
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1300 def Test_vim9script_call_fail_decl()
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1301 var lines =<< trim END
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1302 vim9script
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1303 var name = ''
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1304 def MyFunc(arg: string)
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1305 var name = 123
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1306 enddef
20528
489cb75c76b6 patch 8.2.0818: Vim9: using a discovery phase doesn't work well
Bram Moolenaar <Bram@vim.org>
parents: 20433
diff changeset
1307 defcompile
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1308 END
21463
7f36d36f7195 patch 8.2.1282: Vim9: crash when using CheckScriptFailure()
Bram Moolenaar <Bram@vim.org>
parents: 21441
diff changeset
1309 CheckScriptFailure(lines, 'E1054:')
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1310 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1311
21383
f25d007f90ac patch 8.2.1242: Vim9: no error if calling a function with wrong type
Bram Moolenaar <Bram@vim.org>
parents: 21353
diff changeset
1312 def Test_vim9script_call_fail_type()
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1313 var lines =<< trim END
21383
f25d007f90ac patch 8.2.1242: Vim9: no error if calling a function with wrong type
Bram Moolenaar <Bram@vim.org>
parents: 21353
diff changeset
1314 vim9script
f25d007f90ac patch 8.2.1242: Vim9: no error if calling a function with wrong type
Bram Moolenaar <Bram@vim.org>
parents: 21353
diff changeset
1315 def MyFunc(arg: string)
f25d007f90ac patch 8.2.1242: Vim9: no error if calling a function with wrong type
Bram Moolenaar <Bram@vim.org>
parents: 21353
diff changeset
1316 echo arg
f25d007f90ac patch 8.2.1242: Vim9: no error if calling a function with wrong type
Bram Moolenaar <Bram@vim.org>
parents: 21353
diff changeset
1317 enddef
f25d007f90ac patch 8.2.1242: Vim9: no error if calling a function with wrong type
Bram Moolenaar <Bram@vim.org>
parents: 21353
diff changeset
1318 MyFunc(1234)
f25d007f90ac patch 8.2.1242: Vim9: no error if calling a function with wrong type
Bram Moolenaar <Bram@vim.org>
parents: 21353
diff changeset
1319 END
22296
006b8ab9d554 patch 8.2.1697: inconsistent capitalization of error messages
Bram Moolenaar <Bram@vim.org>
parents: 22292
diff changeset
1320 CheckScriptFailure(lines, 'E1013: Argument 1: type mismatch, expected string but got number')
21383
f25d007f90ac patch 8.2.1242: Vim9: no error if calling a function with wrong type
Bram Moolenaar <Bram@vim.org>
parents: 21353
diff changeset
1321 enddef
f25d007f90ac patch 8.2.1242: Vim9: no error if calling a function with wrong type
Bram Moolenaar <Bram@vim.org>
parents: 21353
diff changeset
1322
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1323 def Test_vim9script_call_fail_const()
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1324 var lines =<< trim END
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1325 vim9script
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1326 const var = ''
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1327 def MyFunc(arg: string)
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1328 var = 'asdf'
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1329 enddef
20528
489cb75c76b6 patch 8.2.0818: Vim9: using a discovery phase doesn't work well
Bram Moolenaar <Bram@vim.org>
parents: 20433
diff changeset
1330 defcompile
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1331 END
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1332 writefile(lines, 'Xcall_const.vim')
22163
b6d36f0b4f03 patch 8.2.1631: test_fails() does not check the context of the line number
Bram Moolenaar <Bram@vim.org>
parents: 22159
diff changeset
1333 assert_fails('source Xcall_const.vim', 'E46:', '', 1, 'MyFunc')
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1334 delete('Xcall_const.vim')
23295
d9ae7dd3a0f2 patch 8.2.2193: Vim9: can change constant in :def function
Bram Moolenaar <Bram@vim.org>
parents: 23291
diff changeset
1335
d9ae7dd3a0f2 patch 8.2.2193: Vim9: can change constant in :def function
Bram Moolenaar <Bram@vim.org>
parents: 23291
diff changeset
1336 lines =<< trim END
d9ae7dd3a0f2 patch 8.2.2193: Vim9: can change constant in :def function
Bram Moolenaar <Bram@vim.org>
parents: 23291
diff changeset
1337 const g:Aconst = 77
d9ae7dd3a0f2 patch 8.2.2193: Vim9: can change constant in :def function
Bram Moolenaar <Bram@vim.org>
parents: 23291
diff changeset
1338 def Change()
d9ae7dd3a0f2 patch 8.2.2193: Vim9: can change constant in :def function
Bram Moolenaar <Bram@vim.org>
parents: 23291
diff changeset
1339 # comment
d9ae7dd3a0f2 patch 8.2.2193: Vim9: can change constant in :def function
Bram Moolenaar <Bram@vim.org>
parents: 23291
diff changeset
1340 g:Aconst = 99
d9ae7dd3a0f2 patch 8.2.2193: Vim9: can change constant in :def function
Bram Moolenaar <Bram@vim.org>
parents: 23291
diff changeset
1341 enddef
d9ae7dd3a0f2 patch 8.2.2193: Vim9: can change constant in :def function
Bram Moolenaar <Bram@vim.org>
parents: 23291
diff changeset
1342 call Change()
d9ae7dd3a0f2 patch 8.2.2193: Vim9: can change constant in :def function
Bram Moolenaar <Bram@vim.org>
parents: 23291
diff changeset
1343 unlet g:Aconst
d9ae7dd3a0f2 patch 8.2.2193: Vim9: can change constant in :def function
Bram Moolenaar <Bram@vim.org>
parents: 23291
diff changeset
1344 END
23299
d5919c5fd3dc patch 8.2.2195: failing tests for :const
Bram Moolenaar <Bram@vim.org>
parents: 23297
diff changeset
1345 CheckScriptFailure(lines, 'E741: Value is locked: Aconst', 2)
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1346 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1347
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1348 " Test that inside :function a Python function can be defined, :def is not
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1349 " recognized.
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1350 func Test_function_python()
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1351 CheckFeature python3
22437
7bd80999ea21 patch 8.2.1767: Vim9: test fails with python support
Bram Moolenaar <Bram@vim.org>
parents: 22435
diff changeset
1352 let py = 'python3'
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1353 execute py "<< EOF"
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1354 def do_something():
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1355 return 1
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1356 EOF
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1357 endfunc
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1358
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1359 def Test_delfunc()
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1360 var lines =<< trim END
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1361 vim9script
20189
63cc54100ae4 patch 8.2.0650: Vim9: script function can be deleted
Bram Moolenaar <Bram@vim.org>
parents: 20142
diff changeset
1362 def g:GoneSoon()
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1363 echo 'hello'
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1364 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1365
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1366 def CallGoneSoon()
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1367 GoneSoon()
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1368 enddef
20528
489cb75c76b6 patch 8.2.0818: Vim9: using a discovery phase doesn't work well
Bram Moolenaar <Bram@vim.org>
parents: 20433
diff changeset
1369 defcompile
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1370
20189
63cc54100ae4 patch 8.2.0650: Vim9: script function can be deleted
Bram Moolenaar <Bram@vim.org>
parents: 20142
diff changeset
1371 delfunc g:GoneSoon
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1372 CallGoneSoon()
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1373 END
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1374 writefile(lines, 'XToDelFunc')
22163
b6d36f0b4f03 patch 8.2.1631: test_fails() does not check the context of the line number
Bram Moolenaar <Bram@vim.org>
parents: 22159
diff changeset
1375 assert_fails('so XToDelFunc', 'E933:', '', 1, 'CallGoneSoon')
b6d36f0b4f03 patch 8.2.1631: test_fails() does not check the context of the line number
Bram Moolenaar <Bram@vim.org>
parents: 22159
diff changeset
1376 assert_fails('so XToDelFunc', 'E933:', '', 1, 'CallGoneSoon')
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1377
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1378 delete('XToDelFunc')
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1379 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1380
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1381 def Test_redef_failure()
22147
d55008685870 patch 8.2.1623: Vim9: using :call where it is not needed
Bram Moolenaar <Bram@vim.org>
parents: 22139
diff changeset
1382 writefile(['def Func0(): string', 'return "Func0"', 'enddef'], 'Xdef')
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1383 so Xdef
22147
d55008685870 patch 8.2.1623: Vim9: using :call where it is not needed
Bram Moolenaar <Bram@vim.org>
parents: 22139
diff changeset
1384 writefile(['def Func1(): string', 'return "Func1"', 'enddef'], 'Xdef')
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1385 so Xdef
22147
d55008685870 patch 8.2.1623: Vim9: using :call where it is not needed
Bram Moolenaar <Bram@vim.org>
parents: 22139
diff changeset
1386 writefile(['def! Func0(): string', 'enddef', 'defcompile'], 'Xdef')
22163
b6d36f0b4f03 patch 8.2.1631: test_fails() does not check the context of the line number
Bram Moolenaar <Bram@vim.org>
parents: 22159
diff changeset
1387 assert_fails('so Xdef', 'E1027:', '', 1, 'Func0')
22147
d55008685870 patch 8.2.1623: Vim9: using :call where it is not needed
Bram Moolenaar <Bram@vim.org>
parents: 22139
diff changeset
1388 writefile(['def Func2(): string', 'return "Func2"', 'enddef'], 'Xdef')
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1389 so Xdef
22147
d55008685870 patch 8.2.1623: Vim9: using :call where it is not needed
Bram Moolenaar <Bram@vim.org>
parents: 22139
diff changeset
1390 delete('Xdef')
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1391
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1392 g:Func0()->assert_equal(0)
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1393 g:Func1()->assert_equal('Func1')
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1394 g:Func2()->assert_equal('Func2')
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1395
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1396 delfunc! Func0
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1397 delfunc! Func1
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1398 delfunc! Func2
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1399 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1400
20142
fe8d0a4344df patch 8.2.0626: Vim9: wrong syntax of function in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents: 20140
diff changeset
1401 def Test_vim9script_func()
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1402 var lines =<< trim END
20142
fe8d0a4344df patch 8.2.0626: Vim9: wrong syntax of function in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents: 20140
diff changeset
1403 vim9script
fe8d0a4344df patch 8.2.0626: Vim9: wrong syntax of function in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents: 20140
diff changeset
1404 func Func(arg)
fe8d0a4344df patch 8.2.0626: Vim9: wrong syntax of function in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents: 20140
diff changeset
1405 echo a:arg
fe8d0a4344df patch 8.2.0626: Vim9: wrong syntax of function in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents: 20140
diff changeset
1406 endfunc
fe8d0a4344df patch 8.2.0626: Vim9: wrong syntax of function in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents: 20140
diff changeset
1407 Func('text')
fe8d0a4344df patch 8.2.0626: Vim9: wrong syntax of function in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents: 20140
diff changeset
1408 END
fe8d0a4344df patch 8.2.0626: Vim9: wrong syntax of function in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents: 20140
diff changeset
1409 writefile(lines, 'XVim9Func')
fe8d0a4344df patch 8.2.0626: Vim9: wrong syntax of function in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents: 20140
diff changeset
1410 so XVim9Func
fe8d0a4344df patch 8.2.0626: Vim9: wrong syntax of function in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents: 20140
diff changeset
1411
fe8d0a4344df patch 8.2.0626: Vim9: wrong syntax of function in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents: 20140
diff changeset
1412 delete('XVim9Func')
fe8d0a4344df patch 8.2.0626: Vim9: wrong syntax of function in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents: 20140
diff changeset
1413 enddef
fe8d0a4344df patch 8.2.0626: Vim9: wrong syntax of function in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents: 20140
diff changeset
1414
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1415 let s:funcResult = 0
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1416
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1417 def FuncNoArgNoRet()
21921
e420f3cf60e2 patch 8.2.1510: using "var" in :def function may refer to legacy script var
Bram Moolenaar <Bram@vim.org>
parents: 21913
diff changeset
1418 s:funcResult = 11
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1419 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1420
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1421 def FuncNoArgRetNumber(): number
21921
e420f3cf60e2 patch 8.2.1510: using "var" in :def function may refer to legacy script var
Bram Moolenaar <Bram@vim.org>
parents: 21913
diff changeset
1422 s:funcResult = 22
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1423 return 1234
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1424 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1425
19942
b471038ec3ea patch 8.2.0527: Vim9: function types insufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 19932
diff changeset
1426 def FuncNoArgRetString(): string
21921
e420f3cf60e2 patch 8.2.1510: using "var" in :def function may refer to legacy script var
Bram Moolenaar <Bram@vim.org>
parents: 21913
diff changeset
1427 s:funcResult = 45
19942
b471038ec3ea patch 8.2.0527: Vim9: function types insufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 19932
diff changeset
1428 return 'text'
b471038ec3ea patch 8.2.0527: Vim9: function types insufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 19932
diff changeset
1429 enddef
b471038ec3ea patch 8.2.0527: Vim9: function types insufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 19932
diff changeset
1430
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1431 def FuncOneArgNoRet(arg: number)
21921
e420f3cf60e2 patch 8.2.1510: using "var" in :def function may refer to legacy script var
Bram Moolenaar <Bram@vim.org>
parents: 21913
diff changeset
1432 s:funcResult = arg
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1433 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1434
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1435 def FuncOneArgRetNumber(arg: number): number
21921
e420f3cf60e2 patch 8.2.1510: using "var" in :def function may refer to legacy script var
Bram Moolenaar <Bram@vim.org>
parents: 21913
diff changeset
1436 s:funcResult = arg
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1437 return arg
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1438 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1439
19985
f863aa96cae5 patch 8.2.0548: Vim9: not all possible func type errors tested
Bram Moolenaar <Bram@vim.org>
parents: 19975
diff changeset
1440 def FuncTwoArgNoRet(one: bool, two: number)
21921
e420f3cf60e2 patch 8.2.1510: using "var" in :def function may refer to legacy script var
Bram Moolenaar <Bram@vim.org>
parents: 21913
diff changeset
1441 s:funcResult = two
19985
f863aa96cae5 patch 8.2.0548: Vim9: not all possible func type errors tested
Bram Moolenaar <Bram@vim.org>
parents: 19975
diff changeset
1442 enddef
f863aa96cae5 patch 8.2.0548: Vim9: not all possible func type errors tested
Bram Moolenaar <Bram@vim.org>
parents: 19975
diff changeset
1443
19942
b471038ec3ea patch 8.2.0527: Vim9: function types insufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 19932
diff changeset
1444 def FuncOneArgRetString(arg: string): string
b471038ec3ea patch 8.2.0527: Vim9: function types insufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 19932
diff changeset
1445 return arg
b471038ec3ea patch 8.2.0527: Vim9: function types insufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 19932
diff changeset
1446 enddef
b471038ec3ea patch 8.2.0527: Vim9: function types insufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 19932
diff changeset
1447
19926
d286bfc44149 patch 8.2.0519: Vim9: return type not properly checked
Bram Moolenaar <Bram@vim.org>
parents: 19922
diff changeset
1448 def FuncOneArgRetAny(arg: any): any
d286bfc44149 patch 8.2.0519: Vim9: return type not properly checked
Bram Moolenaar <Bram@vim.org>
parents: 19922
diff changeset
1449 return arg
d286bfc44149 patch 8.2.0519: Vim9: return type not properly checked
Bram Moolenaar <Bram@vim.org>
parents: 19922
diff changeset
1450 enddef
d286bfc44149 patch 8.2.0519: Vim9: return type not properly checked
Bram Moolenaar <Bram@vim.org>
parents: 19922
diff changeset
1451
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1452 def Test_func_type()
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1453 var Ref1: func()
21921
e420f3cf60e2 patch 8.2.1510: using "var" in :def function may refer to legacy script var
Bram Moolenaar <Bram@vim.org>
parents: 21913
diff changeset
1454 s:funcResult = 0
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1455 Ref1 = FuncNoArgNoRet
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1456 Ref1()
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1457 s:funcResult->assert_equal(11)
19922
1f42c49c3d29 patch 8.2.0517: Vim9: cannot separate "func" and "func(): void"
Bram Moolenaar <Bram@vim.org>
parents: 19912
diff changeset
1458
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1459 var Ref2: func
21921
e420f3cf60e2 patch 8.2.1510: using "var" in :def function may refer to legacy script var
Bram Moolenaar <Bram@vim.org>
parents: 21913
diff changeset
1460 s:funcResult = 0
19922
1f42c49c3d29 patch 8.2.0517: Vim9: cannot separate "func" and "func(): void"
Bram Moolenaar <Bram@vim.org>
parents: 19912
diff changeset
1461 Ref2 = FuncNoArgNoRet
1f42c49c3d29 patch 8.2.0517: Vim9: cannot separate "func" and "func(): void"
Bram Moolenaar <Bram@vim.org>
parents: 19912
diff changeset
1462 Ref2()
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1463 s:funcResult->assert_equal(11)
19922
1f42c49c3d29 patch 8.2.0517: Vim9: cannot separate "func" and "func(): void"
Bram Moolenaar <Bram@vim.org>
parents: 19912
diff changeset
1464
21921
e420f3cf60e2 patch 8.2.1510: using "var" in :def function may refer to legacy script var
Bram Moolenaar <Bram@vim.org>
parents: 21913
diff changeset
1465 s:funcResult = 0
19922
1f42c49c3d29 patch 8.2.0517: Vim9: cannot separate "func" and "func(): void"
Bram Moolenaar <Bram@vim.org>
parents: 19912
diff changeset
1466 Ref2 = FuncOneArgNoRet
1f42c49c3d29 patch 8.2.0517: Vim9: cannot separate "func" and "func(): void"
Bram Moolenaar <Bram@vim.org>
parents: 19912
diff changeset
1467 Ref2(12)
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1468 s:funcResult->assert_equal(12)
19922
1f42c49c3d29 patch 8.2.0517: Vim9: cannot separate "func" and "func(): void"
Bram Moolenaar <Bram@vim.org>
parents: 19912
diff changeset
1469
21921
e420f3cf60e2 patch 8.2.1510: using "var" in :def function may refer to legacy script var
Bram Moolenaar <Bram@vim.org>
parents: 21913
diff changeset
1470 s:funcResult = 0
19922
1f42c49c3d29 patch 8.2.0517: Vim9: cannot separate "func" and "func(): void"
Bram Moolenaar <Bram@vim.org>
parents: 19912
diff changeset
1471 Ref2 = FuncNoArgRetNumber
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1472 Ref2()->assert_equal(1234)
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1473 s:funcResult->assert_equal(22)
19922
1f42c49c3d29 patch 8.2.0517: Vim9: cannot separate "func" and "func(): void"
Bram Moolenaar <Bram@vim.org>
parents: 19912
diff changeset
1474
21921
e420f3cf60e2 patch 8.2.1510: using "var" in :def function may refer to legacy script var
Bram Moolenaar <Bram@vim.org>
parents: 21913
diff changeset
1475 s:funcResult = 0
19922
1f42c49c3d29 patch 8.2.0517: Vim9: cannot separate "func" and "func(): void"
Bram Moolenaar <Bram@vim.org>
parents: 19912
diff changeset
1476 Ref2 = FuncOneArgRetNumber
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1477 Ref2(13)->assert_equal(13)
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1478 s:funcResult->assert_equal(13)
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1479 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1480
21162
3158cc2384cc patch 8.2.1132: Vim9: return type of repeat() is not specific enough
Bram Moolenaar <Bram@vim.org>
parents: 21160
diff changeset
1481 def Test_repeat_return_type()
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1482 var res = 0
21162
3158cc2384cc patch 8.2.1132: Vim9: return type of repeat() is not specific enough
Bram Moolenaar <Bram@vim.org>
parents: 21160
diff changeset
1483 for n in repeat([1], 3)
3158cc2384cc patch 8.2.1132: Vim9: return type of repeat() is not specific enough
Bram Moolenaar <Bram@vim.org>
parents: 21160
diff changeset
1484 res += n
3158cc2384cc patch 8.2.1132: Vim9: return type of repeat() is not specific enough
Bram Moolenaar <Bram@vim.org>
parents: 21160
diff changeset
1485 endfor
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1486 res->assert_equal(3)
21164
4a190861f0cc patch 8.2.1133: Vim9: return type of add() is not specific enough
Bram Moolenaar <Bram@vim.org>
parents: 21162
diff changeset
1487
4a190861f0cc patch 8.2.1133: Vim9: return type of add() is not specific enough
Bram Moolenaar <Bram@vim.org>
parents: 21162
diff changeset
1488 res = 0
4a190861f0cc patch 8.2.1133: Vim9: return type of add() is not specific enough
Bram Moolenaar <Bram@vim.org>
parents: 21162
diff changeset
1489 for n in add([1, 2], 3)
4a190861f0cc patch 8.2.1133: Vim9: return type of add() is not specific enough
Bram Moolenaar <Bram@vim.org>
parents: 21162
diff changeset
1490 res += n
4a190861f0cc patch 8.2.1133: Vim9: return type of add() is not specific enough
Bram Moolenaar <Bram@vim.org>
parents: 21162
diff changeset
1491 endfor
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1492 res->assert_equal(6)
21162
3158cc2384cc patch 8.2.1132: Vim9: return type of repeat() is not specific enough
Bram Moolenaar <Bram@vim.org>
parents: 21160
diff changeset
1493 enddef
3158cc2384cc patch 8.2.1132: Vim9: return type of repeat() is not specific enough
Bram Moolenaar <Bram@vim.org>
parents: 21160
diff changeset
1494
21170
8c494353c6bc patch 8.2.1136: Vim9: return type of argv() is always any
Bram Moolenaar <Bram@vim.org>
parents: 21164
diff changeset
1495 def Test_argv_return_type()
8c494353c6bc patch 8.2.1136: Vim9: return type of argv() is always any
Bram Moolenaar <Bram@vim.org>
parents: 21164
diff changeset
1496 next fileone filetwo
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1497 var res = ''
21170
8c494353c6bc patch 8.2.1136: Vim9: return type of argv() is always any
Bram Moolenaar <Bram@vim.org>
parents: 21164
diff changeset
1498 for name in argv()
8c494353c6bc patch 8.2.1136: Vim9: return type of argv() is always any
Bram Moolenaar <Bram@vim.org>
parents: 21164
diff changeset
1499 res ..= name
8c494353c6bc patch 8.2.1136: Vim9: return type of argv() is always any
Bram Moolenaar <Bram@vim.org>
parents: 21164
diff changeset
1500 endfor
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1501 res->assert_equal('fileonefiletwo')
21170
8c494353c6bc patch 8.2.1136: Vim9: return type of argv() is always any
Bram Moolenaar <Bram@vim.org>
parents: 21164
diff changeset
1502 enddef
8c494353c6bc patch 8.2.1136: Vim9: return type of argv() is always any
Bram Moolenaar <Bram@vim.org>
parents: 21164
diff changeset
1503
19942
b471038ec3ea patch 8.2.0527: Vim9: function types insufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 19932
diff changeset
1504 def Test_func_type_part()
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1505 var RefVoid: func: void
19942
b471038ec3ea patch 8.2.0527: Vim9: function types insufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 19932
diff changeset
1506 RefVoid = FuncNoArgNoRet
b471038ec3ea patch 8.2.0527: Vim9: function types insufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 19932
diff changeset
1507 RefVoid = FuncOneArgNoRet
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1508 CheckDefFailure(['var RefVoid: func: void', 'RefVoid = FuncNoArgRetNumber'], 'E1012: Type mismatch; expected func(...) but got func(): number')
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1509 CheckDefFailure(['var RefVoid: func: void', 'RefVoid = FuncNoArgRetString'], 'E1012: Type mismatch; expected func(...) but got func(): string')
19942
b471038ec3ea patch 8.2.0527: Vim9: function types insufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 19932
diff changeset
1510
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1511 var RefAny: func(): any
19942
b471038ec3ea patch 8.2.0527: Vim9: function types insufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 19932
diff changeset
1512 RefAny = FuncNoArgRetNumber
b471038ec3ea patch 8.2.0527: Vim9: function types insufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 19932
diff changeset
1513 RefAny = FuncNoArgRetString
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1514 CheckDefFailure(['var RefAny: func(): any', 'RefAny = FuncNoArgNoRet'], 'E1012: Type mismatch; expected func(): any but got func()')
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1515 CheckDefFailure(['var RefAny: func(): any', 'RefAny = FuncOneArgNoRet'], 'E1012: Type mismatch; expected func(): any but got func(number)')
19942
b471038ec3ea patch 8.2.0527: Vim9: function types insufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 19932
diff changeset
1516
22498
04a9b1399d8e patch 8.2.1797: Vim9: some parts of the code not tested
Bram Moolenaar <Bram@vim.org>
parents: 22496
diff changeset
1517 var RefAnyNoArgs: func: any = RefAny
04a9b1399d8e patch 8.2.1797: Vim9: some parts of the code not tested
Bram Moolenaar <Bram@vim.org>
parents: 22496
diff changeset
1518
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1519 var RefNr: func: number
19942
b471038ec3ea patch 8.2.0527: Vim9: function types insufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 19932
diff changeset
1520 RefNr = FuncNoArgRetNumber
b471038ec3ea patch 8.2.0527: Vim9: function types insufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 19932
diff changeset
1521 RefNr = FuncOneArgRetNumber
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1522 CheckDefFailure(['var RefNr: func: number', 'RefNr = FuncNoArgNoRet'], 'E1012: Type mismatch; expected func(...): number but got func()')
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1523 CheckDefFailure(['var RefNr: func: number', 'RefNr = FuncNoArgRetString'], 'E1012: Type mismatch; expected func(...): number but got func(): string')
19942
b471038ec3ea patch 8.2.0527: Vim9: function types insufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 19932
diff changeset
1524
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1525 var RefStr: func: string
19942
b471038ec3ea patch 8.2.0527: Vim9: function types insufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 19932
diff changeset
1526 RefStr = FuncNoArgRetString
b471038ec3ea patch 8.2.0527: Vim9: function types insufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 19932
diff changeset
1527 RefStr = FuncOneArgRetString
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1528 CheckDefFailure(['var RefStr: func: string', 'RefStr = FuncNoArgNoRet'], 'E1012: Type mismatch; expected func(...): string but got func()')
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1529 CheckDefFailure(['var RefStr: func: string', 'RefStr = FuncNoArgRetNumber'], 'E1012: Type mismatch; expected func(...): string but got func(): number')
19942
b471038ec3ea patch 8.2.0527: Vim9: function types insufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 19932
diff changeset
1530 enddef
b471038ec3ea patch 8.2.0527: Vim9: function types insufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 19932
diff changeset
1531
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1532 def Test_func_type_fails()
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1533 CheckDefFailure(['var ref1: func()'], 'E704:')
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1534
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1535 CheckDefFailure(['var Ref1: func()', 'Ref1 = FuncNoArgRetNumber'], 'E1012: Type mismatch; expected func() but got func(): number')
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1536 CheckDefFailure(['var Ref1: func()', 'Ref1 = FuncOneArgNoRet'], 'E1012: Type mismatch; expected func() but got func(number)')
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1537 CheckDefFailure(['var Ref1: func()', 'Ref1 = FuncOneArgRetNumber'], 'E1012: Type mismatch; expected func() but got func(number): number')
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1538 CheckDefFailure(['var Ref1: func(bool)', 'Ref1 = FuncTwoArgNoRet'], 'E1012: Type mismatch; expected func(bool) but got func(bool, number)')
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1539 CheckDefFailure(['var Ref1: func(?bool)', 'Ref1 = FuncTwoArgNoRet'], 'E1012: Type mismatch; expected func(?bool) but got func(bool, number)')
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1540 CheckDefFailure(['var Ref1: func(...bool)', 'Ref1 = FuncTwoArgNoRet'], 'E1012: Type mismatch; expected func(...bool) but got func(bool, number)')
19985
f863aa96cae5 patch 8.2.0548: Vim9: not all possible func type errors tested
Bram Moolenaar <Bram@vim.org>
parents: 19975
diff changeset
1541
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1542 CheckDefFailure(['var RefWrong: func(string ,number)'], 'E1068:')
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1543 CheckDefFailure(['var RefWrong: func(string,number)'], 'E1069:')
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1544 CheckDefFailure(['var RefWrong: func(bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool)'], 'E1005:')
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1545 CheckDefFailure(['var RefWrong: func(bool):string'], 'E1069:')
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1546 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1547
19926
d286bfc44149 patch 8.2.0519: Vim9: return type not properly checked
Bram Moolenaar <Bram@vim.org>
parents: 19922
diff changeset
1548 def Test_func_return_type()
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1549 var nr: number
19926
d286bfc44149 patch 8.2.0519: Vim9: return type not properly checked
Bram Moolenaar <Bram@vim.org>
parents: 19922
diff changeset
1550 nr = FuncNoArgRetNumber()
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1551 nr->assert_equal(1234)
19926
d286bfc44149 patch 8.2.0519: Vim9: return type not properly checked
Bram Moolenaar <Bram@vim.org>
parents: 19922
diff changeset
1552
d286bfc44149 patch 8.2.0519: Vim9: return type not properly checked
Bram Moolenaar <Bram@vim.org>
parents: 19922
diff changeset
1553 nr = FuncOneArgRetAny(122)
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1554 nr->assert_equal(122)
19926
d286bfc44149 patch 8.2.0519: Vim9: return type not properly checked
Bram Moolenaar <Bram@vim.org>
parents: 19922
diff changeset
1555
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1556 var str: string
19926
d286bfc44149 patch 8.2.0519: Vim9: return type not properly checked
Bram Moolenaar <Bram@vim.org>
parents: 19922
diff changeset
1557 str = FuncOneArgRetAny('yes')
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1558 str->assert_equal('yes')
19926
d286bfc44149 patch 8.2.0519: Vim9: return type not properly checked
Bram Moolenaar <Bram@vim.org>
parents: 19922
diff changeset
1559
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1560 CheckDefFailure(['var str: string', 'str = FuncNoArgRetNumber()'], 'E1012: Type mismatch; expected string but got number')
19926
d286bfc44149 patch 8.2.0519: Vim9: return type not properly checked
Bram Moolenaar <Bram@vim.org>
parents: 19922
diff changeset
1561 enddef
d286bfc44149 patch 8.2.0519: Vim9: return type not properly checked
Bram Moolenaar <Bram@vim.org>
parents: 19922
diff changeset
1562
22498
04a9b1399d8e patch 8.2.1797: Vim9: some parts of the code not tested
Bram Moolenaar <Bram@vim.org>
parents: 22496
diff changeset
1563 def Test_func_common_type()
04a9b1399d8e patch 8.2.1797: Vim9: some parts of the code not tested
Bram Moolenaar <Bram@vim.org>
parents: 22496
diff changeset
1564 def FuncOne(n: number): number
04a9b1399d8e patch 8.2.1797: Vim9: some parts of the code not tested
Bram Moolenaar <Bram@vim.org>
parents: 22496
diff changeset
1565 return n
04a9b1399d8e patch 8.2.1797: Vim9: some parts of the code not tested
Bram Moolenaar <Bram@vim.org>
parents: 22496
diff changeset
1566 enddef
04a9b1399d8e patch 8.2.1797: Vim9: some parts of the code not tested
Bram Moolenaar <Bram@vim.org>
parents: 22496
diff changeset
1567 def FuncTwo(s: string): number
04a9b1399d8e patch 8.2.1797: Vim9: some parts of the code not tested
Bram Moolenaar <Bram@vim.org>
parents: 22496
diff changeset
1568 return len(s)
04a9b1399d8e patch 8.2.1797: Vim9: some parts of the code not tested
Bram Moolenaar <Bram@vim.org>
parents: 22496
diff changeset
1569 enddef
04a9b1399d8e patch 8.2.1797: Vim9: some parts of the code not tested
Bram Moolenaar <Bram@vim.org>
parents: 22496
diff changeset
1570 def FuncThree(n: number, s: string): number
04a9b1399d8e patch 8.2.1797: Vim9: some parts of the code not tested
Bram Moolenaar <Bram@vim.org>
parents: 22496
diff changeset
1571 return n + len(s)
04a9b1399d8e patch 8.2.1797: Vim9: some parts of the code not tested
Bram Moolenaar <Bram@vim.org>
parents: 22496
diff changeset
1572 enddef
04a9b1399d8e patch 8.2.1797: Vim9: some parts of the code not tested
Bram Moolenaar <Bram@vim.org>
parents: 22496
diff changeset
1573 var list = [FuncOne, FuncTwo, FuncThree]
04a9b1399d8e patch 8.2.1797: Vim9: some parts of the code not tested
Bram Moolenaar <Bram@vim.org>
parents: 22496
diff changeset
1574 assert_equal(8, list[0](8))
04a9b1399d8e patch 8.2.1797: Vim9: some parts of the code not tested
Bram Moolenaar <Bram@vim.org>
parents: 22496
diff changeset
1575 assert_equal(4, list[1]('word'))
04a9b1399d8e patch 8.2.1797: Vim9: some parts of the code not tested
Bram Moolenaar <Bram@vim.org>
parents: 22496
diff changeset
1576 assert_equal(7, list[2](3, 'word'))
04a9b1399d8e patch 8.2.1797: Vim9: some parts of the code not tested
Bram Moolenaar <Bram@vim.org>
parents: 22496
diff changeset
1577 enddef
04a9b1399d8e patch 8.2.1797: Vim9: some parts of the code not tested
Bram Moolenaar <Bram@vim.org>
parents: 22496
diff changeset
1578
20015
c001ee73519a patch 8.2.0563: Vim9: cannot split a function line
Bram Moolenaar <Bram@vim.org>
parents: 19993
diff changeset
1579 def MultiLine(
c001ee73519a patch 8.2.0563: Vim9: cannot split a function line
Bram Moolenaar <Bram@vim.org>
parents: 19993
diff changeset
1580 arg1: string,
c001ee73519a patch 8.2.0563: Vim9: cannot split a function line
Bram Moolenaar <Bram@vim.org>
parents: 19993
diff changeset
1581 arg2 = 1234,
c001ee73519a patch 8.2.0563: Vim9: cannot split a function line
Bram Moolenaar <Bram@vim.org>
parents: 19993
diff changeset
1582 ...rest: list<string>
c001ee73519a patch 8.2.0563: Vim9: cannot split a function line
Bram Moolenaar <Bram@vim.org>
parents: 19993
diff changeset
1583 ): string
c001ee73519a patch 8.2.0563: Vim9: cannot split a function line
Bram Moolenaar <Bram@vim.org>
parents: 19993
diff changeset
1584 return arg1 .. arg2 .. join(rest, '-')
c001ee73519a patch 8.2.0563: Vim9: cannot split a function line
Bram Moolenaar <Bram@vim.org>
parents: 19993
diff changeset
1585 enddef
c001ee73519a patch 8.2.0563: Vim9: cannot split a function line
Bram Moolenaar <Bram@vim.org>
parents: 19993
diff changeset
1586
20023
c85d4e173cc9 patch 8.2.0567: Vim9: cannot put comments halfway expressions
Bram Moolenaar <Bram@vim.org>
parents: 20017
diff changeset
1587 def MultiLineComment(
c85d4e173cc9 patch 8.2.0567: Vim9: cannot put comments halfway expressions
Bram Moolenaar <Bram@vim.org>
parents: 20017
diff changeset
1588 arg1: string, # comment
c85d4e173cc9 patch 8.2.0567: Vim9: cannot put comments halfway expressions
Bram Moolenaar <Bram@vim.org>
parents: 20017
diff changeset
1589 arg2 = 1234, # comment
c85d4e173cc9 patch 8.2.0567: Vim9: cannot put comments halfway expressions
Bram Moolenaar <Bram@vim.org>
parents: 20017
diff changeset
1590 ...rest: list<string> # comment
c85d4e173cc9 patch 8.2.0567: Vim9: cannot put comments halfway expressions
Bram Moolenaar <Bram@vim.org>
parents: 20017
diff changeset
1591 ): string # comment
c85d4e173cc9 patch 8.2.0567: Vim9: cannot put comments halfway expressions
Bram Moolenaar <Bram@vim.org>
parents: 20017
diff changeset
1592 return arg1 .. arg2 .. join(rest, '-')
c85d4e173cc9 patch 8.2.0567: Vim9: cannot put comments halfway expressions
Bram Moolenaar <Bram@vim.org>
parents: 20017
diff changeset
1593 enddef
c85d4e173cc9 patch 8.2.0567: Vim9: cannot put comments halfway expressions
Bram Moolenaar <Bram@vim.org>
parents: 20017
diff changeset
1594
20015
c001ee73519a patch 8.2.0563: Vim9: cannot split a function line
Bram Moolenaar <Bram@vim.org>
parents: 19993
diff changeset
1595 def Test_multiline()
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1596 MultiLine('text')->assert_equal('text1234')
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1597 MultiLine('text', 777)->assert_equal('text777')
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1598 MultiLine('text', 777, 'one')->assert_equal('text777one')
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1599 MultiLine('text', 777, 'one', 'two')->assert_equal('text777one-two')
20015
c001ee73519a patch 8.2.0563: Vim9: cannot split a function line
Bram Moolenaar <Bram@vim.org>
parents: 19993
diff changeset
1600 enddef
c001ee73519a patch 8.2.0563: Vim9: cannot split a function line
Bram Moolenaar <Bram@vim.org>
parents: 19993
diff changeset
1601
20017
ee823254dda5 patch 8.2.0564: Vim9: calling a def function from non-vim9 may fail
Bram Moolenaar <Bram@vim.org>
parents: 20015
diff changeset
1602 func Test_multiline_not_vim9()
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1603 call MultiLine('text')->assert_equal('text1234')
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1604 call MultiLine('text', 777)->assert_equal('text777')
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1605 call MultiLine('text', 777, 'one')->assert_equal('text777one')
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1606 call MultiLine('text', 777, 'one', 'two')->assert_equal('text777one-two')
20017
ee823254dda5 patch 8.2.0564: Vim9: calling a def function from non-vim9 may fail
Bram Moolenaar <Bram@vim.org>
parents: 20015
diff changeset
1607 endfunc
ee823254dda5 patch 8.2.0564: Vim9: calling a def function from non-vim9 may fail
Bram Moolenaar <Bram@vim.org>
parents: 20015
diff changeset
1608
20015
c001ee73519a patch 8.2.0563: Vim9: cannot split a function line
Bram Moolenaar <Bram@vim.org>
parents: 19993
diff changeset
1609
19932
2c4d9ca33769 patch 8.2.0522: several errors are not tested for
Bram Moolenaar <Bram@vim.org>
parents: 19926
diff changeset
1610 " When using CheckScriptFailure() for the below test, E1010 is generated instead
2c4d9ca33769 patch 8.2.0522: several errors are not tested for
Bram Moolenaar <Bram@vim.org>
parents: 19926
diff changeset
1611 " of E1056.
2c4d9ca33769 patch 8.2.0522: several errors are not tested for
Bram Moolenaar <Bram@vim.org>
parents: 19926
diff changeset
1612 func Test_E1056_1059()
2c4d9ca33769 patch 8.2.0522: several errors are not tested for
Bram Moolenaar <Bram@vim.org>
parents: 19926
diff changeset
1613 let caught_1056 = 0
2c4d9ca33769 patch 8.2.0522: several errors are not tested for
Bram Moolenaar <Bram@vim.org>
parents: 19926
diff changeset
1614 try
2c4d9ca33769 patch 8.2.0522: several errors are not tested for
Bram Moolenaar <Bram@vim.org>
parents: 19926
diff changeset
1615 def F():
2c4d9ca33769 patch 8.2.0522: several errors are not tested for
Bram Moolenaar <Bram@vim.org>
parents: 19926
diff changeset
1616 return 1
2c4d9ca33769 patch 8.2.0522: several errors are not tested for
Bram Moolenaar <Bram@vim.org>
parents: 19926
diff changeset
1617 enddef
2c4d9ca33769 patch 8.2.0522: several errors are not tested for
Bram Moolenaar <Bram@vim.org>
parents: 19926
diff changeset
1618 catch /E1056:/
2c4d9ca33769 patch 8.2.0522: several errors are not tested for
Bram Moolenaar <Bram@vim.org>
parents: 19926
diff changeset
1619 let caught_1056 = 1
2c4d9ca33769 patch 8.2.0522: several errors are not tested for
Bram Moolenaar <Bram@vim.org>
parents: 19926
diff changeset
1620 endtry
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1621 eval caught_1056->assert_equal(1)
19932
2c4d9ca33769 patch 8.2.0522: several errors are not tested for
Bram Moolenaar <Bram@vim.org>
parents: 19926
diff changeset
1622
2c4d9ca33769 patch 8.2.0522: several errors are not tested for
Bram Moolenaar <Bram@vim.org>
parents: 19926
diff changeset
1623 let caught_1059 = 0
2c4d9ca33769 patch 8.2.0522: several errors are not tested for
Bram Moolenaar <Bram@vim.org>
parents: 19926
diff changeset
1624 try
2c4d9ca33769 patch 8.2.0522: several errors are not tested for
Bram Moolenaar <Bram@vim.org>
parents: 19926
diff changeset
1625 def F5(items : list)
2c4d9ca33769 patch 8.2.0522: several errors are not tested for
Bram Moolenaar <Bram@vim.org>
parents: 19926
diff changeset
1626 echo 'a'
2c4d9ca33769 patch 8.2.0522: several errors are not tested for
Bram Moolenaar <Bram@vim.org>
parents: 19926
diff changeset
1627 enddef
2c4d9ca33769 patch 8.2.0522: several errors are not tested for
Bram Moolenaar <Bram@vim.org>
parents: 19926
diff changeset
1628 catch /E1059:/
2c4d9ca33769 patch 8.2.0522: several errors are not tested for
Bram Moolenaar <Bram@vim.org>
parents: 19926
diff changeset
1629 let caught_1059 = 1
2c4d9ca33769 patch 8.2.0522: several errors are not tested for
Bram Moolenaar <Bram@vim.org>
parents: 19926
diff changeset
1630 endtry
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1631 eval caught_1059->assert_equal(1)
19932
2c4d9ca33769 patch 8.2.0522: several errors are not tested for
Bram Moolenaar <Bram@vim.org>
parents: 19926
diff changeset
1632 endfunc
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1633
20287
ce1b73835822 patch 8.2.0699: Vim9: not all errors tested
Bram Moolenaar <Bram@vim.org>
parents: 20281
diff changeset
1634 func DelMe()
ce1b73835822 patch 8.2.0699: Vim9: not all errors tested
Bram Moolenaar <Bram@vim.org>
parents: 20281
diff changeset
1635 echo 'DelMe'
ce1b73835822 patch 8.2.0699: Vim9: not all errors tested
Bram Moolenaar <Bram@vim.org>
parents: 20281
diff changeset
1636 endfunc
ce1b73835822 patch 8.2.0699: Vim9: not all errors tested
Bram Moolenaar <Bram@vim.org>
parents: 20281
diff changeset
1637
21685
26a4b53c4587 patch 8.2.1392: Vim9: line number incorrect after skipping over comment lines
Bram Moolenaar <Bram@vim.org>
parents: 21660
diff changeset
1638 def Test_error_reporting()
26a4b53c4587 patch 8.2.1392: Vim9: line number incorrect after skipping over comment lines
Bram Moolenaar <Bram@vim.org>
parents: 21660
diff changeset
1639 # comment lines at the start of the function
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1640 var lines =<< trim END
21685
26a4b53c4587 patch 8.2.1392: Vim9: line number incorrect after skipping over comment lines
Bram Moolenaar <Bram@vim.org>
parents: 21660
diff changeset
1641 " comment
26a4b53c4587 patch 8.2.1392: Vim9: line number incorrect after skipping over comment lines
Bram Moolenaar <Bram@vim.org>
parents: 21660
diff changeset
1642 def Func()
26a4b53c4587 patch 8.2.1392: Vim9: line number incorrect after skipping over comment lines
Bram Moolenaar <Bram@vim.org>
parents: 21660
diff changeset
1643 # comment
26a4b53c4587 patch 8.2.1392: Vim9: line number incorrect after skipping over comment lines
Bram Moolenaar <Bram@vim.org>
parents: 21660
diff changeset
1644 # comment
26a4b53c4587 patch 8.2.1392: Vim9: line number incorrect after skipping over comment lines
Bram Moolenaar <Bram@vim.org>
parents: 21660
diff changeset
1645 invalid
26a4b53c4587 patch 8.2.1392: Vim9: line number incorrect after skipping over comment lines
Bram Moolenaar <Bram@vim.org>
parents: 21660
diff changeset
1646 enddef
26a4b53c4587 patch 8.2.1392: Vim9: line number incorrect after skipping over comment lines
Bram Moolenaar <Bram@vim.org>
parents: 21660
diff changeset
1647 defcompile
26a4b53c4587 patch 8.2.1392: Vim9: line number incorrect after skipping over comment lines
Bram Moolenaar <Bram@vim.org>
parents: 21660
diff changeset
1648 END
22264
e0a4d029cb87 patch 8.2.1681: Vim9: unnessary :call commands in tests
Bram Moolenaar <Bram@vim.org>
parents: 22236
diff changeset
1649 writefile(lines, 'Xdef')
21685
26a4b53c4587 patch 8.2.1392: Vim9: line number incorrect after skipping over comment lines
Bram Moolenaar <Bram@vim.org>
parents: 21660
diff changeset
1650 try
26a4b53c4587 patch 8.2.1392: Vim9: line number incorrect after skipping over comment lines
Bram Moolenaar <Bram@vim.org>
parents: 21660
diff changeset
1651 source Xdef
21793
0706bd071fa3 patch 8.2.1446: Vim9: line number in error message is not correct
Bram Moolenaar <Bram@vim.org>
parents: 21759
diff changeset
1652 assert_report('should have failed')
21685
26a4b53c4587 patch 8.2.1392: Vim9: line number incorrect after skipping over comment lines
Bram Moolenaar <Bram@vim.org>
parents: 21660
diff changeset
1653 catch /E476:/
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1654 v:exception->assert_match('Invalid command: invalid')
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1655 v:throwpoint->assert_match(', line 3$')
21685
26a4b53c4587 patch 8.2.1392: Vim9: line number incorrect after skipping over comment lines
Bram Moolenaar <Bram@vim.org>
parents: 21660
diff changeset
1656 endtry
23092
c713358da074 patch 8.2.2092: Vim9: unpredictable errors for script tests
Bram Moolenaar <Bram@vim.org>
parents: 23074
diff changeset
1657 delfunc! g:Func
21685
26a4b53c4587 patch 8.2.1392: Vim9: line number incorrect after skipping over comment lines
Bram Moolenaar <Bram@vim.org>
parents: 21660
diff changeset
1658
26a4b53c4587 patch 8.2.1392: Vim9: line number incorrect after skipping over comment lines
Bram Moolenaar <Bram@vim.org>
parents: 21660
diff changeset
1659 # comment lines after the start of the function
26a4b53c4587 patch 8.2.1392: Vim9: line number incorrect after skipping over comment lines
Bram Moolenaar <Bram@vim.org>
parents: 21660
diff changeset
1660 lines =<< trim END
26a4b53c4587 patch 8.2.1392: Vim9: line number incorrect after skipping over comment lines
Bram Moolenaar <Bram@vim.org>
parents: 21660
diff changeset
1661 " comment
26a4b53c4587 patch 8.2.1392: Vim9: line number incorrect after skipping over comment lines
Bram Moolenaar <Bram@vim.org>
parents: 21660
diff changeset
1662 def Func()
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1663 var x = 1234
21685
26a4b53c4587 patch 8.2.1392: Vim9: line number incorrect after skipping over comment lines
Bram Moolenaar <Bram@vim.org>
parents: 21660
diff changeset
1664 # comment
26a4b53c4587 patch 8.2.1392: Vim9: line number incorrect after skipping over comment lines
Bram Moolenaar <Bram@vim.org>
parents: 21660
diff changeset
1665 # comment
26a4b53c4587 patch 8.2.1392: Vim9: line number incorrect after skipping over comment lines
Bram Moolenaar <Bram@vim.org>
parents: 21660
diff changeset
1666 invalid
26a4b53c4587 patch 8.2.1392: Vim9: line number incorrect after skipping over comment lines
Bram Moolenaar <Bram@vim.org>
parents: 21660
diff changeset
1667 enddef
26a4b53c4587 patch 8.2.1392: Vim9: line number incorrect after skipping over comment lines
Bram Moolenaar <Bram@vim.org>
parents: 21660
diff changeset
1668 defcompile
26a4b53c4587 patch 8.2.1392: Vim9: line number incorrect after skipping over comment lines
Bram Moolenaar <Bram@vim.org>
parents: 21660
diff changeset
1669 END
22264
e0a4d029cb87 patch 8.2.1681: Vim9: unnessary :call commands in tests
Bram Moolenaar <Bram@vim.org>
parents: 22236
diff changeset
1670 writefile(lines, 'Xdef')
21685
26a4b53c4587 patch 8.2.1392: Vim9: line number incorrect after skipping over comment lines
Bram Moolenaar <Bram@vim.org>
parents: 21660
diff changeset
1671 try
26a4b53c4587 patch 8.2.1392: Vim9: line number incorrect after skipping over comment lines
Bram Moolenaar <Bram@vim.org>
parents: 21660
diff changeset
1672 source Xdef
21793
0706bd071fa3 patch 8.2.1446: Vim9: line number in error message is not correct
Bram Moolenaar <Bram@vim.org>
parents: 21759
diff changeset
1673 assert_report('should have failed')
21685
26a4b53c4587 patch 8.2.1392: Vim9: line number incorrect after skipping over comment lines
Bram Moolenaar <Bram@vim.org>
parents: 21660
diff changeset
1674 catch /E476:/
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1675 v:exception->assert_match('Invalid command: invalid')
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1676 v:throwpoint->assert_match(', line 4$')
21685
26a4b53c4587 patch 8.2.1392: Vim9: line number incorrect after skipping over comment lines
Bram Moolenaar <Bram@vim.org>
parents: 21660
diff changeset
1677 endtry
23092
c713358da074 patch 8.2.2092: Vim9: unpredictable errors for script tests
Bram Moolenaar <Bram@vim.org>
parents: 23074
diff changeset
1678 delfunc! g:Func
21685
26a4b53c4587 patch 8.2.1392: Vim9: line number incorrect after skipping over comment lines
Bram Moolenaar <Bram@vim.org>
parents: 21660
diff changeset
1679
21793
0706bd071fa3 patch 8.2.1446: Vim9: line number in error message is not correct
Bram Moolenaar <Bram@vim.org>
parents: 21759
diff changeset
1680 lines =<< trim END
0706bd071fa3 patch 8.2.1446: Vim9: line number in error message is not correct
Bram Moolenaar <Bram@vim.org>
parents: 21759
diff changeset
1681 vim9script
0706bd071fa3 patch 8.2.1446: Vim9: line number in error message is not correct
Bram Moolenaar <Bram@vim.org>
parents: 21759
diff changeset
1682 def Func()
23072
4b398a229b0b patch 8.2.2082: Vim9: can still use the depricated #{} dict syntax
Bram Moolenaar <Bram@vim.org>
parents: 23009
diff changeset
1683 var db = {foo: 1, bar: 2}
21793
0706bd071fa3 patch 8.2.1446: Vim9: line number in error message is not correct
Bram Moolenaar <Bram@vim.org>
parents: 21759
diff changeset
1684 # comment
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1685 var x = db.asdf
21793
0706bd071fa3 patch 8.2.1446: Vim9: line number in error message is not correct
Bram Moolenaar <Bram@vim.org>
parents: 21759
diff changeset
1686 enddef
0706bd071fa3 patch 8.2.1446: Vim9: line number in error message is not correct
Bram Moolenaar <Bram@vim.org>
parents: 21759
diff changeset
1687 defcompile
0706bd071fa3 patch 8.2.1446: Vim9: line number in error message is not correct
Bram Moolenaar <Bram@vim.org>
parents: 21759
diff changeset
1688 Func()
0706bd071fa3 patch 8.2.1446: Vim9: line number in error message is not correct
Bram Moolenaar <Bram@vim.org>
parents: 21759
diff changeset
1689 END
22264
e0a4d029cb87 patch 8.2.1681: Vim9: unnessary :call commands in tests
Bram Moolenaar <Bram@vim.org>
parents: 22236
diff changeset
1690 writefile(lines, 'Xdef')
21793
0706bd071fa3 patch 8.2.1446: Vim9: line number in error message is not correct
Bram Moolenaar <Bram@vim.org>
parents: 21759
diff changeset
1691 try
0706bd071fa3 patch 8.2.1446: Vim9: line number in error message is not correct
Bram Moolenaar <Bram@vim.org>
parents: 21759
diff changeset
1692 source Xdef
0706bd071fa3 patch 8.2.1446: Vim9: line number in error message is not correct
Bram Moolenaar <Bram@vim.org>
parents: 21759
diff changeset
1693 assert_report('should have failed')
0706bd071fa3 patch 8.2.1446: Vim9: line number in error message is not correct
Bram Moolenaar <Bram@vim.org>
parents: 21759
diff changeset
1694 catch /E716:/
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1695 v:throwpoint->assert_match('_Func, line 3$')
21793
0706bd071fa3 patch 8.2.1446: Vim9: line number in error message is not correct
Bram Moolenaar <Bram@vim.org>
parents: 21759
diff changeset
1696 endtry
23092
c713358da074 patch 8.2.2092: Vim9: unpredictable errors for script tests
Bram Moolenaar <Bram@vim.org>
parents: 23074
diff changeset
1697 delfunc! g:Func
21793
0706bd071fa3 patch 8.2.1446: Vim9: line number in error message is not correct
Bram Moolenaar <Bram@vim.org>
parents: 21759
diff changeset
1698
22264
e0a4d029cb87 patch 8.2.1681: Vim9: unnessary :call commands in tests
Bram Moolenaar <Bram@vim.org>
parents: 22236
diff changeset
1699 delete('Xdef')
21685
26a4b53c4587 patch 8.2.1392: Vim9: line number incorrect after skipping over comment lines
Bram Moolenaar <Bram@vim.org>
parents: 21660
diff changeset
1700 enddef
26a4b53c4587 patch 8.2.1392: Vim9: line number incorrect after skipping over comment lines
Bram Moolenaar <Bram@vim.org>
parents: 21660
diff changeset
1701
20287
ce1b73835822 patch 8.2.0699: Vim9: not all errors tested
Bram Moolenaar <Bram@vim.org>
parents: 20281
diff changeset
1702 def Test_deleted_function()
ce1b73835822 patch 8.2.0699: Vim9: not all errors tested
Bram Moolenaar <Bram@vim.org>
parents: 20281
diff changeset
1703 CheckDefExecFailure([
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1704 'var RefMe: func = function("g:DelMe")',
20287
ce1b73835822 patch 8.2.0699: Vim9: not all errors tested
Bram Moolenaar <Bram@vim.org>
parents: 20281
diff changeset
1705 'delfunc g:DelMe',
ce1b73835822 patch 8.2.0699: Vim9: not all errors tested
Bram Moolenaar <Bram@vim.org>
parents: 20281
diff changeset
1706 'echo RefMe()'], 'E117:')
ce1b73835822 patch 8.2.0699: Vim9: not all errors tested
Bram Moolenaar <Bram@vim.org>
parents: 20281
diff changeset
1707 enddef
ce1b73835822 patch 8.2.0699: Vim9: not all errors tested
Bram Moolenaar <Bram@vim.org>
parents: 20281
diff changeset
1708
ce1b73835822 patch 8.2.0699: Vim9: not all errors tested
Bram Moolenaar <Bram@vim.org>
parents: 20281
diff changeset
1709 def Test_unknown_function()
ce1b73835822 patch 8.2.0699: Vim9: not all errors tested
Bram Moolenaar <Bram@vim.org>
parents: 20281
diff changeset
1710 CheckDefExecFailure([
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1711 'var Ref: func = function("NotExist")',
21265
6a4806e326dd patch 8.2.1183: assert_fails() checks the last error message
Bram Moolenaar <Bram@vim.org>
parents: 21263
diff changeset
1712 'delfunc g:NotExist'], 'E700:')
20287
ce1b73835822 patch 8.2.0699: Vim9: not all errors tested
Bram Moolenaar <Bram@vim.org>
parents: 20281
diff changeset
1713 enddef
ce1b73835822 patch 8.2.0699: Vim9: not all errors tested
Bram Moolenaar <Bram@vim.org>
parents: 20281
diff changeset
1714
23531
f39a18a42aed patch 8.2.2308: Vim9: no error when assigning lambda to funcref
Bram Moolenaar <Bram@vim.org>
parents: 23527
diff changeset
1715 def RefFunc(Ref: func(any): any): string
20244
23d75968ca5e patch 8.2.0677: Vim9: no support for closures
Bram Moolenaar <Bram@vim.org>
parents: 20189
diff changeset
1716 return Ref('more')
23d75968ca5e patch 8.2.0677: Vim9: no support for closures
Bram Moolenaar <Bram@vim.org>
parents: 20189
diff changeset
1717 enddef
23d75968ca5e patch 8.2.0677: Vim9: no support for closures
Bram Moolenaar <Bram@vim.org>
parents: 20189
diff changeset
1718
23d75968ca5e patch 8.2.0677: Vim9: no support for closures
Bram Moolenaar <Bram@vim.org>
parents: 20189
diff changeset
1719 def Test_closure_simple()
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1720 var local = 'some '
23428
5807e3958e38 patch 8.2.2257: Vim9: using -> for lambda is ambiguous
Bram Moolenaar <Bram@vim.org>
parents: 23426
diff changeset
1721 RefFunc((s) => local .. s)->assert_equal('some more')
20244
23d75968ca5e patch 8.2.0677: Vim9: no support for closures
Bram Moolenaar <Bram@vim.org>
parents: 20189
diff changeset
1722 enddef
23d75968ca5e patch 8.2.0677: Vim9: no support for closures
Bram Moolenaar <Bram@vim.org>
parents: 20189
diff changeset
1723
20247
e46e72aaff74 patch 8.2.0679: Vim9: incomplete support for closures
Bram Moolenaar <Bram@vim.org>
parents: 20244
diff changeset
1724 def MakeRef()
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1725 var local = 'some '
23428
5807e3958e38 patch 8.2.2257: Vim9: using -> for lambda is ambiguous
Bram Moolenaar <Bram@vim.org>
parents: 23426
diff changeset
1726 g:Ref = (s) => local .. s
20247
e46e72aaff74 patch 8.2.0679: Vim9: incomplete support for closures
Bram Moolenaar <Bram@vim.org>
parents: 20244
diff changeset
1727 enddef
e46e72aaff74 patch 8.2.0679: Vim9: incomplete support for closures
Bram Moolenaar <Bram@vim.org>
parents: 20244
diff changeset
1728
e46e72aaff74 patch 8.2.0679: Vim9: incomplete support for closures
Bram Moolenaar <Bram@vim.org>
parents: 20244
diff changeset
1729 def Test_closure_ref_after_return()
e46e72aaff74 patch 8.2.0679: Vim9: incomplete support for closures
Bram Moolenaar <Bram@vim.org>
parents: 20244
diff changeset
1730 MakeRef()
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1731 g:Ref('thing')->assert_equal('some thing')
20247
e46e72aaff74 patch 8.2.0679: Vim9: incomplete support for closures
Bram Moolenaar <Bram@vim.org>
parents: 20244
diff changeset
1732 unlet g:Ref
e46e72aaff74 patch 8.2.0679: Vim9: incomplete support for closures
Bram Moolenaar <Bram@vim.org>
parents: 20244
diff changeset
1733 enddef
e46e72aaff74 patch 8.2.0679: Vim9: incomplete support for closures
Bram Moolenaar <Bram@vim.org>
parents: 20244
diff changeset
1734
20255
aac52c32a91f patch 8.2.0683: Vim9: parsing type does not always work
Bram Moolenaar <Bram@vim.org>
parents: 20253
diff changeset
1735 def MakeTwoRefs()
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1736 var local = ['some']
23428
5807e3958e38 patch 8.2.2257: Vim9: using -> for lambda is ambiguous
Bram Moolenaar <Bram@vim.org>
parents: 23426
diff changeset
1737 g:Extend = (s) => local->add(s)
5807e3958e38 patch 8.2.2257: Vim9: using -> for lambda is ambiguous
Bram Moolenaar <Bram@vim.org>
parents: 23426
diff changeset
1738 g:Read = () => local
20255
aac52c32a91f patch 8.2.0683: Vim9: parsing type does not always work
Bram Moolenaar <Bram@vim.org>
parents: 20253
diff changeset
1739 enddef
aac52c32a91f patch 8.2.0683: Vim9: parsing type does not always work
Bram Moolenaar <Bram@vim.org>
parents: 20253
diff changeset
1740
aac52c32a91f patch 8.2.0683: Vim9: parsing type does not always work
Bram Moolenaar <Bram@vim.org>
parents: 20253
diff changeset
1741 def Test_closure_two_refs()
aac52c32a91f patch 8.2.0683: Vim9: parsing type does not always work
Bram Moolenaar <Bram@vim.org>
parents: 20253
diff changeset
1742 MakeTwoRefs()
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1743 join(g:Read(), ' ')->assert_equal('some')
20255
aac52c32a91f patch 8.2.0683: Vim9: parsing type does not always work
Bram Moolenaar <Bram@vim.org>
parents: 20253
diff changeset
1744 g:Extend('more')
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1745 join(g:Read(), ' ')->assert_equal('some more')
20255
aac52c32a91f patch 8.2.0683: Vim9: parsing type does not always work
Bram Moolenaar <Bram@vim.org>
parents: 20253
diff changeset
1746 g:Extend('even')
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1747 join(g:Read(), ' ')->assert_equal('some more even')
20255
aac52c32a91f patch 8.2.0683: Vim9: parsing type does not always work
Bram Moolenaar <Bram@vim.org>
parents: 20253
diff changeset
1748
aac52c32a91f patch 8.2.0683: Vim9: parsing type does not always work
Bram Moolenaar <Bram@vim.org>
parents: 20253
diff changeset
1749 unlet g:Extend
aac52c32a91f patch 8.2.0683: Vim9: parsing type does not always work
Bram Moolenaar <Bram@vim.org>
parents: 20253
diff changeset
1750 unlet g:Read
aac52c32a91f patch 8.2.0683: Vim9: parsing type does not always work
Bram Moolenaar <Bram@vim.org>
parents: 20253
diff changeset
1751 enddef
aac52c32a91f patch 8.2.0683: Vim9: parsing type does not always work
Bram Moolenaar <Bram@vim.org>
parents: 20253
diff changeset
1752
aac52c32a91f patch 8.2.0683: Vim9: parsing type does not always work
Bram Moolenaar <Bram@vim.org>
parents: 20253
diff changeset
1753 def ReadRef(Ref: func(): list<string>): string
aac52c32a91f patch 8.2.0683: Vim9: parsing type does not always work
Bram Moolenaar <Bram@vim.org>
parents: 20253
diff changeset
1754 return join(Ref(), ' ')
aac52c32a91f patch 8.2.0683: Vim9: parsing type does not always work
Bram Moolenaar <Bram@vim.org>
parents: 20253
diff changeset
1755 enddef
aac52c32a91f patch 8.2.0683: Vim9: parsing type does not always work
Bram Moolenaar <Bram@vim.org>
parents: 20253
diff changeset
1756
22284
6b385c2b9ff5 patch 8.2.1691: Vim9: list<any> is not accepted where list<number> is expected
Bram Moolenaar <Bram@vim.org>
parents: 22264
diff changeset
1757 def ExtendRef(Ref: func(string): list<string>, add: string)
20255
aac52c32a91f patch 8.2.0683: Vim9: parsing type does not always work
Bram Moolenaar <Bram@vim.org>
parents: 20253
diff changeset
1758 Ref(add)
aac52c32a91f patch 8.2.0683: Vim9: parsing type does not always work
Bram Moolenaar <Bram@vim.org>
parents: 20253
diff changeset
1759 enddef
aac52c32a91f patch 8.2.0683: Vim9: parsing type does not always work
Bram Moolenaar <Bram@vim.org>
parents: 20253
diff changeset
1760
aac52c32a91f patch 8.2.0683: Vim9: parsing type does not always work
Bram Moolenaar <Bram@vim.org>
parents: 20253
diff changeset
1761 def Test_closure_two_indirect_refs()
20257
683c2da4982b patch 8.2.0684: Vim9: memory leak when using lambda
Bram Moolenaar <Bram@vim.org>
parents: 20255
diff changeset
1762 MakeTwoRefs()
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1763 ReadRef(g:Read)->assert_equal('some')
20255
aac52c32a91f patch 8.2.0683: Vim9: parsing type does not always work
Bram Moolenaar <Bram@vim.org>
parents: 20253
diff changeset
1764 ExtendRef(g:Extend, 'more')
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1765 ReadRef(g:Read)->assert_equal('some more')
20255
aac52c32a91f patch 8.2.0683: Vim9: parsing type does not always work
Bram Moolenaar <Bram@vim.org>
parents: 20253
diff changeset
1766 ExtendRef(g:Extend, 'even')
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1767 ReadRef(g:Read)->assert_equal('some more even')
20255
aac52c32a91f patch 8.2.0683: Vim9: parsing type does not always work
Bram Moolenaar <Bram@vim.org>
parents: 20253
diff changeset
1768
aac52c32a91f patch 8.2.0683: Vim9: parsing type does not always work
Bram Moolenaar <Bram@vim.org>
parents: 20253
diff changeset
1769 unlet g:Extend
aac52c32a91f patch 8.2.0683: Vim9: parsing type does not always work
Bram Moolenaar <Bram@vim.org>
parents: 20253
diff changeset
1770 unlet g:Read
aac52c32a91f patch 8.2.0683: Vim9: parsing type does not always work
Bram Moolenaar <Bram@vim.org>
parents: 20253
diff changeset
1771 enddef
20247
e46e72aaff74 patch 8.2.0679: Vim9: incomplete support for closures
Bram Moolenaar <Bram@vim.org>
parents: 20244
diff changeset
1772
20275
350bb78345ba patch 8.2.0693: closure using argument not tested
Bram Moolenaar <Bram@vim.org>
parents: 20257
diff changeset
1773 def MakeArgRefs(theArg: string)
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1774 var local = 'loc_val'
23428
5807e3958e38 patch 8.2.2257: Vim9: using -> for lambda is ambiguous
Bram Moolenaar <Bram@vim.org>
parents: 23426
diff changeset
1775 g:UseArg = (s) => theArg .. '/' .. local .. '/' .. s
20275
350bb78345ba patch 8.2.0693: closure using argument not tested
Bram Moolenaar <Bram@vim.org>
parents: 20257
diff changeset
1776 enddef
350bb78345ba patch 8.2.0693: closure using argument not tested
Bram Moolenaar <Bram@vim.org>
parents: 20257
diff changeset
1777
350bb78345ba patch 8.2.0693: closure using argument not tested
Bram Moolenaar <Bram@vim.org>
parents: 20257
diff changeset
1778 def MakeArgRefsVarargs(theArg: string, ...rest: list<string>)
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1779 var local = 'the_loc'
23428
5807e3958e38 patch 8.2.2257: Vim9: using -> for lambda is ambiguous
Bram Moolenaar <Bram@vim.org>
parents: 23426
diff changeset
1780 g:UseVararg = (s) => theArg .. '/' .. local .. '/' .. s .. '/' .. join(rest)
20275
350bb78345ba patch 8.2.0693: closure using argument not tested
Bram Moolenaar <Bram@vim.org>
parents: 20257
diff changeset
1781 enddef
350bb78345ba patch 8.2.0693: closure using argument not tested
Bram Moolenaar <Bram@vim.org>
parents: 20257
diff changeset
1782
350bb78345ba patch 8.2.0693: closure using argument not tested
Bram Moolenaar <Bram@vim.org>
parents: 20257
diff changeset
1783 def Test_closure_using_argument()
350bb78345ba patch 8.2.0693: closure using argument not tested
Bram Moolenaar <Bram@vim.org>
parents: 20257
diff changeset
1784 MakeArgRefs('arg_val')
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1785 g:UseArg('call_val')->assert_equal('arg_val/loc_val/call_val')
20275
350bb78345ba patch 8.2.0693: closure using argument not tested
Bram Moolenaar <Bram@vim.org>
parents: 20257
diff changeset
1786
350bb78345ba patch 8.2.0693: closure using argument not tested
Bram Moolenaar <Bram@vim.org>
parents: 20257
diff changeset
1787 MakeArgRefsVarargs('arg_val', 'one', 'two')
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1788 g:UseVararg('call_val')->assert_equal('arg_val/the_loc/call_val/one two')
20275
350bb78345ba patch 8.2.0693: closure using argument not tested
Bram Moolenaar <Bram@vim.org>
parents: 20257
diff changeset
1789
350bb78345ba patch 8.2.0693: closure using argument not tested
Bram Moolenaar <Bram@vim.org>
parents: 20257
diff changeset
1790 unlet g:UseArg
350bb78345ba patch 8.2.0693: closure using argument not tested
Bram Moolenaar <Bram@vim.org>
parents: 20257
diff changeset
1791 unlet g:UseVararg
23923
be36288235af patch 8.2.2504: Vim9: crash when using an argument from a closure
Bram Moolenaar <Bram@vim.org>
parents: 23879
diff changeset
1792
be36288235af patch 8.2.2504: Vim9: crash when using an argument from a closure
Bram Moolenaar <Bram@vim.org>
parents: 23879
diff changeset
1793 var lines =<< trim END
be36288235af patch 8.2.2504: Vim9: crash when using an argument from a closure
Bram Moolenaar <Bram@vim.org>
parents: 23879
diff changeset
1794 vim9script
be36288235af patch 8.2.2504: Vim9: crash when using an argument from a closure
Bram Moolenaar <Bram@vim.org>
parents: 23879
diff changeset
1795 def Test(Fun: func(number): number): list<number>
be36288235af patch 8.2.2504: Vim9: crash when using an argument from a closure
Bram Moolenaar <Bram@vim.org>
parents: 23879
diff changeset
1796 return map([1, 2, 3], (_, i) => Fun(i))
be36288235af patch 8.2.2504: Vim9: crash when using an argument from a closure
Bram Moolenaar <Bram@vim.org>
parents: 23879
diff changeset
1797 enddef
be36288235af patch 8.2.2504: Vim9: crash when using an argument from a closure
Bram Moolenaar <Bram@vim.org>
parents: 23879
diff changeset
1798 def Inc(nr: number): number
be36288235af patch 8.2.2504: Vim9: crash when using an argument from a closure
Bram Moolenaar <Bram@vim.org>
parents: 23879
diff changeset
1799 return nr + 2
be36288235af patch 8.2.2504: Vim9: crash when using an argument from a closure
Bram Moolenaar <Bram@vim.org>
parents: 23879
diff changeset
1800 enddef
be36288235af patch 8.2.2504: Vim9: crash when using an argument from a closure
Bram Moolenaar <Bram@vim.org>
parents: 23879
diff changeset
1801 assert_equal([3, 4, 5], Test(Inc))
be36288235af patch 8.2.2504: Vim9: crash when using an argument from a closure
Bram Moolenaar <Bram@vim.org>
parents: 23879
diff changeset
1802 END
be36288235af patch 8.2.2504: Vim9: crash when using an argument from a closure
Bram Moolenaar <Bram@vim.org>
parents: 23879
diff changeset
1803 CheckScriptSuccess(lines)
20275
350bb78345ba patch 8.2.0693: closure using argument not tested
Bram Moolenaar <Bram@vim.org>
parents: 20257
diff changeset
1804 enddef
350bb78345ba patch 8.2.0693: closure using argument not tested
Bram Moolenaar <Bram@vim.org>
parents: 20257
diff changeset
1805
22541
7d6ba4204f66 patch 8.2.1819: Vim9: Memory leak when using a closure
Bram Moolenaar <Bram@vim.org>
parents: 22537
diff changeset
1806 def MakeGetAndAppendRefs()
7d6ba4204f66 patch 8.2.1819: Vim9: Memory leak when using a closure
Bram Moolenaar <Bram@vim.org>
parents: 22537
diff changeset
1807 var local = 'a'
7d6ba4204f66 patch 8.2.1819: Vim9: Memory leak when using a closure
Bram Moolenaar <Bram@vim.org>
parents: 22537
diff changeset
1808
7d6ba4204f66 patch 8.2.1819: Vim9: Memory leak when using a closure
Bram Moolenaar <Bram@vim.org>
parents: 22537
diff changeset
1809 def Append(arg: string)
7d6ba4204f66 patch 8.2.1819: Vim9: Memory leak when using a closure
Bram Moolenaar <Bram@vim.org>
parents: 22537
diff changeset
1810 local ..= arg
7d6ba4204f66 patch 8.2.1819: Vim9: Memory leak when using a closure
Bram Moolenaar <Bram@vim.org>
parents: 22537
diff changeset
1811 enddef
7d6ba4204f66 patch 8.2.1819: Vim9: Memory leak when using a closure
Bram Moolenaar <Bram@vim.org>
parents: 22537
diff changeset
1812 g:Append = Append
7d6ba4204f66 patch 8.2.1819: Vim9: Memory leak when using a closure
Bram Moolenaar <Bram@vim.org>
parents: 22537
diff changeset
1813
7d6ba4204f66 patch 8.2.1819: Vim9: Memory leak when using a closure
Bram Moolenaar <Bram@vim.org>
parents: 22537
diff changeset
1814 def Get(): string
7d6ba4204f66 patch 8.2.1819: Vim9: Memory leak when using a closure
Bram Moolenaar <Bram@vim.org>
parents: 22537
diff changeset
1815 return local
7d6ba4204f66 patch 8.2.1819: Vim9: Memory leak when using a closure
Bram Moolenaar <Bram@vim.org>
parents: 22537
diff changeset
1816 enddef
7d6ba4204f66 patch 8.2.1819: Vim9: Memory leak when using a closure
Bram Moolenaar <Bram@vim.org>
parents: 22537
diff changeset
1817 g:Get = Get
7d6ba4204f66 patch 8.2.1819: Vim9: Memory leak when using a closure
Bram Moolenaar <Bram@vim.org>
parents: 22537
diff changeset
1818 enddef
7d6ba4204f66 patch 8.2.1819: Vim9: Memory leak when using a closure
Bram Moolenaar <Bram@vim.org>
parents: 22537
diff changeset
1819
7d6ba4204f66 patch 8.2.1819: Vim9: Memory leak when using a closure
Bram Moolenaar <Bram@vim.org>
parents: 22537
diff changeset
1820 def Test_closure_append_get()
7d6ba4204f66 patch 8.2.1819: Vim9: Memory leak when using a closure
Bram Moolenaar <Bram@vim.org>
parents: 22537
diff changeset
1821 MakeGetAndAppendRefs()
7d6ba4204f66 patch 8.2.1819: Vim9: Memory leak when using a closure
Bram Moolenaar <Bram@vim.org>
parents: 22537
diff changeset
1822 g:Get()->assert_equal('a')
7d6ba4204f66 patch 8.2.1819: Vim9: Memory leak when using a closure
Bram Moolenaar <Bram@vim.org>
parents: 22537
diff changeset
1823 g:Append('-b')
7d6ba4204f66 patch 8.2.1819: Vim9: Memory leak when using a closure
Bram Moolenaar <Bram@vim.org>
parents: 22537
diff changeset
1824 g:Get()->assert_equal('a-b')
7d6ba4204f66 patch 8.2.1819: Vim9: Memory leak when using a closure
Bram Moolenaar <Bram@vim.org>
parents: 22537
diff changeset
1825 g:Append('-c')
7d6ba4204f66 patch 8.2.1819: Vim9: Memory leak when using a closure
Bram Moolenaar <Bram@vim.org>
parents: 22537
diff changeset
1826 g:Get()->assert_equal('a-b-c')
7d6ba4204f66 patch 8.2.1819: Vim9: Memory leak when using a closure
Bram Moolenaar <Bram@vim.org>
parents: 22537
diff changeset
1827
7d6ba4204f66 patch 8.2.1819: Vim9: Memory leak when using a closure
Bram Moolenaar <Bram@vim.org>
parents: 22537
diff changeset
1828 unlet g:Append
7d6ba4204f66 patch 8.2.1819: Vim9: Memory leak when using a closure
Bram Moolenaar <Bram@vim.org>
parents: 22537
diff changeset
1829 unlet g:Get
7d6ba4204f66 patch 8.2.1819: Vim9: Memory leak when using a closure
Bram Moolenaar <Bram@vim.org>
parents: 22537
diff changeset
1830 enddef
20295
bc2c9ea94ec1 patch 8.2.0703: Vim9: closure cannot store value in outer context
Bram Moolenaar <Bram@vim.org>
parents: 20287
diff changeset
1831
20279
49b50843e725 patch 8.2.0695: Vim9: cannot define a function inside a function
Bram Moolenaar <Bram@vim.org>
parents: 20275
diff changeset
1832 def Test_nested_closure()
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1833 var local = 'text'
20279
49b50843e725 patch 8.2.0695: Vim9: cannot define a function inside a function
Bram Moolenaar <Bram@vim.org>
parents: 20275
diff changeset
1834 def Closure(arg: string): string
49b50843e725 patch 8.2.0695: Vim9: cannot define a function inside a function
Bram Moolenaar <Bram@vim.org>
parents: 20275
diff changeset
1835 return local .. arg
49b50843e725 patch 8.2.0695: Vim9: cannot define a function inside a function
Bram Moolenaar <Bram@vim.org>
parents: 20275
diff changeset
1836 enddef
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1837 Closure('!!!')->assert_equal('text!!!')
20279
49b50843e725 patch 8.2.0695: Vim9: cannot define a function inside a function
Bram Moolenaar <Bram@vim.org>
parents: 20275
diff changeset
1838 enddef
49b50843e725 patch 8.2.0695: Vim9: cannot define a function inside a function
Bram Moolenaar <Bram@vim.org>
parents: 20275
diff changeset
1839
20433
5950284a517f patch 8.2.0771: Vim9: cannot call a compiled closure from not compiled code
Bram Moolenaar <Bram@vim.org>
parents: 20355
diff changeset
1840 func GetResult(Ref)
5950284a517f patch 8.2.0771: Vim9: cannot call a compiled closure from not compiled code
Bram Moolenaar <Bram@vim.org>
parents: 20355
diff changeset
1841 return a:Ref('some')
5950284a517f patch 8.2.0771: Vim9: cannot call a compiled closure from not compiled code
Bram Moolenaar <Bram@vim.org>
parents: 20355
diff changeset
1842 endfunc
5950284a517f patch 8.2.0771: Vim9: cannot call a compiled closure from not compiled code
Bram Moolenaar <Bram@vim.org>
parents: 20355
diff changeset
1843
5950284a517f patch 8.2.0771: Vim9: cannot call a compiled closure from not compiled code
Bram Moolenaar <Bram@vim.org>
parents: 20355
diff changeset
1844 def Test_call_closure_not_compiled()
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1845 var text = 'text'
23428
5807e3958e38 patch 8.2.2257: Vim9: using -> for lambda is ambiguous
Bram Moolenaar <Bram@vim.org>
parents: 23426
diff changeset
1846 g:Ref = (s) => s .. text
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1847 GetResult(g:Ref)->assert_equal('sometext')
20433
5950284a517f patch 8.2.0771: Vim9: cannot call a compiled closure from not compiled code
Bram Moolenaar <Bram@vim.org>
parents: 20355
diff changeset
1848 enddef
5950284a517f patch 8.2.0771: Vim9: cannot call a compiled closure from not compiled code
Bram Moolenaar <Bram@vim.org>
parents: 20355
diff changeset
1849
22314
41e118669df3 patch 8.2.1706: Vim9: crash after running into the "Multiple closures" error
Bram Moolenaar <Bram@vim.org>
parents: 22303
diff changeset
1850 def Test_double_closure_fails()
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1851 var lines =<< trim END
22314
41e118669df3 patch 8.2.1706: Vim9: crash after running into the "Multiple closures" error
Bram Moolenaar <Bram@vim.org>
parents: 22303
diff changeset
1852 vim9script
41e118669df3 patch 8.2.1706: Vim9: crash after running into the "Multiple closures" error
Bram Moolenaar <Bram@vim.org>
parents: 22303
diff changeset
1853 def Func()
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1854 var name = 0
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1855 for i in range(2)
23428
5807e3958e38 patch 8.2.2257: Vim9: using -> for lambda is ambiguous
Bram Moolenaar <Bram@vim.org>
parents: 23426
diff changeset
1856 timer_start(0, () => name)
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1857 endfor
22314
41e118669df3 patch 8.2.1706: Vim9: crash after running into the "Multiple closures" error
Bram Moolenaar <Bram@vim.org>
parents: 22303
diff changeset
1858 enddef
41e118669df3 patch 8.2.1706: Vim9: crash after running into the "Multiple closures" error
Bram Moolenaar <Bram@vim.org>
parents: 22303
diff changeset
1859 Func()
41e118669df3 patch 8.2.1706: Vim9: crash after running into the "Multiple closures" error
Bram Moolenaar <Bram@vim.org>
parents: 22303
diff changeset
1860 END
22371
15003353a464 patch 8.2.1734: Vim9: cannot use a funcref for a closure twice
Bram Moolenaar <Bram@vim.org>
parents: 22349
diff changeset
1861 CheckScriptSuccess(lines)
22314
41e118669df3 patch 8.2.1706: Vim9: crash after running into the "Multiple closures" error
Bram Moolenaar <Bram@vim.org>
parents: 22303
diff changeset
1862 enddef
41e118669df3 patch 8.2.1706: Vim9: crash after running into the "Multiple closures" error
Bram Moolenaar <Bram@vim.org>
parents: 22303
diff changeset
1863
22541
7d6ba4204f66 patch 8.2.1819: Vim9: Memory leak when using a closure
Bram Moolenaar <Bram@vim.org>
parents: 22537
diff changeset
1864 def Test_nested_closure_used()
7d6ba4204f66 patch 8.2.1819: Vim9: Memory leak when using a closure
Bram Moolenaar <Bram@vim.org>
parents: 22537
diff changeset
1865 var lines =<< trim END
7d6ba4204f66 patch 8.2.1819: Vim9: Memory leak when using a closure
Bram Moolenaar <Bram@vim.org>
parents: 22537
diff changeset
1866 vim9script
7d6ba4204f66 patch 8.2.1819: Vim9: Memory leak when using a closure
Bram Moolenaar <Bram@vim.org>
parents: 22537
diff changeset
1867 def Func()
7d6ba4204f66 patch 8.2.1819: Vim9: Memory leak when using a closure
Bram Moolenaar <Bram@vim.org>
parents: 22537
diff changeset
1868 var x = 'hello'
23428
5807e3958e38 patch 8.2.2257: Vim9: using -> for lambda is ambiguous
Bram Moolenaar <Bram@vim.org>
parents: 23426
diff changeset
1869 var Closure = () => x
5807e3958e38 patch 8.2.2257: Vim9: using -> for lambda is ambiguous
Bram Moolenaar <Bram@vim.org>
parents: 23426
diff changeset
1870 g:Myclosure = () => Closure()
22541
7d6ba4204f66 patch 8.2.1819: Vim9: Memory leak when using a closure
Bram Moolenaar <Bram@vim.org>
parents: 22537
diff changeset
1871 enddef
7d6ba4204f66 patch 8.2.1819: Vim9: Memory leak when using a closure
Bram Moolenaar <Bram@vim.org>
parents: 22537
diff changeset
1872 Func()
7d6ba4204f66 patch 8.2.1819: Vim9: Memory leak when using a closure
Bram Moolenaar <Bram@vim.org>
parents: 22537
diff changeset
1873 assert_equal('hello', g:Myclosure())
7d6ba4204f66 patch 8.2.1819: Vim9: Memory leak when using a closure
Bram Moolenaar <Bram@vim.org>
parents: 22537
diff changeset
1874 END
7d6ba4204f66 patch 8.2.1819: Vim9: Memory leak when using a closure
Bram Moolenaar <Bram@vim.org>
parents: 22537
diff changeset
1875 CheckScriptSuccess(lines)
7d6ba4204f66 patch 8.2.1819: Vim9: Memory leak when using a closure
Bram Moolenaar <Bram@vim.org>
parents: 22537
diff changeset
1876 enddef
22527
c3e3c5707fe9 patch 8.2.1812: Vim9: nested closure throws an internal error
Bram Moolenaar <Bram@vim.org>
parents: 22498
diff changeset
1877
22401
df1d7a560b35 patch 8.2.1749: Vim9: crash when closure fails in nested function
Bram Moolenaar <Bram@vim.org>
parents: 22371
diff changeset
1878 def Test_nested_closure_fails()
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1879 var lines =<< trim END
22401
df1d7a560b35 patch 8.2.1749: Vim9: crash when closure fails in nested function
Bram Moolenaar <Bram@vim.org>
parents: 22371
diff changeset
1880 vim9script
df1d7a560b35 patch 8.2.1749: Vim9: crash when closure fails in nested function
Bram Moolenaar <Bram@vim.org>
parents: 22371
diff changeset
1881 def FuncA()
df1d7a560b35 patch 8.2.1749: Vim9: crash when closure fails in nested function
Bram Moolenaar <Bram@vim.org>
parents: 22371
diff changeset
1882 FuncB(0)
df1d7a560b35 patch 8.2.1749: Vim9: crash when closure fails in nested function
Bram Moolenaar <Bram@vim.org>
parents: 22371
diff changeset
1883 enddef
df1d7a560b35 patch 8.2.1749: Vim9: crash when closure fails in nested function
Bram Moolenaar <Bram@vim.org>
parents: 22371
diff changeset
1884 def FuncB(n: number): list<string>
23428
5807e3958e38 patch 8.2.2257: Vim9: using -> for lambda is ambiguous
Bram Moolenaar <Bram@vim.org>
parents: 23426
diff changeset
1885 return map([0], (_, v) => n)
22401
df1d7a560b35 patch 8.2.1749: Vim9: crash when closure fails in nested function
Bram Moolenaar <Bram@vim.org>
parents: 22371
diff changeset
1886 enddef
df1d7a560b35 patch 8.2.1749: Vim9: crash when closure fails in nested function
Bram Moolenaar <Bram@vim.org>
parents: 22371
diff changeset
1887 FuncA()
df1d7a560b35 patch 8.2.1749: Vim9: crash when closure fails in nested function
Bram Moolenaar <Bram@vim.org>
parents: 22371
diff changeset
1888 END
df1d7a560b35 patch 8.2.1749: Vim9: crash when closure fails in nested function
Bram Moolenaar <Bram@vim.org>
parents: 22371
diff changeset
1889 CheckScriptFailure(lines, 'E1012:')
df1d7a560b35 patch 8.2.1749: Vim9: crash when closure fails in nested function
Bram Moolenaar <Bram@vim.org>
parents: 22371
diff changeset
1890 enddef
df1d7a560b35 patch 8.2.1749: Vim9: crash when closure fails in nested function
Bram Moolenaar <Bram@vim.org>
parents: 22371
diff changeset
1891
23249
43532077b5ff patch 8.2.2170: Vim9: a global function defined in a :def function fails
Bram Moolenaar <Bram@vim.org>
parents: 23177
diff changeset
1892 def Test_global_closure()
43532077b5ff patch 8.2.2170: Vim9: a global function defined in a :def function fails
Bram Moolenaar <Bram@vim.org>
parents: 23177
diff changeset
1893 var lines =<< trim END
43532077b5ff patch 8.2.2170: Vim9: a global function defined in a :def function fails
Bram Moolenaar <Bram@vim.org>
parents: 23177
diff changeset
1894 vim9script
43532077b5ff patch 8.2.2170: Vim9: a global function defined in a :def function fails
Bram Moolenaar <Bram@vim.org>
parents: 23177
diff changeset
1895 def ReverseEveryNLines(n: number, line1: number, line2: number)
43532077b5ff patch 8.2.2170: Vim9: a global function defined in a :def function fails
Bram Moolenaar <Bram@vim.org>
parents: 23177
diff changeset
1896 var mods = 'sil keepj keepp lockm '
43532077b5ff patch 8.2.2170: Vim9: a global function defined in a :def function fails
Bram Moolenaar <Bram@vim.org>
parents: 23177
diff changeset
1897 var range = ':' .. line1 .. ',' .. line2
43532077b5ff patch 8.2.2170: Vim9: a global function defined in a :def function fails
Bram Moolenaar <Bram@vim.org>
parents: 23177
diff changeset
1898 def g:Offset(): number
43532077b5ff patch 8.2.2170: Vim9: a global function defined in a :def function fails
Bram Moolenaar <Bram@vim.org>
parents: 23177
diff changeset
1899 var offset = (line('.') - line1 + 1) % n
43532077b5ff patch 8.2.2170: Vim9: a global function defined in a :def function fails
Bram Moolenaar <Bram@vim.org>
parents: 23177
diff changeset
1900 return offset != 0 ? offset : n
43532077b5ff patch 8.2.2170: Vim9: a global function defined in a :def function fails
Bram Moolenaar <Bram@vim.org>
parents: 23177
diff changeset
1901 enddef
43532077b5ff patch 8.2.2170: Vim9: a global function defined in a :def function fails
Bram Moolenaar <Bram@vim.org>
parents: 23177
diff changeset
1902 exe mods .. range .. 'g/^/exe "m .-" .. g:Offset()'
43532077b5ff patch 8.2.2170: Vim9: a global function defined in a :def function fails
Bram Moolenaar <Bram@vim.org>
parents: 23177
diff changeset
1903 enddef
43532077b5ff patch 8.2.2170: Vim9: a global function defined in a :def function fails
Bram Moolenaar <Bram@vim.org>
parents: 23177
diff changeset
1904
43532077b5ff patch 8.2.2170: Vim9: a global function defined in a :def function fails
Bram Moolenaar <Bram@vim.org>
parents: 23177
diff changeset
1905 new
43532077b5ff patch 8.2.2170: Vim9: a global function defined in a :def function fails
Bram Moolenaar <Bram@vim.org>
parents: 23177
diff changeset
1906 repeat(['aaa', 'bbb', 'ccc'], 3)->setline(1)
43532077b5ff patch 8.2.2170: Vim9: a global function defined in a :def function fails
Bram Moolenaar <Bram@vim.org>
parents: 23177
diff changeset
1907 ReverseEveryNLines(3, 1, 9)
43532077b5ff patch 8.2.2170: Vim9: a global function defined in a :def function fails
Bram Moolenaar <Bram@vim.org>
parents: 23177
diff changeset
1908 END
43532077b5ff patch 8.2.2170: Vim9: a global function defined in a :def function fails
Bram Moolenaar <Bram@vim.org>
parents: 23177
diff changeset
1909 CheckScriptSuccess(lines)
43532077b5ff patch 8.2.2170: Vim9: a global function defined in a :def function fails
Bram Moolenaar <Bram@vim.org>
parents: 23177
diff changeset
1910 var expected = repeat(['ccc', 'bbb', 'aaa'], 3)
43532077b5ff patch 8.2.2170: Vim9: a global function defined in a :def function fails
Bram Moolenaar <Bram@vim.org>
parents: 23177
diff changeset
1911 assert_equal(expected, getline(1, 9))
43532077b5ff patch 8.2.2170: Vim9: a global function defined in a :def function fails
Bram Moolenaar <Bram@vim.org>
parents: 23177
diff changeset
1912 bwipe!
43532077b5ff patch 8.2.2170: Vim9: a global function defined in a :def function fails
Bram Moolenaar <Bram@vim.org>
parents: 23177
diff changeset
1913 enddef
43532077b5ff patch 8.2.2170: Vim9: a global function defined in a :def function fails
Bram Moolenaar <Bram@vim.org>
parents: 23177
diff changeset
1914
23285
112fa621b127 patch 8.2.2188: Vim9: crash when calling global function from :def function
Bram Moolenaar <Bram@vim.org>
parents: 23281
diff changeset
1915 def Test_global_closure_called_directly()
112fa621b127 patch 8.2.2188: Vim9: crash when calling global function from :def function
Bram Moolenaar <Bram@vim.org>
parents: 23281
diff changeset
1916 var lines =<< trim END
112fa621b127 patch 8.2.2188: Vim9: crash when calling global function from :def function
Bram Moolenaar <Bram@vim.org>
parents: 23281
diff changeset
1917 vim9script
112fa621b127 patch 8.2.2188: Vim9: crash when calling global function from :def function
Bram Moolenaar <Bram@vim.org>
parents: 23281
diff changeset
1918 def Outer()
112fa621b127 patch 8.2.2188: Vim9: crash when calling global function from :def function
Bram Moolenaar <Bram@vim.org>
parents: 23281
diff changeset
1919 var x = 1
112fa621b127 patch 8.2.2188: Vim9: crash when calling global function from :def function
Bram Moolenaar <Bram@vim.org>
parents: 23281
diff changeset
1920 def g:Inner()
112fa621b127 patch 8.2.2188: Vim9: crash when calling global function from :def function
Bram Moolenaar <Bram@vim.org>
parents: 23281
diff changeset
1921 var y = x
112fa621b127 patch 8.2.2188: Vim9: crash when calling global function from :def function
Bram Moolenaar <Bram@vim.org>
parents: 23281
diff changeset
1922 x += 1
112fa621b127 patch 8.2.2188: Vim9: crash when calling global function from :def function
Bram Moolenaar <Bram@vim.org>
parents: 23281
diff changeset
1923 assert_equal(1, y)
112fa621b127 patch 8.2.2188: Vim9: crash when calling global function from :def function
Bram Moolenaar <Bram@vim.org>
parents: 23281
diff changeset
1924 enddef
112fa621b127 patch 8.2.2188: Vim9: crash when calling global function from :def function
Bram Moolenaar <Bram@vim.org>
parents: 23281
diff changeset
1925 g:Inner()
112fa621b127 patch 8.2.2188: Vim9: crash when calling global function from :def function
Bram Moolenaar <Bram@vim.org>
parents: 23281
diff changeset
1926 assert_equal(2, x)
112fa621b127 patch 8.2.2188: Vim9: crash when calling global function from :def function
Bram Moolenaar <Bram@vim.org>
parents: 23281
diff changeset
1927 enddef
112fa621b127 patch 8.2.2188: Vim9: crash when calling global function from :def function
Bram Moolenaar <Bram@vim.org>
parents: 23281
diff changeset
1928 Outer()
112fa621b127 patch 8.2.2188: Vim9: crash when calling global function from :def function
Bram Moolenaar <Bram@vim.org>
parents: 23281
diff changeset
1929 END
112fa621b127 patch 8.2.2188: Vim9: crash when calling global function from :def function
Bram Moolenaar <Bram@vim.org>
parents: 23281
diff changeset
1930 CheckScriptSuccess(lines)
112fa621b127 patch 8.2.2188: Vim9: crash when calling global function from :def function
Bram Moolenaar <Bram@vim.org>
parents: 23281
diff changeset
1931 delfunc g:Inner
112fa621b127 patch 8.2.2188: Vim9: crash when calling global function from :def function
Bram Moolenaar <Bram@vim.org>
parents: 23281
diff changeset
1932 enddef
112fa621b127 patch 8.2.2188: Vim9: crash when calling global function from :def function
Bram Moolenaar <Bram@vim.org>
parents: 23281
diff changeset
1933
23009
1fa84623fc68 patch 8.2.2051: Vim9: crash when aborting a user function call
Bram Moolenaar <Bram@vim.org>
parents: 22973
diff changeset
1934 def Test_failure_in_called_function()
1fa84623fc68 patch 8.2.2051: Vim9: crash when aborting a user function call
Bram Moolenaar <Bram@vim.org>
parents: 22973
diff changeset
1935 # this was using the frame index as the return value
1fa84623fc68 patch 8.2.2051: Vim9: crash when aborting a user function call
Bram Moolenaar <Bram@vim.org>
parents: 22973
diff changeset
1936 var lines =<< trim END
1fa84623fc68 patch 8.2.2051: Vim9: crash when aborting a user function call
Bram Moolenaar <Bram@vim.org>
parents: 22973
diff changeset
1937 vim9script
1fa84623fc68 patch 8.2.2051: Vim9: crash when aborting a user function call
Bram Moolenaar <Bram@vim.org>
parents: 22973
diff changeset
1938 au TerminalWinOpen * eval [][0]
1fa84623fc68 patch 8.2.2051: Vim9: crash when aborting a user function call
Bram Moolenaar <Bram@vim.org>
parents: 22973
diff changeset
1939 def PopupTerm(a: any)
1fa84623fc68 patch 8.2.2051: Vim9: crash when aborting a user function call
Bram Moolenaar <Bram@vim.org>
parents: 22973
diff changeset
1940 # make sure typvals on stack are string
1fa84623fc68 patch 8.2.2051: Vim9: crash when aborting a user function call
Bram Moolenaar <Bram@vim.org>
parents: 22973
diff changeset
1941 ['a', 'b', 'c', 'd', 'e', 'f', 'g']->join()
1fa84623fc68 patch 8.2.2051: Vim9: crash when aborting a user function call
Bram Moolenaar <Bram@vim.org>
parents: 22973
diff changeset
1942 FireEvent()
1fa84623fc68 patch 8.2.2051: Vim9: crash when aborting a user function call
Bram Moolenaar <Bram@vim.org>
parents: 22973
diff changeset
1943 enddef
1fa84623fc68 patch 8.2.2051: Vim9: crash when aborting a user function call
Bram Moolenaar <Bram@vim.org>
parents: 22973
diff changeset
1944 def FireEvent()
1fa84623fc68 patch 8.2.2051: Vim9: crash when aborting a user function call
Bram Moolenaar <Bram@vim.org>
parents: 22973
diff changeset
1945 do TerminalWinOpen
1fa84623fc68 patch 8.2.2051: Vim9: crash when aborting a user function call
Bram Moolenaar <Bram@vim.org>
parents: 22973
diff changeset
1946 enddef
1fa84623fc68 patch 8.2.2051: Vim9: crash when aborting a user function call
Bram Moolenaar <Bram@vim.org>
parents: 22973
diff changeset
1947 # use try/catch to make eval fail
1fa84623fc68 patch 8.2.2051: Vim9: crash when aborting a user function call
Bram Moolenaar <Bram@vim.org>
parents: 22973
diff changeset
1948 try
1fa84623fc68 patch 8.2.2051: Vim9: crash when aborting a user function call
Bram Moolenaar <Bram@vim.org>
parents: 22973
diff changeset
1949 call PopupTerm(0)
1fa84623fc68 patch 8.2.2051: Vim9: crash when aborting a user function call
Bram Moolenaar <Bram@vim.org>
parents: 22973
diff changeset
1950 catch
1fa84623fc68 patch 8.2.2051: Vim9: crash when aborting a user function call
Bram Moolenaar <Bram@vim.org>
parents: 22973
diff changeset
1951 endtry
1fa84623fc68 patch 8.2.2051: Vim9: crash when aborting a user function call
Bram Moolenaar <Bram@vim.org>
parents: 22973
diff changeset
1952 au! TerminalWinOpen
1fa84623fc68 patch 8.2.2051: Vim9: crash when aborting a user function call
Bram Moolenaar <Bram@vim.org>
parents: 22973
diff changeset
1953 END
1fa84623fc68 patch 8.2.2051: Vim9: crash when aborting a user function call
Bram Moolenaar <Bram@vim.org>
parents: 22973
diff changeset
1954 CheckScriptSuccess(lines)
1fa84623fc68 patch 8.2.2051: Vim9: crash when aborting a user function call
Bram Moolenaar <Bram@vim.org>
parents: 22973
diff changeset
1955 enddef
1fa84623fc68 patch 8.2.2051: Vim9: crash when aborting a user function call
Bram Moolenaar <Bram@vim.org>
parents: 22973
diff changeset
1956
22460
4097509ecc1e patch 8.2.1778: Vim9: returning from a partial call clears outer context
Bram Moolenaar <Bram@vim.org>
parents: 22437
diff changeset
1957 def Test_nested_lambda()
4097509ecc1e patch 8.2.1778: Vim9: returning from a partial call clears outer context
Bram Moolenaar <Bram@vim.org>
parents: 22437
diff changeset
1958 var lines =<< trim END
4097509ecc1e patch 8.2.1778: Vim9: returning from a partial call clears outer context
Bram Moolenaar <Bram@vim.org>
parents: 22437
diff changeset
1959 vim9script
4097509ecc1e patch 8.2.1778: Vim9: returning from a partial call clears outer context
Bram Moolenaar <Bram@vim.org>
parents: 22437
diff changeset
1960 def Func()
4097509ecc1e patch 8.2.1778: Vim9: returning from a partial call clears outer context
Bram Moolenaar <Bram@vim.org>
parents: 22437
diff changeset
1961 var x = 4
23428
5807e3958e38 patch 8.2.2257: Vim9: using -> for lambda is ambiguous
Bram Moolenaar <Bram@vim.org>
parents: 23426
diff changeset
1962 var Lambda1 = () => 7
5807e3958e38 patch 8.2.2257: Vim9: using -> for lambda is ambiguous
Bram Moolenaar <Bram@vim.org>
parents: 23426
diff changeset
1963 var Lambda2 = () => [Lambda1(), x]
22460
4097509ecc1e patch 8.2.1778: Vim9: returning from a partial call clears outer context
Bram Moolenaar <Bram@vim.org>
parents: 22437
diff changeset
1964 var res = Lambda2()
4097509ecc1e patch 8.2.1778: Vim9: returning from a partial call clears outer context
Bram Moolenaar <Bram@vim.org>
parents: 22437
diff changeset
1965 assert_equal([7, 4], res)
4097509ecc1e patch 8.2.1778: Vim9: returning from a partial call clears outer context
Bram Moolenaar <Bram@vim.org>
parents: 22437
diff changeset
1966 enddef
4097509ecc1e patch 8.2.1778: Vim9: returning from a partial call clears outer context
Bram Moolenaar <Bram@vim.org>
parents: 22437
diff changeset
1967 Func()
4097509ecc1e patch 8.2.1778: Vim9: returning from a partial call clears outer context
Bram Moolenaar <Bram@vim.org>
parents: 22437
diff changeset
1968 END
4097509ecc1e patch 8.2.1778: Vim9: returning from a partial call clears outer context
Bram Moolenaar <Bram@vim.org>
parents: 22437
diff changeset
1969 CheckScriptSuccess(lines)
4097509ecc1e patch 8.2.1778: Vim9: returning from a partial call clears outer context
Bram Moolenaar <Bram@vim.org>
parents: 22437
diff changeset
1970 enddef
4097509ecc1e patch 8.2.1778: Vim9: returning from a partial call clears outer context
Bram Moolenaar <Bram@vim.org>
parents: 22437
diff changeset
1971
22910
f78057703df9 patch 8.2.2002: Vim9: lambda argument shadowed by function name
Bram Moolenaar <Bram@vim.org>
parents: 22908
diff changeset
1972 def Shadowed(): list<number>
23428
5807e3958e38 patch 8.2.2257: Vim9: using -> for lambda is ambiguous
Bram Moolenaar <Bram@vim.org>
parents: 23426
diff changeset
1973 var FuncList: list<func: number> = [() => 42]
23565
34aa2907082a patch 8.2.2325: Vim9: crash if map() changes the item type
Bram Moolenaar <Bram@vim.org>
parents: 23559
diff changeset
1974 return FuncList->mapnew((_, Shadowed) => Shadowed())
22910
f78057703df9 patch 8.2.2002: Vim9: lambda argument shadowed by function name
Bram Moolenaar <Bram@vim.org>
parents: 22908
diff changeset
1975 enddef
f78057703df9 patch 8.2.2002: Vim9: lambda argument shadowed by function name
Bram Moolenaar <Bram@vim.org>
parents: 22908
diff changeset
1976
f78057703df9 patch 8.2.2002: Vim9: lambda argument shadowed by function name
Bram Moolenaar <Bram@vim.org>
parents: 22908
diff changeset
1977 def Test_lambda_arg_shadows_func()
f78057703df9 patch 8.2.2002: Vim9: lambda argument shadowed by function name
Bram Moolenaar <Bram@vim.org>
parents: 22908
diff changeset
1978 assert_equal([42], Shadowed())
f78057703df9 patch 8.2.2002: Vim9: lambda argument shadowed by function name
Bram Moolenaar <Bram@vim.org>
parents: 22908
diff changeset
1979 enddef
f78057703df9 patch 8.2.2002: Vim9: lambda argument shadowed by function name
Bram Moolenaar <Bram@vim.org>
parents: 22908
diff changeset
1980
20972
d561e3c6cd65 patch 8.2.1037: Vim9: crash when using line continuation inside :def
Bram Moolenaar <Bram@vim.org>
parents: 20945
diff changeset
1981 def Line_continuation_in_def(dir: string = ''): string
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1982 var path: string = empty(dir)
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1983 \ ? 'empty'
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1984 \ : 'full'
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1985 return path
20972
d561e3c6cd65 patch 8.2.1037: Vim9: crash when using line continuation inside :def
Bram Moolenaar <Bram@vim.org>
parents: 20945
diff changeset
1986 enddef
d561e3c6cd65 patch 8.2.1037: Vim9: crash when using line continuation inside :def
Bram Moolenaar <Bram@vim.org>
parents: 20945
diff changeset
1987
d561e3c6cd65 patch 8.2.1037: Vim9: crash when using line continuation inside :def
Bram Moolenaar <Bram@vim.org>
parents: 20945
diff changeset
1988 def Test_line_continuation_in_def()
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1989 Line_continuation_in_def('.')->assert_equal('full')
20972
d561e3c6cd65 patch 8.2.1037: Vim9: crash when using line continuation inside :def
Bram Moolenaar <Bram@vim.org>
parents: 20945
diff changeset
1990 enddef
d561e3c6cd65 patch 8.2.1037: Vim9: crash when using line continuation inside :def
Bram Moolenaar <Bram@vim.org>
parents: 20945
diff changeset
1991
22942
4759d13193fb patch 8.2.2018: Vim9: script variable not found from lambda
Bram Moolenaar <Bram@vim.org>
parents: 22936
diff changeset
1992 def Test_script_var_in_lambda()
4759d13193fb patch 8.2.2018: Vim9: script variable not found from lambda
Bram Moolenaar <Bram@vim.org>
parents: 22936
diff changeset
1993 var lines =<< trim END
4759d13193fb patch 8.2.2018: Vim9: script variable not found from lambda
Bram Moolenaar <Bram@vim.org>
parents: 22936
diff changeset
1994 vim9script
4759d13193fb patch 8.2.2018: Vim9: script variable not found from lambda
Bram Moolenaar <Bram@vim.org>
parents: 22936
diff changeset
1995 var script = 'test'
23428
5807e3958e38 patch 8.2.2257: Vim9: using -> for lambda is ambiguous
Bram Moolenaar <Bram@vim.org>
parents: 23426
diff changeset
1996 assert_equal(['test'], map(['one'], () => script))
22942
4759d13193fb patch 8.2.2018: Vim9: script variable not found from lambda
Bram Moolenaar <Bram@vim.org>
parents: 22936
diff changeset
1997 END
4759d13193fb patch 8.2.2018: Vim9: script variable not found from lambda
Bram Moolenaar <Bram@vim.org>
parents: 22936
diff changeset
1998 CheckScriptSuccess(lines)
4759d13193fb patch 8.2.2018: Vim9: script variable not found from lambda
Bram Moolenaar <Bram@vim.org>
parents: 22936
diff changeset
1999 enddef
4759d13193fb patch 8.2.2018: Vim9: script variable not found from lambda
Bram Moolenaar <Bram@vim.org>
parents: 22936
diff changeset
2000
22284
6b385c2b9ff5 patch 8.2.1691: Vim9: list<any> is not accepted where list<number> is expected
Bram Moolenaar <Bram@vim.org>
parents: 22264
diff changeset
2001 def Line_continuation_in_lambda(): list<string>
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
2002 var x = range(97, 100)
23565
34aa2907082a patch 8.2.2325: Vim9: crash if map() changes the item type
Bram Moolenaar <Bram@vim.org>
parents: 23559
diff changeset
2003 ->mapnew((_, v) => nr2char(v)
23428
5807e3958e38 patch 8.2.2257: Vim9: using -> for lambda is ambiguous
Bram Moolenaar <Bram@vim.org>
parents: 23426
diff changeset
2004 ->toupper())
21208
09377fd59b2e patch 8.2.1155: Vim9: cannot handle line break inside lambda
Bram Moolenaar <Bram@vim.org>
parents: 21186
diff changeset
2005 ->reverse()
09377fd59b2e patch 8.2.1155: Vim9: cannot handle line break inside lambda
Bram Moolenaar <Bram@vim.org>
parents: 21186
diff changeset
2006 return x
09377fd59b2e patch 8.2.1155: Vim9: cannot handle line break inside lambda
Bram Moolenaar <Bram@vim.org>
parents: 21186
diff changeset
2007 enddef
09377fd59b2e patch 8.2.1155: Vim9: cannot handle line break inside lambda
Bram Moolenaar <Bram@vim.org>
parents: 21186
diff changeset
2008
09377fd59b2e patch 8.2.1155: Vim9: cannot handle line break inside lambda
Bram Moolenaar <Bram@vim.org>
parents: 21186
diff changeset
2009 def Test_line_continuation_in_lambda()
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
2010 Line_continuation_in_lambda()->assert_equal(['D', 'C', 'B', 'A'])
23644
03acf9c49f07 patch 8.2.2364: Vim9: line break in lambda accesses freed memory
Bram Moolenaar <Bram@vim.org>
parents: 23630
diff changeset
2011
03acf9c49f07 patch 8.2.2364: Vim9: line break in lambda accesses freed memory
Bram Moolenaar <Bram@vim.org>
parents: 23630
diff changeset
2012 var lines =<< trim END
03acf9c49f07 patch 8.2.2364: Vim9: line break in lambda accesses freed memory
Bram Moolenaar <Bram@vim.org>
parents: 23630
diff changeset
2013 vim9script
03acf9c49f07 patch 8.2.2364: Vim9: line break in lambda accesses freed memory
Bram Moolenaar <Bram@vim.org>
parents: 23630
diff changeset
2014 var res = [{n: 1, m: 2, s: 'xxx'}]
03acf9c49f07 patch 8.2.2364: Vim9: line break in lambda accesses freed memory
Bram Moolenaar <Bram@vim.org>
parents: 23630
diff changeset
2015 ->mapnew((_, v: dict<any>): string => printf('%d:%d:%s',
03acf9c49f07 patch 8.2.2364: Vim9: line break in lambda accesses freed memory
Bram Moolenaar <Bram@vim.org>
parents: 23630
diff changeset
2016 v.n,
03acf9c49f07 patch 8.2.2364: Vim9: line break in lambda accesses freed memory
Bram Moolenaar <Bram@vim.org>
parents: 23630
diff changeset
2017 v.m,
03acf9c49f07 patch 8.2.2364: Vim9: line break in lambda accesses freed memory
Bram Moolenaar <Bram@vim.org>
parents: 23630
diff changeset
2018 substitute(v.s, '.*', 'yyy', '')
03acf9c49f07 patch 8.2.2364: Vim9: line break in lambda accesses freed memory
Bram Moolenaar <Bram@vim.org>
parents: 23630
diff changeset
2019 ))
03acf9c49f07 patch 8.2.2364: Vim9: line break in lambda accesses freed memory
Bram Moolenaar <Bram@vim.org>
parents: 23630
diff changeset
2020 assert_equal(['1:2:yyy'], res)
03acf9c49f07 patch 8.2.2364: Vim9: line break in lambda accesses freed memory
Bram Moolenaar <Bram@vim.org>
parents: 23630
diff changeset
2021 END
03acf9c49f07 patch 8.2.2364: Vim9: line break in lambda accesses freed memory
Bram Moolenaar <Bram@vim.org>
parents: 23630
diff changeset
2022 CheckScriptSuccess(lines)
21208
09377fd59b2e patch 8.2.1155: Vim9: cannot handle line break inside lambda
Bram Moolenaar <Bram@vim.org>
parents: 21186
diff changeset
2023 enddef
09377fd59b2e patch 8.2.1155: Vim9: cannot handle line break inside lambda
Bram Moolenaar <Bram@vim.org>
parents: 21186
diff changeset
2024
23547
7f09cfa9ac4a patch 8.2.2316: Vim9: cannot list a lambda function
Bram Moolenaar <Bram@vim.org>
parents: 23545
diff changeset
2025 def Test_list_lambda()
7f09cfa9ac4a patch 8.2.2316: Vim9: cannot list a lambda function
Bram Moolenaar <Bram@vim.org>
parents: 23545
diff changeset
2026 timer_start(1000, (_) => 0)
7f09cfa9ac4a patch 8.2.2316: Vim9: cannot list a lambda function
Bram Moolenaar <Bram@vim.org>
parents: 23545
diff changeset
2027 var body = execute(timer_info()[0].callback
7f09cfa9ac4a patch 8.2.2316: Vim9: cannot list a lambda function
Bram Moolenaar <Bram@vim.org>
parents: 23545
diff changeset
2028 ->string()
7f09cfa9ac4a patch 8.2.2316: Vim9: cannot list a lambda function
Bram Moolenaar <Bram@vim.org>
parents: 23545
diff changeset
2029 ->substitute("('", ' ', '')
7f09cfa9ac4a patch 8.2.2316: Vim9: cannot list a lambda function
Bram Moolenaar <Bram@vim.org>
parents: 23545
diff changeset
2030 ->substitute("')", '', '')
7f09cfa9ac4a patch 8.2.2316: Vim9: cannot list a lambda function
Bram Moolenaar <Bram@vim.org>
parents: 23545
diff changeset
2031 ->substitute('function\zs', ' ', ''))
7f09cfa9ac4a patch 8.2.2316: Vim9: cannot list a lambda function
Bram Moolenaar <Bram@vim.org>
parents: 23545
diff changeset
2032 assert_match('def <lambda>\d\+(_: any, ...): number\n1 return 0\n enddef', body)
7f09cfa9ac4a patch 8.2.2316: Vim9: cannot list a lambda function
Bram Moolenaar <Bram@vim.org>
parents: 23545
diff changeset
2033 enddef
7f09cfa9ac4a patch 8.2.2316: Vim9: cannot list a lambda function
Bram Moolenaar <Bram@vim.org>
parents: 23545
diff changeset
2034
23557
f50ee1ae4d9b patch 8.2.2321: Vim9: cannot nest closures
Bram Moolenaar <Bram@vim.org>
parents: 23547
diff changeset
2035 def DoFilterThis(a: string): list<string>
f50ee1ae4d9b patch 8.2.2321: Vim9: cannot nest closures
Bram Moolenaar <Bram@vim.org>
parents: 23547
diff changeset
2036 # closure nested inside another closure using argument
f50ee1ae4d9b patch 8.2.2321: Vim9: cannot nest closures
Bram Moolenaar <Bram@vim.org>
parents: 23547
diff changeset
2037 var Filter = (l) => filter(l, (_, v) => stridx(v, a) == 0)
f50ee1ae4d9b patch 8.2.2321: Vim9: cannot nest closures
Bram Moolenaar <Bram@vim.org>
parents: 23547
diff changeset
2038 return ['x', 'y', 'a', 'x2', 'c']->Filter()
f50ee1ae4d9b patch 8.2.2321: Vim9: cannot nest closures
Bram Moolenaar <Bram@vim.org>
parents: 23547
diff changeset
2039 enddef
f50ee1ae4d9b patch 8.2.2321: Vim9: cannot nest closures
Bram Moolenaar <Bram@vim.org>
parents: 23547
diff changeset
2040
f50ee1ae4d9b patch 8.2.2321: Vim9: cannot nest closures
Bram Moolenaar <Bram@vim.org>
parents: 23547
diff changeset
2041 def Test_nested_closure_using_argument()
f50ee1ae4d9b patch 8.2.2321: Vim9: cannot nest closures
Bram Moolenaar <Bram@vim.org>
parents: 23547
diff changeset
2042 assert_equal(['x', 'x2'], DoFilterThis('x'))
f50ee1ae4d9b patch 8.2.2321: Vim9: cannot nest closures
Bram Moolenaar <Bram@vim.org>
parents: 23547
diff changeset
2043 enddef
f50ee1ae4d9b patch 8.2.2321: Vim9: cannot nest closures
Bram Moolenaar <Bram@vim.org>
parents: 23547
diff changeset
2044
23559
64dfb69e7d46 patch 8.2.2322: Vim9: closure nested limiting to one level
Bram Moolenaar <Bram@vim.org>
parents: 23557
diff changeset
2045 def Test_triple_nested_closure()
64dfb69e7d46 patch 8.2.2322: Vim9: closure nested limiting to one level
Bram Moolenaar <Bram@vim.org>
parents: 23557
diff changeset
2046 var what = 'x'
64dfb69e7d46 patch 8.2.2322: Vim9: closure nested limiting to one level
Bram Moolenaar <Bram@vim.org>
parents: 23557
diff changeset
2047 var Match = (val: string, cmp: string): bool => stridx(val, cmp) == 0
64dfb69e7d46 patch 8.2.2322: Vim9: closure nested limiting to one level
Bram Moolenaar <Bram@vim.org>
parents: 23557
diff changeset
2048 var Filter = (l) => filter(l, (_, v) => Match(v, what))
64dfb69e7d46 patch 8.2.2322: Vim9: closure nested limiting to one level
Bram Moolenaar <Bram@vim.org>
parents: 23557
diff changeset
2049 assert_equal(['x', 'x2'], ['x', 'y', 'a', 'x2', 'c']->Filter())
64dfb69e7d46 patch 8.2.2322: Vim9: closure nested limiting to one level
Bram Moolenaar <Bram@vim.org>
parents: 23557
diff changeset
2050 enddef
64dfb69e7d46 patch 8.2.2322: Vim9: closure nested limiting to one level
Bram Moolenaar <Bram@vim.org>
parents: 23557
diff changeset
2051
21176
54c665ad2db3 patch 8.2.1139: Vim9: test for silent echo fails in some environments
Bram Moolenaar <Bram@vim.org>
parents: 21174
diff changeset
2052 func Test_silent_echo()
21172
96ae8622cfb6 patch 8.2.1137: Vim9: modifiers not cleared after compiling function
Bram Moolenaar <Bram@vim.org>
parents: 21170
diff changeset
2053 CheckScreendump
96ae8622cfb6 patch 8.2.1137: Vim9: modifiers not cleared after compiling function
Bram Moolenaar <Bram@vim.org>
parents: 21170
diff changeset
2054
96ae8622cfb6 patch 8.2.1137: Vim9: modifiers not cleared after compiling function
Bram Moolenaar <Bram@vim.org>
parents: 21170
diff changeset
2055 let lines =<< trim END
96ae8622cfb6 patch 8.2.1137: Vim9: modifiers not cleared after compiling function
Bram Moolenaar <Bram@vim.org>
parents: 21170
diff changeset
2056 vim9script
96ae8622cfb6 patch 8.2.1137: Vim9: modifiers not cleared after compiling function
Bram Moolenaar <Bram@vim.org>
parents: 21170
diff changeset
2057 def EchoNothing()
96ae8622cfb6 patch 8.2.1137: Vim9: modifiers not cleared after compiling function
Bram Moolenaar <Bram@vim.org>
parents: 21170
diff changeset
2058 silent echo ''
96ae8622cfb6 patch 8.2.1137: Vim9: modifiers not cleared after compiling function
Bram Moolenaar <Bram@vim.org>
parents: 21170
diff changeset
2059 enddef
96ae8622cfb6 patch 8.2.1137: Vim9: modifiers not cleared after compiling function
Bram Moolenaar <Bram@vim.org>
parents: 21170
diff changeset
2060 defcompile
96ae8622cfb6 patch 8.2.1137: Vim9: modifiers not cleared after compiling function
Bram Moolenaar <Bram@vim.org>
parents: 21170
diff changeset
2061 END
21176
54c665ad2db3 patch 8.2.1139: Vim9: test for silent echo fails in some environments
Bram Moolenaar <Bram@vim.org>
parents: 21174
diff changeset
2062 call writefile(lines, 'XTest_silent_echo')
21172
96ae8622cfb6 patch 8.2.1137: Vim9: modifiers not cleared after compiling function
Bram Moolenaar <Bram@vim.org>
parents: 21170
diff changeset
2063
96ae8622cfb6 patch 8.2.1137: Vim9: modifiers not cleared after compiling function
Bram Moolenaar <Bram@vim.org>
parents: 21170
diff changeset
2064 " Check that the balloon shows up after a mouse move
96ae8622cfb6 patch 8.2.1137: Vim9: modifiers not cleared after compiling function
Bram Moolenaar <Bram@vim.org>
parents: 21170
diff changeset
2065 let buf = RunVimInTerminal('-S XTest_silent_echo', {'rows': 6})
21176
54c665ad2db3 patch 8.2.1139: Vim9: test for silent echo fails in some environments
Bram Moolenaar <Bram@vim.org>
parents: 21174
diff changeset
2066 call term_sendkeys(buf, ":abc")
21172
96ae8622cfb6 patch 8.2.1137: Vim9: modifiers not cleared after compiling function
Bram Moolenaar <Bram@vim.org>
parents: 21170
diff changeset
2067 call VerifyScreenDump(buf, 'Test_vim9_silent_echo', {})
96ae8622cfb6 patch 8.2.1137: Vim9: modifiers not cleared after compiling function
Bram Moolenaar <Bram@vim.org>
parents: 21170
diff changeset
2068
96ae8622cfb6 patch 8.2.1137: Vim9: modifiers not cleared after compiling function
Bram Moolenaar <Bram@vim.org>
parents: 21170
diff changeset
2069 " clean up
96ae8622cfb6 patch 8.2.1137: Vim9: modifiers not cleared after compiling function
Bram Moolenaar <Bram@vim.org>
parents: 21170
diff changeset
2070 call StopVimInTerminal(buf)
96ae8622cfb6 patch 8.2.1137: Vim9: modifiers not cleared after compiling function
Bram Moolenaar <Bram@vim.org>
parents: 21170
diff changeset
2071 call delete('XTest_silent_echo')
21176
54c665ad2db3 patch 8.2.1139: Vim9: test for silent echo fails in some environments
Bram Moolenaar <Bram@vim.org>
parents: 21174
diff changeset
2072 endfunc
21172
96ae8622cfb6 patch 8.2.1137: Vim9: modifiers not cleared after compiling function
Bram Moolenaar <Bram@vim.org>
parents: 21170
diff changeset
2073
22736
56907027dba7 patch 8.2.1916: Vim9: function call is aborted even when "silent!" is used
Bram Moolenaar <Bram@vim.org>
parents: 22734
diff changeset
2074 def SilentlyError()
56907027dba7 patch 8.2.1916: Vim9: function call is aborted even when "silent!" is used
Bram Moolenaar <Bram@vim.org>
parents: 22734
diff changeset
2075 execute('silent! invalid')
56907027dba7 patch 8.2.1916: Vim9: function call is aborted even when "silent!" is used
Bram Moolenaar <Bram@vim.org>
parents: 22734
diff changeset
2076 g:did_it = 'yes'
56907027dba7 patch 8.2.1916: Vim9: function call is aborted even when "silent!" is used
Bram Moolenaar <Bram@vim.org>
parents: 22734
diff changeset
2077 enddef
56907027dba7 patch 8.2.1916: Vim9: function call is aborted even when "silent!" is used
Bram Moolenaar <Bram@vim.org>
parents: 22734
diff changeset
2078
22742
f7f2d73ff85e patch 8.2.1919: assert_fails() setting emsg_silent changes normal execution
Bram Moolenaar <Bram@vim.org>
parents: 22736
diff changeset
2079 func UserError()
f7f2d73ff85e patch 8.2.1919: assert_fails() setting emsg_silent changes normal execution
Bram Moolenaar <Bram@vim.org>
parents: 22736
diff changeset
2080 silent! invalid
f7f2d73ff85e patch 8.2.1919: assert_fails() setting emsg_silent changes normal execution
Bram Moolenaar <Bram@vim.org>
parents: 22736
diff changeset
2081 endfunc
f7f2d73ff85e patch 8.2.1919: assert_fails() setting emsg_silent changes normal execution
Bram Moolenaar <Bram@vim.org>
parents: 22736
diff changeset
2082
f7f2d73ff85e patch 8.2.1919: assert_fails() setting emsg_silent changes normal execution
Bram Moolenaar <Bram@vim.org>
parents: 22736
diff changeset
2083 def SilentlyUserError()
f7f2d73ff85e patch 8.2.1919: assert_fails() setting emsg_silent changes normal execution
Bram Moolenaar <Bram@vim.org>
parents: 22736
diff changeset
2084 UserError()
f7f2d73ff85e patch 8.2.1919: assert_fails() setting emsg_silent changes normal execution
Bram Moolenaar <Bram@vim.org>
parents: 22736
diff changeset
2085 g:did_it = 'yes'
f7f2d73ff85e patch 8.2.1919: assert_fails() setting emsg_silent changes normal execution
Bram Moolenaar <Bram@vim.org>
parents: 22736
diff changeset
2086 enddef
22736
56907027dba7 patch 8.2.1916: Vim9: function call is aborted even when "silent!" is used
Bram Moolenaar <Bram@vim.org>
parents: 22734
diff changeset
2087
56907027dba7 patch 8.2.1916: Vim9: function call is aborted even when "silent!" is used
Bram Moolenaar <Bram@vim.org>
parents: 22734
diff changeset
2088 " This can't be a :def function, because the assert would not be reached.
56907027dba7 patch 8.2.1916: Vim9: function call is aborted even when "silent!" is used
Bram Moolenaar <Bram@vim.org>
parents: 22734
diff changeset
2089 func Test_ignore_silent_error()
56907027dba7 patch 8.2.1916: Vim9: function call is aborted even when "silent!" is used
Bram Moolenaar <Bram@vim.org>
parents: 22734
diff changeset
2090 let g:did_it = 'no'
56907027dba7 patch 8.2.1916: Vim9: function call is aborted even when "silent!" is used
Bram Moolenaar <Bram@vim.org>
parents: 22734
diff changeset
2091 call SilentlyError()
56907027dba7 patch 8.2.1916: Vim9: function call is aborted even when "silent!" is used
Bram Moolenaar <Bram@vim.org>
parents: 22734
diff changeset
2092 call assert_equal('yes', g:did_it)
56907027dba7 patch 8.2.1916: Vim9: function call is aborted even when "silent!" is used
Bram Moolenaar <Bram@vim.org>
parents: 22734
diff changeset
2093
22742
f7f2d73ff85e patch 8.2.1919: assert_fails() setting emsg_silent changes normal execution
Bram Moolenaar <Bram@vim.org>
parents: 22736
diff changeset
2094 let g:did_it = 'no'
f7f2d73ff85e patch 8.2.1919: assert_fails() setting emsg_silent changes normal execution
Bram Moolenaar <Bram@vim.org>
parents: 22736
diff changeset
2095 call SilentlyUserError()
f7f2d73ff85e patch 8.2.1919: assert_fails() setting emsg_silent changes normal execution
Bram Moolenaar <Bram@vim.org>
parents: 22736
diff changeset
2096 call assert_equal('yes', g:did_it)
22736
56907027dba7 patch 8.2.1916: Vim9: function call is aborted even when "silent!" is used
Bram Moolenaar <Bram@vim.org>
parents: 22734
diff changeset
2097
56907027dba7 patch 8.2.1916: Vim9: function call is aborted even when "silent!" is used
Bram Moolenaar <Bram@vim.org>
parents: 22734
diff changeset
2098 unlet g:did_it
56907027dba7 patch 8.2.1916: Vim9: function call is aborted even when "silent!" is used
Bram Moolenaar <Bram@vim.org>
parents: 22734
diff changeset
2099 endfunc
56907027dba7 patch 8.2.1916: Vim9: function call is aborted even when "silent!" is used
Bram Moolenaar <Bram@vim.org>
parents: 22734
diff changeset
2100
22760
d235c5fa0bbe patch 8.2.1928: Vim9: "silent!" not effective when list index is wrong
Bram Moolenaar <Bram@vim.org>
parents: 22742
diff changeset
2101 def Test_ignore_silent_error_in_filter()
d235c5fa0bbe patch 8.2.1928: Vim9: "silent!" not effective when list index is wrong
Bram Moolenaar <Bram@vim.org>
parents: 22742
diff changeset
2102 var lines =<< trim END
d235c5fa0bbe patch 8.2.1928: Vim9: "silent!" not effective when list index is wrong
Bram Moolenaar <Bram@vim.org>
parents: 22742
diff changeset
2103 vim9script
d235c5fa0bbe patch 8.2.1928: Vim9: "silent!" not effective when list index is wrong
Bram Moolenaar <Bram@vim.org>
parents: 22742
diff changeset
2104 def Filter(winid: number, key: string): bool
d235c5fa0bbe patch 8.2.1928: Vim9: "silent!" not effective when list index is wrong
Bram Moolenaar <Bram@vim.org>
parents: 22742
diff changeset
2105 if key == 'o'
d235c5fa0bbe patch 8.2.1928: Vim9: "silent!" not effective when list index is wrong
Bram Moolenaar <Bram@vim.org>
parents: 22742
diff changeset
2106 silent! eval [][0]
d235c5fa0bbe patch 8.2.1928: Vim9: "silent!" not effective when list index is wrong
Bram Moolenaar <Bram@vim.org>
parents: 22742
diff changeset
2107 return true
d235c5fa0bbe patch 8.2.1928: Vim9: "silent!" not effective when list index is wrong
Bram Moolenaar <Bram@vim.org>
parents: 22742
diff changeset
2108 endif
d235c5fa0bbe patch 8.2.1928: Vim9: "silent!" not effective when list index is wrong
Bram Moolenaar <Bram@vim.org>
parents: 22742
diff changeset
2109 return popup_filter_menu(winid, key)
d235c5fa0bbe patch 8.2.1928: Vim9: "silent!" not effective when list index is wrong
Bram Moolenaar <Bram@vim.org>
parents: 22742
diff changeset
2110 enddef
d235c5fa0bbe patch 8.2.1928: Vim9: "silent!" not effective when list index is wrong
Bram Moolenaar <Bram@vim.org>
parents: 22742
diff changeset
2111
23072
4b398a229b0b patch 8.2.2082: Vim9: can still use the depricated #{} dict syntax
Bram Moolenaar <Bram@vim.org>
parents: 23009
diff changeset
2112 popup_create('popup', {filter: Filter})
22760
d235c5fa0bbe patch 8.2.1928: Vim9: "silent!" not effective when list index is wrong
Bram Moolenaar <Bram@vim.org>
parents: 22742
diff changeset
2113 feedkeys("o\r", 'xnt')
d235c5fa0bbe patch 8.2.1928: Vim9: "silent!" not effective when list index is wrong
Bram Moolenaar <Bram@vim.org>
parents: 22742
diff changeset
2114 END
d235c5fa0bbe patch 8.2.1928: Vim9: "silent!" not effective when list index is wrong
Bram Moolenaar <Bram@vim.org>
parents: 22742
diff changeset
2115 CheckScriptSuccess(lines)
d235c5fa0bbe patch 8.2.1928: Vim9: "silent!" not effective when list index is wrong
Bram Moolenaar <Bram@vim.org>
parents: 22742
diff changeset
2116 enddef
d235c5fa0bbe patch 8.2.1928: Vim9: "silent!" not effective when list index is wrong
Bram Moolenaar <Bram@vim.org>
parents: 22742
diff changeset
2117
22135
f45127fbe9ba patch 8.2.1617: Vim9: cannot pass "true" to win_splitmove()
Bram Moolenaar <Bram@vim.org>
parents: 22133
diff changeset
2118 def Fibonacci(n: number): number
f45127fbe9ba patch 8.2.1617: Vim9: cannot pass "true" to win_splitmove()
Bram Moolenaar <Bram@vim.org>
parents: 22133
diff changeset
2119 if n < 2
f45127fbe9ba patch 8.2.1617: Vim9: cannot pass "true" to win_splitmove()
Bram Moolenaar <Bram@vim.org>
parents: 22133
diff changeset
2120 return n
f45127fbe9ba patch 8.2.1617: Vim9: cannot pass "true" to win_splitmove()
Bram Moolenaar <Bram@vim.org>
parents: 22133
diff changeset
2121 else
f45127fbe9ba patch 8.2.1617: Vim9: cannot pass "true" to win_splitmove()
Bram Moolenaar <Bram@vim.org>
parents: 22133
diff changeset
2122 return Fibonacci(n - 1) + Fibonacci(n - 2)
f45127fbe9ba patch 8.2.1617: Vim9: cannot pass "true" to win_splitmove()
Bram Moolenaar <Bram@vim.org>
parents: 22133
diff changeset
2123 endif
f45127fbe9ba patch 8.2.1617: Vim9: cannot pass "true" to win_splitmove()
Bram Moolenaar <Bram@vim.org>
parents: 22133
diff changeset
2124 enddef
f45127fbe9ba patch 8.2.1617: Vim9: cannot pass "true" to win_splitmove()
Bram Moolenaar <Bram@vim.org>
parents: 22133
diff changeset
2125
21281
13b1567ae0c6 patch 8.2.1191: Vim9: crash when function calls itself
Bram Moolenaar <Bram@vim.org>
parents: 21265
diff changeset
2126 def Test_recursive_call()
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
2127 Fibonacci(20)->assert_equal(6765)
21281
13b1567ae0c6 patch 8.2.1191: Vim9: crash when function calls itself
Bram Moolenaar <Bram@vim.org>
parents: 21265
diff changeset
2128 enddef
13b1567ae0c6 patch 8.2.1191: Vim9: crash when function calls itself
Bram Moolenaar <Bram@vim.org>
parents: 21265
diff changeset
2129
21303
7c50dfe302f8 patch 8.2.1202: Vim9: crash when calling a closure from a builtin function
Bram Moolenaar <Bram@vim.org>
parents: 21301
diff changeset
2130 def TreeWalk(dir: string): list<any>
23565
34aa2907082a patch 8.2.2325: Vim9: crash if map() changes the item type
Bram Moolenaar <Bram@vim.org>
parents: 23559
diff changeset
2131 return readdir(dir)->mapnew((_, val) =>
21303
7c50dfe302f8 patch 8.2.1202: Vim9: crash when calling a closure from a builtin function
Bram Moolenaar <Bram@vim.org>
parents: 21301
diff changeset
2132 fnamemodify(dir .. '/' .. val, ':p')->isdirectory()
22936
00b0275ffe7f patch 8.2.2015: Vim9: literal dict #{} is not like any other language
Bram Moolenaar <Bram@vim.org>
parents: 22910
diff changeset
2133 ? {[val]: TreeWalk(dir .. '/' .. val)}
21303
7c50dfe302f8 patch 8.2.1202: Vim9: crash when calling a closure from a builtin function
Bram Moolenaar <Bram@vim.org>
parents: 21301
diff changeset
2134 : val
23428
5807e3958e38 patch 8.2.2257: Vim9: using -> for lambda is ambiguous
Bram Moolenaar <Bram@vim.org>
parents: 23426
diff changeset
2135 )
21303
7c50dfe302f8 patch 8.2.1202: Vim9: crash when calling a closure from a builtin function
Bram Moolenaar <Bram@vim.org>
parents: 21301
diff changeset
2136 enddef
7c50dfe302f8 patch 8.2.1202: Vim9: crash when calling a closure from a builtin function
Bram Moolenaar <Bram@vim.org>
parents: 21301
diff changeset
2137
7c50dfe302f8 patch 8.2.1202: Vim9: crash when calling a closure from a builtin function
Bram Moolenaar <Bram@vim.org>
parents: 21301
diff changeset
2138 def Test_closure_in_map()
7c50dfe302f8 patch 8.2.1202: Vim9: crash when calling a closure from a builtin function
Bram Moolenaar <Bram@vim.org>
parents: 21301
diff changeset
2139 mkdir('XclosureDir/tdir', 'p')
7c50dfe302f8 patch 8.2.1202: Vim9: crash when calling a closure from a builtin function
Bram Moolenaar <Bram@vim.org>
parents: 21301
diff changeset
2140 writefile(['111'], 'XclosureDir/file1')
7c50dfe302f8 patch 8.2.1202: Vim9: crash when calling a closure from a builtin function
Bram Moolenaar <Bram@vim.org>
parents: 21301
diff changeset
2141 writefile(['222'], 'XclosureDir/file2')
7c50dfe302f8 patch 8.2.1202: Vim9: crash when calling a closure from a builtin function
Bram Moolenaar <Bram@vim.org>
parents: 21301
diff changeset
2142 writefile(['333'], 'XclosureDir/tdir/file3')
7c50dfe302f8 patch 8.2.1202: Vim9: crash when calling a closure from a builtin function
Bram Moolenaar <Bram@vim.org>
parents: 21301
diff changeset
2143
23072
4b398a229b0b patch 8.2.2082: Vim9: can still use the depricated #{} dict syntax
Bram Moolenaar <Bram@vim.org>
parents: 23009
diff changeset
2144 TreeWalk('XclosureDir')->assert_equal(['file1', 'file2', {tdir: ['file3']}])
21303
7c50dfe302f8 patch 8.2.1202: Vim9: crash when calling a closure from a builtin function
Bram Moolenaar <Bram@vim.org>
parents: 21301
diff changeset
2145
7c50dfe302f8 patch 8.2.1202: Vim9: crash when calling a closure from a builtin function
Bram Moolenaar <Bram@vim.org>
parents: 21301
diff changeset
2146 delete('XclosureDir', 'rf')
7c50dfe302f8 patch 8.2.1202: Vim9: crash when calling a closure from a builtin function
Bram Moolenaar <Bram@vim.org>
parents: 21301
diff changeset
2147 enddef
7c50dfe302f8 patch 8.2.1202: Vim9: crash when calling a closure from a builtin function
Bram Moolenaar <Bram@vim.org>
parents: 21301
diff changeset
2148
22496
454b78ca8247 patch 8.2.1796: Vim9: invalid memory access with weird function name
Bram Moolenaar <Bram@vim.org>
parents: 22468
diff changeset
2149 def Test_invalid_function_name()
454b78ca8247 patch 8.2.1796: Vim9: invalid memory access with weird function name
Bram Moolenaar <Bram@vim.org>
parents: 22468
diff changeset
2150 var lines =<< trim END
454b78ca8247 patch 8.2.1796: Vim9: invalid memory access with weird function name
Bram Moolenaar <Bram@vim.org>
parents: 22468
diff changeset
2151 vim9script
454b78ca8247 patch 8.2.1796: Vim9: invalid memory access with weird function name
Bram Moolenaar <Bram@vim.org>
parents: 22468
diff changeset
2152 def s: list<string>
454b78ca8247 patch 8.2.1796: Vim9: invalid memory access with weird function name
Bram Moolenaar <Bram@vim.org>
parents: 22468
diff changeset
2153 END
454b78ca8247 patch 8.2.1796: Vim9: invalid memory access with weird function name
Bram Moolenaar <Bram@vim.org>
parents: 22468
diff changeset
2154 CheckScriptFailure(lines, 'E129:')
454b78ca8247 patch 8.2.1796: Vim9: invalid memory access with weird function name
Bram Moolenaar <Bram@vim.org>
parents: 22468
diff changeset
2155
454b78ca8247 patch 8.2.1796: Vim9: invalid memory access with weird function name
Bram Moolenaar <Bram@vim.org>
parents: 22468
diff changeset
2156 lines =<< trim END
454b78ca8247 patch 8.2.1796: Vim9: invalid memory access with weird function name
Bram Moolenaar <Bram@vim.org>
parents: 22468
diff changeset
2157 vim9script
454b78ca8247 patch 8.2.1796: Vim9: invalid memory access with weird function name
Bram Moolenaar <Bram@vim.org>
parents: 22468
diff changeset
2158 def g: list<string>
454b78ca8247 patch 8.2.1796: Vim9: invalid memory access with weird function name
Bram Moolenaar <Bram@vim.org>
parents: 22468
diff changeset
2159 END
454b78ca8247 patch 8.2.1796: Vim9: invalid memory access with weird function name
Bram Moolenaar <Bram@vim.org>
parents: 22468
diff changeset
2160 CheckScriptFailure(lines, 'E129:')
454b78ca8247 patch 8.2.1796: Vim9: invalid memory access with weird function name
Bram Moolenaar <Bram@vim.org>
parents: 22468
diff changeset
2161
454b78ca8247 patch 8.2.1796: Vim9: invalid memory access with weird function name
Bram Moolenaar <Bram@vim.org>
parents: 22468
diff changeset
2162 lines =<< trim END
454b78ca8247 patch 8.2.1796: Vim9: invalid memory access with weird function name
Bram Moolenaar <Bram@vim.org>
parents: 22468
diff changeset
2163 vim9script
454b78ca8247 patch 8.2.1796: Vim9: invalid memory access with weird function name
Bram Moolenaar <Bram@vim.org>
parents: 22468
diff changeset
2164 def <SID>: list<string>
454b78ca8247 patch 8.2.1796: Vim9: invalid memory access with weird function name
Bram Moolenaar <Bram@vim.org>
parents: 22468
diff changeset
2165 END
454b78ca8247 patch 8.2.1796: Vim9: invalid memory access with weird function name
Bram Moolenaar <Bram@vim.org>
parents: 22468
diff changeset
2166 CheckScriptFailure(lines, 'E884:')
454b78ca8247 patch 8.2.1796: Vim9: invalid memory access with weird function name
Bram Moolenaar <Bram@vim.org>
parents: 22468
diff changeset
2167
454b78ca8247 patch 8.2.1796: Vim9: invalid memory access with weird function name
Bram Moolenaar <Bram@vim.org>
parents: 22468
diff changeset
2168 lines =<< trim END
454b78ca8247 patch 8.2.1796: Vim9: invalid memory access with weird function name
Bram Moolenaar <Bram@vim.org>
parents: 22468
diff changeset
2169 vim9script
454b78ca8247 patch 8.2.1796: Vim9: invalid memory access with weird function name
Bram Moolenaar <Bram@vim.org>
parents: 22468
diff changeset
2170 def F list<string>
454b78ca8247 patch 8.2.1796: Vim9: invalid memory access with weird function name
Bram Moolenaar <Bram@vim.org>
parents: 22468
diff changeset
2171 END
454b78ca8247 patch 8.2.1796: Vim9: invalid memory access with weird function name
Bram Moolenaar <Bram@vim.org>
parents: 22468
diff changeset
2172 CheckScriptFailure(lines, 'E488:')
454b78ca8247 patch 8.2.1796: Vim9: invalid memory access with weird function name
Bram Moolenaar <Bram@vim.org>
parents: 22468
diff changeset
2173 enddef
454b78ca8247 patch 8.2.1796: Vim9: invalid memory access with weird function name
Bram Moolenaar <Bram@vim.org>
parents: 22468
diff changeset
2174
21347
d636c7bbe9ab patch 8.2.1224: Vim9: arguments from partial are not used
Bram Moolenaar <Bram@vim.org>
parents: 21345
diff changeset
2175 def Test_partial_call()
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
2176 var Xsetlist = function('setloclist', [0])
23072
4b398a229b0b patch 8.2.2082: Vim9: can still use the depricated #{} dict syntax
Bram Moolenaar <Bram@vim.org>
parents: 23009
diff changeset
2177 Xsetlist([], ' ', {title: 'test'})
4b398a229b0b patch 8.2.2082: Vim9: can still use the depricated #{} dict syntax
Bram Moolenaar <Bram@vim.org>
parents: 23009
diff changeset
2178 getloclist(0, {title: 1})->assert_equal({title: 'test'})
21347
d636c7bbe9ab patch 8.2.1224: Vim9: arguments from partial are not used
Bram Moolenaar <Bram@vim.org>
parents: 21345
diff changeset
2179
d636c7bbe9ab patch 8.2.1224: Vim9: arguments from partial are not used
Bram Moolenaar <Bram@vim.org>
parents: 21345
diff changeset
2180 Xsetlist = function('setloclist', [0, [], ' '])
23072
4b398a229b0b patch 8.2.2082: Vim9: can still use the depricated #{} dict syntax
Bram Moolenaar <Bram@vim.org>
parents: 23009
diff changeset
2181 Xsetlist({title: 'test'})
4b398a229b0b patch 8.2.2082: Vim9: can still use the depricated #{} dict syntax
Bram Moolenaar <Bram@vim.org>
parents: 23009
diff changeset
2182 getloclist(0, {title: 1})->assert_equal({title: 'test'})
21347
d636c7bbe9ab patch 8.2.1224: Vim9: arguments from partial are not used
Bram Moolenaar <Bram@vim.org>
parents: 21345
diff changeset
2183
d636c7bbe9ab patch 8.2.1224: Vim9: arguments from partial are not used
Bram Moolenaar <Bram@vim.org>
parents: 21345
diff changeset
2184 Xsetlist = function('setqflist')
23072
4b398a229b0b patch 8.2.2082: Vim9: can still use the depricated #{} dict syntax
Bram Moolenaar <Bram@vim.org>
parents: 23009
diff changeset
2185 Xsetlist([], ' ', {title: 'test'})
4b398a229b0b patch 8.2.2082: Vim9: can still use the depricated #{} dict syntax
Bram Moolenaar <Bram@vim.org>
parents: 23009
diff changeset
2186 getqflist({title: 1})->assert_equal({title: 'test'})
21347
d636c7bbe9ab patch 8.2.1224: Vim9: arguments from partial are not used
Bram Moolenaar <Bram@vim.org>
parents: 21345
diff changeset
2187
d636c7bbe9ab patch 8.2.1224: Vim9: arguments from partial are not used
Bram Moolenaar <Bram@vim.org>
parents: 21345
diff changeset
2188 Xsetlist = function('setqflist', [[], ' '])
23072
4b398a229b0b patch 8.2.2082: Vim9: can still use the depricated #{} dict syntax
Bram Moolenaar <Bram@vim.org>
parents: 23009
diff changeset
2189 Xsetlist({title: 'test'})
4b398a229b0b patch 8.2.2082: Vim9: can still use the depricated #{} dict syntax
Bram Moolenaar <Bram@vim.org>
parents: 23009
diff changeset
2190 getqflist({title: 1})->assert_equal({title: 'test'})
22498
04a9b1399d8e patch 8.2.1797: Vim9: some parts of the code not tested
Bram Moolenaar <Bram@vim.org>
parents: 22496
diff changeset
2191
04a9b1399d8e patch 8.2.1797: Vim9: some parts of the code not tested
Bram Moolenaar <Bram@vim.org>
parents: 22496
diff changeset
2192 var Len: func: number = function('len', ['word'])
04a9b1399d8e patch 8.2.1797: Vim9: some parts of the code not tested
Bram Moolenaar <Bram@vim.org>
parents: 22496
diff changeset
2193 assert_equal(4, Len())
21347
d636c7bbe9ab patch 8.2.1224: Vim9: arguments from partial are not used
Bram Moolenaar <Bram@vim.org>
parents: 21345
diff changeset
2194 enddef
d636c7bbe9ab patch 8.2.1224: Vim9: arguments from partial are not used
Bram Moolenaar <Bram@vim.org>
parents: 21345
diff changeset
2195
21689
10866fd07595 patch 8.2.1394: Vim9: compiling a function interferes with command modifiers
Bram Moolenaar <Bram@vim.org>
parents: 21685
diff changeset
2196 def Test_cmd_modifier()
10866fd07595 patch 8.2.1394: Vim9: compiling a function interferes with command modifiers
Bram Moolenaar <Bram@vim.org>
parents: 21685
diff changeset
2197 tab echo '0'
22147
d55008685870 patch 8.2.1623: Vim9: using :call where it is not needed
Bram Moolenaar <Bram@vim.org>
parents: 22139
diff changeset
2198 CheckDefFailure(['5tab echo 3'], 'E16:')
21689
10866fd07595 patch 8.2.1394: Vim9: compiling a function interferes with command modifiers
Bram Moolenaar <Bram@vim.org>
parents: 21685
diff changeset
2199 enddef
10866fd07595 patch 8.2.1394: Vim9: compiling a function interferes with command modifiers
Bram Moolenaar <Bram@vim.org>
parents: 21685
diff changeset
2200
10866fd07595 patch 8.2.1394: Vim9: compiling a function interferes with command modifiers
Bram Moolenaar <Bram@vim.org>
parents: 21685
diff changeset
2201 def Test_restore_modifiers()
10866fd07595 patch 8.2.1394: Vim9: compiling a function interferes with command modifiers
Bram Moolenaar <Bram@vim.org>
parents: 21685
diff changeset
2202 # check that when compiling a :def function command modifiers are not messed
10866fd07595 patch 8.2.1394: Vim9: compiling a function interferes with command modifiers
Bram Moolenaar <Bram@vim.org>
parents: 21685
diff changeset
2203 # up.
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
2204 var lines =<< trim END
21689
10866fd07595 patch 8.2.1394: Vim9: compiling a function interferes with command modifiers
Bram Moolenaar <Bram@vim.org>
parents: 21685
diff changeset
2205 vim9script
10866fd07595 patch 8.2.1394: Vim9: compiling a function interferes with command modifiers
Bram Moolenaar <Bram@vim.org>
parents: 21685
diff changeset
2206 set eventignore=
10866fd07595 patch 8.2.1394: Vim9: compiling a function interferes with command modifiers
Bram Moolenaar <Bram@vim.org>
parents: 21685
diff changeset
2207 autocmd QuickFixCmdPost * copen
10866fd07595 patch 8.2.1394: Vim9: compiling a function interferes with command modifiers
Bram Moolenaar <Bram@vim.org>
parents: 21685
diff changeset
2208 def AutocmdsDisabled()
22734
02b782e80ee4 patch 8.2.1915: Vim9: error for wrong number of arguments is not useful
Bram Moolenaar <Bram@vim.org>
parents: 22655
diff changeset
2209 eval 0
21689
10866fd07595 patch 8.2.1394: Vim9: compiling a function interferes with command modifiers
Bram Moolenaar <Bram@vim.org>
parents: 21685
diff changeset
2210 enddef
10866fd07595 patch 8.2.1394: Vim9: compiling a function interferes with command modifiers
Bram Moolenaar <Bram@vim.org>
parents: 21685
diff changeset
2211 func Func()
10866fd07595 patch 8.2.1394: Vim9: compiling a function interferes with command modifiers
Bram Moolenaar <Bram@vim.org>
parents: 21685
diff changeset
2212 noautocmd call s:AutocmdsDisabled()
10866fd07595 patch 8.2.1394: Vim9: compiling a function interferes with command modifiers
Bram Moolenaar <Bram@vim.org>
parents: 21685
diff changeset
2213 let g:ei_after = &eventignore
10866fd07595 patch 8.2.1394: Vim9: compiling a function interferes with command modifiers
Bram Moolenaar <Bram@vim.org>
parents: 21685
diff changeset
2214 endfunc
10866fd07595 patch 8.2.1394: Vim9: compiling a function interferes with command modifiers
Bram Moolenaar <Bram@vim.org>
parents: 21685
diff changeset
2215 Func()
10866fd07595 patch 8.2.1394: Vim9: compiling a function interferes with command modifiers
Bram Moolenaar <Bram@vim.org>
parents: 21685
diff changeset
2216 END
10866fd07595 patch 8.2.1394: Vim9: compiling a function interferes with command modifiers
Bram Moolenaar <Bram@vim.org>
parents: 21685
diff changeset
2217 CheckScriptSuccess(lines)
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
2218 g:ei_after->assert_equal('')
21689
10866fd07595 patch 8.2.1394: Vim9: compiling a function interferes with command modifiers
Bram Moolenaar <Bram@vim.org>
parents: 21685
diff changeset
2219 enddef
10866fd07595 patch 8.2.1394: Vim9: compiling a function interferes with command modifiers
Bram Moolenaar <Bram@vim.org>
parents: 21685
diff changeset
2220
22214
efa1511a5bf3 patch 8.2.1656: Vim9: callstack wrong if :def function calls :def function
Bram Moolenaar <Bram@vim.org>
parents: 22165
diff changeset
2221 def StackTop()
efa1511a5bf3 patch 8.2.1656: Vim9: callstack wrong if :def function calls :def function
Bram Moolenaar <Bram@vim.org>
parents: 22165
diff changeset
2222 eval 1
efa1511a5bf3 patch 8.2.1656: Vim9: callstack wrong if :def function calls :def function
Bram Moolenaar <Bram@vim.org>
parents: 22165
diff changeset
2223 eval 2
efa1511a5bf3 patch 8.2.1656: Vim9: callstack wrong if :def function calls :def function
Bram Moolenaar <Bram@vim.org>
parents: 22165
diff changeset
2224 # call not on fourth line
efa1511a5bf3 patch 8.2.1656: Vim9: callstack wrong if :def function calls :def function
Bram Moolenaar <Bram@vim.org>
parents: 22165
diff changeset
2225 StackBot()
efa1511a5bf3 patch 8.2.1656: Vim9: callstack wrong if :def function calls :def function
Bram Moolenaar <Bram@vim.org>
parents: 22165
diff changeset
2226 enddef
efa1511a5bf3 patch 8.2.1656: Vim9: callstack wrong if :def function calls :def function
Bram Moolenaar <Bram@vim.org>
parents: 22165
diff changeset
2227
efa1511a5bf3 patch 8.2.1656: Vim9: callstack wrong if :def function calls :def function
Bram Moolenaar <Bram@vim.org>
parents: 22165
diff changeset
2228 def StackBot()
efa1511a5bf3 patch 8.2.1656: Vim9: callstack wrong if :def function calls :def function
Bram Moolenaar <Bram@vim.org>
parents: 22165
diff changeset
2229 # throw an error
efa1511a5bf3 patch 8.2.1656: Vim9: callstack wrong if :def function calls :def function
Bram Moolenaar <Bram@vim.org>
parents: 22165
diff changeset
2230 eval [][0]
efa1511a5bf3 patch 8.2.1656: Vim9: callstack wrong if :def function calls :def function
Bram Moolenaar <Bram@vim.org>
parents: 22165
diff changeset
2231 enddef
efa1511a5bf3 patch 8.2.1656: Vim9: callstack wrong if :def function calls :def function
Bram Moolenaar <Bram@vim.org>
parents: 22165
diff changeset
2232
efa1511a5bf3 patch 8.2.1656: Vim9: callstack wrong if :def function calls :def function
Bram Moolenaar <Bram@vim.org>
parents: 22165
diff changeset
2233 def Test_callstack_def()
efa1511a5bf3 patch 8.2.1656: Vim9: callstack wrong if :def function calls :def function
Bram Moolenaar <Bram@vim.org>
parents: 22165
diff changeset
2234 try
efa1511a5bf3 patch 8.2.1656: Vim9: callstack wrong if :def function calls :def function
Bram Moolenaar <Bram@vim.org>
parents: 22165
diff changeset
2235 StackTop()
efa1511a5bf3 patch 8.2.1656: Vim9: callstack wrong if :def function calls :def function
Bram Moolenaar <Bram@vim.org>
parents: 22165
diff changeset
2236 catch
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
2237 v:throwpoint->assert_match('Test_callstack_def\[2\]..StackTop\[4\]..StackBot, line 2')
22214
efa1511a5bf3 patch 8.2.1656: Vim9: callstack wrong if :def function calls :def function
Bram Moolenaar <Bram@vim.org>
parents: 22165
diff changeset
2238 endtry
efa1511a5bf3 patch 8.2.1656: Vim9: callstack wrong if :def function calls :def function
Bram Moolenaar <Bram@vim.org>
parents: 22165
diff changeset
2239 enddef
efa1511a5bf3 patch 8.2.1656: Vim9: callstack wrong if :def function calls :def function
Bram Moolenaar <Bram@vim.org>
parents: 22165
diff changeset
2240
22537
9870e8b6ed78 patch 8.2.1817: Vim9: wrong instruction when reusing a local variable spot
Bram Moolenaar <Bram@vim.org>
parents: 22535
diff changeset
2241 " Re-using spot for variable used in block
9870e8b6ed78 patch 8.2.1817: Vim9: wrong instruction when reusing a local variable spot
Bram Moolenaar <Bram@vim.org>
parents: 22535
diff changeset
2242 def Test_block_scoped_var()
9870e8b6ed78 patch 8.2.1817: Vim9: wrong instruction when reusing a local variable spot
Bram Moolenaar <Bram@vim.org>
parents: 22535
diff changeset
2243 var lines =<< trim END
9870e8b6ed78 patch 8.2.1817: Vim9: wrong instruction when reusing a local variable spot
Bram Moolenaar <Bram@vim.org>
parents: 22535
diff changeset
2244 vim9script
9870e8b6ed78 patch 8.2.1817: Vim9: wrong instruction when reusing a local variable spot
Bram Moolenaar <Bram@vim.org>
parents: 22535
diff changeset
2245 def Func()
9870e8b6ed78 patch 8.2.1817: Vim9: wrong instruction when reusing a local variable spot
Bram Moolenaar <Bram@vim.org>
parents: 22535
diff changeset
2246 var x = ['a', 'b', 'c']
9870e8b6ed78 patch 8.2.1817: Vim9: wrong instruction when reusing a local variable spot
Bram Moolenaar <Bram@vim.org>
parents: 22535
diff changeset
2247 if 1
9870e8b6ed78 patch 8.2.1817: Vim9: wrong instruction when reusing a local variable spot
Bram Moolenaar <Bram@vim.org>
parents: 22535
diff changeset
2248 var y = 'x'
23428
5807e3958e38 patch 8.2.2257: Vim9: using -> for lambda is ambiguous
Bram Moolenaar <Bram@vim.org>
parents: 23426
diff changeset
2249 map(x, () => y)
22537
9870e8b6ed78 patch 8.2.1817: Vim9: wrong instruction when reusing a local variable spot
Bram Moolenaar <Bram@vim.org>
parents: 22535
diff changeset
2250 endif
9870e8b6ed78 patch 8.2.1817: Vim9: wrong instruction when reusing a local variable spot
Bram Moolenaar <Bram@vim.org>
parents: 22535
diff changeset
2251 var z = x
9870e8b6ed78 patch 8.2.1817: Vim9: wrong instruction when reusing a local variable spot
Bram Moolenaar <Bram@vim.org>
parents: 22535
diff changeset
2252 assert_equal(['x', 'x', 'x'], z)
9870e8b6ed78 patch 8.2.1817: Vim9: wrong instruction when reusing a local variable spot
Bram Moolenaar <Bram@vim.org>
parents: 22535
diff changeset
2253 enddef
9870e8b6ed78 patch 8.2.1817: Vim9: wrong instruction when reusing a local variable spot
Bram Moolenaar <Bram@vim.org>
parents: 22535
diff changeset
2254 Func()
9870e8b6ed78 patch 8.2.1817: Vim9: wrong instruction when reusing a local variable spot
Bram Moolenaar <Bram@vim.org>
parents: 22535
diff changeset
2255 END
9870e8b6ed78 patch 8.2.1817: Vim9: wrong instruction when reusing a local variable spot
Bram Moolenaar <Bram@vim.org>
parents: 22535
diff changeset
2256 CheckScriptSuccess(lines)
9870e8b6ed78 patch 8.2.1817: Vim9: wrong instruction when reusing a local variable spot
Bram Moolenaar <Bram@vim.org>
parents: 22535
diff changeset
2257 enddef
9870e8b6ed78 patch 8.2.1817: Vim9: wrong instruction when reusing a local variable spot
Bram Moolenaar <Bram@vim.org>
parents: 22535
diff changeset
2258
22948
707b90980de5 patch 8.2.2021: Vim9: get E1099 when autocommand resets did_emsg
Bram Moolenaar <Bram@vim.org>
parents: 22942
diff changeset
2259 def Test_reset_did_emsg()
707b90980de5 patch 8.2.2021: Vim9: get E1099 when autocommand resets did_emsg
Bram Moolenaar <Bram@vim.org>
parents: 22942
diff changeset
2260 var lines =<< trim END
707b90980de5 patch 8.2.2021: Vim9: get E1099 when autocommand resets did_emsg
Bram Moolenaar <Bram@vim.org>
parents: 22942
diff changeset
2261 @s = 'blah'
707b90980de5 patch 8.2.2021: Vim9: get E1099 when autocommand resets did_emsg
Bram Moolenaar <Bram@vim.org>
parents: 22942
diff changeset
2262 au BufWinLeave * #
707b90980de5 patch 8.2.2021: Vim9: get E1099 when autocommand resets did_emsg
Bram Moolenaar <Bram@vim.org>
parents: 22942
diff changeset
2263 def Func()
707b90980de5 patch 8.2.2021: Vim9: get E1099 when autocommand resets did_emsg
Bram Moolenaar <Bram@vim.org>
parents: 22942
diff changeset
2264 var winid = popup_create('popup', {})
707b90980de5 patch 8.2.2021: Vim9: get E1099 when autocommand resets did_emsg
Bram Moolenaar <Bram@vim.org>
parents: 22942
diff changeset
2265 exe '*s'
707b90980de5 patch 8.2.2021: Vim9: get E1099 when autocommand resets did_emsg
Bram Moolenaar <Bram@vim.org>
parents: 22942
diff changeset
2266 popup_close(winid)
707b90980de5 patch 8.2.2021: Vim9: get E1099 when autocommand resets did_emsg
Bram Moolenaar <Bram@vim.org>
parents: 22942
diff changeset
2267 enddef
707b90980de5 patch 8.2.2021: Vim9: get E1099 when autocommand resets did_emsg
Bram Moolenaar <Bram@vim.org>
parents: 22942
diff changeset
2268 Func()
707b90980de5 patch 8.2.2021: Vim9: get E1099 when autocommand resets did_emsg
Bram Moolenaar <Bram@vim.org>
parents: 22942
diff changeset
2269 END
707b90980de5 patch 8.2.2021: Vim9: get E1099 when autocommand resets did_emsg
Bram Moolenaar <Bram@vim.org>
parents: 22942
diff changeset
2270 CheckScriptFailure(lines, 'E492:', 8)
23092
c713358da074 patch 8.2.2092: Vim9: unpredictable errors for script tests
Bram Moolenaar <Bram@vim.org>
parents: 23074
diff changeset
2271 delfunc! g:Func
22948
707b90980de5 patch 8.2.2021: Vim9: get E1099 when autocommand resets did_emsg
Bram Moolenaar <Bram@vim.org>
parents: 22942
diff changeset
2272 enddef
707b90980de5 patch 8.2.2021: Vim9: get E1099 when autocommand resets did_emsg
Bram Moolenaar <Bram@vim.org>
parents: 22942
diff changeset
2273
23177
cc24ac009f29 patch 8.2.2134: Vim9: get E1099 when autocmd triggered in builtin function
Bram Moolenaar <Bram@vim.org>
parents: 23171
diff changeset
2274 def Test_did_emsg_reset()
cc24ac009f29 patch 8.2.2134: Vim9: get E1099 when autocmd triggered in builtin function
Bram Moolenaar <Bram@vim.org>
parents: 23171
diff changeset
2275 # executing an autocommand resets did_emsg, this should not result in a
cc24ac009f29 patch 8.2.2134: Vim9: get E1099 when autocmd triggered in builtin function
Bram Moolenaar <Bram@vim.org>
parents: 23171
diff changeset
2276 # builtin function considered failing
cc24ac009f29 patch 8.2.2134: Vim9: get E1099 when autocmd triggered in builtin function
Bram Moolenaar <Bram@vim.org>
parents: 23171
diff changeset
2277 var lines =<< trim END
cc24ac009f29 patch 8.2.2134: Vim9: get E1099 when autocmd triggered in builtin function
Bram Moolenaar <Bram@vim.org>
parents: 23171
diff changeset
2278 vim9script
cc24ac009f29 patch 8.2.2134: Vim9: get E1099 when autocmd triggered in builtin function
Bram Moolenaar <Bram@vim.org>
parents: 23171
diff changeset
2279 au BufWinLeave * #
cc24ac009f29 patch 8.2.2134: Vim9: get E1099 when autocmd triggered in builtin function
Bram Moolenaar <Bram@vim.org>
parents: 23171
diff changeset
2280 def Func()
23428
5807e3958e38 patch 8.2.2257: Vim9: using -> for lambda is ambiguous
Bram Moolenaar <Bram@vim.org>
parents: 23426
diff changeset
2281 popup_menu('', {callback: () => popup_create('', {})->popup_close()})
23177
cc24ac009f29 patch 8.2.2134: Vim9: get E1099 when autocmd triggered in builtin function
Bram Moolenaar <Bram@vim.org>
parents: 23171
diff changeset
2282 eval [][0]
cc24ac009f29 patch 8.2.2134: Vim9: get E1099 when autocmd triggered in builtin function
Bram Moolenaar <Bram@vim.org>
parents: 23171
diff changeset
2283 enddef
cc24ac009f29 patch 8.2.2134: Vim9: get E1099 when autocmd triggered in builtin function
Bram Moolenaar <Bram@vim.org>
parents: 23171
diff changeset
2284 nno <F3> <cmd>call <sid>Func()<cr>
cc24ac009f29 patch 8.2.2134: Vim9: get E1099 when autocmd triggered in builtin function
Bram Moolenaar <Bram@vim.org>
parents: 23171
diff changeset
2285 feedkeys("\<F3>\e", 'xt')
cc24ac009f29 patch 8.2.2134: Vim9: get E1099 when autocmd triggered in builtin function
Bram Moolenaar <Bram@vim.org>
parents: 23171
diff changeset
2286 END
cc24ac009f29 patch 8.2.2134: Vim9: get E1099 when autocmd triggered in builtin function
Bram Moolenaar <Bram@vim.org>
parents: 23171
diff changeset
2287 writefile(lines, 'XemsgReset')
cc24ac009f29 patch 8.2.2134: Vim9: get E1099 when autocmd triggered in builtin function
Bram Moolenaar <Bram@vim.org>
parents: 23171
diff changeset
2288 assert_fails('so XemsgReset', ['E684:', 'E684:'], lines, 2)
cc24ac009f29 patch 8.2.2134: Vim9: get E1099 when autocmd triggered in builtin function
Bram Moolenaar <Bram@vim.org>
parents: 23171
diff changeset
2289 delete('XemsgReset')
cc24ac009f29 patch 8.2.2134: Vim9: get E1099 when autocmd triggered in builtin function
Bram Moolenaar <Bram@vim.org>
parents: 23171
diff changeset
2290 nunmap <F3>
cc24ac009f29 patch 8.2.2134: Vim9: get E1099 when autocmd triggered in builtin function
Bram Moolenaar <Bram@vim.org>
parents: 23171
diff changeset
2291 au! BufWinLeave
cc24ac009f29 patch 8.2.2134: Vim9: get E1099 when autocmd triggered in builtin function
Bram Moolenaar <Bram@vim.org>
parents: 23171
diff changeset
2292 enddef
cc24ac009f29 patch 8.2.2134: Vim9: get E1099 when autocmd triggered in builtin function
Bram Moolenaar <Bram@vim.org>
parents: 23171
diff changeset
2293
23102
3239b0f3c592 patch 8.2.2097: Vim9: using :silent! when calling a function prevents abort
Bram Moolenaar <Bram@vim.org>
parents: 23100
diff changeset
2294 def Test_abort_with_silent_call()
3239b0f3c592 patch 8.2.2097: Vim9: using :silent! when calling a function prevents abort
Bram Moolenaar <Bram@vim.org>
parents: 23100
diff changeset
2295 var lines =<< trim END
3239b0f3c592 patch 8.2.2097: Vim9: using :silent! when calling a function prevents abort
Bram Moolenaar <Bram@vim.org>
parents: 23100
diff changeset
2296 vim9script
3239b0f3c592 patch 8.2.2097: Vim9: using :silent! when calling a function prevents abort
Bram Moolenaar <Bram@vim.org>
parents: 23100
diff changeset
2297 g:result = 'none'
3239b0f3c592 patch 8.2.2097: Vim9: using :silent! when calling a function prevents abort
Bram Moolenaar <Bram@vim.org>
parents: 23100
diff changeset
2298 def Func()
3239b0f3c592 patch 8.2.2097: Vim9: using :silent! when calling a function prevents abort
Bram Moolenaar <Bram@vim.org>
parents: 23100
diff changeset
2299 g:result += 3
3239b0f3c592 patch 8.2.2097: Vim9: using :silent! when calling a function prevents abort
Bram Moolenaar <Bram@vim.org>
parents: 23100
diff changeset
2300 g:result = 'yes'
3239b0f3c592 patch 8.2.2097: Vim9: using :silent! when calling a function prevents abort
Bram Moolenaar <Bram@vim.org>
parents: 23100
diff changeset
2301 enddef
3239b0f3c592 patch 8.2.2097: Vim9: using :silent! when calling a function prevents abort
Bram Moolenaar <Bram@vim.org>
parents: 23100
diff changeset
2302 # error is silenced, but function aborts on error
3239b0f3c592 patch 8.2.2097: Vim9: using :silent! when calling a function prevents abort
Bram Moolenaar <Bram@vim.org>
parents: 23100
diff changeset
2303 silent! Func()
3239b0f3c592 patch 8.2.2097: Vim9: using :silent! when calling a function prevents abort
Bram Moolenaar <Bram@vim.org>
parents: 23100
diff changeset
2304 assert_equal('none', g:result)
3239b0f3c592 patch 8.2.2097: Vim9: using :silent! when calling a function prevents abort
Bram Moolenaar <Bram@vim.org>
parents: 23100
diff changeset
2305 unlet g:result
3239b0f3c592 patch 8.2.2097: Vim9: using :silent! when calling a function prevents abort
Bram Moolenaar <Bram@vim.org>
parents: 23100
diff changeset
2306 END
3239b0f3c592 patch 8.2.2097: Vim9: using :silent! when calling a function prevents abort
Bram Moolenaar <Bram@vim.org>
parents: 23100
diff changeset
2307 CheckScriptSuccess(lines)
3239b0f3c592 patch 8.2.2097: Vim9: using :silent! when calling a function prevents abort
Bram Moolenaar <Bram@vim.org>
parents: 23100
diff changeset
2308 enddef
3239b0f3c592 patch 8.2.2097: Vim9: using :silent! when calling a function prevents abort
Bram Moolenaar <Bram@vim.org>
parents: 23100
diff changeset
2309
23100
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
2310 def Test_continues_with_silent_error()
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
2311 var lines =<< trim END
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
2312 vim9script
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
2313 g:result = 'none'
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
2314 def Func()
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
2315 silent! g:result += 3
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
2316 g:result = 'yes'
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
2317 enddef
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
2318 # error is silenced, function does not abort
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
2319 Func()
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
2320 assert_equal('yes', g:result)
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
2321 unlet g:result
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
2322 END
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
2323 CheckScriptSuccess(lines)
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
2324 enddef
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
2325
23074
cd885eb0e50c patch 8.2.2083: Vim9: crash when using ":silent!" and getting member fails
Bram Moolenaar <Bram@vim.org>
parents: 23072
diff changeset
2326 def Test_abort_even_with_silent()
cd885eb0e50c patch 8.2.2083: Vim9: crash when using ":silent!" and getting member fails
Bram Moolenaar <Bram@vim.org>
parents: 23072
diff changeset
2327 var lines =<< trim END
cd885eb0e50c patch 8.2.2083: Vim9: crash when using ":silent!" and getting member fails
Bram Moolenaar <Bram@vim.org>
parents: 23072
diff changeset
2328 vim9script
cd885eb0e50c patch 8.2.2083: Vim9: crash when using ":silent!" and getting member fails
Bram Moolenaar <Bram@vim.org>
parents: 23072
diff changeset
2329 g:result = 'none'
cd885eb0e50c patch 8.2.2083: Vim9: crash when using ":silent!" and getting member fails
Bram Moolenaar <Bram@vim.org>
parents: 23072
diff changeset
2330 def Func()
cd885eb0e50c patch 8.2.2083: Vim9: crash when using ":silent!" and getting member fails
Bram Moolenaar <Bram@vim.org>
parents: 23072
diff changeset
2331 eval {-> ''}() .. '' .. {}['X']
cd885eb0e50c patch 8.2.2083: Vim9: crash when using ":silent!" and getting member fails
Bram Moolenaar <Bram@vim.org>
parents: 23072
diff changeset
2332 g:result = 'yes'
cd885eb0e50c patch 8.2.2083: Vim9: crash when using ":silent!" and getting member fails
Bram Moolenaar <Bram@vim.org>
parents: 23072
diff changeset
2333 enddef
23100
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
2334 silent! Func()
23074
cd885eb0e50c patch 8.2.2083: Vim9: crash when using ":silent!" and getting member fails
Bram Moolenaar <Bram@vim.org>
parents: 23072
diff changeset
2335 assert_equal('none', g:result)
23098
bdafc132a4a1 patch 8.2.2095: Vim9: crash when failed dict member is followed by concat
Bram Moolenaar <Bram@vim.org>
parents: 23092
diff changeset
2336 unlet g:result
bdafc132a4a1 patch 8.2.2095: Vim9: crash when failed dict member is followed by concat
Bram Moolenaar <Bram@vim.org>
parents: 23092
diff changeset
2337 END
bdafc132a4a1 patch 8.2.2095: Vim9: crash when failed dict member is followed by concat
Bram Moolenaar <Bram@vim.org>
parents: 23092
diff changeset
2338 CheckScriptSuccess(lines)
bdafc132a4a1 patch 8.2.2095: Vim9: crash when failed dict member is followed by concat
Bram Moolenaar <Bram@vim.org>
parents: 23092
diff changeset
2339 enddef
bdafc132a4a1 patch 8.2.2095: Vim9: crash when failed dict member is followed by concat
Bram Moolenaar <Bram@vim.org>
parents: 23092
diff changeset
2340
23100
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
2341 def Test_cmdmod_silent_restored()
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
2342 var lines =<< trim END
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
2343 vim9script
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
2344 def Func()
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
2345 g:result = 'none'
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
2346 silent! g:result += 3
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
2347 g:result = 'none'
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
2348 g:result += 3
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
2349 enddef
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
2350 Func()
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
2351 END
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
2352 # can't use CheckScriptFailure, it ignores the :silent!
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
2353 var fname = 'Xdefsilent'
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
2354 writefile(lines, fname)
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
2355 var caught = 'no'
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
2356 try
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
2357 exe 'source ' .. fname
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
2358 catch /E1030:/
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
2359 caught = 'yes'
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
2360 assert_match('Func, line 4', v:throwpoint)
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
2361 endtry
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
2362 assert_equal('yes', caught)
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
2363 delete(fname)
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
2364 enddef
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
2365
23098
bdafc132a4a1 patch 8.2.2095: Vim9: crash when failed dict member is followed by concat
Bram Moolenaar <Bram@vim.org>
parents: 23092
diff changeset
2366 def Test_dict_member_with_silent()
bdafc132a4a1 patch 8.2.2095: Vim9: crash when failed dict member is followed by concat
Bram Moolenaar <Bram@vim.org>
parents: 23092
diff changeset
2367 var lines =<< trim END
bdafc132a4a1 patch 8.2.2095: Vim9: crash when failed dict member is followed by concat
Bram Moolenaar <Bram@vim.org>
parents: 23092
diff changeset
2368 vim9script
bdafc132a4a1 patch 8.2.2095: Vim9: crash when failed dict member is followed by concat
Bram Moolenaar <Bram@vim.org>
parents: 23092
diff changeset
2369 g:result = 'none'
bdafc132a4a1 patch 8.2.2095: Vim9: crash when failed dict member is followed by concat
Bram Moolenaar <Bram@vim.org>
parents: 23092
diff changeset
2370 var d: dict<any>
bdafc132a4a1 patch 8.2.2095: Vim9: crash when failed dict member is followed by concat
Bram Moolenaar <Bram@vim.org>
parents: 23092
diff changeset
2371 def Func()
bdafc132a4a1 patch 8.2.2095: Vim9: crash when failed dict member is followed by concat
Bram Moolenaar <Bram@vim.org>
parents: 23092
diff changeset
2372 try
23428
5807e3958e38 patch 8.2.2257: Vim9: using -> for lambda is ambiguous
Bram Moolenaar <Bram@vim.org>
parents: 23426
diff changeset
2373 g:result = map([], (_, v) => ({}[v]))->join() .. d['']
23098
bdafc132a4a1 patch 8.2.2095: Vim9: crash when failed dict member is followed by concat
Bram Moolenaar <Bram@vim.org>
parents: 23092
diff changeset
2374 catch
bdafc132a4a1 patch 8.2.2095: Vim9: crash when failed dict member is followed by concat
Bram Moolenaar <Bram@vim.org>
parents: 23092
diff changeset
2375 endtry
bdafc132a4a1 patch 8.2.2095: Vim9: crash when failed dict member is followed by concat
Bram Moolenaar <Bram@vim.org>
parents: 23092
diff changeset
2376 enddef
bdafc132a4a1 patch 8.2.2095: Vim9: crash when failed dict member is followed by concat
Bram Moolenaar <Bram@vim.org>
parents: 23092
diff changeset
2377 silent! Func()
bdafc132a4a1 patch 8.2.2095: Vim9: crash when failed dict member is followed by concat
Bram Moolenaar <Bram@vim.org>
parents: 23092
diff changeset
2378 assert_equal('0', g:result)
bdafc132a4a1 patch 8.2.2095: Vim9: crash when failed dict member is followed by concat
Bram Moolenaar <Bram@vim.org>
parents: 23092
diff changeset
2379 unlet g:result
23074
cd885eb0e50c patch 8.2.2083: Vim9: crash when using ":silent!" and getting member fails
Bram Moolenaar <Bram@vim.org>
parents: 23072
diff changeset
2380 END
cd885eb0e50c patch 8.2.2083: Vim9: crash when using ":silent!" and getting member fails
Bram Moolenaar <Bram@vim.org>
parents: 23072
diff changeset
2381 CheckScriptSuccess(lines)
cd885eb0e50c patch 8.2.2083: Vim9: crash when using ":silent!" and getting member fails
Bram Moolenaar <Bram@vim.org>
parents: 23072
diff changeset
2382 enddef
cd885eb0e50c patch 8.2.2083: Vim9: crash when using ":silent!" and getting member fails
Bram Moolenaar <Bram@vim.org>
parents: 23072
diff changeset
2383
23689
e7f5931b46ca patch 8.2.2386: Vim9: crash when using ":silent! put"
Bram Moolenaar <Bram@vim.org>
parents: 23644
diff changeset
2384 def Test_skip_cmds_with_silent()
e7f5931b46ca patch 8.2.2386: Vim9: crash when using ":silent! put"
Bram Moolenaar <Bram@vim.org>
parents: 23644
diff changeset
2385 var lines =<< trim END
e7f5931b46ca patch 8.2.2386: Vim9: crash when using ":silent! put"
Bram Moolenaar <Bram@vim.org>
parents: 23644
diff changeset
2386 vim9script
e7f5931b46ca patch 8.2.2386: Vim9: crash when using ":silent! put"
Bram Moolenaar <Bram@vim.org>
parents: 23644
diff changeset
2387
e7f5931b46ca patch 8.2.2386: Vim9: crash when using ":silent! put"
Bram Moolenaar <Bram@vim.org>
parents: 23644
diff changeset
2388 def Func(b: bool)
e7f5931b46ca patch 8.2.2386: Vim9: crash when using ":silent! put"
Bram Moolenaar <Bram@vim.org>
parents: 23644
diff changeset
2389 Crash()
e7f5931b46ca patch 8.2.2386: Vim9: crash when using ":silent! put"
Bram Moolenaar <Bram@vim.org>
parents: 23644
diff changeset
2390 enddef
e7f5931b46ca patch 8.2.2386: Vim9: crash when using ":silent! put"
Bram Moolenaar <Bram@vim.org>
parents: 23644
diff changeset
2391
e7f5931b46ca patch 8.2.2386: Vim9: crash when using ":silent! put"
Bram Moolenaar <Bram@vim.org>
parents: 23644
diff changeset
2392 def Crash()
e7f5931b46ca patch 8.2.2386: Vim9: crash when using ":silent! put"
Bram Moolenaar <Bram@vim.org>
parents: 23644
diff changeset
2393 sil! :/not found/d _
e7f5931b46ca patch 8.2.2386: Vim9: crash when using ":silent! put"
Bram Moolenaar <Bram@vim.org>
parents: 23644
diff changeset
2394 sil! :/not found/put _
e7f5931b46ca patch 8.2.2386: Vim9: crash when using ":silent! put"
Bram Moolenaar <Bram@vim.org>
parents: 23644
diff changeset
2395 enddef
e7f5931b46ca patch 8.2.2386: Vim9: crash when using ":silent! put"
Bram Moolenaar <Bram@vim.org>
parents: 23644
diff changeset
2396
e7f5931b46ca patch 8.2.2386: Vim9: crash when using ":silent! put"
Bram Moolenaar <Bram@vim.org>
parents: 23644
diff changeset
2397 Func(true)
e7f5931b46ca patch 8.2.2386: Vim9: crash when using ":silent! put"
Bram Moolenaar <Bram@vim.org>
parents: 23644
diff changeset
2398 END
e7f5931b46ca patch 8.2.2386: Vim9: crash when using ":silent! put"
Bram Moolenaar <Bram@vim.org>
parents: 23644
diff changeset
2399 CheckScriptSuccess(lines)
e7f5931b46ca patch 8.2.2386: Vim9: crash when using ":silent! put"
Bram Moolenaar <Bram@vim.org>
parents: 23644
diff changeset
2400 enddef
e7f5931b46ca patch 8.2.2386: Vim9: crash when using ":silent! put"
Bram Moolenaar <Bram@vim.org>
parents: 23644
diff changeset
2401
23281
5b4db8035d1d patch 8.2.2186: Vim9: error when using 'opfunc'
Bram Moolenaar <Bram@vim.org>
parents: 23252
diff changeset
2402 def Test_opfunc()
5b4db8035d1d patch 8.2.2186: Vim9: error when using 'opfunc'
Bram Moolenaar <Bram@vim.org>
parents: 23252
diff changeset
2403 nnoremap <F3> <cmd>set opfunc=Opfunc<cr>g@
5b4db8035d1d patch 8.2.2186: Vim9: error when using 'opfunc'
Bram Moolenaar <Bram@vim.org>
parents: 23252
diff changeset
2404 def g:Opfunc(_: any): string
5b4db8035d1d patch 8.2.2186: Vim9: error when using 'opfunc'
Bram Moolenaar <Bram@vim.org>
parents: 23252
diff changeset
2405 setline(1, 'ASDF')
5b4db8035d1d patch 8.2.2186: Vim9: error when using 'opfunc'
Bram Moolenaar <Bram@vim.org>
parents: 23252
diff changeset
2406 return ''
5b4db8035d1d patch 8.2.2186: Vim9: error when using 'opfunc'
Bram Moolenaar <Bram@vim.org>
parents: 23252
diff changeset
2407 enddef
5b4db8035d1d patch 8.2.2186: Vim9: error when using 'opfunc'
Bram Moolenaar <Bram@vim.org>
parents: 23252
diff changeset
2408 new
5b4db8035d1d patch 8.2.2186: Vim9: error when using 'opfunc'
Bram Moolenaar <Bram@vim.org>
parents: 23252
diff changeset
2409 setline(1, 'asdf')
5b4db8035d1d patch 8.2.2186: Vim9: error when using 'opfunc'
Bram Moolenaar <Bram@vim.org>
parents: 23252
diff changeset
2410 feedkeys("\<F3>$", 'x')
5b4db8035d1d patch 8.2.2186: Vim9: error when using 'opfunc'
Bram Moolenaar <Bram@vim.org>
parents: 23252
diff changeset
2411 assert_equal('ASDF', getline(1))
5b4db8035d1d patch 8.2.2186: Vim9: error when using 'opfunc'
Bram Moolenaar <Bram@vim.org>
parents: 23252
diff changeset
2412
5b4db8035d1d patch 8.2.2186: Vim9: error when using 'opfunc'
Bram Moolenaar <Bram@vim.org>
parents: 23252
diff changeset
2413 bwipe!
5b4db8035d1d patch 8.2.2186: Vim9: error when using 'opfunc'
Bram Moolenaar <Bram@vim.org>
parents: 23252
diff changeset
2414 nunmap <F3>
5b4db8035d1d patch 8.2.2186: Vim9: error when using 'opfunc'
Bram Moolenaar <Bram@vim.org>
parents: 23252
diff changeset
2415 enddef
5b4db8035d1d patch 8.2.2186: Vim9: error when using 'opfunc'
Bram Moolenaar <Bram@vim.org>
parents: 23252
diff changeset
2416
23289
ac701146c708 patch 8.2.2190: Vim9: crash when compiled with EXITFREE
Bram Moolenaar <Bram@vim.org>
parents: 23285
diff changeset
2417 " this was crashing on exit
ac701146c708 patch 8.2.2190: Vim9: crash when compiled with EXITFREE
Bram Moolenaar <Bram@vim.org>
parents: 23285
diff changeset
2418 def Test_nested_lambda_in_closure()
ac701146c708 patch 8.2.2190: Vim9: crash when compiled with EXITFREE
Bram Moolenaar <Bram@vim.org>
parents: 23285
diff changeset
2419 var lines =<< trim END
ac701146c708 patch 8.2.2190: Vim9: crash when compiled with EXITFREE
Bram Moolenaar <Bram@vim.org>
parents: 23285
diff changeset
2420 vim9script
ac701146c708 patch 8.2.2190: Vim9: crash when compiled with EXITFREE
Bram Moolenaar <Bram@vim.org>
parents: 23285
diff changeset
2421 def Outer()
ac701146c708 patch 8.2.2190: Vim9: crash when compiled with EXITFREE
Bram Moolenaar <Bram@vim.org>
parents: 23285
diff changeset
2422 def g:Inner()
ac701146c708 patch 8.2.2190: Vim9: crash when compiled with EXITFREE
Bram Moolenaar <Bram@vim.org>
parents: 23285
diff changeset
2423 echo map([1, 2, 3], {_, v -> v + 1})
ac701146c708 patch 8.2.2190: Vim9: crash when compiled with EXITFREE
Bram Moolenaar <Bram@vim.org>
parents: 23285
diff changeset
2424 enddef
ac701146c708 patch 8.2.2190: Vim9: crash when compiled with EXITFREE
Bram Moolenaar <Bram@vim.org>
parents: 23285
diff changeset
2425 g:Inner()
ac701146c708 patch 8.2.2190: Vim9: crash when compiled with EXITFREE
Bram Moolenaar <Bram@vim.org>
parents: 23285
diff changeset
2426 enddef
ac701146c708 patch 8.2.2190: Vim9: crash when compiled with EXITFREE
Bram Moolenaar <Bram@vim.org>
parents: 23285
diff changeset
2427 defcompile
ac701146c708 patch 8.2.2190: Vim9: crash when compiled with EXITFREE
Bram Moolenaar <Bram@vim.org>
parents: 23285
diff changeset
2428 writefile(['Done'], 'XnestedDone')
ac701146c708 patch 8.2.2190: Vim9: crash when compiled with EXITFREE
Bram Moolenaar <Bram@vim.org>
parents: 23285
diff changeset
2429 quit
ac701146c708 patch 8.2.2190: Vim9: crash when compiled with EXITFREE
Bram Moolenaar <Bram@vim.org>
parents: 23285
diff changeset
2430 END
ac701146c708 patch 8.2.2190: Vim9: crash when compiled with EXITFREE
Bram Moolenaar <Bram@vim.org>
parents: 23285
diff changeset
2431 if !RunVim([], lines, '--clean')
ac701146c708 patch 8.2.2190: Vim9: crash when compiled with EXITFREE
Bram Moolenaar <Bram@vim.org>
parents: 23285
diff changeset
2432 return
ac701146c708 patch 8.2.2190: Vim9: crash when compiled with EXITFREE
Bram Moolenaar <Bram@vim.org>
parents: 23285
diff changeset
2433 endif
ac701146c708 patch 8.2.2190: Vim9: crash when compiled with EXITFREE
Bram Moolenaar <Bram@vim.org>
parents: 23285
diff changeset
2434 assert_equal(['Done'], readfile('XnestedDone'))
ac701146c708 patch 8.2.2190: Vim9: crash when compiled with EXITFREE
Bram Moolenaar <Bram@vim.org>
parents: 23285
diff changeset
2435 delete('XnestedDone')
ac701146c708 patch 8.2.2190: Vim9: crash when compiled with EXITFREE
Bram Moolenaar <Bram@vim.org>
parents: 23285
diff changeset
2436 enddef
ac701146c708 patch 8.2.2190: Vim9: crash when compiled with EXITFREE
Bram Moolenaar <Bram@vim.org>
parents: 23285
diff changeset
2437
24065
a6aec9a89184 patch 8.2.2574: Vim9: crash when calling partial with wrong function
Bram Moolenaar <Bram@vim.org>
parents: 24061
diff changeset
2438 def Test_check_func_arg_types()
a6aec9a89184 patch 8.2.2574: Vim9: crash when calling partial with wrong function
Bram Moolenaar <Bram@vim.org>
parents: 24061
diff changeset
2439 var lines =<< trim END
a6aec9a89184 patch 8.2.2574: Vim9: crash when calling partial with wrong function
Bram Moolenaar <Bram@vim.org>
parents: 24061
diff changeset
2440 vim9script
a6aec9a89184 patch 8.2.2574: Vim9: crash when calling partial with wrong function
Bram Moolenaar <Bram@vim.org>
parents: 24061
diff changeset
2441 def F1(x: string): string
a6aec9a89184 patch 8.2.2574: Vim9: crash when calling partial with wrong function
Bram Moolenaar <Bram@vim.org>
parents: 24061
diff changeset
2442 return x
a6aec9a89184 patch 8.2.2574: Vim9: crash when calling partial with wrong function
Bram Moolenaar <Bram@vim.org>
parents: 24061
diff changeset
2443 enddef
a6aec9a89184 patch 8.2.2574: Vim9: crash when calling partial with wrong function
Bram Moolenaar <Bram@vim.org>
parents: 24061
diff changeset
2444
a6aec9a89184 patch 8.2.2574: Vim9: crash when calling partial with wrong function
Bram Moolenaar <Bram@vim.org>
parents: 24061
diff changeset
2445 def F2(x: number): number
a6aec9a89184 patch 8.2.2574: Vim9: crash when calling partial with wrong function
Bram Moolenaar <Bram@vim.org>
parents: 24061
diff changeset
2446 return x + 1
a6aec9a89184 patch 8.2.2574: Vim9: crash when calling partial with wrong function
Bram Moolenaar <Bram@vim.org>
parents: 24061
diff changeset
2447 enddef
a6aec9a89184 patch 8.2.2574: Vim9: crash when calling partial with wrong function
Bram Moolenaar <Bram@vim.org>
parents: 24061
diff changeset
2448
a6aec9a89184 patch 8.2.2574: Vim9: crash when calling partial with wrong function
Bram Moolenaar <Bram@vim.org>
parents: 24061
diff changeset
2449 def G(g: func): dict<func>
a6aec9a89184 patch 8.2.2574: Vim9: crash when calling partial with wrong function
Bram Moolenaar <Bram@vim.org>
parents: 24061
diff changeset
2450 return {f: g}
a6aec9a89184 patch 8.2.2574: Vim9: crash when calling partial with wrong function
Bram Moolenaar <Bram@vim.org>
parents: 24061
diff changeset
2451 enddef
a6aec9a89184 patch 8.2.2574: Vim9: crash when calling partial with wrong function
Bram Moolenaar <Bram@vim.org>
parents: 24061
diff changeset
2452
a6aec9a89184 patch 8.2.2574: Vim9: crash when calling partial with wrong function
Bram Moolenaar <Bram@vim.org>
parents: 24061
diff changeset
2453 def H(d: dict<func>): string
a6aec9a89184 patch 8.2.2574: Vim9: crash when calling partial with wrong function
Bram Moolenaar <Bram@vim.org>
parents: 24061
diff changeset
2454 return d.f('a')
a6aec9a89184 patch 8.2.2574: Vim9: crash when calling partial with wrong function
Bram Moolenaar <Bram@vim.org>
parents: 24061
diff changeset
2455 enddef
a6aec9a89184 patch 8.2.2574: Vim9: crash when calling partial with wrong function
Bram Moolenaar <Bram@vim.org>
parents: 24061
diff changeset
2456 END
a6aec9a89184 patch 8.2.2574: Vim9: crash when calling partial with wrong function
Bram Moolenaar <Bram@vim.org>
parents: 24061
diff changeset
2457
a6aec9a89184 patch 8.2.2574: Vim9: crash when calling partial with wrong function
Bram Moolenaar <Bram@vim.org>
parents: 24061
diff changeset
2458 CheckScriptSuccess(lines + ['echo H(G(F1))'])
a6aec9a89184 patch 8.2.2574: Vim9: crash when calling partial with wrong function
Bram Moolenaar <Bram@vim.org>
parents: 24061
diff changeset
2459 CheckScriptFailure(lines + ['echo H(G(F2))'], 'E1013:')
a6aec9a89184 patch 8.2.2574: Vim9: crash when calling partial with wrong function
Bram Moolenaar <Bram@vim.org>
parents: 24061
diff changeset
2460 enddef
a6aec9a89184 patch 8.2.2574: Vim9: crash when calling partial with wrong function
Bram Moolenaar <Bram@vim.org>
parents: 24061
diff changeset
2461
23289
ac701146c708 patch 8.2.2190: Vim9: crash when compiled with EXITFREE
Bram Moolenaar <Bram@vim.org>
parents: 23285
diff changeset
2462
20257
683c2da4982b patch 8.2.0684: Vim9: memory leak when using lambda
Bram Moolenaar <Bram@vim.org>
parents: 20255
diff changeset
2463
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2464 " vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker