annotate src/testdir/test_vim9_func.vim @ 30300:b9d07900b0b8 v9.0.0486

patch 9.0.0486: text scrolled with 'nosplitscroll', autocmd win and help Commit: https://github.com/vim/vim/commit/d5bc762dea1fd32fa04342f8149f95ccfc3b9709 Author: Luuk van Baal <luukvbaal@gmail.com> Date: Sat Sep 17 16:16:35 2022 +0100 patch 9.0.0486: text scrolled with 'nosplitscroll', autocmd win and help Problem: Text scrolled with 'nosplitscroll', autocmd win opened and help window closed. Solution: Skip win_fix_scroll() in more situations. (Luuk van Baal, closes #11150)
author Bram Moolenaar <Bram@vim.org>
date Sat, 17 Sep 2022 17:30:03 +0200
parents c0f0118b6790
children c2ef8f0f8ba1
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
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
6 import './vim9.vim' as v9
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()
24369
a97fb00978f6 patch 8.2.2725: Vim9: message about compiling is wrong when using try/catch
Bram Moolenaar <Bram@vim.org>
parents: 24355
diff changeset
21 call TestCompilingErrorInTry()
22586
622294200ccd patch 8.2.1841: Vim9: test for compilation error fails in normal build
Bram Moolenaar <Bram@vim.org>
parents: 22584
diff changeset
22 endfunc
622294200ccd patch 8.2.1841: Vim9: test for compilation error fails in normal build
Bram Moolenaar <Bram@vim.org>
parents: 22584
diff changeset
23
622294200ccd patch 8.2.1841: Vim9: test for compilation error fails in normal build
Bram Moolenaar <Bram@vim.org>
parents: 22584
diff changeset
24 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
25 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
26 vim9script
c271498e03b2 patch 8.2.1840: Vim9: error message is not clear about compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22541
diff changeset
27 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
28 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
29 enddef
c271498e03b2 patch 8.2.1840: Vim9: error message is not clear about compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22541
diff changeset
30 defcompile
c271498e03b2 patch 8.2.1840: Vim9: error message is not clear about compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22541
diff changeset
31 END
30209
a970b48c25a3 patch 9.0.0440: crash when using mkdir() with "R" flag in compiled function
Bram Moolenaar <Bram@vim.org>
parents: 30192
diff changeset
32 writefile(lines, 'XTest_compile_error', 'D')
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
33 var buf = g: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
34 {rows: 10, wait_for_ruler: 0})
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
35 g:WaitForAssert(() => assert_match('Error detected while compiling command line.*Fails.*Variable not found: nothing',
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
36 g: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
37
c271498e03b2 patch 8.2.1840: Vim9: error message is not clear about compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22541
diff changeset
38 # clean up
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
39 g:StopVimInTerminal(buf)
24369
a97fb00978f6 patch 8.2.2725: Vim9: message about compiling is wrong when using try/catch
Bram Moolenaar <Bram@vim.org>
parents: 24355
diff changeset
40 enddef
a97fb00978f6 patch 8.2.2725: Vim9: message about compiling is wrong when using try/catch
Bram Moolenaar <Bram@vim.org>
parents: 24355
diff changeset
41
a97fb00978f6 patch 8.2.2725: Vim9: message about compiling is wrong when using try/catch
Bram Moolenaar <Bram@vim.org>
parents: 24355
diff changeset
42 def TestCompilingErrorInTry()
29970
d891115c0aea patch 9.0.0323: using common name in tests leads to flaky tests
Bram Moolenaar <Bram@vim.org>
parents: 29782
diff changeset
43 var dir = 'Xcompdir/autoload'
30209
a970b48c25a3 patch 9.0.0440: crash when using mkdir() with "R" flag in compiled function
Bram Moolenaar <Bram@vim.org>
parents: 30192
diff changeset
44 mkdir(dir, 'pR')
24369
a97fb00978f6 patch 8.2.2725: Vim9: message about compiling is wrong when using try/catch
Bram Moolenaar <Bram@vim.org>
parents: 24355
diff changeset
45
a97fb00978f6 patch 8.2.2725: Vim9: message about compiling is wrong when using try/catch
Bram Moolenaar <Bram@vim.org>
parents: 24355
diff changeset
46 var lines =<< trim END
a97fb00978f6 patch 8.2.2725: Vim9: message about compiling is wrong when using try/catch
Bram Moolenaar <Bram@vim.org>
parents: 24355
diff changeset
47 vim9script
27472
55613f0d59bc patch 8.2.4264: Vim9: can use old style autoload function name
Bram Moolenaar <Bram@vim.org>
parents: 27464
diff changeset
48 export def OnlyCompiled()
24369
a97fb00978f6 patch 8.2.2725: Vim9: message about compiling is wrong when using try/catch
Bram Moolenaar <Bram@vim.org>
parents: 24355
diff changeset
49 g:runtime = 'yes'
a97fb00978f6 patch 8.2.2725: Vim9: message about compiling is wrong when using try/catch
Bram Moolenaar <Bram@vim.org>
parents: 24355
diff changeset
50 invalid
a97fb00978f6 patch 8.2.2725: Vim9: message about compiling is wrong when using try/catch
Bram Moolenaar <Bram@vim.org>
parents: 24355
diff changeset
51 enddef
a97fb00978f6 patch 8.2.2725: Vim9: message about compiling is wrong when using try/catch
Bram Moolenaar <Bram@vim.org>
parents: 24355
diff changeset
52 END
a97fb00978f6 patch 8.2.2725: Vim9: message about compiling is wrong when using try/catch
Bram Moolenaar <Bram@vim.org>
parents: 24355
diff changeset
53 writefile(lines, dir .. '/script.vim')
a97fb00978f6 patch 8.2.2725: Vim9: message about compiling is wrong when using try/catch
Bram Moolenaar <Bram@vim.org>
parents: 24355
diff changeset
54
a97fb00978f6 patch 8.2.2725: Vim9: message about compiling is wrong when using try/catch
Bram Moolenaar <Bram@vim.org>
parents: 24355
diff changeset
55 lines =<< trim END
a97fb00978f6 patch 8.2.2725: Vim9: message about compiling is wrong when using try/catch
Bram Moolenaar <Bram@vim.org>
parents: 24355
diff changeset
56 vim9script
a97fb00978f6 patch 8.2.2725: Vim9: message about compiling is wrong when using try/catch
Bram Moolenaar <Bram@vim.org>
parents: 24355
diff changeset
57 todo
a97fb00978f6 patch 8.2.2725: Vim9: message about compiling is wrong when using try/catch
Bram Moolenaar <Bram@vim.org>
parents: 24355
diff changeset
58 try
a97fb00978f6 patch 8.2.2725: Vim9: message about compiling is wrong when using try/catch
Bram Moolenaar <Bram@vim.org>
parents: 24355
diff changeset
59 script#OnlyCompiled()
a97fb00978f6 patch 8.2.2725: Vim9: message about compiling is wrong when using try/catch
Bram Moolenaar <Bram@vim.org>
parents: 24355
diff changeset
60 catch /nothing/
a97fb00978f6 patch 8.2.2725: Vim9: message about compiling is wrong when using try/catch
Bram Moolenaar <Bram@vim.org>
parents: 24355
diff changeset
61 endtry
a97fb00978f6 patch 8.2.2725: Vim9: message about compiling is wrong when using try/catch
Bram Moolenaar <Bram@vim.org>
parents: 24355
diff changeset
62 END
29970
d891115c0aea patch 9.0.0323: using common name in tests leads to flaky tests
Bram Moolenaar <Bram@vim.org>
parents: 29782
diff changeset
63 lines[1] = 'set rtp=' .. getcwd() .. '/Xcompdir'
30209
a970b48c25a3 patch 9.0.0440: crash when using mkdir() with "R" flag in compiled function
Bram Moolenaar <Bram@vim.org>
parents: 30192
diff changeset
64 writefile(lines, 'XTest_compile_error', 'D')
24369
a97fb00978f6 patch 8.2.2725: Vim9: message about compiling is wrong when using try/catch
Bram Moolenaar <Bram@vim.org>
parents: 24355
diff changeset
65
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
66 var buf = g:RunVimInTerminal('-S XTest_compile_error', {rows: 10, wait_for_ruler: 0})
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
67 g:WaitForAssert(() => assert_match('Error detected while compiling command line.*function script#OnlyCompiled.*Invalid command: invalid',
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
68 g:Term_getlines(buf, range(1, 9))))
24369
a97fb00978f6 patch 8.2.2725: Vim9: message about compiling is wrong when using try/catch
Bram Moolenaar <Bram@vim.org>
parents: 24355
diff changeset
69
a97fb00978f6 patch 8.2.2725: Vim9: message about compiling is wrong when using try/catch
Bram Moolenaar <Bram@vim.org>
parents: 24355
diff changeset
70 # clean up
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
71 g:StopVimInTerminal(buf)
22584
c271498e03b2 patch 8.2.1840: Vim9: error message is not clear about compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22541
diff changeset
72 enddef
c271498e03b2 patch 8.2.1840: Vim9: error message is not clear about compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22541
diff changeset
73
29668
495dc54392fa patch 9.0.0174: no error for using "#{ comment" in a compiled function
Bram Moolenaar <Bram@vim.org>
parents: 29429
diff changeset
74 def Test_comment_error()
495dc54392fa patch 9.0.0174: no error for using "#{ comment" in a compiled function
Bram Moolenaar <Bram@vim.org>
parents: 29429
diff changeset
75 v9.CheckDefFailure(['#{ comment'], 'E1170:')
495dc54392fa patch 9.0.0174: no error for using "#{ comment" in a compiled function
Bram Moolenaar <Bram@vim.org>
parents: 29429
diff changeset
76 enddef
495dc54392fa patch 9.0.0174: no error for using "#{ comment" in a compiled function
Bram Moolenaar <Bram@vim.org>
parents: 29429
diff changeset
77
24854
c9ccb1976049 patch 8.2.2965: Vim9: crash when calling function that failed to compile
Bram Moolenaar <Bram@vim.org>
parents: 24826
diff changeset
78 def Test_compile_error_in_called_function()
c9ccb1976049 patch 8.2.2965: Vim9: crash when calling function that failed to compile
Bram Moolenaar <Bram@vim.org>
parents: 24826
diff changeset
79 var lines =<< trim END
c9ccb1976049 patch 8.2.2965: Vim9: crash when calling function that failed to compile
Bram Moolenaar <Bram@vim.org>
parents: 24826
diff changeset
80 vim9script
c9ccb1976049 patch 8.2.2965: Vim9: crash when calling function that failed to compile
Bram Moolenaar <Bram@vim.org>
parents: 24826
diff changeset
81 var n: number
c9ccb1976049 patch 8.2.2965: Vim9: crash when calling function that failed to compile
Bram Moolenaar <Bram@vim.org>
parents: 24826
diff changeset
82 def Foo()
c9ccb1976049 patch 8.2.2965: Vim9: crash when calling function that failed to compile
Bram Moolenaar <Bram@vim.org>
parents: 24826
diff changeset
83 &hls = n
c9ccb1976049 patch 8.2.2965: Vim9: crash when calling function that failed to compile
Bram Moolenaar <Bram@vim.org>
parents: 24826
diff changeset
84 enddef
c9ccb1976049 patch 8.2.2965: Vim9: crash when calling function that failed to compile
Bram Moolenaar <Bram@vim.org>
parents: 24826
diff changeset
85 def Bar()
c9ccb1976049 patch 8.2.2965: Vim9: crash when calling function that failed to compile
Bram Moolenaar <Bram@vim.org>
parents: 24826
diff changeset
86 Foo()
c9ccb1976049 patch 8.2.2965: Vim9: crash when calling function that failed to compile
Bram Moolenaar <Bram@vim.org>
parents: 24826
diff changeset
87 enddef
c9ccb1976049 patch 8.2.2965: Vim9: crash when calling function that failed to compile
Bram Moolenaar <Bram@vim.org>
parents: 24826
diff changeset
88 silent! Foo()
c9ccb1976049 patch 8.2.2965: Vim9: crash when calling function that failed to compile
Bram Moolenaar <Bram@vim.org>
parents: 24826
diff changeset
89 Bar()
c9ccb1976049 patch 8.2.2965: Vim9: crash when calling function that failed to compile
Bram Moolenaar <Bram@vim.org>
parents: 24826
diff changeset
90 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
91 v9.CheckScriptFailureList(lines, ['E1012:', 'E1191:'])
24854
c9ccb1976049 patch 8.2.2965: Vim9: crash when calling function that failed to compile
Bram Moolenaar <Bram@vim.org>
parents: 24826
diff changeset
92 enddef
c9ccb1976049 patch 8.2.2965: Vim9: crash when calling function that failed to compile
Bram Moolenaar <Bram@vim.org>
parents: 24826
diff changeset
93
24988
494112d2aa93 patch 8.2.3031: no error if a function name starts with an underscore
Bram Moolenaar <Bram@vim.org>
parents: 24890
diff changeset
94 def Test_wrong_function_name()
494112d2aa93 patch 8.2.3031: no error if a function name starts with an underscore
Bram Moolenaar <Bram@vim.org>
parents: 24890
diff changeset
95 var lines =<< trim END
494112d2aa93 patch 8.2.3031: no error if a function name starts with an underscore
Bram Moolenaar <Bram@vim.org>
parents: 24890
diff changeset
96 vim9script
494112d2aa93 patch 8.2.3031: no error if a function name starts with an underscore
Bram Moolenaar <Bram@vim.org>
parents: 24890
diff changeset
97 func _Foo()
494112d2aa93 patch 8.2.3031: no error if a function name starts with an underscore
Bram Moolenaar <Bram@vim.org>
parents: 24890
diff changeset
98 echo 'foo'
494112d2aa93 patch 8.2.3031: no error if a function name starts with an underscore
Bram Moolenaar <Bram@vim.org>
parents: 24890
diff changeset
99 endfunc
494112d2aa93 patch 8.2.3031: no error if a function name starts with an underscore
Bram Moolenaar <Bram@vim.org>
parents: 24890
diff changeset
100 END
27595
d504745607bc patch 8.2.4324: Vim9: script-local function name can start with "_"
Bram Moolenaar <Bram@vim.org>
parents: 27593
diff changeset
101 v9.CheckScriptFailure(lines, 'E1267:')
24988
494112d2aa93 patch 8.2.3031: no error if a function name starts with an underscore
Bram Moolenaar <Bram@vim.org>
parents: 24890
diff changeset
102
494112d2aa93 patch 8.2.3031: no error if a function name starts with an underscore
Bram Moolenaar <Bram@vim.org>
parents: 24890
diff changeset
103 lines =<< trim END
494112d2aa93 patch 8.2.3031: no error if a function name starts with an underscore
Bram Moolenaar <Bram@vim.org>
parents: 24890
diff changeset
104 vim9script
494112d2aa93 patch 8.2.3031: no error if a function name starts with an underscore
Bram Moolenaar <Bram@vim.org>
parents: 24890
diff changeset
105 def _Foo()
494112d2aa93 patch 8.2.3031: no error if a function name starts with an underscore
Bram Moolenaar <Bram@vim.org>
parents: 24890
diff changeset
106 echo 'foo'
494112d2aa93 patch 8.2.3031: no error if a function name starts with an underscore
Bram Moolenaar <Bram@vim.org>
parents: 24890
diff changeset
107 enddef
494112d2aa93 patch 8.2.3031: no error if a function name starts with an underscore
Bram Moolenaar <Bram@vim.org>
parents: 24890
diff changeset
108 END
27595
d504745607bc patch 8.2.4324: Vim9: script-local function name can start with "_"
Bram Moolenaar <Bram@vim.org>
parents: 27593
diff changeset
109 v9.CheckScriptFailure(lines, 'E1267:')
27869
6a0ecde89d35 patch 8.2.4460: Vim9: wrong error for defining dict function
Bram Moolenaar <Bram@vim.org>
parents: 27798
diff changeset
110
6a0ecde89d35 patch 8.2.4460: Vim9: wrong error for defining dict function
Bram Moolenaar <Bram@vim.org>
parents: 27798
diff changeset
111 lines =<< trim END
6a0ecde89d35 patch 8.2.4460: Vim9: wrong error for defining dict function
Bram Moolenaar <Bram@vim.org>
parents: 27798
diff changeset
112 vim9script
6a0ecde89d35 patch 8.2.4460: Vim9: wrong error for defining dict function
Bram Moolenaar <Bram@vim.org>
parents: 27798
diff changeset
113 var Object = {}
6a0ecde89d35 patch 8.2.4460: Vim9: wrong error for defining dict function
Bram Moolenaar <Bram@vim.org>
parents: 27798
diff changeset
114 function Object.Method()
6a0ecde89d35 patch 8.2.4460: Vim9: wrong error for defining dict function
Bram Moolenaar <Bram@vim.org>
parents: 27798
diff changeset
115 endfunction
6a0ecde89d35 patch 8.2.4460: Vim9: wrong error for defining dict function
Bram Moolenaar <Bram@vim.org>
parents: 27798
diff changeset
116 END
6a0ecde89d35 patch 8.2.4460: Vim9: wrong error for defining dict function
Bram Moolenaar <Bram@vim.org>
parents: 27798
diff changeset
117 v9.CheckScriptFailure(lines, 'E1182:')
6a0ecde89d35 patch 8.2.4460: Vim9: wrong error for defining dict function
Bram Moolenaar <Bram@vim.org>
parents: 27798
diff changeset
118
6a0ecde89d35 patch 8.2.4460: Vim9: wrong error for defining dict function
Bram Moolenaar <Bram@vim.org>
parents: 27798
diff changeset
119 lines =<< trim END
6a0ecde89d35 patch 8.2.4460: Vim9: wrong error for defining dict function
Bram Moolenaar <Bram@vim.org>
parents: 27798
diff changeset
120 vim9script
6a0ecde89d35 patch 8.2.4460: Vim9: wrong error for defining dict function
Bram Moolenaar <Bram@vim.org>
parents: 27798
diff changeset
121 var Object = {}
6a0ecde89d35 patch 8.2.4460: Vim9: wrong error for defining dict function
Bram Moolenaar <Bram@vim.org>
parents: 27798
diff changeset
122 def Object.Method()
6a0ecde89d35 patch 8.2.4460: Vim9: wrong error for defining dict function
Bram Moolenaar <Bram@vim.org>
parents: 27798
diff changeset
123 enddef
6a0ecde89d35 patch 8.2.4460: Vim9: wrong error for defining dict function
Bram Moolenaar <Bram@vim.org>
parents: 27798
diff changeset
124 END
6a0ecde89d35 patch 8.2.4460: Vim9: wrong error for defining dict function
Bram Moolenaar <Bram@vim.org>
parents: 27798
diff changeset
125 v9.CheckScriptFailure(lines, 'E1182:')
6a0ecde89d35 patch 8.2.4460: Vim9: wrong error for defining dict function
Bram Moolenaar <Bram@vim.org>
parents: 27798
diff changeset
126
6a0ecde89d35 patch 8.2.4460: Vim9: wrong error for defining dict function
Bram Moolenaar <Bram@vim.org>
parents: 27798
diff changeset
127 lines =<< trim END
6a0ecde89d35 patch 8.2.4460: Vim9: wrong error for defining dict function
Bram Moolenaar <Bram@vim.org>
parents: 27798
diff changeset
128 vim9script
6a0ecde89d35 patch 8.2.4460: Vim9: wrong error for defining dict function
Bram Moolenaar <Bram@vim.org>
parents: 27798
diff changeset
129 g:Object = {}
6a0ecde89d35 patch 8.2.4460: Vim9: wrong error for defining dict function
Bram Moolenaar <Bram@vim.org>
parents: 27798
diff changeset
130 function g:Object.Method()
6a0ecde89d35 patch 8.2.4460: Vim9: wrong error for defining dict function
Bram Moolenaar <Bram@vim.org>
parents: 27798
diff changeset
131 endfunction
6a0ecde89d35 patch 8.2.4460: Vim9: wrong error for defining dict function
Bram Moolenaar <Bram@vim.org>
parents: 27798
diff changeset
132 END
6a0ecde89d35 patch 8.2.4460: Vim9: wrong error for defining dict function
Bram Moolenaar <Bram@vim.org>
parents: 27798
diff changeset
133 v9.CheckScriptFailure(lines, 'E1182:')
6a0ecde89d35 patch 8.2.4460: Vim9: wrong error for defining dict function
Bram Moolenaar <Bram@vim.org>
parents: 27798
diff changeset
134
6a0ecde89d35 patch 8.2.4460: Vim9: wrong error for defining dict function
Bram Moolenaar <Bram@vim.org>
parents: 27798
diff changeset
135 lines =<< trim END
6a0ecde89d35 patch 8.2.4460: Vim9: wrong error for defining dict function
Bram Moolenaar <Bram@vim.org>
parents: 27798
diff changeset
136 let s:Object = {}
6a0ecde89d35 patch 8.2.4460: Vim9: wrong error for defining dict function
Bram Moolenaar <Bram@vim.org>
parents: 27798
diff changeset
137 def Define()
6a0ecde89d35 patch 8.2.4460: Vim9: wrong error for defining dict function
Bram Moolenaar <Bram@vim.org>
parents: 27798
diff changeset
138 function s:Object.Method()
6a0ecde89d35 patch 8.2.4460: Vim9: wrong error for defining dict function
Bram Moolenaar <Bram@vim.org>
parents: 27798
diff changeset
139 endfunction
6a0ecde89d35 patch 8.2.4460: Vim9: wrong error for defining dict function
Bram Moolenaar <Bram@vim.org>
parents: 27798
diff changeset
140 enddef
6a0ecde89d35 patch 8.2.4460: Vim9: wrong error for defining dict function
Bram Moolenaar <Bram@vim.org>
parents: 27798
diff changeset
141 defcompile
6a0ecde89d35 patch 8.2.4460: Vim9: wrong error for defining dict function
Bram Moolenaar <Bram@vim.org>
parents: 27798
diff changeset
142 END
6a0ecde89d35 patch 8.2.4460: Vim9: wrong error for defining dict function
Bram Moolenaar <Bram@vim.org>
parents: 27798
diff changeset
143 v9.CheckScriptFailure(lines, 'E1182:')
6a0ecde89d35 patch 8.2.4460: Vim9: wrong error for defining dict function
Bram Moolenaar <Bram@vim.org>
parents: 27798
diff changeset
144 delfunc g:Define
6a0ecde89d35 patch 8.2.4460: Vim9: wrong error for defining dict function
Bram Moolenaar <Bram@vim.org>
parents: 27798
diff changeset
145
6a0ecde89d35 patch 8.2.4460: Vim9: wrong error for defining dict function
Bram Moolenaar <Bram@vim.org>
parents: 27798
diff changeset
146 lines =<< trim END
6a0ecde89d35 patch 8.2.4460: Vim9: wrong error for defining dict function
Bram Moolenaar <Bram@vim.org>
parents: 27798
diff changeset
147 let s:Object = {}
6a0ecde89d35 patch 8.2.4460: Vim9: wrong error for defining dict function
Bram Moolenaar <Bram@vim.org>
parents: 27798
diff changeset
148 def Define()
6a0ecde89d35 patch 8.2.4460: Vim9: wrong error for defining dict function
Bram Moolenaar <Bram@vim.org>
parents: 27798
diff changeset
149 def Object.Method()
6a0ecde89d35 patch 8.2.4460: Vim9: wrong error for defining dict function
Bram Moolenaar <Bram@vim.org>
parents: 27798
diff changeset
150 enddef
6a0ecde89d35 patch 8.2.4460: Vim9: wrong error for defining dict function
Bram Moolenaar <Bram@vim.org>
parents: 27798
diff changeset
151 enddef
6a0ecde89d35 patch 8.2.4460: Vim9: wrong error for defining dict function
Bram Moolenaar <Bram@vim.org>
parents: 27798
diff changeset
152 defcompile
6a0ecde89d35 patch 8.2.4460: Vim9: wrong error for defining dict function
Bram Moolenaar <Bram@vim.org>
parents: 27798
diff changeset
153 END
6a0ecde89d35 patch 8.2.4460: Vim9: wrong error for defining dict function
Bram Moolenaar <Bram@vim.org>
parents: 27798
diff changeset
154 v9.CheckScriptFailure(lines, 'E1182:')
6a0ecde89d35 patch 8.2.4460: Vim9: wrong error for defining dict function
Bram Moolenaar <Bram@vim.org>
parents: 27798
diff changeset
155 delfunc g:Define
6a0ecde89d35 patch 8.2.4460: Vim9: wrong error for defining dict function
Bram Moolenaar <Bram@vim.org>
parents: 27798
diff changeset
156
6a0ecde89d35 patch 8.2.4460: Vim9: wrong error for defining dict function
Bram Moolenaar <Bram@vim.org>
parents: 27798
diff changeset
157 lines =<< trim END
6a0ecde89d35 patch 8.2.4460: Vim9: wrong error for defining dict function
Bram Moolenaar <Bram@vim.org>
parents: 27798
diff changeset
158 let g:Object = {}
6a0ecde89d35 patch 8.2.4460: Vim9: wrong error for defining dict function
Bram Moolenaar <Bram@vim.org>
parents: 27798
diff changeset
159 def Define()
6a0ecde89d35 patch 8.2.4460: Vim9: wrong error for defining dict function
Bram Moolenaar <Bram@vim.org>
parents: 27798
diff changeset
160 function g:Object.Method()
6a0ecde89d35 patch 8.2.4460: Vim9: wrong error for defining dict function
Bram Moolenaar <Bram@vim.org>
parents: 27798
diff changeset
161 endfunction
6a0ecde89d35 patch 8.2.4460: Vim9: wrong error for defining dict function
Bram Moolenaar <Bram@vim.org>
parents: 27798
diff changeset
162 enddef
6a0ecde89d35 patch 8.2.4460: Vim9: wrong error for defining dict function
Bram Moolenaar <Bram@vim.org>
parents: 27798
diff changeset
163 defcompile
6a0ecde89d35 patch 8.2.4460: Vim9: wrong error for defining dict function
Bram Moolenaar <Bram@vim.org>
parents: 27798
diff changeset
164 END
6a0ecde89d35 patch 8.2.4460: Vim9: wrong error for defining dict function
Bram Moolenaar <Bram@vim.org>
parents: 27798
diff changeset
165 v9.CheckScriptFailure(lines, 'E1182:')
6a0ecde89d35 patch 8.2.4460: Vim9: wrong error for defining dict function
Bram Moolenaar <Bram@vim.org>
parents: 27798
diff changeset
166 delfunc g:Define
24988
494112d2aa93 patch 8.2.3031: no error if a function name starts with an underscore
Bram Moolenaar <Bram@vim.org>
parents: 24890
diff changeset
167 enddef
494112d2aa93 patch 8.2.3031: no error if a function name starts with an underscore
Bram Moolenaar <Bram@vim.org>
parents: 24890
diff changeset
168
24436
ccdd5e9a3763 patch 8.2.2758: Vim9: wrong line number for autoload function with wrong name
Bram Moolenaar <Bram@vim.org>
parents: 24420
diff changeset
169 def Test_autoload_name_mismatch()
29970
d891115c0aea patch 9.0.0323: using common name in tests leads to flaky tests
Bram Moolenaar <Bram@vim.org>
parents: 29782
diff changeset
170 var dir = 'Xnamedir/autoload'
30209
a970b48c25a3 patch 9.0.0440: crash when using mkdir() with "R" flag in compiled function
Bram Moolenaar <Bram@vim.org>
parents: 30192
diff changeset
171 mkdir(dir, 'pR')
24436
ccdd5e9a3763 patch 8.2.2758: Vim9: wrong line number for autoload function with wrong name
Bram Moolenaar <Bram@vim.org>
parents: 24420
diff changeset
172
ccdd5e9a3763 patch 8.2.2758: Vim9: wrong line number for autoload function with wrong name
Bram Moolenaar <Bram@vim.org>
parents: 24420
diff changeset
173 var lines =<< trim END
ccdd5e9a3763 patch 8.2.2758: Vim9: wrong line number for autoload function with wrong name
Bram Moolenaar <Bram@vim.org>
parents: 24420
diff changeset
174 vim9script
27472
55613f0d59bc patch 8.2.4264: Vim9: can use old style autoload function name
Bram Moolenaar <Bram@vim.org>
parents: 27464
diff changeset
175 export def NoFunction()
24436
ccdd5e9a3763 patch 8.2.2758: Vim9: wrong line number for autoload function with wrong name
Bram Moolenaar <Bram@vim.org>
parents: 24420
diff changeset
176 # comment
ccdd5e9a3763 patch 8.2.2758: Vim9: wrong line number for autoload function with wrong name
Bram Moolenaar <Bram@vim.org>
parents: 24420
diff changeset
177 g:runtime = 'yes'
ccdd5e9a3763 patch 8.2.2758: Vim9: wrong line number for autoload function with wrong name
Bram Moolenaar <Bram@vim.org>
parents: 24420
diff changeset
178 enddef
ccdd5e9a3763 patch 8.2.2758: Vim9: wrong line number for autoload function with wrong name
Bram Moolenaar <Bram@vim.org>
parents: 24420
diff changeset
179 END
ccdd5e9a3763 patch 8.2.2758: Vim9: wrong line number for autoload function with wrong name
Bram Moolenaar <Bram@vim.org>
parents: 24420
diff changeset
180 writefile(lines, dir .. '/script.vim')
ccdd5e9a3763 patch 8.2.2758: Vim9: wrong line number for autoload function with wrong name
Bram Moolenaar <Bram@vim.org>
parents: 24420
diff changeset
181
ccdd5e9a3763 patch 8.2.2758: Vim9: wrong line number for autoload function with wrong name
Bram Moolenaar <Bram@vim.org>
parents: 24420
diff changeset
182 var save_rtp = &rtp
29970
d891115c0aea patch 9.0.0323: using common name in tests leads to flaky tests
Bram Moolenaar <Bram@vim.org>
parents: 29782
diff changeset
183 exe 'set rtp=' .. getcwd() .. '/Xnamedir'
24436
ccdd5e9a3763 patch 8.2.2758: Vim9: wrong line number for autoload function with wrong name
Bram Moolenaar <Bram@vim.org>
parents: 24420
diff changeset
184 lines =<< trim END
ccdd5e9a3763 patch 8.2.2758: Vim9: wrong line number for autoload function with wrong name
Bram Moolenaar <Bram@vim.org>
parents: 24420
diff changeset
185 call script#Function()
ccdd5e9a3763 patch 8.2.2758: Vim9: wrong line number for autoload function with wrong name
Bram Moolenaar <Bram@vim.org>
parents: 24420
diff changeset
186 END
27472
55613f0d59bc patch 8.2.4264: Vim9: can use old style autoload function name
Bram Moolenaar <Bram@vim.org>
parents: 27464
diff changeset
187 v9.CheckScriptFailure(lines, 'E117:', 1)
24436
ccdd5e9a3763 patch 8.2.2758: Vim9: wrong line number for autoload function with wrong name
Bram Moolenaar <Bram@vim.org>
parents: 24420
diff changeset
188
ccdd5e9a3763 patch 8.2.2758: Vim9: wrong line number for autoload function with wrong name
Bram Moolenaar <Bram@vim.org>
parents: 24420
diff changeset
189 &rtp = save_rtp
ccdd5e9a3763 patch 8.2.2758: Vim9: wrong line number for autoload function with wrong name
Bram Moolenaar <Bram@vim.org>
parents: 24420
diff changeset
190 enddef
ccdd5e9a3763 patch 8.2.2758: Vim9: wrong line number for autoload function with wrong name
Bram Moolenaar <Bram@vim.org>
parents: 24420
diff changeset
191
24874
14b0b35d8488 patch 8.2.2975: Vim9: can only use an autoload function name as a string
Bram Moolenaar <Bram@vim.org>
parents: 24858
diff changeset
192 def Test_autoload_names()
29970
d891115c0aea patch 9.0.0323: using common name in tests leads to flaky tests
Bram Moolenaar <Bram@vim.org>
parents: 29782
diff changeset
193 var dir = 'Xandir/autoload'
30209
a970b48c25a3 patch 9.0.0440: crash when using mkdir() with "R" flag in compiled function
Bram Moolenaar <Bram@vim.org>
parents: 30192
diff changeset
194 mkdir(dir, 'pR')
24874
14b0b35d8488 patch 8.2.2975: Vim9: can only use an autoload function name as a string
Bram Moolenaar <Bram@vim.org>
parents: 24858
diff changeset
195
14b0b35d8488 patch 8.2.2975: Vim9: can only use an autoload function name as a string
Bram Moolenaar <Bram@vim.org>
parents: 24858
diff changeset
196 var lines =<< trim END
14b0b35d8488 patch 8.2.2975: Vim9: can only use an autoload function name as a string
Bram Moolenaar <Bram@vim.org>
parents: 24858
diff changeset
197 func foobar#function()
14b0b35d8488 patch 8.2.2975: Vim9: can only use an autoload function name as a string
Bram Moolenaar <Bram@vim.org>
parents: 24858
diff changeset
198 return 'yes'
14b0b35d8488 patch 8.2.2975: Vim9: can only use an autoload function name as a string
Bram Moolenaar <Bram@vim.org>
parents: 24858
diff changeset
199 endfunc
14b0b35d8488 patch 8.2.2975: Vim9: can only use an autoload function name as a string
Bram Moolenaar <Bram@vim.org>
parents: 24858
diff changeset
200 let foobar#var = 'no'
14b0b35d8488 patch 8.2.2975: Vim9: can only use an autoload function name as a string
Bram Moolenaar <Bram@vim.org>
parents: 24858
diff changeset
201 END
14b0b35d8488 patch 8.2.2975: Vim9: can only use an autoload function name as a string
Bram Moolenaar <Bram@vim.org>
parents: 24858
diff changeset
202 writefile(lines, dir .. '/foobar.vim')
14b0b35d8488 patch 8.2.2975: Vim9: can only use an autoload function name as a string
Bram Moolenaar <Bram@vim.org>
parents: 24858
diff changeset
203
14b0b35d8488 patch 8.2.2975: Vim9: can only use an autoload function name as a string
Bram Moolenaar <Bram@vim.org>
parents: 24858
diff changeset
204 var save_rtp = &rtp
29970
d891115c0aea patch 9.0.0323: using common name in tests leads to flaky tests
Bram Moolenaar <Bram@vim.org>
parents: 29782
diff changeset
205 exe 'set rtp=' .. getcwd() .. '/Xandir'
24874
14b0b35d8488 patch 8.2.2975: Vim9: can only use an autoload function name as a string
Bram Moolenaar <Bram@vim.org>
parents: 24858
diff changeset
206
14b0b35d8488 patch 8.2.2975: Vim9: can only use an autoload function name as a string
Bram Moolenaar <Bram@vim.org>
parents: 24858
diff changeset
207 lines =<< trim END
14b0b35d8488 patch 8.2.2975: Vim9: can only use an autoload function name as a string
Bram Moolenaar <Bram@vim.org>
parents: 24858
diff changeset
208 assert_equal('yes', foobar#function())
14b0b35d8488 patch 8.2.2975: Vim9: can only use an autoload function name as a string
Bram Moolenaar <Bram@vim.org>
parents: 24858
diff changeset
209 var Function = foobar#function
14b0b35d8488 patch 8.2.2975: Vim9: can only use an autoload function name as a string
Bram Moolenaar <Bram@vim.org>
parents: 24858
diff changeset
210 assert_equal('yes', Function())
14b0b35d8488 patch 8.2.2975: Vim9: can only use an autoload function name as a string
Bram Moolenaar <Bram@vim.org>
parents: 24858
diff changeset
211
14b0b35d8488 patch 8.2.2975: Vim9: can only use an autoload function name as a string
Bram Moolenaar <Bram@vim.org>
parents: 24858
diff changeset
212 assert_equal('no', foobar#var)
14b0b35d8488 patch 8.2.2975: Vim9: can only use an autoload function name as a string
Bram Moolenaar <Bram@vim.org>
parents: 24858
diff changeset
213 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
214 v9.CheckDefAndScriptSuccess(lines)
24874
14b0b35d8488 patch 8.2.2975: Vim9: can only use an autoload function name as a string
Bram Moolenaar <Bram@vim.org>
parents: 24858
diff changeset
215
14b0b35d8488 patch 8.2.2975: Vim9: can only use an autoload function name as a string
Bram Moolenaar <Bram@vim.org>
parents: 24858
diff changeset
216 &rtp = save_rtp
14b0b35d8488 patch 8.2.2975: Vim9: can only use an autoload function name as a string
Bram Moolenaar <Bram@vim.org>
parents: 24858
diff changeset
217 enddef
14b0b35d8488 patch 8.2.2975: Vim9: can only use an autoload function name as a string
Bram Moolenaar <Bram@vim.org>
parents: 24858
diff changeset
218
25609
f8bcd21e6e24 patch 8.2.3341: Vim9: function call aborted despite try/catch
Bram Moolenaar <Bram@vim.org>
parents: 25579
diff changeset
219 def Test_autoload_error_in_script()
29970
d891115c0aea patch 9.0.0323: using common name in tests leads to flaky tests
Bram Moolenaar <Bram@vim.org>
parents: 29782
diff changeset
220 var dir = 'Xaedir/autoload'
30209
a970b48c25a3 patch 9.0.0440: crash when using mkdir() with "R" flag in compiled function
Bram Moolenaar <Bram@vim.org>
parents: 30192
diff changeset
221 mkdir(dir, 'pR')
25609
f8bcd21e6e24 patch 8.2.3341: Vim9: function call aborted despite try/catch
Bram Moolenaar <Bram@vim.org>
parents: 25579
diff changeset
222
f8bcd21e6e24 patch 8.2.3341: Vim9: function call aborted despite try/catch
Bram Moolenaar <Bram@vim.org>
parents: 25579
diff changeset
223 var lines =<< trim END
f8bcd21e6e24 patch 8.2.3341: Vim9: function call aborted despite try/catch
Bram Moolenaar <Bram@vim.org>
parents: 25579
diff changeset
224 func scripterror#function()
f8bcd21e6e24 patch 8.2.3341: Vim9: function call aborted despite try/catch
Bram Moolenaar <Bram@vim.org>
parents: 25579
diff changeset
225 let g:called_function = 'yes'
f8bcd21e6e24 patch 8.2.3341: Vim9: function call aborted despite try/catch
Bram Moolenaar <Bram@vim.org>
parents: 25579
diff changeset
226 endfunc
f8bcd21e6e24 patch 8.2.3341: Vim9: function call aborted despite try/catch
Bram Moolenaar <Bram@vim.org>
parents: 25579
diff changeset
227 let 0 = 1
f8bcd21e6e24 patch 8.2.3341: Vim9: function call aborted despite try/catch
Bram Moolenaar <Bram@vim.org>
parents: 25579
diff changeset
228 END
f8bcd21e6e24 patch 8.2.3341: Vim9: function call aborted despite try/catch
Bram Moolenaar <Bram@vim.org>
parents: 25579
diff changeset
229 writefile(lines, dir .. '/scripterror.vim')
f8bcd21e6e24 patch 8.2.3341: Vim9: function call aborted despite try/catch
Bram Moolenaar <Bram@vim.org>
parents: 25579
diff changeset
230
f8bcd21e6e24 patch 8.2.3341: Vim9: function call aborted despite try/catch
Bram Moolenaar <Bram@vim.org>
parents: 25579
diff changeset
231 var save_rtp = &rtp
29970
d891115c0aea patch 9.0.0323: using common name in tests leads to flaky tests
Bram Moolenaar <Bram@vim.org>
parents: 29782
diff changeset
232 exe 'set rtp=' .. getcwd() .. '/Xaedir'
25609
f8bcd21e6e24 patch 8.2.3341: Vim9: function call aborted despite try/catch
Bram Moolenaar <Bram@vim.org>
parents: 25579
diff changeset
233
f8bcd21e6e24 patch 8.2.3341: Vim9: function call aborted despite try/catch
Bram Moolenaar <Bram@vim.org>
parents: 25579
diff changeset
234 g:called_function = 'no'
f8bcd21e6e24 patch 8.2.3341: Vim9: function call aborted despite try/catch
Bram Moolenaar <Bram@vim.org>
parents: 25579
diff changeset
235 # The error in the autoload script cannot be checked with assert_fails(), use
f8bcd21e6e24 patch 8.2.3341: Vim9: function call aborted despite try/catch
Bram Moolenaar <Bram@vim.org>
parents: 25579
diff changeset
236 # CheckDefSuccess() instead of CheckDefFailure()
f8bcd21e6e24 patch 8.2.3341: Vim9: function call aborted despite try/catch
Bram Moolenaar <Bram@vim.org>
parents: 25579
diff changeset
237 try
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
238 v9.CheckDefSuccess(['scripterror#function()'])
25609
f8bcd21e6e24 patch 8.2.3341: Vim9: function call aborted despite try/catch
Bram Moolenaar <Bram@vim.org>
parents: 25579
diff changeset
239 catch
f8bcd21e6e24 patch 8.2.3341: Vim9: function call aborted despite try/catch
Bram Moolenaar <Bram@vim.org>
parents: 25579
diff changeset
240 assert_match('E121: Undefined variable: 0', v:exception)
f8bcd21e6e24 patch 8.2.3341: Vim9: function call aborted despite try/catch
Bram Moolenaar <Bram@vim.org>
parents: 25579
diff changeset
241 endtry
f8bcd21e6e24 patch 8.2.3341: Vim9: function call aborted despite try/catch
Bram Moolenaar <Bram@vim.org>
parents: 25579
diff changeset
242 assert_equal('no', g:called_function)
f8bcd21e6e24 patch 8.2.3341: Vim9: function call aborted despite try/catch
Bram Moolenaar <Bram@vim.org>
parents: 25579
diff changeset
243
f8bcd21e6e24 patch 8.2.3341: Vim9: function call aborted despite try/catch
Bram Moolenaar <Bram@vim.org>
parents: 25579
diff changeset
244 lines =<< trim END
f8bcd21e6e24 patch 8.2.3341: Vim9: function call aborted despite try/catch
Bram Moolenaar <Bram@vim.org>
parents: 25579
diff changeset
245 func scriptcaught#function()
f8bcd21e6e24 patch 8.2.3341: Vim9: function call aborted despite try/catch
Bram Moolenaar <Bram@vim.org>
parents: 25579
diff changeset
246 let g:called_function = 'yes'
f8bcd21e6e24 patch 8.2.3341: Vim9: function call aborted despite try/catch
Bram Moolenaar <Bram@vim.org>
parents: 25579
diff changeset
247 endfunc
f8bcd21e6e24 patch 8.2.3341: Vim9: function call aborted despite try/catch
Bram Moolenaar <Bram@vim.org>
parents: 25579
diff changeset
248 try
f8bcd21e6e24 patch 8.2.3341: Vim9: function call aborted despite try/catch
Bram Moolenaar <Bram@vim.org>
parents: 25579
diff changeset
249 let 0 = 1
f8bcd21e6e24 patch 8.2.3341: Vim9: function call aborted despite try/catch
Bram Moolenaar <Bram@vim.org>
parents: 25579
diff changeset
250 catch
f8bcd21e6e24 patch 8.2.3341: Vim9: function call aborted despite try/catch
Bram Moolenaar <Bram@vim.org>
parents: 25579
diff changeset
251 let g:caught = v:exception
f8bcd21e6e24 patch 8.2.3341: Vim9: function call aborted despite try/catch
Bram Moolenaar <Bram@vim.org>
parents: 25579
diff changeset
252 endtry
f8bcd21e6e24 patch 8.2.3341: Vim9: function call aborted despite try/catch
Bram Moolenaar <Bram@vim.org>
parents: 25579
diff changeset
253 END
f8bcd21e6e24 patch 8.2.3341: Vim9: function call aborted despite try/catch
Bram Moolenaar <Bram@vim.org>
parents: 25579
diff changeset
254 writefile(lines, dir .. '/scriptcaught.vim')
f8bcd21e6e24 patch 8.2.3341: Vim9: function call aborted despite try/catch
Bram Moolenaar <Bram@vim.org>
parents: 25579
diff changeset
255
f8bcd21e6e24 patch 8.2.3341: Vim9: function call aborted despite try/catch
Bram Moolenaar <Bram@vim.org>
parents: 25579
diff changeset
256 g:called_function = 'no'
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
257 v9.CheckDefSuccess(['scriptcaught#function()'])
25609
f8bcd21e6e24 patch 8.2.3341: Vim9: function call aborted despite try/catch
Bram Moolenaar <Bram@vim.org>
parents: 25579
diff changeset
258 assert_match('E121: Undefined variable: 0', g:caught)
f8bcd21e6e24 patch 8.2.3341: Vim9: function call aborted despite try/catch
Bram Moolenaar <Bram@vim.org>
parents: 25579
diff changeset
259 assert_equal('yes', g:called_function)
f8bcd21e6e24 patch 8.2.3341: Vim9: function call aborted despite try/catch
Bram Moolenaar <Bram@vim.org>
parents: 25579
diff changeset
260
f8bcd21e6e24 patch 8.2.3341: Vim9: function call aborted despite try/catch
Bram Moolenaar <Bram@vim.org>
parents: 25579
diff changeset
261 &rtp = save_rtp
f8bcd21e6e24 patch 8.2.3341: Vim9: function call aborted despite try/catch
Bram Moolenaar <Bram@vim.org>
parents: 25579
diff changeset
262 enddef
f8bcd21e6e24 patch 8.2.3341: Vim9: function call aborted despite try/catch
Bram Moolenaar <Bram@vim.org>
parents: 25579
diff changeset
263
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
264 def s:CallRecursive(n: number): number
22908
54219df706b5 patch 8.2.2001: Vim9: :def function does not apply 'maxfuncdepth'
Bram Moolenaar <Bram@vim.org>
parents: 22816
diff changeset
265 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
266 enddef
54219df706b5 patch 8.2.2001: Vim9: :def function does not apply 'maxfuncdepth'
Bram Moolenaar <Bram@vim.org>
parents: 22816
diff changeset
267
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
268 def s: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
269 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
270 enddef
54219df706b5 patch 8.2.2001: Vim9: :def function does not apply 'maxfuncdepth'
Bram Moolenaar <Bram@vim.org>
parents: 22816
diff changeset
271
54219df706b5 patch 8.2.2001: Vim9: :def function does not apply 'maxfuncdepth'
Bram Moolenaar <Bram@vim.org>
parents: 22816
diff changeset
272 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
273 set maxfuncdepth=10
54219df706b5 patch 8.2.2001: Vim9: :def function does not apply 'maxfuncdepth'
Bram Moolenaar <Bram@vim.org>
parents: 22816
diff changeset
274
54219df706b5 patch 8.2.2001: Vim9: :def function does not apply 'maxfuncdepth'
Bram Moolenaar <Bram@vim.org>
parents: 22816
diff changeset
275 var caught = false
54219df706b5 patch 8.2.2001: Vim9: :def function does not apply 'maxfuncdepth'
Bram Moolenaar <Bram@vim.org>
parents: 22816
diff changeset
276 try
54219df706b5 patch 8.2.2001: Vim9: :def function does not apply 'maxfuncdepth'
Bram Moolenaar <Bram@vim.org>
parents: 22816
diff changeset
277 CallRecursive(1)
54219df706b5 patch 8.2.2001: Vim9: :def function does not apply 'maxfuncdepth'
Bram Moolenaar <Bram@vim.org>
parents: 22816
diff changeset
278 catch /E132:/
54219df706b5 patch 8.2.2001: Vim9: :def function does not apply 'maxfuncdepth'
Bram Moolenaar <Bram@vim.org>
parents: 22816
diff changeset
279 caught = true
54219df706b5 patch 8.2.2001: Vim9: :def function does not apply 'maxfuncdepth'
Bram Moolenaar <Bram@vim.org>
parents: 22816
diff changeset
280 endtry
54219df706b5 patch 8.2.2001: Vim9: :def function does not apply 'maxfuncdepth'
Bram Moolenaar <Bram@vim.org>
parents: 22816
diff changeset
281 assert_true(caught)
54219df706b5 patch 8.2.2001: Vim9: :def function does not apply 'maxfuncdepth'
Bram Moolenaar <Bram@vim.org>
parents: 22816
diff changeset
282
54219df706b5 patch 8.2.2001: Vim9: :def function does not apply 'maxfuncdepth'
Bram Moolenaar <Bram@vim.org>
parents: 22816
diff changeset
283 caught = false
54219df706b5 patch 8.2.2001: Vim9: :def function does not apply 'maxfuncdepth'
Bram Moolenaar <Bram@vim.org>
parents: 22816
diff changeset
284 try
54219df706b5 patch 8.2.2001: Vim9: :def function does not apply 'maxfuncdepth'
Bram Moolenaar <Bram@vim.org>
parents: 22816
diff changeset
285 CallMapRecursive([1])
54219df706b5 patch 8.2.2001: Vim9: :def function does not apply 'maxfuncdepth'
Bram Moolenaar <Bram@vim.org>
parents: 22816
diff changeset
286 catch /E132:/
54219df706b5 patch 8.2.2001: Vim9: :def function does not apply 'maxfuncdepth'
Bram Moolenaar <Bram@vim.org>
parents: 22816
diff changeset
287 caught = true
54219df706b5 patch 8.2.2001: Vim9: :def function does not apply 'maxfuncdepth'
Bram Moolenaar <Bram@vim.org>
parents: 22816
diff changeset
288 endtry
54219df706b5 patch 8.2.2001: Vim9: :def function does not apply 'maxfuncdepth'
Bram Moolenaar <Bram@vim.org>
parents: 22816
diff changeset
289 assert_true(caught)
54219df706b5 patch 8.2.2001: Vim9: :def function does not apply 'maxfuncdepth'
Bram Moolenaar <Bram@vim.org>
parents: 22816
diff changeset
290
54219df706b5 patch 8.2.2001: Vim9: :def function does not apply 'maxfuncdepth'
Bram Moolenaar <Bram@vim.org>
parents: 22816
diff changeset
291 set maxfuncdepth&
54219df706b5 patch 8.2.2001: Vim9: :def function does not apply 'maxfuncdepth'
Bram Moolenaar <Bram@vim.org>
parents: 22816
diff changeset
292 enddef
54219df706b5 patch 8.2.2001: Vim9: :def function does not apply 'maxfuncdepth'
Bram Moolenaar <Bram@vim.org>
parents: 22816
diff changeset
293
23442
f00d6ff51046 patch 8.2.2264: Vim9: no error for mismatched :endfunc or :enddef
Bram Moolenaar <Bram@vim.org>
parents: 23428
diff changeset
294 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
295 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
296 def Test()
f00d6ff51046 patch 8.2.2264: Vim9: no error for mismatched :endfunc or :enddef
Bram Moolenaar <Bram@vim.org>
parents: 23428
diff changeset
297 echo 'test'
f00d6ff51046 patch 8.2.2264: Vim9: no error for mismatched :endfunc or :enddef
Bram Moolenaar <Bram@vim.org>
parents: 23428
diff changeset
298 endfunc
f00d6ff51046 patch 8.2.2264: Vim9: no error for mismatched :endfunc or :enddef
Bram Moolenaar <Bram@vim.org>
parents: 23428
diff changeset
299 enddef
f00d6ff51046 patch 8.2.2264: Vim9: no error for mismatched :endfunc or :enddef
Bram Moolenaar <Bram@vim.org>
parents: 23428
diff changeset
300 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
301 v9.CheckScriptFailure(lines, 'E1151:', 3)
23442
f00d6ff51046 patch 8.2.2264: Vim9: no error for mismatched :endfunc or :enddef
Bram Moolenaar <Bram@vim.org>
parents: 23428
diff changeset
302
f00d6ff51046 patch 8.2.2264: Vim9: no error for mismatched :endfunc or :enddef
Bram Moolenaar <Bram@vim.org>
parents: 23428
diff changeset
303 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
304 def Test()
f00d6ff51046 patch 8.2.2264: Vim9: no error for mismatched :endfunc or :enddef
Bram Moolenaar <Bram@vim.org>
parents: 23428
diff changeset
305 func Nested()
f00d6ff51046 patch 8.2.2264: Vim9: no error for mismatched :endfunc or :enddef
Bram Moolenaar <Bram@vim.org>
parents: 23428
diff changeset
306 echo 'test'
f00d6ff51046 patch 8.2.2264: Vim9: no error for mismatched :endfunc or :enddef
Bram Moolenaar <Bram@vim.org>
parents: 23428
diff changeset
307 enddef
f00d6ff51046 patch 8.2.2264: Vim9: no error for mismatched :endfunc or :enddef
Bram Moolenaar <Bram@vim.org>
parents: 23428
diff changeset
308 enddef
f00d6ff51046 patch 8.2.2264: Vim9: no error for mismatched :endfunc or :enddef
Bram Moolenaar <Bram@vim.org>
parents: 23428
diff changeset
309 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
310 v9.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
311
7a21b2581dce patch 8.2.2645: using inline function is not properly tested
Bram Moolenaar <Bram@vim.org>
parents: 24156
diff changeset
312 lines =<< trim END
7a21b2581dce patch 8.2.2645: using inline function is not properly tested
Bram Moolenaar <Bram@vim.org>
parents: 24156
diff changeset
313 def Ok()
7a21b2581dce patch 8.2.2645: using inline function is not properly tested
Bram Moolenaar <Bram@vim.org>
parents: 24156
diff changeset
314 echo 'hello'
7a21b2581dce patch 8.2.2645: using inline function is not properly tested
Bram Moolenaar <Bram@vim.org>
parents: 24156
diff changeset
315 enddef | echo 'there'
7a21b2581dce patch 8.2.2645: using inline function is not properly tested
Bram Moolenaar <Bram@vim.org>
parents: 24156
diff changeset
316 def Bad()
7a21b2581dce patch 8.2.2645: using inline function is not properly tested
Bram Moolenaar <Bram@vim.org>
parents: 24156
diff changeset
317 echo 'hello'
7a21b2581dce patch 8.2.2645: using inline function is not properly tested
Bram Moolenaar <Bram@vim.org>
parents: 24156
diff changeset
318 enddef there
7a21b2581dce patch 8.2.2645: using inline function is not properly tested
Bram Moolenaar <Bram@vim.org>
parents: 24156
diff changeset
319 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
320 v9.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
321 enddef
f00d6ff51046 patch 8.2.2264: Vim9: no error for mismatched :endfunc or :enddef
Bram Moolenaar <Bram@vim.org>
parents: 23428
diff changeset
322
23444
7278e86c2f70 patch 8.2.2265: error message for missing endfunc/enddef is last line
Bram Moolenaar <Bram@vim.org>
parents: 23442
diff changeset
323 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
324 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
325 vim9script
7278e86c2f70 patch 8.2.2265: error message for missing endfunc/enddef is last line
Bram Moolenaar <Bram@vim.org>
parents: 23442
diff changeset
326 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
327 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
328 endef
7278e86c2f70 patch 8.2.2265: error message for missing endfunc/enddef is last line
Bram Moolenaar <Bram@vim.org>
parents: 23442
diff changeset
329 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
330 v9.CheckScriptFailure(lines, 'E1057:', 2)
23444
7278e86c2f70 patch 8.2.2265: error message for missing endfunc/enddef is last line
Bram Moolenaar <Bram@vim.org>
parents: 23442
diff changeset
331
7278e86c2f70 patch 8.2.2265: error message for missing endfunc/enddef is last line
Bram Moolenaar <Bram@vim.org>
parents: 23442
diff changeset
332 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
333 vim9script
7278e86c2f70 patch 8.2.2265: error message for missing endfunc/enddef is last line
Bram Moolenaar <Bram@vim.org>
parents: 23442
diff changeset
334 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
335 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
336 enfffunc
7278e86c2f70 patch 8.2.2265: error message for missing endfunc/enddef is last line
Bram Moolenaar <Bram@vim.org>
parents: 23442
diff changeset
337 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
338 v9.CheckScriptFailure(lines, 'E126:', 2)
23444
7278e86c2f70 patch 8.2.2265: error message for missing endfunc/enddef is last line
Bram Moolenaar <Bram@vim.org>
parents: 23442
diff changeset
339 enddef
7278e86c2f70 patch 8.2.2265: error message for missing endfunc/enddef is last line
Bram Moolenaar <Bram@vim.org>
parents: 23442
diff changeset
340
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
341 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
342 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
343 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
344 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
345 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
346 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
347 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
348 v9.CheckScriptFailure(lines, 'E1068:', 2)
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
349
7d0959080545 patch 8.2.2405: Vim9: no need to allow white space before "(" for :def
Bram Moolenaar <Bram@vim.org>
parents: 23691
diff changeset
350 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
351 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
352 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
353 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
354 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
355 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
356 v9.CheckScriptFailure(lines, 'E1068:', 2)
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
357
7d0959080545 patch 8.2.2405: Vim9: no need to allow white space before "(" for :def
Bram Moolenaar <Bram@vim.org>
parents: 23691
diff changeset
358 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
359 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
360 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
361 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
362 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
363 v9.CheckScriptFailure(lines, 'E1068:', 1)
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
364
7d0959080545 patch 8.2.2405: Vim9: no need to allow white space before "(" for :def
Bram Moolenaar <Bram@vim.org>
parents: 23691
diff changeset
365 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
366 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
367 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
368 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
369 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
370 v9.CheckScriptSuccess(lines)
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
371 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
372
23545
987fb6e8a376 patch 8.2.2315: Vim9: "enddef" as dict key misintepreted as function end
Bram Moolenaar <Bram@vim.org>
parents: 23531
diff changeset
373 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
374 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
375 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
376 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
377 }
987fb6e8a376 patch 8.2.2315: Vim9: "enddef" as dict key misintepreted as function end
Bram Moolenaar <Bram@vim.org>
parents: 23531
diff changeset
378 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
379 enddef
987fb6e8a376 patch 8.2.2315: Vim9: "enddef" as dict key misintepreted as function end
Bram Moolenaar <Bram@vim.org>
parents: 23531
diff changeset
380
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
381 def ReturnString(): string
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
382 return 'string'
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
383 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
384
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
385 def ReturnNumber(): number
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
386 return 123
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
387 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
388
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
389 let g:notNumber = 'string'
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
390
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
391 def ReturnGlobal(): number
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
392 return g:notNumber
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
393 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
394
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
395 def Test_return_something()
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
396 g:ReturnString()->assert_equal('string')
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
397 g:ReturnNumber()->assert_equal(123)
27464
a14c4d3e3260 patch 8.2.4260: Vim9: can still use a global function without g:
Bram Moolenaar <Bram@vim.org>
parents: 27457
diff changeset
398 assert_fails('g:ReturnGlobal()', 'E1012: Type mismatch; expected number but got string', '', 1, 'ReturnGlobal')
27219
47dbeda35910 patch 8.2.4138: Vim9: no error for return with argument when invalid
Bram Moolenaar <Bram@vim.org>
parents: 27022
diff changeset
399
47dbeda35910 patch 8.2.4138: Vim9: no error for return with argument when invalid
Bram Moolenaar <Bram@vim.org>
parents: 27022
diff changeset
400 var lines =<< trim END
47dbeda35910 patch 8.2.4138: Vim9: no error for return with argument when invalid
Bram Moolenaar <Bram@vim.org>
parents: 27022
diff changeset
401 vim9script
47dbeda35910 patch 8.2.4138: Vim9: no error for return with argument when invalid
Bram Moolenaar <Bram@vim.org>
parents: 27022
diff changeset
402
47dbeda35910 patch 8.2.4138: Vim9: no error for return with argument when invalid
Bram Moolenaar <Bram@vim.org>
parents: 27022
diff changeset
403 def Msg()
47dbeda35910 patch 8.2.4138: Vim9: no error for return with argument when invalid
Bram Moolenaar <Bram@vim.org>
parents: 27022
diff changeset
404 echomsg 'in Msg()...'
47dbeda35910 patch 8.2.4138: Vim9: no error for return with argument when invalid
Bram Moolenaar <Bram@vim.org>
parents: 27022
diff changeset
405 enddef
47dbeda35910 patch 8.2.4138: Vim9: no error for return with argument when invalid
Bram Moolenaar <Bram@vim.org>
parents: 27022
diff changeset
406
47dbeda35910 patch 8.2.4138: Vim9: no error for return with argument when invalid
Bram Moolenaar <Bram@vim.org>
parents: 27022
diff changeset
407 def Func()
47dbeda35910 patch 8.2.4138: Vim9: no error for return with argument when invalid
Bram Moolenaar <Bram@vim.org>
parents: 27022
diff changeset
408 return Msg()
47dbeda35910 patch 8.2.4138: Vim9: no error for return with argument when invalid
Bram Moolenaar <Bram@vim.org>
parents: 27022
diff changeset
409 enddef
47dbeda35910 patch 8.2.4138: Vim9: no error for return with argument when invalid
Bram Moolenaar <Bram@vim.org>
parents: 27022
diff changeset
410 defcompile
47dbeda35910 patch 8.2.4138: Vim9: no error for return with argument when invalid
Bram Moolenaar <Bram@vim.org>
parents: 27022
diff changeset
411 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
412 v9.CheckScriptFailure(lines, 'E1096:')
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
413 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
414
23691
0d56d4f107d8 patch 8.2.2387: runtime type check does not mention argument index
Bram Moolenaar <Bram@vim.org>
parents: 23689
diff changeset
415 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
416 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
417 vim9script
0d56d4f107d8 patch 8.2.2387: runtime type check does not mention argument index
Bram Moolenaar <Bram@vim.org>
parents: 23689
diff changeset
418 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
419 return 0
0d56d4f107d8 patch 8.2.2387: runtime type check does not mention argument index
Bram Moolenaar <Bram@vim.org>
parents: 23689
diff changeset
420 enddef
0d56d4f107d8 patch 8.2.2387: runtime type check does not mention argument index
Bram Moolenaar <Bram@vim.org>
parents: 23689
diff changeset
421 def Func()
0d56d4f107d8 patch 8.2.2387: runtime type check does not mention argument index
Bram Moolenaar <Bram@vim.org>
parents: 23689
diff changeset
422 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
423 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
424 enddef
0d56d4f107d8 patch 8.2.2387: runtime type check does not mention argument index
Bram Moolenaar <Bram@vim.org>
parents: 23689
diff changeset
425 disass Func
0d56d4f107d8 patch 8.2.2387: runtime type check does not mention argument index
Bram Moolenaar <Bram@vim.org>
parents: 23689
diff changeset
426 Func()
0d56d4f107d8 patch 8.2.2387: runtime type check does not mention argument index
Bram Moolenaar <Bram@vim.org>
parents: 23689
diff changeset
427 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
428 v9.CheckScriptFailure(lines, 'E1013: Argument 2: type mismatch, expected number but got bool', 2)
23691
0d56d4f107d8 patch 8.2.2387: runtime type check does not mention argument index
Bram Moolenaar <Bram@vim.org>
parents: 23689
diff changeset
429 enddef
0d56d4f107d8 patch 8.2.2387: runtime type check does not mention argument index
Bram Moolenaar <Bram@vim.org>
parents: 23689
diff changeset
430
20909
0d7465881b06 patch 8.2.1006: Vim9: require unnecessary return statement
Bram Moolenaar <Bram@vim.org>
parents: 20903
diff changeset
431 def Test_missing_return()
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
432 v9.CheckDefFailure(['def Missing(): number',
20909
0d7465881b06 patch 8.2.1006: Vim9: require unnecessary return statement
Bram Moolenaar <Bram@vim.org>
parents: 20903
diff changeset
433 ' if g:cond',
0d7465881b06 patch 8.2.1006: Vim9: require unnecessary return statement
Bram Moolenaar <Bram@vim.org>
parents: 20903
diff changeset
434 ' echo "no return"',
0d7465881b06 patch 8.2.1006: Vim9: require unnecessary return statement
Bram Moolenaar <Bram@vim.org>
parents: 20903
diff changeset
435 ' else',
0d7465881b06 patch 8.2.1006: Vim9: require unnecessary return statement
Bram Moolenaar <Bram@vim.org>
parents: 20903
diff changeset
436 ' return 0',
29782
35cbea786334 patch 9.0.0230: no error for comma missing in list in :def function
Bram Moolenaar <Bram@vim.org>
parents: 29780
diff changeset
437 ' endif',
20909
0d7465881b06 patch 8.2.1006: Vim9: require unnecessary return statement
Bram Moolenaar <Bram@vim.org>
parents: 20903
diff changeset
438 'enddef'], 'E1027:')
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
439 v9.CheckDefFailure(['def Missing(): number',
20909
0d7465881b06 patch 8.2.1006: Vim9: require unnecessary return statement
Bram Moolenaar <Bram@vim.org>
parents: 20903
diff changeset
440 ' if g:cond',
0d7465881b06 patch 8.2.1006: Vim9: require unnecessary return statement
Bram Moolenaar <Bram@vim.org>
parents: 20903
diff changeset
441 ' return 1',
0d7465881b06 patch 8.2.1006: Vim9: require unnecessary return statement
Bram Moolenaar <Bram@vim.org>
parents: 20903
diff changeset
442 ' else',
0d7465881b06 patch 8.2.1006: Vim9: require unnecessary return statement
Bram Moolenaar <Bram@vim.org>
parents: 20903
diff changeset
443 ' echo "no return"',
29782
35cbea786334 patch 9.0.0230: no error for comma missing in list in :def function
Bram Moolenaar <Bram@vim.org>
parents: 29780
diff changeset
444 ' endif',
20909
0d7465881b06 patch 8.2.1006: Vim9: require unnecessary return statement
Bram Moolenaar <Bram@vim.org>
parents: 20903
diff changeset
445 'enddef'], 'E1027:')
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
446 v9.CheckDefFailure(['def Missing(): number',
20909
0d7465881b06 patch 8.2.1006: Vim9: require unnecessary return statement
Bram Moolenaar <Bram@vim.org>
parents: 20903
diff changeset
447 ' if g:cond',
0d7465881b06 patch 8.2.1006: Vim9: require unnecessary return statement
Bram Moolenaar <Bram@vim.org>
parents: 20903
diff changeset
448 ' return 1',
0d7465881b06 patch 8.2.1006: Vim9: require unnecessary return statement
Bram Moolenaar <Bram@vim.org>
parents: 20903
diff changeset
449 ' else',
0d7465881b06 patch 8.2.1006: Vim9: require unnecessary return statement
Bram Moolenaar <Bram@vim.org>
parents: 20903
diff changeset
450 ' return 2',
29782
35cbea786334 patch 9.0.0230: no error for comma missing in list in :def function
Bram Moolenaar <Bram@vim.org>
parents: 29780
diff changeset
451 ' endif',
35cbea786334 patch 9.0.0230: no error for comma missing in list in :def function
Bram Moolenaar <Bram@vim.org>
parents: 29780
diff changeset
452 ' return 3',
20909
0d7465881b06 patch 8.2.1006: Vim9: require unnecessary return statement
Bram Moolenaar <Bram@vim.org>
parents: 20903
diff changeset
453 'enddef'], 'E1095:')
0d7465881b06 patch 8.2.1006: Vim9: require unnecessary return statement
Bram Moolenaar <Bram@vim.org>
parents: 20903
diff changeset
454 enddef
0d7465881b06 patch 8.2.1006: Vim9: require unnecessary return statement
Bram Moolenaar <Bram@vim.org>
parents: 20903
diff changeset
455
22620
b5d68d8a5187 patch 8.2.1858: Vim9: filter functions return number instead of bool
Bram Moolenaar <Bram@vim.org>
parents: 22586
diff changeset
456 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
457 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
458 vim9script
b5d68d8a5187 patch 8.2.1858: Vim9: filter functions return number instead of bool
Bram Moolenaar <Bram@vim.org>
parents: 22586
diff changeset
459 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
460 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
461 enddef
b5d68d8a5187 patch 8.2.1858: Vim9: filter functions return number instead of bool
Bram Moolenaar <Bram@vim.org>
parents: 22586
diff changeset
462 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
463 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
464 enddef
b5d68d8a5187 patch 8.2.1858: Vim9: filter functions return number instead of bool
Bram Moolenaar <Bram@vim.org>
parents: 22586
diff changeset
465 defcompile
b5d68d8a5187 patch 8.2.1858: Vim9: filter functions return number instead of bool
Bram Moolenaar <Bram@vim.org>
parents: 22586
diff changeset
466 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
467 v9.CheckScriptSuccess(lines)
22620
b5d68d8a5187 patch 8.2.1858: Vim9: filter functions return number instead of bool
Bram Moolenaar <Bram@vim.org>
parents: 22586
diff changeset
468 enddef
b5d68d8a5187 patch 8.2.1858: Vim9: filter functions return number instead of bool
Bram Moolenaar <Bram@vim.org>
parents: 22586
diff changeset
469
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
470 let s:nothing = 0
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
471 def ReturnNothing()
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
472 s:nothing = 1
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
473 if true
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
474 return
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
475 endif
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
476 s:nothing = 2
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
477 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
478
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
479 def Test_return_nothing()
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
480 g:ReturnNothing()
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
481 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
482 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
483
23630
ca98d85e92da patch 8.2.2357: Vim9: crash when parsing function return type fails
Bram Moolenaar <Bram@vim.org>
parents: 23565
diff changeset
484 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
485 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
486 vim9script
ca98d85e92da patch 8.2.2357: Vim9: crash when parsing function return type fails
Bram Moolenaar <Bram@vim.org>
parents: 23565
diff changeset
487 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
488 return xxx
ca98d85e92da patch 8.2.2357: Vim9: crash when parsing function return type fails
Bram Moolenaar <Bram@vim.org>
parents: 23565
diff changeset
489 enddef
ca98d85e92da patch 8.2.2357: Vim9: crash when parsing function return type fails
Bram Moolenaar <Bram@vim.org>
parents: 23565
diff changeset
490 defcompile
ca98d85e92da patch 8.2.2357: Vim9: crash when parsing function return type fails
Bram Moolenaar <Bram@vim.org>
parents: 23565
diff changeset
491 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
492 v9.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
493
e979bf909fd8 patch 8.2.2505: Vim9: crash after defining function with invalid return type
Bram Moolenaar <Bram@vim.org>
parents: 23923
diff changeset
494 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
495 vim9script
e979bf909fd8 patch 8.2.2505: Vim9: crash after defining function with invalid return type
Bram Moolenaar <Bram@vim.org>
parents: 23923
diff changeset
496 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
497 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
498 enddef
e979bf909fd8 patch 8.2.2505: Vim9: crash after defining function with invalid return type
Bram Moolenaar <Bram@vim.org>
parents: 23923
diff changeset
499 defcompile
e979bf909fd8 patch 8.2.2505: Vim9: crash after defining function with invalid return type
Bram Moolenaar <Bram@vim.org>
parents: 23923
diff changeset
500 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
501 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
502 enddef
e979bf909fd8 patch 8.2.2505: Vim9: crash after defining function with invalid return type
Bram Moolenaar <Bram@vim.org>
parents: 23923
diff changeset
503 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
504 END
e979bf909fd8 patch 8.2.2505: Vim9: crash after defining function with invalid return type
Bram Moolenaar <Bram@vim.org>
parents: 23923
diff changeset
505 # doing this twice was leaking memory
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
506 v9.CheckScriptFailure(lines, 'E1010:')
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
507 v9.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
508 enddef
ca98d85e92da patch 8.2.2357: Vim9: crash when parsing function return type fails
Bram Moolenaar <Bram@vim.org>
parents: 23565
diff changeset
509
25774
9edad9a8cca6 patch 8.2.3422: Vim9: no failure if return type differs from returned var
Bram Moolenaar <Bram@vim.org>
parents: 25737
diff changeset
510 def Test_return_list_any()
26925
4e77f9961650 patch 8.2.3991: Vim9: error when extending dict<any>
Bram Moolenaar <Bram@vim.org>
parents: 26851
diff changeset
511 # This used to fail but now the actual list type is checked, and since it has
4e77f9961650 patch 8.2.3991: Vim9: error when extending dict<any>
Bram Moolenaar <Bram@vim.org>
parents: 26851
diff changeset
512 # an item of type string it can be used as list<string>.
25774
9edad9a8cca6 patch 8.2.3422: Vim9: no failure if return type differs from returned var
Bram Moolenaar <Bram@vim.org>
parents: 25737
diff changeset
513 var lines =<< trim END
9edad9a8cca6 patch 8.2.3422: Vim9: no failure if return type differs from returned var
Bram Moolenaar <Bram@vim.org>
parents: 25737
diff changeset
514 vim9script
9edad9a8cca6 patch 8.2.3422: Vim9: no failure if return type differs from returned var
Bram Moolenaar <Bram@vim.org>
parents: 25737
diff changeset
515 def Func(): list<string>
9edad9a8cca6 patch 8.2.3422: Vim9: no failure if return type differs from returned var
Bram Moolenaar <Bram@vim.org>
parents: 25737
diff changeset
516 var l: list<any>
9edad9a8cca6 patch 8.2.3422: Vim9: no failure if return type differs from returned var
Bram Moolenaar <Bram@vim.org>
parents: 25737
diff changeset
517 l->add('string')
9edad9a8cca6 patch 8.2.3422: Vim9: no failure if return type differs from returned var
Bram Moolenaar <Bram@vim.org>
parents: 25737
diff changeset
518 return l
9edad9a8cca6 patch 8.2.3422: Vim9: no failure if return type differs from returned var
Bram Moolenaar <Bram@vim.org>
parents: 25737
diff changeset
519 enddef
9edad9a8cca6 patch 8.2.3422: Vim9: no failure if return type differs from returned var
Bram Moolenaar <Bram@vim.org>
parents: 25737
diff changeset
520 echo Func()
9edad9a8cca6 patch 8.2.3422: Vim9: no failure if return type differs from returned var
Bram Moolenaar <Bram@vim.org>
parents: 25737
diff changeset
521 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
522 v9.CheckScriptSuccess(lines)
26925
4e77f9961650 patch 8.2.3991: Vim9: error when extending dict<any>
Bram Moolenaar <Bram@vim.org>
parents: 26851
diff changeset
523
25774
9edad9a8cca6 patch 8.2.3422: Vim9: no failure if return type differs from returned var
Bram Moolenaar <Bram@vim.org>
parents: 25737
diff changeset
524 lines =<< trim END
9edad9a8cca6 patch 8.2.3422: Vim9: no failure if return type differs from returned var
Bram Moolenaar <Bram@vim.org>
parents: 25737
diff changeset
525 vim9script
9edad9a8cca6 patch 8.2.3422: Vim9: no failure if return type differs from returned var
Bram Moolenaar <Bram@vim.org>
parents: 25737
diff changeset
526 def Func(): list<string>
9edad9a8cca6 patch 8.2.3422: Vim9: no failure if return type differs from returned var
Bram Moolenaar <Bram@vim.org>
parents: 25737
diff changeset
527 var l: list<any>
9edad9a8cca6 patch 8.2.3422: Vim9: no failure if return type differs from returned var
Bram Moolenaar <Bram@vim.org>
parents: 25737
diff changeset
528 l += ['string']
9edad9a8cca6 patch 8.2.3422: Vim9: no failure if return type differs from returned var
Bram Moolenaar <Bram@vim.org>
parents: 25737
diff changeset
529 return l
9edad9a8cca6 patch 8.2.3422: Vim9: no failure if return type differs from returned var
Bram Moolenaar <Bram@vim.org>
parents: 25737
diff changeset
530 enddef
9edad9a8cca6 patch 8.2.3422: Vim9: no failure if return type differs from returned var
Bram Moolenaar <Bram@vim.org>
parents: 25737
diff changeset
531 echo Func()
9edad9a8cca6 patch 8.2.3422: Vim9: no failure if return type differs from returned var
Bram Moolenaar <Bram@vim.org>
parents: 25737
diff changeset
532 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
533 v9.CheckScriptSuccess(lines)
25774
9edad9a8cca6 patch 8.2.3422: Vim9: no failure if return type differs from returned var
Bram Moolenaar <Bram@vim.org>
parents: 25737
diff changeset
534 enddef
9edad9a8cca6 patch 8.2.3422: Vim9: no failure if return type differs from returned var
Bram Moolenaar <Bram@vim.org>
parents: 25737
diff changeset
535
28095
8a80c48bd103 patch 8.2.4572: Vim9: return type "any" is changed to first returned type
Bram Moolenaar <Bram@vim.org>
parents: 28059
diff changeset
536 def Test_return_any_two_types()
8a80c48bd103 patch 8.2.4572: Vim9: return type "any" is changed to first returned type
Bram Moolenaar <Bram@vim.org>
parents: 28059
diff changeset
537 var lines =<< trim END
8a80c48bd103 patch 8.2.4572: Vim9: return type "any" is changed to first returned type
Bram Moolenaar <Bram@vim.org>
parents: 28059
diff changeset
538 vim9script
8a80c48bd103 patch 8.2.4572: Vim9: return type "any" is changed to first returned type
Bram Moolenaar <Bram@vim.org>
parents: 28059
diff changeset
539
8a80c48bd103 patch 8.2.4572: Vim9: return type "any" is changed to first returned type
Bram Moolenaar <Bram@vim.org>
parents: 28059
diff changeset
540 def G(Fn: func(string): any)
8a80c48bd103 patch 8.2.4572: Vim9: return type "any" is changed to first returned type
Bram Moolenaar <Bram@vim.org>
parents: 28059
diff changeset
541 g:result = Fn("hello")
8a80c48bd103 patch 8.2.4572: Vim9: return type "any" is changed to first returned type
Bram Moolenaar <Bram@vim.org>
parents: 28059
diff changeset
542 enddef
8a80c48bd103 patch 8.2.4572: Vim9: return type "any" is changed to first returned type
Bram Moolenaar <Bram@vim.org>
parents: 28059
diff changeset
543
8a80c48bd103 patch 8.2.4572: Vim9: return type "any" is changed to first returned type
Bram Moolenaar <Bram@vim.org>
parents: 28059
diff changeset
544 def F(a: number, b: string): any
8a80c48bd103 patch 8.2.4572: Vim9: return type "any" is changed to first returned type
Bram Moolenaar <Bram@vim.org>
parents: 28059
diff changeset
545 echo b
8a80c48bd103 patch 8.2.4572: Vim9: return type "any" is changed to first returned type
Bram Moolenaar <Bram@vim.org>
parents: 28059
diff changeset
546 if a > 0
8a80c48bd103 patch 8.2.4572: Vim9: return type "any" is changed to first returned type
Bram Moolenaar <Bram@vim.org>
parents: 28059
diff changeset
547 return 1
8a80c48bd103 patch 8.2.4572: Vim9: return type "any" is changed to first returned type
Bram Moolenaar <Bram@vim.org>
parents: 28059
diff changeset
548 else
8a80c48bd103 patch 8.2.4572: Vim9: return type "any" is changed to first returned type
Bram Moolenaar <Bram@vim.org>
parents: 28059
diff changeset
549 return []
8a80c48bd103 patch 8.2.4572: Vim9: return type "any" is changed to first returned type
Bram Moolenaar <Bram@vim.org>
parents: 28059
diff changeset
550 endif
8a80c48bd103 patch 8.2.4572: Vim9: return type "any" is changed to first returned type
Bram Moolenaar <Bram@vim.org>
parents: 28059
diff changeset
551 enddef
8a80c48bd103 patch 8.2.4572: Vim9: return type "any" is changed to first returned type
Bram Moolenaar <Bram@vim.org>
parents: 28059
diff changeset
552
8a80c48bd103 patch 8.2.4572: Vim9: return type "any" is changed to first returned type
Bram Moolenaar <Bram@vim.org>
parents: 28059
diff changeset
553 G(function(F, [1]))
8a80c48bd103 patch 8.2.4572: Vim9: return type "any" is changed to first returned type
Bram Moolenaar <Bram@vim.org>
parents: 28059
diff changeset
554 END
8a80c48bd103 patch 8.2.4572: Vim9: return type "any" is changed to first returned type
Bram Moolenaar <Bram@vim.org>
parents: 28059
diff changeset
555 v9.CheckScriptSuccess(lines)
8a80c48bd103 patch 8.2.4572: Vim9: return type "any" is changed to first returned type
Bram Moolenaar <Bram@vim.org>
parents: 28059
diff changeset
556 assert_equal(1, g:result)
8a80c48bd103 patch 8.2.4572: Vim9: return type "any" is changed to first returned type
Bram Moolenaar <Bram@vim.org>
parents: 28059
diff changeset
557 unlet g:result
8a80c48bd103 patch 8.2.4572: Vim9: return type "any" is changed to first returned type
Bram Moolenaar <Bram@vim.org>
parents: 28059
diff changeset
558 enddef
8a80c48bd103 patch 8.2.4572: Vim9: return type "any" is changed to first returned type
Bram Moolenaar <Bram@vim.org>
parents: 28059
diff changeset
559
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
560 func s:Increment()
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
561 let g:counter += 1
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
562 endfunc
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
563
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
564 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
565 g:counter = 1
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
566 Increment()
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
567 Increment()
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
568 Increment()
21353
fb8c8fcb7b60 patch 8.2.1227: Vim9: allowing both quoted and # comments is confusing
Bram Moolenaar <Bram@vim.org>
parents: 21347
diff changeset
569 # 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
570 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
571 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
572 unlet g:counter
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
573 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
574
27918
7d70b420de00 patch 8.2.4484: Vim9: some error messages are not tested
Bram Moolenaar <Bram@vim.org>
parents: 27869
diff changeset
575 def Test_call_ufunc_failure()
7d70b420de00 patch 8.2.4484: Vim9: some error messages are not tested
Bram Moolenaar <Bram@vim.org>
parents: 27869
diff changeset
576 var lines =<< trim END
7d70b420de00 patch 8.2.4484: Vim9: some error messages are not tested
Bram Moolenaar <Bram@vim.org>
parents: 27869
diff changeset
577 vim9script
7d70b420de00 patch 8.2.4484: Vim9: some error messages are not tested
Bram Moolenaar <Bram@vim.org>
parents: 27869
diff changeset
578 def Tryit()
7d70b420de00 patch 8.2.4484: Vim9: some error messages are not tested
Bram Moolenaar <Bram@vim.org>
parents: 27869
diff changeset
579 g:Global(1, 2, 3)
7d70b420de00 patch 8.2.4484: Vim9: some error messages are not tested
Bram Moolenaar <Bram@vim.org>
parents: 27869
diff changeset
580 enddef
7d70b420de00 patch 8.2.4484: Vim9: some error messages are not tested
Bram Moolenaar <Bram@vim.org>
parents: 27869
diff changeset
581
7d70b420de00 patch 8.2.4484: Vim9: some error messages are not tested
Bram Moolenaar <Bram@vim.org>
parents: 27869
diff changeset
582 func g:Global(a, b, c)
7d70b420de00 patch 8.2.4484: Vim9: some error messages are not tested
Bram Moolenaar <Bram@vim.org>
parents: 27869
diff changeset
583 echo a:a a:b a:c
7d70b420de00 patch 8.2.4484: Vim9: some error messages are not tested
Bram Moolenaar <Bram@vim.org>
parents: 27869
diff changeset
584 endfunc
7d70b420de00 patch 8.2.4484: Vim9: some error messages are not tested
Bram Moolenaar <Bram@vim.org>
parents: 27869
diff changeset
585
7d70b420de00 patch 8.2.4484: Vim9: some error messages are not tested
Bram Moolenaar <Bram@vim.org>
parents: 27869
diff changeset
586 defcompile
7d70b420de00 patch 8.2.4484: Vim9: some error messages are not tested
Bram Moolenaar <Bram@vim.org>
parents: 27869
diff changeset
587
7d70b420de00 patch 8.2.4484: Vim9: some error messages are not tested
Bram Moolenaar <Bram@vim.org>
parents: 27869
diff changeset
588 func! g:Global(a, b)
7d70b420de00 patch 8.2.4484: Vim9: some error messages are not tested
Bram Moolenaar <Bram@vim.org>
parents: 27869
diff changeset
589 echo a:a a:b
7d70b420de00 patch 8.2.4484: Vim9: some error messages are not tested
Bram Moolenaar <Bram@vim.org>
parents: 27869
diff changeset
590 endfunc
7d70b420de00 patch 8.2.4484: Vim9: some error messages are not tested
Bram Moolenaar <Bram@vim.org>
parents: 27869
diff changeset
591 Tryit()
7d70b420de00 patch 8.2.4484: Vim9: some error messages are not tested
Bram Moolenaar <Bram@vim.org>
parents: 27869
diff changeset
592 END
7d70b420de00 patch 8.2.4484: Vim9: some error messages are not tested
Bram Moolenaar <Bram@vim.org>
parents: 27869
diff changeset
593 v9.CheckScriptFailure(lines, 'E118: Too many arguments for function: Global')
7d70b420de00 patch 8.2.4484: Vim9: some error messages are not tested
Bram Moolenaar <Bram@vim.org>
parents: 27869
diff changeset
594 delfunc g:Global
7d70b420de00 patch 8.2.4484: Vim9: some error messages are not tested
Bram Moolenaar <Bram@vim.org>
parents: 27869
diff changeset
595
7d70b420de00 patch 8.2.4484: Vim9: some error messages are not tested
Bram Moolenaar <Bram@vim.org>
parents: 27869
diff changeset
596 lines =<< trim END
7d70b420de00 patch 8.2.4484: Vim9: some error messages are not tested
Bram Moolenaar <Bram@vim.org>
parents: 27869
diff changeset
597 vim9script
7d70b420de00 patch 8.2.4484: Vim9: some error messages are not tested
Bram Moolenaar <Bram@vim.org>
parents: 27869
diff changeset
598
7d70b420de00 patch 8.2.4484: Vim9: some error messages are not tested
Bram Moolenaar <Bram@vim.org>
parents: 27869
diff changeset
599 g:Ref = function('len')
7d70b420de00 patch 8.2.4484: Vim9: some error messages are not tested
Bram Moolenaar <Bram@vim.org>
parents: 27869
diff changeset
600 def Tryit()
7d70b420de00 patch 8.2.4484: Vim9: some error messages are not tested
Bram Moolenaar <Bram@vim.org>
parents: 27869
diff changeset
601 g:Ref('x')
7d70b420de00 patch 8.2.4484: Vim9: some error messages are not tested
Bram Moolenaar <Bram@vim.org>
parents: 27869
diff changeset
602 enddef
7d70b420de00 patch 8.2.4484: Vim9: some error messages are not tested
Bram Moolenaar <Bram@vim.org>
parents: 27869
diff changeset
603
7d70b420de00 patch 8.2.4484: Vim9: some error messages are not tested
Bram Moolenaar <Bram@vim.org>
parents: 27869
diff changeset
604 defcompile
7d70b420de00 patch 8.2.4484: Vim9: some error messages are not tested
Bram Moolenaar <Bram@vim.org>
parents: 27869
diff changeset
605
7d70b420de00 patch 8.2.4484: Vim9: some error messages are not tested
Bram Moolenaar <Bram@vim.org>
parents: 27869
diff changeset
606 g:Ref = function('add')
7d70b420de00 patch 8.2.4484: Vim9: some error messages are not tested
Bram Moolenaar <Bram@vim.org>
parents: 27869
diff changeset
607 Tryit()
7d70b420de00 patch 8.2.4484: Vim9: some error messages are not tested
Bram Moolenaar <Bram@vim.org>
parents: 27869
diff changeset
608 END
7d70b420de00 patch 8.2.4484: Vim9: some error messages are not tested
Bram Moolenaar <Bram@vim.org>
parents: 27869
diff changeset
609 v9.CheckScriptFailure(lines, 'E119: Not enough arguments for function: add')
7d70b420de00 patch 8.2.4484: Vim9: some error messages are not tested
Bram Moolenaar <Bram@vim.org>
parents: 27869
diff changeset
610 unlet g:Ref
7d70b420de00 patch 8.2.4484: Vim9: some error messages are not tested
Bram Moolenaar <Bram@vim.org>
parents: 27869
diff changeset
611 enddef
7d70b420de00 patch 8.2.4484: Vim9: some error messages are not tested
Bram Moolenaar <Bram@vim.org>
parents: 27869
diff changeset
612
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
613 def s: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
614 var res = arg
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
615 for s in rest
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
616 res ..= ',' .. s
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
617 endfor
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
618 return res
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
619 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
620
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
621 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
622 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
623 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
624 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
625 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
626
25737
d923be9d752d patch 8.2.3404: Vim9: no error for white space before "("
Bram Moolenaar <Bram@vim.org>
parents: 25646
diff changeset
627 def Test_call_white_space()
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
628 v9.CheckDefAndScriptFailure(["call Test ('text')"], ['E476:', 'E1068:'])
25737
d923be9d752d patch 8.2.3404: Vim9: no error for white space before "("
Bram Moolenaar <Bram@vim.org>
parents: 25646
diff changeset
629 enddef
d923be9d752d patch 8.2.3404: Vim9: no error for white space before "("
Bram Moolenaar <Bram@vim.org>
parents: 25646
diff changeset
630
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
631 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
632 return name
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
633 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
634
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
635 def s:MyDefaultSecond(name: string, second: bool = true): string
21345
5dd4cbc1e9e6 patch 8.2.1223: Vim9: invalid type error for function default value
Bram Moolenaar <Bram@vim.org>
parents: 21335
diff changeset
636 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
637 enddef
5dd4cbc1e9e6 patch 8.2.1223: Vim9: invalid type error for function default value
Bram Moolenaar <Bram@vim.org>
parents: 21335
diff changeset
638
24272
cabed216cc2f patch 8.2.2677: Vim9: cannot use only some of the default arguments
Bram Moolenaar <Bram@vim.org>
parents: 24218
diff changeset
639
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
640 def Test_call_default_args()
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
641 g:MyDefaultArgs()->assert_equal('string')
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
642 g:MyDefaultArgs(v:none)->assert_equal('string')
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
643 g:MyDefaultArgs('one')->assert_equal('one')
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
644 assert_fails('g:MyDefaultArgs("one", "two")', 'E118:', '', 4, '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
645
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
646 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
647 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
648 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
649
24272
cabed216cc2f patch 8.2.2677: Vim9: cannot use only some of the default arguments
Bram Moolenaar <Bram@vim.org>
parents: 24218
diff changeset
650 var lines =<< trim END
cabed216cc2f patch 8.2.2677: Vim9: cannot use only some of the default arguments
Bram Moolenaar <Bram@vim.org>
parents: 24218
diff changeset
651 def MyDefaultThird(name: string, aa = 'aa', bb = 'bb'): string
cabed216cc2f patch 8.2.2677: Vim9: cannot use only some of the default arguments
Bram Moolenaar <Bram@vim.org>
parents: 24218
diff changeset
652 return name .. aa .. bb
cabed216cc2f patch 8.2.2677: Vim9: cannot use only some of the default arguments
Bram Moolenaar <Bram@vim.org>
parents: 24218
diff changeset
653 enddef
cabed216cc2f patch 8.2.2677: Vim9: cannot use only some of the default arguments
Bram Moolenaar <Bram@vim.org>
parents: 24218
diff changeset
654
cabed216cc2f patch 8.2.2677: Vim9: cannot use only some of the default arguments
Bram Moolenaar <Bram@vim.org>
parents: 24218
diff changeset
655 MyDefaultThird('->')->assert_equal('->aabb')
cabed216cc2f patch 8.2.2677: Vim9: cannot use only some of the default arguments
Bram Moolenaar <Bram@vim.org>
parents: 24218
diff changeset
656 MyDefaultThird('->', v:none)->assert_equal('->aabb')
cabed216cc2f patch 8.2.2677: Vim9: cannot use only some of the default arguments
Bram Moolenaar <Bram@vim.org>
parents: 24218
diff changeset
657 MyDefaultThird('->', 'xx')->assert_equal('->xxbb')
cabed216cc2f patch 8.2.2677: Vim9: cannot use only some of the default arguments
Bram Moolenaar <Bram@vim.org>
parents: 24218
diff changeset
658 MyDefaultThird('->', v:none, v:none)->assert_equal('->aabb')
cabed216cc2f patch 8.2.2677: Vim9: cannot use only some of the default arguments
Bram Moolenaar <Bram@vim.org>
parents: 24218
diff changeset
659 MyDefaultThird('->', 'xx', v:none)->assert_equal('->xxbb')
cabed216cc2f patch 8.2.2677: Vim9: cannot use only some of the default arguments
Bram Moolenaar <Bram@vim.org>
parents: 24218
diff changeset
660 MyDefaultThird('->', v:none, 'yy')->assert_equal('->aayy')
cabed216cc2f patch 8.2.2677: Vim9: cannot use only some of the default arguments
Bram Moolenaar <Bram@vim.org>
parents: 24218
diff changeset
661 MyDefaultThird('->', 'xx', 'yy')->assert_equal('->xxyy')
25108
de29f9a76233 patch 8.2.3091: Vim9: default argument expr. cannot use previous argument
Bram Moolenaar <Bram@vim.org>
parents: 25046
diff changeset
662
de29f9a76233 patch 8.2.3091: Vim9: default argument expr. cannot use previous argument
Bram Moolenaar <Bram@vim.org>
parents: 25046
diff changeset
663 def DefArg(mandatory: any, optional = mandatory): string
de29f9a76233 patch 8.2.3091: Vim9: default argument expr. cannot use previous argument
Bram Moolenaar <Bram@vim.org>
parents: 25046
diff changeset
664 return mandatory .. optional
de29f9a76233 patch 8.2.3091: Vim9: default argument expr. cannot use previous argument
Bram Moolenaar <Bram@vim.org>
parents: 25046
diff changeset
665 enddef
de29f9a76233 patch 8.2.3091: Vim9: default argument expr. cannot use previous argument
Bram Moolenaar <Bram@vim.org>
parents: 25046
diff changeset
666 DefArg(1234)->assert_equal('12341234')
de29f9a76233 patch 8.2.3091: Vim9: default argument expr. cannot use previous argument
Bram Moolenaar <Bram@vim.org>
parents: 25046
diff changeset
667 DefArg("ok")->assert_equal('okok')
24272
cabed216cc2f patch 8.2.2677: Vim9: cannot use only some of the default arguments
Bram Moolenaar <Bram@vim.org>
parents: 24218
diff changeset
668 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
669 v9.CheckDefAndScriptSuccess(lines)
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
670
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
671 v9.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
672 delfunc g:Func
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
673 v9.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
674 delfunc g:Func
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
675 v9.CheckDefFailure(['def Func(x: number = )', 'enddef'], 'E15:')
24097
26d3c1539bcc patch 8.2.2590: Vim9: default argument value may cause internal error
Bram Moolenaar <Bram@vim.org>
parents: 24069
diff changeset
676
24272
cabed216cc2f patch 8.2.2677: Vim9: cannot use only some of the default arguments
Bram Moolenaar <Bram@vim.org>
parents: 24218
diff changeset
677 lines =<< trim END
24097
26d3c1539bcc patch 8.2.2590: Vim9: default argument value may cause internal error
Bram Moolenaar <Bram@vim.org>
parents: 24069
diff changeset
678 vim9script
26d3c1539bcc patch 8.2.2590: Vim9: default argument value may cause internal error
Bram Moolenaar <Bram@vim.org>
parents: 24069
diff changeset
679 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
680 enddef
26d3c1539bcc patch 8.2.2590: Vim9: default argument value may cause internal error
Bram Moolenaar <Bram@vim.org>
parents: 24069
diff changeset
681 defcompile
26d3c1539bcc patch 8.2.2590: Vim9: default argument value may cause internal error
Bram Moolenaar <Bram@vim.org>
parents: 24069
diff changeset
682 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
683 v9.CheckScriptFailure(lines, 'E1001: Variable not found: b')
26674
38a270fdd3f6 patch 8.2.3866: Vim9: type checking global variables is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 26650
diff changeset
684
26680
1b288eb2fcdc patch 8.2.3869: Vim9: type checking for "any" is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 26674
diff changeset
685 # using script variable requires matching type or type cast when executed
26674
38a270fdd3f6 patch 8.2.3866: Vim9: type checking global variables is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 26650
diff changeset
686 lines =<< trim END
38a270fdd3f6 patch 8.2.3866: Vim9: type checking global variables is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 26650
diff changeset
687 vim9script
38a270fdd3f6 patch 8.2.3866: Vim9: type checking global variables is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 26650
diff changeset
688 var a: any
38a270fdd3f6 patch 8.2.3866: Vim9: type checking global variables is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 26650
diff changeset
689 def Func(arg: string = a)
38a270fdd3f6 patch 8.2.3866: Vim9: type checking global variables is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 26650
diff changeset
690 echo arg
38a270fdd3f6 patch 8.2.3866: Vim9: type checking global variables is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 26650
diff changeset
691 enddef
38a270fdd3f6 patch 8.2.3866: Vim9: type checking global variables is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 26650
diff changeset
692 defcompile
38a270fdd3f6 patch 8.2.3866: Vim9: type checking global variables is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 26650
diff changeset
693 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
694 v9.CheckScriptSuccess(lines + ['a = "text"', 'Func()'])
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
695 v9.CheckScriptFailure(lines + ['a = 123', 'Func()'], 'E1013: Argument 1: type mismatch, expected string but got number')
26674
38a270fdd3f6 patch 8.2.3866: Vim9: type checking global variables is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 26650
diff changeset
696
38a270fdd3f6 patch 8.2.3866: Vim9: type checking global variables is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 26650
diff changeset
697 # using global variable does not require type cast
38a270fdd3f6 patch 8.2.3866: Vim9: type checking global variables is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 26650
diff changeset
698 lines =<< trim END
38a270fdd3f6 patch 8.2.3866: Vim9: type checking global variables is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 26650
diff changeset
699 vim9script
38a270fdd3f6 patch 8.2.3866: Vim9: type checking global variables is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 26650
diff changeset
700 def Func(arg: string = g:str)
38a270fdd3f6 patch 8.2.3866: Vim9: type checking global variables is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 26650
diff changeset
701 echo arg
38a270fdd3f6 patch 8.2.3866: Vim9: type checking global variables is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 26650
diff changeset
702 enddef
38a270fdd3f6 patch 8.2.3866: Vim9: type checking global variables is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 26650
diff changeset
703 g:str = 'works'
38a270fdd3f6 patch 8.2.3866: Vim9: type checking global variables is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 26650
diff changeset
704 Func()
38a270fdd3f6 patch 8.2.3866: Vim9: type checking global variables is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 26650
diff changeset
705 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
706 v9.CheckScriptSuccess(lines)
20279
49b50843e725 patch 8.2.0695: Vim9: cannot define a function inside a function
Bram Moolenaar <Bram@vim.org>
parents: 20275
diff changeset
707 enddef
49b50843e725 patch 8.2.0695: Vim9: cannot define a function inside a function
Bram Moolenaar <Bram@vim.org>
parents: 20275
diff changeset
708
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
709 def s:FuncWithComment( # comment
23511
7e8703464f01 patch 8.2.2298: Vim9: comment right after "(" of function not recognized
Bram Moolenaar <Bram@vim.org>
parents: 23481
diff changeset
710 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
711 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
712 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
713 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
714 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
715 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
716 enddef
7e8703464f01 patch 8.2.2298: Vim9: comment right after "(" of function not recognized
Bram Moolenaar <Bram@vim.org>
parents: 23481
diff changeset
717
7e8703464f01 patch 8.2.2298: Vim9: comment right after "(" of function not recognized
Bram Moolenaar <Bram@vim.org>
parents: 23481
diff changeset
718 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
719 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
720
7e8703464f01 patch 8.2.2298: Vim9: comment right after "(" of function not recognized
Bram Moolenaar <Bram@vim.org>
parents: 23481
diff changeset
721 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
722 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
723 arg: string)
7e8703464f01 patch 8.2.2298: Vim9: comment right after "(" of function not recognized
Bram Moolenaar <Bram@vim.org>
parents: 23481
diff changeset
724 enddef
7e8703464f01 patch 8.2.2298: Vim9: comment right after "(" of function not recognized
Bram Moolenaar <Bram@vim.org>
parents: 23481
diff changeset
725 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
726 v9.CheckScriptFailure(lines, 'E125:', 1)
23511
7e8703464f01 patch 8.2.2298: Vim9: comment right after "(" of function not recognized
Bram Moolenaar <Bram@vim.org>
parents: 23481
diff changeset
727
7e8703464f01 patch 8.2.2298: Vim9: comment right after "(" of function not recognized
Bram Moolenaar <Bram@vim.org>
parents: 23481
diff changeset
728 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
729 def Func(
7e8703464f01 patch 8.2.2298: Vim9: comment right after "(" of function not recognized
Bram Moolenaar <Bram@vim.org>
parents: 23481
diff changeset
730 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
731 )
7e8703464f01 patch 8.2.2298: Vim9: comment right after "(" of function not recognized
Bram Moolenaar <Bram@vim.org>
parents: 23481
diff changeset
732 enddef
7e8703464f01 patch 8.2.2298: Vim9: comment right after "(" of function not recognized
Bram Moolenaar <Bram@vim.org>
parents: 23481
diff changeset
733 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
734 v9.CheckScriptFailure(lines, 'E475:', 2)
23511
7e8703464f01 patch 8.2.2298: Vim9: comment right after "(" of function not recognized
Bram Moolenaar <Bram@vim.org>
parents: 23481
diff changeset
735
7e8703464f01 patch 8.2.2298: Vim9: comment right after "(" of function not recognized
Bram Moolenaar <Bram@vim.org>
parents: 23481
diff changeset
736 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
737 def Func(
7e8703464f01 patch 8.2.2298: Vim9: comment right after "(" of function not recognized
Bram Moolenaar <Bram@vim.org>
parents: 23481
diff changeset
738 arg: string
7e8703464f01 patch 8.2.2298: Vim9: comment right after "(" of function not recognized
Bram Moolenaar <Bram@vim.org>
parents: 23481
diff changeset
739 )# comment
7e8703464f01 patch 8.2.2298: Vim9: comment right after "(" of function not recognized
Bram Moolenaar <Bram@vim.org>
parents: 23481
diff changeset
740 enddef
7e8703464f01 patch 8.2.2298: Vim9: comment right after "(" of function not recognized
Bram Moolenaar <Bram@vim.org>
parents: 23481
diff changeset
741 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
742 v9.CheckScriptFailure(lines, 'E488:', 3)
23511
7e8703464f01 patch 8.2.2298: Vim9: comment right after "(" of function not recognized
Bram Moolenaar <Bram@vim.org>
parents: 23481
diff changeset
743 enddef
7e8703464f01 patch 8.2.2298: Vim9: comment right after "(" of function not recognized
Bram Moolenaar <Bram@vim.org>
parents: 23481
diff changeset
744
20279
49b50843e725 patch 8.2.0695: Vim9: cannot define a function inside a function
Bram Moolenaar <Bram@vim.org>
parents: 20275
diff changeset
745 def Test_nested_function()
26323
3841da4eac23 patch 8.2.3692: Vim9: cannot use :func inside a :def function
Bram Moolenaar <Bram@vim.org>
parents: 26205
diff changeset
746 def NestedDef(arg: string): string
20279
49b50843e725 patch 8.2.0695: Vim9: cannot define a function inside a function
Bram Moolenaar <Bram@vim.org>
parents: 20275
diff changeset
747 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
748 enddef
26323
3841da4eac23 patch 8.2.3692: Vim9: cannot use :func inside a :def function
Bram Moolenaar <Bram@vim.org>
parents: 26205
diff changeset
749 NestedDef(':def')->assert_equal('nested :def')
3841da4eac23 patch 8.2.3692: Vim9: cannot use :func inside a :def function
Bram Moolenaar <Bram@vim.org>
parents: 26205
diff changeset
750
3841da4eac23 patch 8.2.3692: Vim9: cannot use :func inside a :def function
Bram Moolenaar <Bram@vim.org>
parents: 26205
diff changeset
751 func NestedFunc(arg)
3841da4eac23 patch 8.2.3692: Vim9: cannot use :func inside a :def function
Bram Moolenaar <Bram@vim.org>
parents: 26205
diff changeset
752 return 'nested ' .. a:arg
3841da4eac23 patch 8.2.3692: Vim9: cannot use :func inside a :def function
Bram Moolenaar <Bram@vim.org>
parents: 26205
diff changeset
753 endfunc
3841da4eac23 patch 8.2.3692: Vim9: cannot use :func inside a :def function
Bram Moolenaar <Bram@vim.org>
parents: 26205
diff changeset
754 NestedFunc(':func')->assert_equal('nested :func')
20279
49b50843e725 patch 8.2.0695: Vim9: cannot define a function inside a function
Bram Moolenaar <Bram@vim.org>
parents: 20275
diff changeset
755
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
756 v9.CheckDefFailure(['def Nested()', 'enddef', 'Nested(66)'], 'E118:')
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
757 v9.CheckDefFailure(['def Nested(arg: string)', 'enddef', 'Nested()'], 'E119:')
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
758
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
759 v9.CheckDefFailure(['def s:Nested()', 'enddef'], 'E1075:')
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
760 v9.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
761
23112
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
762 var lines =<< trim END
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
763 def Outer()
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
764 def Inner()
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
765 # comment
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
766 enddef
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
767 def Inner()
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
768 enddef
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
769 enddef
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
770 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
771 v9.CheckDefFailure(lines, 'E1073:')
23112
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
772
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
773 lines =<< trim END
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
774 def Outer()
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
775 def Inner()
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
776 # comment
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
777 enddef
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
778 def! Inner()
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
779 enddef
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
780 enddef
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
781 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
782 v9.CheckDefFailure(lines, 'E1117:')
23112
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
783
26735
44c7d42dff25 patch 8.2.3896: Vim9: no test for nested function not available later
Bram Moolenaar <Bram@vim.org>
parents: 26680
diff changeset
784 lines =<< trim END
44c7d42dff25 patch 8.2.3896: Vim9: no test for nested function not available later
Bram Moolenaar <Bram@vim.org>
parents: 26680
diff changeset
785 vim9script
44c7d42dff25 patch 8.2.3896: Vim9: no test for nested function not available later
Bram Moolenaar <Bram@vim.org>
parents: 26680
diff changeset
786 def Outer()
44c7d42dff25 patch 8.2.3896: Vim9: no test for nested function not available later
Bram Moolenaar <Bram@vim.org>
parents: 26680
diff changeset
787 def Inner()
44c7d42dff25 patch 8.2.3896: Vim9: no test for nested function not available later
Bram Moolenaar <Bram@vim.org>
parents: 26680
diff changeset
788 g:result = 'ok'
44c7d42dff25 patch 8.2.3896: Vim9: no test for nested function not available later
Bram Moolenaar <Bram@vim.org>
parents: 26680
diff changeset
789 enddef
44c7d42dff25 patch 8.2.3896: Vim9: no test for nested function not available later
Bram Moolenaar <Bram@vim.org>
parents: 26680
diff changeset
790 Inner()
44c7d42dff25 patch 8.2.3896: Vim9: no test for nested function not available later
Bram Moolenaar <Bram@vim.org>
parents: 26680
diff changeset
791 enddef
44c7d42dff25 patch 8.2.3896: Vim9: no test for nested function not available later
Bram Moolenaar <Bram@vim.org>
parents: 26680
diff changeset
792 Outer()
44c7d42dff25 patch 8.2.3896: Vim9: no test for nested function not available later
Bram Moolenaar <Bram@vim.org>
parents: 26680
diff changeset
793 Inner()
44c7d42dff25 patch 8.2.3896: Vim9: no test for nested function not available later
Bram Moolenaar <Bram@vim.org>
parents: 26680
diff changeset
794 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
795 v9.CheckScriptFailure(lines, 'E117: Unknown function: Inner')
26735
44c7d42dff25 patch 8.2.3896: Vim9: no test for nested function not available later
Bram Moolenaar <Bram@vim.org>
parents: 26680
diff changeset
796 assert_equal('ok', g:result)
44c7d42dff25 patch 8.2.3896: Vim9: no test for nested function not available later
Bram Moolenaar <Bram@vim.org>
parents: 26680
diff changeset
797 unlet g:result
44c7d42dff25 patch 8.2.3896: Vim9: no test for nested function not available later
Bram Moolenaar <Bram@vim.org>
parents: 26680
diff changeset
798
27593
8c7836f8668d patch 8.2.4323: Vim9: nested function name can start with "_"
Bram Moolenaar <Bram@vim.org>
parents: 27591
diff changeset
799 lines =<< trim END
8c7836f8668d patch 8.2.4323: Vim9: nested function name can start with "_"
Bram Moolenaar <Bram@vim.org>
parents: 27591
diff changeset
800 vim9script
8c7836f8668d patch 8.2.4323: Vim9: nested function name can start with "_"
Bram Moolenaar <Bram@vim.org>
parents: 27591
diff changeset
801 def Outer()
8c7836f8668d patch 8.2.4323: Vim9: nested function name can start with "_"
Bram Moolenaar <Bram@vim.org>
parents: 27591
diff changeset
802 def _Inner()
8c7836f8668d patch 8.2.4323: Vim9: nested function name can start with "_"
Bram Moolenaar <Bram@vim.org>
parents: 27591
diff changeset
803 echo 'bad'
8c7836f8668d patch 8.2.4323: Vim9: nested function name can start with "_"
Bram Moolenaar <Bram@vim.org>
parents: 27591
diff changeset
804 enddef
27595
d504745607bc patch 8.2.4324: Vim9: script-local function name can start with "_"
Bram Moolenaar <Bram@vim.org>
parents: 27593
diff changeset
805 _Inner()
27593
8c7836f8668d patch 8.2.4323: Vim9: nested function name can start with "_"
Bram Moolenaar <Bram@vim.org>
parents: 27591
diff changeset
806 enddef
8c7836f8668d patch 8.2.4323: Vim9: nested function name can start with "_"
Bram Moolenaar <Bram@vim.org>
parents: 27591
diff changeset
807 defcompile
8c7836f8668d patch 8.2.4323: Vim9: nested function name can start with "_"
Bram Moolenaar <Bram@vim.org>
parents: 27591
diff changeset
808 END
27595
d504745607bc patch 8.2.4324: Vim9: script-local function name can start with "_"
Bram Moolenaar <Bram@vim.org>
parents: 27593
diff changeset
809 v9.CheckScriptFailure(lines, 'E1267:')
27593
8c7836f8668d patch 8.2.4323: Vim9: nested function name can start with "_"
Bram Moolenaar <Bram@vim.org>
parents: 27591
diff changeset
810
8c7836f8668d patch 8.2.4323: Vim9: nested function name can start with "_"
Bram Moolenaar <Bram@vim.org>
parents: 27591
diff changeset
811 lines =<< trim END
8c7836f8668d patch 8.2.4323: Vim9: nested function name can start with "_"
Bram Moolenaar <Bram@vim.org>
parents: 27591
diff changeset
812 vim9script
8c7836f8668d patch 8.2.4323: Vim9: nested function name can start with "_"
Bram Moolenaar <Bram@vim.org>
parents: 27591
diff changeset
813 def Outer()
8c7836f8668d patch 8.2.4323: Vim9: nested function name can start with "_"
Bram Moolenaar <Bram@vim.org>
parents: 27591
diff changeset
814 def g:inner()
8c7836f8668d patch 8.2.4323: Vim9: nested function name can start with "_"
Bram Moolenaar <Bram@vim.org>
parents: 27591
diff changeset
815 echo 'bad'
8c7836f8668d patch 8.2.4323: Vim9: nested function name can start with "_"
Bram Moolenaar <Bram@vim.org>
parents: 27591
diff changeset
816 enddef
27595
d504745607bc patch 8.2.4324: Vim9: script-local function name can start with "_"
Bram Moolenaar <Bram@vim.org>
parents: 27593
diff changeset
817 g:inner()
27593
8c7836f8668d patch 8.2.4323: Vim9: nested function name can start with "_"
Bram Moolenaar <Bram@vim.org>
parents: 27591
diff changeset
818 enddef
8c7836f8668d patch 8.2.4323: Vim9: nested function name can start with "_"
Bram Moolenaar <Bram@vim.org>
parents: 27591
diff changeset
819 defcompile
8c7836f8668d patch 8.2.4323: Vim9: nested function name can start with "_"
Bram Moolenaar <Bram@vim.org>
parents: 27591
diff changeset
820 END
27595
d504745607bc patch 8.2.4324: Vim9: script-local function name can start with "_"
Bram Moolenaar <Bram@vim.org>
parents: 27593
diff changeset
821 v9.CheckScriptFailure(lines, 'E1267:')
d504745607bc patch 8.2.4324: Vim9: script-local function name can start with "_"
Bram Moolenaar <Bram@vim.org>
parents: 27593
diff changeset
822
d504745607bc patch 8.2.4324: Vim9: script-local function name can start with "_"
Bram Moolenaar <Bram@vim.org>
parents: 27593
diff changeset
823 lines =<< trim END
d504745607bc patch 8.2.4324: Vim9: script-local function name can start with "_"
Bram Moolenaar <Bram@vim.org>
parents: 27593
diff changeset
824 vim9script
d504745607bc patch 8.2.4324: Vim9: script-local function name can start with "_"
Bram Moolenaar <Bram@vim.org>
parents: 27593
diff changeset
825 def g:_Func()
d504745607bc patch 8.2.4324: Vim9: script-local function name can start with "_"
Bram Moolenaar <Bram@vim.org>
parents: 27593
diff changeset
826 echo 'bad'
d504745607bc patch 8.2.4324: Vim9: script-local function name can start with "_"
Bram Moolenaar <Bram@vim.org>
parents: 27593
diff changeset
827 enddef
d504745607bc patch 8.2.4324: Vim9: script-local function name can start with "_"
Bram Moolenaar <Bram@vim.org>
parents: 27593
diff changeset
828 END
d504745607bc patch 8.2.4324: Vim9: script-local function name can start with "_"
Bram Moolenaar <Bram@vim.org>
parents: 27593
diff changeset
829 v9.CheckScriptFailure(lines, 'E1267:')
d504745607bc patch 8.2.4324: Vim9: script-local function name can start with "_"
Bram Moolenaar <Bram@vim.org>
parents: 27593
diff changeset
830
d504745607bc patch 8.2.4324: Vim9: script-local function name can start with "_"
Bram Moolenaar <Bram@vim.org>
parents: 27593
diff changeset
831 lines =<< trim END
d504745607bc patch 8.2.4324: Vim9: script-local function name can start with "_"
Bram Moolenaar <Bram@vim.org>
parents: 27593
diff changeset
832 vim9script
27669
5c4ab8d4472c patch 8.2.4360: Vim9: allowing use of "s:" leads to inconsistencies
Bram Moolenaar <Bram@vim.org>
parents: 27611
diff changeset
833 def _Func()
27595
d504745607bc patch 8.2.4324: Vim9: script-local function name can start with "_"
Bram Moolenaar <Bram@vim.org>
parents: 27593
diff changeset
834 echo 'bad'
d504745607bc patch 8.2.4324: Vim9: script-local function name can start with "_"
Bram Moolenaar <Bram@vim.org>
parents: 27593
diff changeset
835 enddef
d504745607bc patch 8.2.4324: Vim9: script-local function name can start with "_"
Bram Moolenaar <Bram@vim.org>
parents: 27593
diff changeset
836 END
d504745607bc patch 8.2.4324: Vim9: script-local function name can start with "_"
Bram Moolenaar <Bram@vim.org>
parents: 27593
diff changeset
837 v9.CheckScriptFailure(lines, 'E1267:')
27593
8c7836f8668d patch 8.2.4323: Vim9: nested function name can start with "_"
Bram Moolenaar <Bram@vim.org>
parents: 27591
diff changeset
838
23112
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
839 # nested function inside conditional
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
840 lines =<< trim END
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
841 vim9script
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
842 var thecount = 0
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
843 if true
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
844 def Test(): number
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
845 def TheFunc(): number
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
846 thecount += 1
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
847 return thecount
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
848 enddef
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
849 return TheFunc()
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
850 enddef
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
851 endif
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
852 defcompile
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
853 assert_equal(1, Test())
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
854 assert_equal(2, Test())
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
855 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
856 v9.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
857
c308076e225e patch 8.2.2617: Vim9: script variable in block not found by function
Bram Moolenaar <Bram@vim.org>
parents: 24097
diff changeset
858 # 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
859 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
860 vim9script
c308076e225e patch 8.2.2617: Vim9: script variable in block not found by function
Bram Moolenaar <Bram@vim.org>
parents: 24097
diff changeset
861 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
862 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
863 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
864 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
865 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
866 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
867 enddef
c308076e225e patch 8.2.2617: Vim9: script variable in block not found by function
Bram Moolenaar <Bram@vim.org>
parents: 24097
diff changeset
868 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
869 enddef
c308076e225e patch 8.2.2617: Vim9: script variable in block not found by function
Bram Moolenaar <Bram@vim.org>
parents: 24097
diff changeset
870 endif
c308076e225e patch 8.2.2617: Vim9: script variable in block not found by function
Bram Moolenaar <Bram@vim.org>
parents: 24097
diff changeset
871 defcompile
c308076e225e patch 8.2.2617: Vim9: script variable in block not found by function
Bram Moolenaar <Bram@vim.org>
parents: 24097
diff changeset
872 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
873 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
874 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
875 v9.CheckScriptSuccess(lines)
25632
c204815f3058 patch 8.2.3352: Vim9: error for nested :enddef has wrong line number
Bram Moolenaar <Bram@vim.org>
parents: 25630
diff changeset
876
28173
b0c885507de4 patch 8.2.4612: Vim9: cannot use a recursive call in a nested function
Bram Moolenaar <Bram@vim.org>
parents: 28154
diff changeset
877 # nested function with recursive call
b0c885507de4 patch 8.2.4612: Vim9: cannot use a recursive call in a nested function
Bram Moolenaar <Bram@vim.org>
parents: 28154
diff changeset
878 lines =<< trim END
b0c885507de4 patch 8.2.4612: Vim9: cannot use a recursive call in a nested function
Bram Moolenaar <Bram@vim.org>
parents: 28154
diff changeset
879 vim9script
b0c885507de4 patch 8.2.4612: Vim9: cannot use a recursive call in a nested function
Bram Moolenaar <Bram@vim.org>
parents: 28154
diff changeset
880
b0c885507de4 patch 8.2.4612: Vim9: cannot use a recursive call in a nested function
Bram Moolenaar <Bram@vim.org>
parents: 28154
diff changeset
881 def MyFunc(): number
b0c885507de4 patch 8.2.4612: Vim9: cannot use a recursive call in a nested function
Bram Moolenaar <Bram@vim.org>
parents: 28154
diff changeset
882 def Fib(n: number): number
b0c885507de4 patch 8.2.4612: Vim9: cannot use a recursive call in a nested function
Bram Moolenaar <Bram@vim.org>
parents: 28154
diff changeset
883 if n < 2
b0c885507de4 patch 8.2.4612: Vim9: cannot use a recursive call in a nested function
Bram Moolenaar <Bram@vim.org>
parents: 28154
diff changeset
884 return 1
b0c885507de4 patch 8.2.4612: Vim9: cannot use a recursive call in a nested function
Bram Moolenaar <Bram@vim.org>
parents: 28154
diff changeset
885 endif
b0c885507de4 patch 8.2.4612: Vim9: cannot use a recursive call in a nested function
Bram Moolenaar <Bram@vim.org>
parents: 28154
diff changeset
886 return Fib(n - 2) + Fib(n - 1)
b0c885507de4 patch 8.2.4612: Vim9: cannot use a recursive call in a nested function
Bram Moolenaar <Bram@vim.org>
parents: 28154
diff changeset
887 enddef
b0c885507de4 patch 8.2.4612: Vim9: cannot use a recursive call in a nested function
Bram Moolenaar <Bram@vim.org>
parents: 28154
diff changeset
888
b0c885507de4 patch 8.2.4612: Vim9: cannot use a recursive call in a nested function
Bram Moolenaar <Bram@vim.org>
parents: 28154
diff changeset
889 return Fib(5)
b0c885507de4 patch 8.2.4612: Vim9: cannot use a recursive call in a nested function
Bram Moolenaar <Bram@vim.org>
parents: 28154
diff changeset
890 enddef
b0c885507de4 patch 8.2.4612: Vim9: cannot use a recursive call in a nested function
Bram Moolenaar <Bram@vim.org>
parents: 28154
diff changeset
891
b0c885507de4 patch 8.2.4612: Vim9: cannot use a recursive call in a nested function
Bram Moolenaar <Bram@vim.org>
parents: 28154
diff changeset
892 assert_equal(8, MyFunc())
b0c885507de4 patch 8.2.4612: Vim9: cannot use a recursive call in a nested function
Bram Moolenaar <Bram@vim.org>
parents: 28154
diff changeset
893 END
b0c885507de4 patch 8.2.4612: Vim9: cannot use a recursive call in a nested function
Bram Moolenaar <Bram@vim.org>
parents: 28154
diff changeset
894 v9.CheckScriptSuccess(lines)
b0c885507de4 patch 8.2.4612: Vim9: cannot use a recursive call in a nested function
Bram Moolenaar <Bram@vim.org>
parents: 28154
diff changeset
895
25632
c204815f3058 patch 8.2.3352: Vim9: error for nested :enddef has wrong line number
Bram Moolenaar <Bram@vim.org>
parents: 25630
diff changeset
896 lines =<< trim END
c204815f3058 patch 8.2.3352: Vim9: error for nested :enddef has wrong line number
Bram Moolenaar <Bram@vim.org>
parents: 25630
diff changeset
897 vim9script
c204815f3058 patch 8.2.3352: Vim9: error for nested :enddef has wrong line number
Bram Moolenaar <Bram@vim.org>
parents: 25630
diff changeset
898 def Outer()
c204815f3058 patch 8.2.3352: Vim9: error for nested :enddef has wrong line number
Bram Moolenaar <Bram@vim.org>
parents: 25630
diff changeset
899 def Inner()
c204815f3058 patch 8.2.3352: Vim9: error for nested :enddef has wrong line number
Bram Moolenaar <Bram@vim.org>
parents: 25630
diff changeset
900 echo 'hello'
c204815f3058 patch 8.2.3352: Vim9: error for nested :enddef has wrong line number
Bram Moolenaar <Bram@vim.org>
parents: 25630
diff changeset
901 enddef burp
c204815f3058 patch 8.2.3352: Vim9: error for nested :enddef has wrong line number
Bram Moolenaar <Bram@vim.org>
parents: 25630
diff changeset
902 enddef
c204815f3058 patch 8.2.3352: Vim9: error for nested :enddef has wrong line number
Bram Moolenaar <Bram@vim.org>
parents: 25630
diff changeset
903 defcompile
c204815f3058 patch 8.2.3352: Vim9: error for nested :enddef has wrong line number
Bram Moolenaar <Bram@vim.org>
parents: 25630
diff changeset
904 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
905 v9.CheckScriptFailure(lines, 'E1173: Text found after enddef: burp', 3)
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
906 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
907
29763
c0debb5290b5 patch 9.0.0221: accessing freed memory if compiling nested function fails
Bram Moolenaar <Bram@vim.org>
parents: 29759
diff changeset
908 def Test_nested_function_fails()
c0debb5290b5 patch 9.0.0221: accessing freed memory if compiling nested function fails
Bram Moolenaar <Bram@vim.org>
parents: 29759
diff changeset
909 var lines =<< trim END
c0debb5290b5 patch 9.0.0221: accessing freed memory if compiling nested function fails
Bram Moolenaar <Bram@vim.org>
parents: 29759
diff changeset
910 def T()
c0debb5290b5 patch 9.0.0221: accessing freed memory if compiling nested function fails
Bram Moolenaar <Bram@vim.org>
parents: 29759
diff changeset
911 def Func(g: string):string
c0debb5290b5 patch 9.0.0221: accessing freed memory if compiling nested function fails
Bram Moolenaar <Bram@vim.org>
parents: 29759
diff changeset
912 enddef
c0debb5290b5 patch 9.0.0221: accessing freed memory if compiling nested function fails
Bram Moolenaar <Bram@vim.org>
parents: 29759
diff changeset
913 Func()
c0debb5290b5 patch 9.0.0221: accessing freed memory if compiling nested function fails
Bram Moolenaar <Bram@vim.org>
parents: 29759
diff changeset
914 enddef
c0debb5290b5 patch 9.0.0221: accessing freed memory if compiling nested function fails
Bram Moolenaar <Bram@vim.org>
parents: 29759
diff changeset
915 silent! defcompile
c0debb5290b5 patch 9.0.0221: accessing freed memory if compiling nested function fails
Bram Moolenaar <Bram@vim.org>
parents: 29759
diff changeset
916 END
c0debb5290b5 patch 9.0.0221: accessing freed memory if compiling nested function fails
Bram Moolenaar <Bram@vim.org>
parents: 29759
diff changeset
917 v9.CheckScriptFailure(lines, 'E1069:')
c0debb5290b5 patch 9.0.0221: accessing freed memory if compiling nested function fails
Bram Moolenaar <Bram@vim.org>
parents: 29759
diff changeset
918 enddef
c0debb5290b5 patch 9.0.0221: accessing freed memory if compiling nested function fails
Bram Moolenaar <Bram@vim.org>
parents: 29759
diff changeset
919
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
920 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
921 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
922 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
923 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
924
21566
1e3e5058041c patch 8.2.1333: Vim9: memory leak when using nested global function
Bram Moolenaar <Bram@vim.org>
parents: 21564
diff changeset
925 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
926 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
927 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
928 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
929 endfunc
1e3e5058041c patch 8.2.1333: Vim9: memory leak when using nested global function
Bram Moolenaar <Bram@vim.org>
parents: 21564
diff changeset
930
21558
1c4d4aa22b37 patch 8.2.1329: Vim9: cannot define global function inside :def function
Bram Moolenaar <Bram@vim.org>
parents: 21544
diff changeset
931 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
932 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
933 vim9script
1c4d4aa22b37 patch 8.2.1329: Vim9: cannot define global function inside :def function
Bram Moolenaar <Bram@vim.org>
parents: 21544
diff changeset
934 def Outer()
1c4d4aa22b37 patch 8.2.1329: Vim9: cannot define global function inside :def function
Bram Moolenaar <Bram@vim.org>
parents: 21544
diff changeset
935 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
936 return 'inner'
1c4d4aa22b37 patch 8.2.1329: Vim9: cannot define global function inside :def function
Bram Moolenaar <Bram@vim.org>
parents: 21544
diff changeset
937 enddef
1c4d4aa22b37 patch 8.2.1329: Vim9: cannot define global function inside :def function
Bram Moolenaar <Bram@vim.org>
parents: 21544
diff changeset
938 enddef
21566
1e3e5058041c patch 8.2.1333: Vim9: memory leak when using nested global function
Bram Moolenaar <Bram@vim.org>
parents: 21564
diff changeset
939 defcompile
1e3e5058041c patch 8.2.1333: Vim9: memory leak when using nested global function
Bram Moolenaar <Bram@vim.org>
parents: 21564
diff changeset
940 Outer()
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
941 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
942 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
943 Outer()
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
944 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
945 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
946 Outer()
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
947 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
948 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
949 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
950 v9.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
951
9ade1da22402 patch 8.2.1344: Vim9: No test for trying to redefine global function
Bram Moolenaar <Bram@vim.org>
parents: 21586
diff changeset
952 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
953 vim9script
9ade1da22402 patch 8.2.1344: Vim9: No test for trying to redefine global function
Bram Moolenaar <Bram@vim.org>
parents: 21586
diff changeset
954 def Outer()
26323
3841da4eac23 patch 8.2.3692: Vim9: cannot use :func inside a :def function
Bram Moolenaar <Bram@vim.org>
parents: 26205
diff changeset
955 func g:Inner()
3841da4eac23 patch 8.2.3692: Vim9: cannot use :func inside a :def function
Bram Moolenaar <Bram@vim.org>
parents: 26205
diff changeset
956 return 'inner'
3841da4eac23 patch 8.2.3692: Vim9: cannot use :func inside a :def function
Bram Moolenaar <Bram@vim.org>
parents: 26205
diff changeset
957 endfunc
3841da4eac23 patch 8.2.3692: Vim9: cannot use :func inside a :def function
Bram Moolenaar <Bram@vim.org>
parents: 26205
diff changeset
958 enddef
3841da4eac23 patch 8.2.3692: Vim9: cannot use :func inside a :def function
Bram Moolenaar <Bram@vim.org>
parents: 26205
diff changeset
959 defcompile
3841da4eac23 patch 8.2.3692: Vim9: cannot use :func inside a :def function
Bram Moolenaar <Bram@vim.org>
parents: 26205
diff changeset
960 Outer()
3841da4eac23 patch 8.2.3692: Vim9: cannot use :func inside a :def function
Bram Moolenaar <Bram@vim.org>
parents: 26205
diff changeset
961 g:Inner()->assert_equal('inner')
3841da4eac23 patch 8.2.3692: Vim9: cannot use :func inside a :def function
Bram Moolenaar <Bram@vim.org>
parents: 26205
diff changeset
962 delfunc g:Inner
3841da4eac23 patch 8.2.3692: Vim9: cannot use :func inside a :def function
Bram Moolenaar <Bram@vim.org>
parents: 26205
diff changeset
963 Outer()
3841da4eac23 patch 8.2.3692: Vim9: cannot use :func inside a :def function
Bram Moolenaar <Bram@vim.org>
parents: 26205
diff changeset
964 g:Inner()->assert_equal('inner')
3841da4eac23 patch 8.2.3692: Vim9: cannot use :func inside a :def function
Bram Moolenaar <Bram@vim.org>
parents: 26205
diff changeset
965 delfunc g:Inner
3841da4eac23 patch 8.2.3692: Vim9: cannot use :func inside a :def function
Bram Moolenaar <Bram@vim.org>
parents: 26205
diff changeset
966 Outer()
3841da4eac23 patch 8.2.3692: Vim9: cannot use :func inside a :def function
Bram Moolenaar <Bram@vim.org>
parents: 26205
diff changeset
967 g:Inner()->assert_equal('inner')
3841da4eac23 patch 8.2.3692: Vim9: cannot use :func inside a :def function
Bram Moolenaar <Bram@vim.org>
parents: 26205
diff changeset
968 delfunc g:Inner
3841da4eac23 patch 8.2.3692: Vim9: cannot use :func inside a :def function
Bram Moolenaar <Bram@vim.org>
parents: 26205
diff changeset
969 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
970 v9.CheckScriptSuccess(lines)
26323
3841da4eac23 patch 8.2.3692: Vim9: cannot use :func inside a :def function
Bram Moolenaar <Bram@vim.org>
parents: 26205
diff changeset
971
3841da4eac23 patch 8.2.3692: Vim9: cannot use :func inside a :def function
Bram Moolenaar <Bram@vim.org>
parents: 26205
diff changeset
972 lines =<< trim END
3841da4eac23 patch 8.2.3692: Vim9: cannot use :func inside a :def function
Bram Moolenaar <Bram@vim.org>
parents: 26205
diff changeset
973 vim9script
3841da4eac23 patch 8.2.3692: Vim9: cannot use :func inside a :def function
Bram Moolenaar <Bram@vim.org>
parents: 26205
diff changeset
974 def Outer()
21588
9ade1da22402 patch 8.2.1344: Vim9: No test for trying to redefine global function
Bram Moolenaar <Bram@vim.org>
parents: 21586
diff changeset
975 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
976 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
977 enddef
9ade1da22402 patch 8.2.1344: Vim9: No test for trying to redefine global function
Bram Moolenaar <Bram@vim.org>
parents: 21586
diff changeset
978 enddef
9ade1da22402 patch 8.2.1344: Vim9: No test for trying to redefine global function
Bram Moolenaar <Bram@vim.org>
parents: 21586
diff changeset
979 defcompile
9ade1da22402 patch 8.2.1344: Vim9: No test for trying to redefine global function
Bram Moolenaar <Bram@vim.org>
parents: 21586
diff changeset
980 Outer()
9ade1da22402 patch 8.2.1344: Vim9: No test for trying to redefine global function
Bram Moolenaar <Bram@vim.org>
parents: 21586
diff changeset
981 Outer()
9ade1da22402 patch 8.2.1344: Vim9: No test for trying to redefine global function
Bram Moolenaar <Bram@vim.org>
parents: 21586
diff changeset
982 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
983 v9.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
984 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
985
d9c45474cac1 patch 8.2.1352: Vim9: no error for shadowing a script-local function
Bram Moolenaar <Bram@vim.org>
parents: 21602
diff changeset
986 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
987 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
988 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
989 def g:Inner()
23428
5807e3958e38 patch 8.2.2257: Vim9: using -> for lambda is ambiguous
Bram Moolenaar <Bram@vim.org>
parents: 23426
diff changeset
990 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
991 enddef
8e1427ac2bce patch 8.2.2191: Vim9: using wrong name with lambda in nested function
Bram Moolenaar <Bram@vim.org>
parents: 23289
diff changeset
992 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
993 enddef
8e1427ac2bce patch 8.2.2191: Vim9: using wrong name with lambda in nested function
Bram Moolenaar <Bram@vim.org>
parents: 23289
diff changeset
994 Outer()
8e1427ac2bce patch 8.2.2191: Vim9: using wrong name with lambda in nested function
Bram Moolenaar <Bram@vim.org>
parents: 23289
diff changeset
995 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
996 v9.CheckScriptSuccess(lines)
23291
8e1427ac2bce patch 8.2.2191: Vim9: using wrong name with lambda in nested function
Bram Moolenaar <Bram@vim.org>
parents: 23289
diff changeset
997 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
998
8e1427ac2bce patch 8.2.2191: Vim9: using wrong name with lambda in nested function
Bram Moolenaar <Bram@vim.org>
parents: 23289
diff changeset
999 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
1000 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
1001 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
1002 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
1003 enddef
d9c45474cac1 patch 8.2.1352: Vim9: no error for shadowing a script-local function
Bram Moolenaar <Bram@vim.org>
parents: 21602
diff changeset
1004 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
1005 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
1006 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
1007 enddef
d9c45474cac1 patch 8.2.1352: Vim9: no error for shadowing a script-local function
Bram Moolenaar <Bram@vim.org>
parents: 21602
diff changeset
1008 enddef
d9c45474cac1 patch 8.2.1352: Vim9: no error for shadowing a script-local function
Bram Moolenaar <Bram@vim.org>
parents: 21602
diff changeset
1009 defcompile
d9c45474cac1 patch 8.2.1352: Vim9: no error for shadowing a script-local function
Bram Moolenaar <Bram@vim.org>
parents: 21602
diff changeset
1010 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1011 v9.CheckScriptFailure(lines, "E1073:", 1)
26205
9e5e331828da patch 8.2.3634: error for already defined function uses wrong line number
Bram Moolenaar <Bram@vim.org>
parents: 26203
diff changeset
1012
9e5e331828da patch 8.2.3634: error for already defined function uses wrong line number
Bram Moolenaar <Bram@vim.org>
parents: 26203
diff changeset
1013 lines =<< trim END
9e5e331828da patch 8.2.3634: error for already defined function uses wrong line number
Bram Moolenaar <Bram@vim.org>
parents: 26203
diff changeset
1014 vim9script
9e5e331828da patch 8.2.3634: error for already defined function uses wrong line number
Bram Moolenaar <Bram@vim.org>
parents: 26203
diff changeset
1015 def Func()
9e5e331828da patch 8.2.3634: error for already defined function uses wrong line number
Bram Moolenaar <Bram@vim.org>
parents: 26203
diff changeset
1016 echo 'script'
9e5e331828da patch 8.2.3634: error for already defined function uses wrong line number
Bram Moolenaar <Bram@vim.org>
parents: 26203
diff changeset
1017 enddef
9e5e331828da patch 8.2.3634: error for already defined function uses wrong line number
Bram Moolenaar <Bram@vim.org>
parents: 26203
diff changeset
1018 def Func()
9e5e331828da patch 8.2.3634: error for already defined function uses wrong line number
Bram Moolenaar <Bram@vim.org>
parents: 26203
diff changeset
1019 echo 'script'
9e5e331828da patch 8.2.3634: error for already defined function uses wrong line number
Bram Moolenaar <Bram@vim.org>
parents: 26203
diff changeset
1020 enddef
9e5e331828da patch 8.2.3634: error for already defined function uses wrong line number
Bram Moolenaar <Bram@vim.org>
parents: 26203
diff changeset
1021 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1022 v9.CheckScriptFailure(lines, "E1073:", 5)
21558
1c4d4aa22b37 patch 8.2.1329: Vim9: cannot define global function inside :def function
Bram Moolenaar <Bram@vim.org>
parents: 21544
diff changeset
1023 enddef
1c4d4aa22b37 patch 8.2.1329: Vim9: cannot define global function inside :def function
Bram Moolenaar <Bram@vim.org>
parents: 21544
diff changeset
1024
22973
4c97c0747017 patch 8.2.2033: Vim9: :def without argument gives compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22969
diff changeset
1025 def DefListAll()
4c97c0747017 patch 8.2.2033: Vim9: :def without argument gives compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22969
diff changeset
1026 def
4c97c0747017 patch 8.2.2033: Vim9: :def without argument gives compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22969
diff changeset
1027 enddef
4c97c0747017 patch 8.2.2033: Vim9: :def without argument gives compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22969
diff changeset
1028
4c97c0747017 patch 8.2.2033: Vim9: :def without argument gives compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22969
diff changeset
1029 def DefListOne()
4c97c0747017 patch 8.2.2033: Vim9: :def without argument gives compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22969
diff changeset
1030 def DefListOne
4c97c0747017 patch 8.2.2033: Vim9: :def without argument gives compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22969
diff changeset
1031 enddef
4c97c0747017 patch 8.2.2033: Vim9: :def without argument gives compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22969
diff changeset
1032
4c97c0747017 patch 8.2.2033: Vim9: :def without argument gives compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22969
diff changeset
1033 def DefListMatches()
4c97c0747017 patch 8.2.2033: Vim9: :def without argument gives compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22969
diff changeset
1034 def /DefList
4c97c0747017 patch 8.2.2033: Vim9: :def without argument gives compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22969
diff changeset
1035 enddef
4c97c0747017 patch 8.2.2033: Vim9: :def without argument gives compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22969
diff changeset
1036
4c97c0747017 patch 8.2.2033: Vim9: :def without argument gives compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22969
diff changeset
1037 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
1038 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
1039 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
1040 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
1041
4c97c0747017 patch 8.2.2033: Vim9: :def without argument gives compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22969
diff changeset
1042 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
1043 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
1044
4c97c0747017 patch 8.2.2033: Vim9: :def without argument gives compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22969
diff changeset
1045 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
1046 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
1047 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
1048 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
1049 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
1050
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
1051 var lines =<< trim END
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
1052 vim9script
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
1053 def Func()
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
1054 def +Func+
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
1055 enddef
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
1056 defcompile
892303d45d2a patch 8.2.2102: Vim9: not all error messages tested
Bram Moolenaar <Bram@vim.org>
parents: 23102
diff changeset
1057 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1058 v9.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
1059 enddef
4c97c0747017 patch 8.2.2033: Vim9: :def without argument gives compilation error
Bram Moolenaar <Bram@vim.org>
parents: 22969
diff changeset
1060
27762
3196066c5795 patch 8.2.4407: Vim9: some code not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 27756
diff changeset
1061 def Test_global_function_not_found()
3196066c5795 patch 8.2.4407: Vim9: some code not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 27756
diff changeset
1062 var lines =<< trim END
3196066c5795 patch 8.2.4407: Vim9: some code not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 27756
diff changeset
1063 g:Ref = 123
3196066c5795 patch 8.2.4407: Vim9: some code not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 27756
diff changeset
1064 call g:Ref()
3196066c5795 patch 8.2.4407: Vim9: some code not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 27756
diff changeset
1065 END
3196066c5795 patch 8.2.4407: Vim9: some code not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 27756
diff changeset
1066 v9.CheckDefExecAndScriptFailure(lines, ['E117:', 'E1085:'], 2)
3196066c5795 patch 8.2.4407: Vim9: some code not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 27756
diff changeset
1067 enddef
3196066c5795 patch 8.2.4407: Vim9: some code not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 27756
diff changeset
1068
21586
5470c36ed7e6 patch 8.2.1343: Vim9: cannot find global function when using g:
Bram Moolenaar <Bram@vim.org>
parents: 21566
diff changeset
1069 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
1070 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
1071 vim9script
5470c36ed7e6 patch 8.2.1343: Vim9: cannot find global function when using g:
Bram Moolenaar <Bram@vim.org>
parents: 21566
diff changeset
1072 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
1073 return 'global'
5470c36ed7e6 patch 8.2.1343: Vim9: cannot find global function when using g:
Bram Moolenaar <Bram@vim.org>
parents: 21566
diff changeset
1074 enddef
5470c36ed7e6 patch 8.2.1343: Vim9: cannot find global function when using g:
Bram Moolenaar <Bram@vim.org>
parents: 21566
diff changeset
1075 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
1076 return 'local'
5470c36ed7e6 patch 8.2.1343: Vim9: cannot find global function when using g:
Bram Moolenaar <Bram@vim.org>
parents: 21566
diff changeset
1077 enddef
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1078 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
1079 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
1080 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
1081 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1082 v9.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
1083
7e1316c6d0eb patch 8.2.1423: Vim9: find global function when looking for script-local
Bram Moolenaar <Bram@vim.org>
parents: 21693
diff changeset
1084 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
1085 vim9script
7e1316c6d0eb patch 8.2.1423: Vim9: find global function when looking for script-local
Bram Moolenaar <Bram@vim.org>
parents: 21693
diff changeset
1086 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
1087 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
1088 enddef
27669
5c4ab8d4472c patch 8.2.4360: Vim9: allowing use of "s:" leads to inconsistencies
Bram Moolenaar <Bram@vim.org>
parents: 27611
diff changeset
1089 Funcy()
21747
7e1316c6d0eb patch 8.2.1423: Vim9: find global function when looking for script-local
Bram Moolenaar <Bram@vim.org>
parents: 21693
diff changeset
1090 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1091 v9.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
1092 enddef
5470c36ed7e6 patch 8.2.1343: Vim9: cannot find global function when using g:
Bram Moolenaar <Bram@vim.org>
parents: 21566
diff changeset
1093
22236
3d0632b260fd patch 8.2.1667: local function name cannot shadow a global function name
Bram Moolenaar <Bram@vim.org>
parents: 22222
diff changeset
1094 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
1095 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
1096 vim9script
3d0632b260fd patch 8.2.1667: local function name cannot shadow a global function name
Bram Moolenaar <Bram@vim.org>
parents: 22222
diff changeset
1097 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
1098 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
1099 enddef
3d0632b260fd patch 8.2.1667: local function name cannot shadow a global function name
Bram Moolenaar <Bram@vim.org>
parents: 22222
diff changeset
1100 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
1101 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
1102 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
1103 enddef
3d0632b260fd patch 8.2.1667: local function name cannot shadow a global function name
Bram Moolenaar <Bram@vim.org>
parents: 22222
diff changeset
1104 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
1105 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
1106 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
1107 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1108 v9.CheckScriptSuccess(lines)
22236
3d0632b260fd patch 8.2.1667: local function name cannot shadow a global function name
Bram Moolenaar <Bram@vim.org>
parents: 22222
diff changeset
1109
3d0632b260fd patch 8.2.1667: local function name cannot shadow a global function name
Bram Moolenaar <Bram@vim.org>
parents: 22222
diff changeset
1110 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
1111 vim9script
3d0632b260fd patch 8.2.1667: local function name cannot shadow a global function name
Bram Moolenaar <Bram@vim.org>
parents: 22222
diff changeset
1112 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
1113 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
1114 enddef
3d0632b260fd patch 8.2.1667: local function name cannot shadow a global function name
Bram Moolenaar <Bram@vim.org>
parents: 22222
diff changeset
1115 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
1116 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
1117 enddef
3d0632b260fd patch 8.2.1667: local function name cannot shadow a global function name
Bram Moolenaar <Bram@vim.org>
parents: 22222
diff changeset
1118 AnotherFunc()
3d0632b260fd patch 8.2.1667: local function name cannot shadow a global function name
Bram Moolenaar <Bram@vim.org>
parents: 22222
diff changeset
1119 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1120 v9.CheckScriptFailure(lines, 'E705:')
22236
3d0632b260fd patch 8.2.1667: local function name cannot shadow a global function name
Bram Moolenaar <Bram@vim.org>
parents: 22222
diff changeset
1121 delfunc g:Func
24355
beb395ca3e2f patch 8.2.2718: Vim9: no explicit test for using a global function without g:
Bram Moolenaar <Bram@vim.org>
parents: 24272
diff changeset
1122
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1123 # global function is not found with g: prefix
24355
beb395ca3e2f patch 8.2.2718: Vim9: no explicit test for using a global function without g:
Bram Moolenaar <Bram@vim.org>
parents: 24272
diff changeset
1124 lines =<< trim END
beb395ca3e2f patch 8.2.2718: Vim9: no explicit test for using a global function without g:
Bram Moolenaar <Bram@vim.org>
parents: 24272
diff changeset
1125 vim9script
beb395ca3e2f patch 8.2.2718: Vim9: no explicit test for using a global function without g:
Bram Moolenaar <Bram@vim.org>
parents: 24272
diff changeset
1126 def g:Func(): string
beb395ca3e2f patch 8.2.2718: Vim9: no explicit test for using a global function without g:
Bram Moolenaar <Bram@vim.org>
parents: 24272
diff changeset
1127 return 'global'
beb395ca3e2f patch 8.2.2718: Vim9: no explicit test for using a global function without g:
Bram Moolenaar <Bram@vim.org>
parents: 24272
diff changeset
1128 enddef
beb395ca3e2f patch 8.2.2718: Vim9: no explicit test for using a global function without g:
Bram Moolenaar <Bram@vim.org>
parents: 24272
diff changeset
1129 def AnotherFunc(): string
beb395ca3e2f patch 8.2.2718: Vim9: no explicit test for using a global function without g:
Bram Moolenaar <Bram@vim.org>
parents: 24272
diff changeset
1130 return Func()
beb395ca3e2f patch 8.2.2718: Vim9: no explicit test for using a global function without g:
Bram Moolenaar <Bram@vim.org>
parents: 24272
diff changeset
1131 enddef
beb395ca3e2f patch 8.2.2718: Vim9: no explicit test for using a global function without g:
Bram Moolenaar <Bram@vim.org>
parents: 24272
diff changeset
1132 assert_equal('global', AnotherFunc())
beb395ca3e2f patch 8.2.2718: Vim9: no explicit test for using a global function without g:
Bram Moolenaar <Bram@vim.org>
parents: 24272
diff changeset
1133 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1134 v9.CheckScriptFailure(lines, 'E117:')
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1135 delfunc g:Func
24355
beb395ca3e2f patch 8.2.2718: Vim9: no explicit test for using a global function without g:
Bram Moolenaar <Bram@vim.org>
parents: 24272
diff changeset
1136
beb395ca3e2f patch 8.2.2718: Vim9: no explicit test for using a global function without g:
Bram Moolenaar <Bram@vim.org>
parents: 24272
diff changeset
1137 lines =<< trim END
beb395ca3e2f patch 8.2.2718: Vim9: no explicit test for using a global function without g:
Bram Moolenaar <Bram@vim.org>
parents: 24272
diff changeset
1138 vim9script
beb395ca3e2f patch 8.2.2718: Vim9: no explicit test for using a global function without g:
Bram Moolenaar <Bram@vim.org>
parents: 24272
diff changeset
1139 def g:Func(): string
beb395ca3e2f patch 8.2.2718: Vim9: no explicit test for using a global function without g:
Bram Moolenaar <Bram@vim.org>
parents: 24272
diff changeset
1140 return 'global'
beb395ca3e2f patch 8.2.2718: Vim9: no explicit test for using a global function without g:
Bram Moolenaar <Bram@vim.org>
parents: 24272
diff changeset
1141 enddef
27464
a14c4d3e3260 patch 8.2.4260: Vim9: can still use a global function without g:
Bram Moolenaar <Bram@vim.org>
parents: 27457
diff changeset
1142 assert_equal('global', g:Func())
24355
beb395ca3e2f patch 8.2.2718: Vim9: no explicit test for using a global function without g:
Bram Moolenaar <Bram@vim.org>
parents: 24272
diff changeset
1143 delfunc g:Func
beb395ca3e2f patch 8.2.2718: Vim9: no explicit test for using a global function without g:
Bram Moolenaar <Bram@vim.org>
parents: 24272
diff changeset
1144 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1145 v9.CheckScriptSuccess(lines)
26974
fceb494e22de patch 8.2.4016: Vim9: incorrect error for argument that is shadowing var
Bram Moolenaar <Bram@vim.org>
parents: 26960
diff changeset
1146
fceb494e22de patch 8.2.4016: Vim9: incorrect error for argument that is shadowing var
Bram Moolenaar <Bram@vim.org>
parents: 26960
diff changeset
1147 # This does not shadow "i" which is visible only inside the for loop
fceb494e22de patch 8.2.4016: Vim9: incorrect error for argument that is shadowing var
Bram Moolenaar <Bram@vim.org>
parents: 26960
diff changeset
1148 lines =<< trim END
fceb494e22de patch 8.2.4016: Vim9: incorrect error for argument that is shadowing var
Bram Moolenaar <Bram@vim.org>
parents: 26960
diff changeset
1149 vim9script
fceb494e22de patch 8.2.4016: Vim9: incorrect error for argument that is shadowing var
Bram Moolenaar <Bram@vim.org>
parents: 26960
diff changeset
1150
fceb494e22de patch 8.2.4016: Vim9: incorrect error for argument that is shadowing var
Bram Moolenaar <Bram@vim.org>
parents: 26960
diff changeset
1151 def Foo(i: number)
fceb494e22de patch 8.2.4016: Vim9: incorrect error for argument that is shadowing var
Bram Moolenaar <Bram@vim.org>
parents: 26960
diff changeset
1152 echo i
fceb494e22de patch 8.2.4016: Vim9: incorrect error for argument that is shadowing var
Bram Moolenaar <Bram@vim.org>
parents: 26960
diff changeset
1153 enddef
fceb494e22de patch 8.2.4016: Vim9: incorrect error for argument that is shadowing var
Bram Moolenaar <Bram@vim.org>
parents: 26960
diff changeset
1154
fceb494e22de patch 8.2.4016: Vim9: incorrect error for argument that is shadowing var
Bram Moolenaar <Bram@vim.org>
parents: 26960
diff changeset
1155 for i in range(3)
fceb494e22de patch 8.2.4016: Vim9: incorrect error for argument that is shadowing var
Bram Moolenaar <Bram@vim.org>
parents: 26960
diff changeset
1156 # Foo() is compiled here
fceb494e22de patch 8.2.4016: Vim9: incorrect error for argument that is shadowing var
Bram Moolenaar <Bram@vim.org>
parents: 26960
diff changeset
1157 Foo(i)
fceb494e22de patch 8.2.4016: Vim9: incorrect error for argument that is shadowing var
Bram Moolenaar <Bram@vim.org>
parents: 26960
diff changeset
1158 endfor
fceb494e22de patch 8.2.4016: Vim9: incorrect error for argument that is shadowing var
Bram Moolenaar <Bram@vim.org>
parents: 26960
diff changeset
1159 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1160 v9.CheckScriptSuccess(lines)
22236
3d0632b260fd patch 8.2.1667: local function name cannot shadow a global function name
Bram Moolenaar <Bram@vim.org>
parents: 22222
diff changeset
1161 enddef
3d0632b260fd patch 8.2.1667: local function name cannot shadow a global function name
Bram Moolenaar <Bram@vim.org>
parents: 22222
diff changeset
1162
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1163 func TakesOneArg(arg)
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1164 echo a:arg
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1165 endfunc
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1166
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1167 def Test_call_wrong_args()
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1168 v9.CheckDefFailure(['g:TakesOneArg()'], 'E119:')
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1169 v9.CheckDefFailure(['g:TakesOneArg(11, 22)'], 'E118:')
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1170 v9.CheckDefFailure(['bufnr(xxx)'], 'E1001:')
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1171 v9.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
1172
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1173 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
1174 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
1175 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
1176 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
1177 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
1178 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
1179 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1180 v9.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
1181
26851
15913ba6363e patch 8.2.3954: Vim9: no error for shadowing if script var is declared later
Bram Moolenaar <Bram@vim.org>
parents: 26845
diff changeset
1182 # argument name declared earlier is found when declaring a function
22318
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
1183 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
1184 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
1185 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
1186 def FuncOne(name: string)
27609
766a329fe5bb patch 8.2.4331: Vim9: no test for existing script variable in block
Bram Moolenaar <Bram@vim.org>
parents: 27595
diff changeset
1187 echo name
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
1188 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
1189 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1190 v9.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
1191
27609
766a329fe5bb patch 8.2.4331: Vim9: no test for existing script variable in block
Bram Moolenaar <Bram@vim.org>
parents: 27595
diff changeset
1192 # same, inside the same block
766a329fe5bb patch 8.2.4331: Vim9: no test for existing script variable in block
Bram Moolenaar <Bram@vim.org>
parents: 27595
diff changeset
1193 lines =<< trim END
766a329fe5bb patch 8.2.4331: Vim9: no test for existing script variable in block
Bram Moolenaar <Bram@vim.org>
parents: 27595
diff changeset
1194 vim9script
766a329fe5bb patch 8.2.4331: Vim9: no test for existing script variable in block
Bram Moolenaar <Bram@vim.org>
parents: 27595
diff changeset
1195 if true
766a329fe5bb patch 8.2.4331: Vim9: no test for existing script variable in block
Bram Moolenaar <Bram@vim.org>
parents: 27595
diff changeset
1196 var name = 'piet'
766a329fe5bb patch 8.2.4331: Vim9: no test for existing script variable in block
Bram Moolenaar <Bram@vim.org>
parents: 27595
diff changeset
1197 def FuncOne(name: string)
766a329fe5bb patch 8.2.4331: Vim9: no test for existing script variable in block
Bram Moolenaar <Bram@vim.org>
parents: 27595
diff changeset
1198 echo name
766a329fe5bb patch 8.2.4331: Vim9: no test for existing script variable in block
Bram Moolenaar <Bram@vim.org>
parents: 27595
diff changeset
1199 enddef
766a329fe5bb patch 8.2.4331: Vim9: no test for existing script variable in block
Bram Moolenaar <Bram@vim.org>
parents: 27595
diff changeset
1200 endif
766a329fe5bb patch 8.2.4331: Vim9: no test for existing script variable in block
Bram Moolenaar <Bram@vim.org>
parents: 27595
diff changeset
1201 END
766a329fe5bb patch 8.2.4331: Vim9: no test for existing script variable in block
Bram Moolenaar <Bram@vim.org>
parents: 27595
diff changeset
1202 v9.CheckScriptFailure(lines, 'E1168:')
766a329fe5bb patch 8.2.4331: Vim9: no test for existing script variable in block
Bram Moolenaar <Bram@vim.org>
parents: 27595
diff changeset
1203
766a329fe5bb patch 8.2.4331: Vim9: no test for existing script variable in block
Bram Moolenaar <Bram@vim.org>
parents: 27595
diff changeset
1204 # variable in other block is OK
766a329fe5bb patch 8.2.4331: Vim9: no test for existing script variable in block
Bram Moolenaar <Bram@vim.org>
parents: 27595
diff changeset
1205 lines =<< trim END
766a329fe5bb patch 8.2.4331: Vim9: no test for existing script variable in block
Bram Moolenaar <Bram@vim.org>
parents: 27595
diff changeset
1206 vim9script
766a329fe5bb patch 8.2.4331: Vim9: no test for existing script variable in block
Bram Moolenaar <Bram@vim.org>
parents: 27595
diff changeset
1207 if true
766a329fe5bb patch 8.2.4331: Vim9: no test for existing script variable in block
Bram Moolenaar <Bram@vim.org>
parents: 27595
diff changeset
1208 var name = 'piet'
766a329fe5bb patch 8.2.4331: Vim9: no test for existing script variable in block
Bram Moolenaar <Bram@vim.org>
parents: 27595
diff changeset
1209 endif
766a329fe5bb patch 8.2.4331: Vim9: no test for existing script variable in block
Bram Moolenaar <Bram@vim.org>
parents: 27595
diff changeset
1210 def FuncOne(name: string)
766a329fe5bb patch 8.2.4331: Vim9: no test for existing script variable in block
Bram Moolenaar <Bram@vim.org>
parents: 27595
diff changeset
1211 echo name
766a329fe5bb patch 8.2.4331: Vim9: no test for existing script variable in block
Bram Moolenaar <Bram@vim.org>
parents: 27595
diff changeset
1212 enddef
766a329fe5bb patch 8.2.4331: Vim9: no test for existing script variable in block
Bram Moolenaar <Bram@vim.org>
parents: 27595
diff changeset
1213 END
766a329fe5bb patch 8.2.4331: Vim9: no test for existing script variable in block
Bram Moolenaar <Bram@vim.org>
parents: 27595
diff changeset
1214 v9.CheckScriptSuccess(lines)
766a329fe5bb patch 8.2.4331: Vim9: no test for existing script variable in block
Bram Moolenaar <Bram@vim.org>
parents: 27595
diff changeset
1215
27611
e311a80f8cbe patch 8.2.4332: Vim9: incomplete test for existing script variable in block
Bram Moolenaar <Bram@vim.org>
parents: 27609
diff changeset
1216 # with another variable in another block
e311a80f8cbe patch 8.2.4332: Vim9: incomplete test for existing script variable in block
Bram Moolenaar <Bram@vim.org>
parents: 27609
diff changeset
1217 lines =<< trim END
e311a80f8cbe patch 8.2.4332: Vim9: incomplete test for existing script variable in block
Bram Moolenaar <Bram@vim.org>
parents: 27609
diff changeset
1218 vim9script
e311a80f8cbe patch 8.2.4332: Vim9: incomplete test for existing script variable in block
Bram Moolenaar <Bram@vim.org>
parents: 27609
diff changeset
1219 if true
e311a80f8cbe patch 8.2.4332: Vim9: incomplete test for existing script variable in block
Bram Moolenaar <Bram@vim.org>
parents: 27609
diff changeset
1220 var name = 'piet'
e311a80f8cbe patch 8.2.4332: Vim9: incomplete test for existing script variable in block
Bram Moolenaar <Bram@vim.org>
parents: 27609
diff changeset
1221 # define a function so that the variable isn't cleared
e311a80f8cbe patch 8.2.4332: Vim9: incomplete test for existing script variable in block
Bram Moolenaar <Bram@vim.org>
parents: 27609
diff changeset
1222 def GetItem(): string
e311a80f8cbe patch 8.2.4332: Vim9: incomplete test for existing script variable in block
Bram Moolenaar <Bram@vim.org>
parents: 27609
diff changeset
1223 return item
e311a80f8cbe patch 8.2.4332: Vim9: incomplete test for existing script variable in block
Bram Moolenaar <Bram@vim.org>
parents: 27609
diff changeset
1224 enddef
e311a80f8cbe patch 8.2.4332: Vim9: incomplete test for existing script variable in block
Bram Moolenaar <Bram@vim.org>
parents: 27609
diff changeset
1225 endif
e311a80f8cbe patch 8.2.4332: Vim9: incomplete test for existing script variable in block
Bram Moolenaar <Bram@vim.org>
parents: 27609
diff changeset
1226 if true
e311a80f8cbe patch 8.2.4332: Vim9: incomplete test for existing script variable in block
Bram Moolenaar <Bram@vim.org>
parents: 27609
diff changeset
1227 var name = 'peter'
e311a80f8cbe patch 8.2.4332: Vim9: incomplete test for existing script variable in block
Bram Moolenaar <Bram@vim.org>
parents: 27609
diff changeset
1228 def FuncOne(name: string)
e311a80f8cbe patch 8.2.4332: Vim9: incomplete test for existing script variable in block
Bram Moolenaar <Bram@vim.org>
parents: 27609
diff changeset
1229 echo name
e311a80f8cbe patch 8.2.4332: Vim9: incomplete test for existing script variable in block
Bram Moolenaar <Bram@vim.org>
parents: 27609
diff changeset
1230 enddef
e311a80f8cbe patch 8.2.4332: Vim9: incomplete test for existing script variable in block
Bram Moolenaar <Bram@vim.org>
parents: 27609
diff changeset
1231 endif
e311a80f8cbe patch 8.2.4332: Vim9: incomplete test for existing script variable in block
Bram Moolenaar <Bram@vim.org>
parents: 27609
diff changeset
1232 END
e311a80f8cbe patch 8.2.4332: Vim9: incomplete test for existing script variable in block
Bram Moolenaar <Bram@vim.org>
parents: 27609
diff changeset
1233 v9.CheckScriptFailure(lines, 'E1168:')
e311a80f8cbe patch 8.2.4332: Vim9: incomplete test for existing script variable in block
Bram Moolenaar <Bram@vim.org>
parents: 27609
diff changeset
1234
e311a80f8cbe patch 8.2.4332: Vim9: incomplete test for existing script variable in block
Bram Moolenaar <Bram@vim.org>
parents: 27609
diff changeset
1235 # only variable in another block is OK
e311a80f8cbe patch 8.2.4332: Vim9: incomplete test for existing script variable in block
Bram Moolenaar <Bram@vim.org>
parents: 27609
diff changeset
1236 lines =<< trim END
e311a80f8cbe patch 8.2.4332: Vim9: incomplete test for existing script variable in block
Bram Moolenaar <Bram@vim.org>
parents: 27609
diff changeset
1237 vim9script
e311a80f8cbe patch 8.2.4332: Vim9: incomplete test for existing script variable in block
Bram Moolenaar <Bram@vim.org>
parents: 27609
diff changeset
1238 if true
e311a80f8cbe patch 8.2.4332: Vim9: incomplete test for existing script variable in block
Bram Moolenaar <Bram@vim.org>
parents: 27609
diff changeset
1239 var name = 'piet'
e311a80f8cbe patch 8.2.4332: Vim9: incomplete test for existing script variable in block
Bram Moolenaar <Bram@vim.org>
parents: 27609
diff changeset
1240 # define a function so that the variable isn't cleared
e311a80f8cbe patch 8.2.4332: Vim9: incomplete test for existing script variable in block
Bram Moolenaar <Bram@vim.org>
parents: 27609
diff changeset
1241 def GetItem(): string
e311a80f8cbe patch 8.2.4332: Vim9: incomplete test for existing script variable in block
Bram Moolenaar <Bram@vim.org>
parents: 27609
diff changeset
1242 return item
e311a80f8cbe patch 8.2.4332: Vim9: incomplete test for existing script variable in block
Bram Moolenaar <Bram@vim.org>
parents: 27609
diff changeset
1243 enddef
e311a80f8cbe patch 8.2.4332: Vim9: incomplete test for existing script variable in block
Bram Moolenaar <Bram@vim.org>
parents: 27609
diff changeset
1244 endif
e311a80f8cbe patch 8.2.4332: Vim9: incomplete test for existing script variable in block
Bram Moolenaar <Bram@vim.org>
parents: 27609
diff changeset
1245 if true
e311a80f8cbe patch 8.2.4332: Vim9: incomplete test for existing script variable in block
Bram Moolenaar <Bram@vim.org>
parents: 27609
diff changeset
1246 def FuncOne(name: string)
e311a80f8cbe patch 8.2.4332: Vim9: incomplete test for existing script variable in block
Bram Moolenaar <Bram@vim.org>
parents: 27609
diff changeset
1247 echo name
e311a80f8cbe patch 8.2.4332: Vim9: incomplete test for existing script variable in block
Bram Moolenaar <Bram@vim.org>
parents: 27609
diff changeset
1248 enddef
e311a80f8cbe patch 8.2.4332: Vim9: incomplete test for existing script variable in block
Bram Moolenaar <Bram@vim.org>
parents: 27609
diff changeset
1249 endif
e311a80f8cbe patch 8.2.4332: Vim9: incomplete test for existing script variable in block
Bram Moolenaar <Bram@vim.org>
parents: 27609
diff changeset
1250 END
e311a80f8cbe patch 8.2.4332: Vim9: incomplete test for existing script variable in block
Bram Moolenaar <Bram@vim.org>
parents: 27609
diff changeset
1251 v9.CheckScriptSuccess(lines)
e311a80f8cbe patch 8.2.4332: Vim9: incomplete test for existing script variable in block
Bram Moolenaar <Bram@vim.org>
parents: 27609
diff changeset
1252
26851
15913ba6363e patch 8.2.3954: Vim9: no error for shadowing if script var is declared later
Bram Moolenaar <Bram@vim.org>
parents: 26845
diff changeset
1253 # argument name declared later is only found when compiling
15913ba6363e patch 8.2.3954: Vim9: no error for shadowing if script var is declared later
Bram Moolenaar <Bram@vim.org>
parents: 26845
diff changeset
1254 lines =<< trim END
15913ba6363e patch 8.2.3954: Vim9: no error for shadowing if script var is declared later
Bram Moolenaar <Bram@vim.org>
parents: 26845
diff changeset
1255 vim9script
15913ba6363e patch 8.2.3954: Vim9: no error for shadowing if script var is declared later
Bram Moolenaar <Bram@vim.org>
parents: 26845
diff changeset
1256 def FuncOne(name: string)
15913ba6363e patch 8.2.3954: Vim9: no error for shadowing if script var is declared later
Bram Moolenaar <Bram@vim.org>
parents: 26845
diff changeset
1257 echo nr
15913ba6363e patch 8.2.3954: Vim9: no error for shadowing if script var is declared later
Bram Moolenaar <Bram@vim.org>
parents: 26845
diff changeset
1258 enddef
15913ba6363e patch 8.2.3954: Vim9: no error for shadowing if script var is declared later
Bram Moolenaar <Bram@vim.org>
parents: 26845
diff changeset
1259 var name = 'piet'
15913ba6363e patch 8.2.3954: Vim9: no error for shadowing if script var is declared later
Bram Moolenaar <Bram@vim.org>
parents: 26845
diff changeset
1260 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1261 v9.CheckScriptSuccess(lines)
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1262 v9.CheckScriptFailure(lines + ['defcompile'], 'E1168:')
26851
15913ba6363e patch 8.2.3954: Vim9: no error for shadowing if script var is declared later
Bram Moolenaar <Bram@vim.org>
parents: 26845
diff changeset
1263
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
1264 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
1265 vim9script
22318
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
1266 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
1267 echo nr
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
1268 enddef
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
1269 def FuncTwo()
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
1270 FuncOne()
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
1271 enddef
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
1272 defcompile
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
1273 END
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
1274 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
1275 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
1276 try
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
1277 source Xscript
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
1278 catch
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
1279 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
1280 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
1281 didCatch = true
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
1282 endtry
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
1283 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
1284
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
1285 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
1286 vim9script
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
1287 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
1288 echo nr
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
1289 enddef
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
1290 def FuncTwo()
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
1291 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
1292 enddef
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
1293 defcompile
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
1294 END
30209
a970b48c25a3 patch 9.0.0440: crash when using mkdir() with "R" flag in compiled function
Bram Moolenaar <Bram@vim.org>
parents: 30192
diff changeset
1295 writefile(lines, 'Xscript', 'D')
22318
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
1296 didCatch = false
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
1297 try
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
1298 source Xscript
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
1299 catch
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
1300 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
1301 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
1302 didCatch = true
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
1303 endtry
3f5f96a8dd83 patch 8.2.1708: Vim9: error message for function has unpritable characters
Bram Moolenaar <Bram@vim.org>
parents: 22314
diff changeset
1304 assert_true(didCatch)
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1305 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1306
23252
35583da6397e patch 8.2.2172: Vim9: number of arguments is not always checked
Bram Moolenaar <Bram@vim.org>
parents: 23249
diff changeset
1307 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
1308 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
1309 vim9script
35583da6397e patch 8.2.2172: Vim9: number of arguments is not always checked
Bram Moolenaar <Bram@vim.org>
parents: 23249
diff changeset
1310 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
1311 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
1312 enddef
35583da6397e patch 8.2.2172: Vim9: number of arguments is not always checked
Bram Moolenaar <Bram@vim.org>
parents: 23249
diff changeset
1313 def Testme()
35583da6397e patch 8.2.2172: Vim9: number of arguments is not always checked
Bram Moolenaar <Bram@vim.org>
parents: 23249
diff changeset
1314 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
1315 END
35583da6397e patch 8.2.2172: Vim9: number of arguments is not always checked
Bram Moolenaar <Bram@vim.org>
parents: 23249
diff changeset
1316 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
1317 enddef
35583da6397e patch 8.2.2172: Vim9: number of arguments is not always checked
Bram Moolenaar <Bram@vim.org>
parents: 23249
diff changeset
1318 Testme()
35583da6397e patch 8.2.2172: Vim9: number of arguments is not always checked
Bram Moolenaar <Bram@vim.org>
parents: 23249
diff changeset
1319 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1320 v9.CheckScriptSuccess(head + ["funcMap['func']('str', 123, [1, 2, 3])"] + tail)
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1321
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1322 v9.CheckScriptFailure(head + ["funcMap['func']('str', 123)"] + tail, 'E119:')
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1323 v9.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
1324
27ca5534a408 patch 8.2.2306: Vim9: when using function reference type is not checked
Bram Moolenaar <Bram@vim.org>
parents: 23511
diff changeset
1325 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
1326 vim9script
27ca5534a408 patch 8.2.2306: Vim9: when using function reference type is not checked
Bram Moolenaar <Bram@vim.org>
parents: 23511
diff changeset
1327 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
1328 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
1329 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
1330 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1331 v9.CheckScriptFailure(lines, 'E1013: Argument 1: type mismatch, expected number but got bool', 4)
23527
27ca5534a408 patch 8.2.2306: Vim9: when using function reference type is not checked
Bram Moolenaar <Bram@vim.org>
parents: 23511
diff changeset
1332
27ca5534a408 patch 8.2.2306: Vim9: when using function reference type is not checked
Bram Moolenaar <Bram@vim.org>
parents: 23511
diff changeset
1333 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
1334 vim9script
27ca5534a408 patch 8.2.2306: Vim9: when using function reference type is not checked
Bram Moolenaar <Bram@vim.org>
parents: 23511
diff changeset
1335 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
1336 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
1337 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
1338 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1339 v9.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
1340 enddef
35583da6397e patch 8.2.2172: Vim9: number of arguments is not always checked
Bram Moolenaar <Bram@vim.org>
parents: 23249
diff changeset
1341
22816
8a5369f5f2b4 patch 8.2.1956: Vim9: cannot specify argument types for lambda
Bram Moolenaar <Bram@vim.org>
parents: 22760
diff changeset
1342 def Test_call_lambda_args()
24400
62e978382fa0 patch 8.2.2740: Vim9: lambda with varargs doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 24398
diff changeset
1343 var lines =<< trim END
62e978382fa0 patch 8.2.2740: Vim9: lambda with varargs doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 24398
diff changeset
1344 var Callback = (..._) => 'anything'
62e978382fa0 patch 8.2.2740: Vim9: lambda with varargs doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 24398
diff changeset
1345 assert_equal('anything', Callback())
62e978382fa0 patch 8.2.2740: Vim9: lambda with varargs doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 24398
diff changeset
1346 assert_equal('anything', Callback(1))
62e978382fa0 patch 8.2.2740: Vim9: lambda with varargs doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 24398
diff changeset
1347 assert_equal('anything', Callback('a', 2))
24402
009a540f16a6 patch 8.2.2741: Vim9: Partial call does not check right arguments
Bram Moolenaar <Bram@vim.org>
parents: 24400
diff changeset
1348
009a540f16a6 patch 8.2.2741: Vim9: Partial call does not check right arguments
Bram Moolenaar <Bram@vim.org>
parents: 24400
diff changeset
1349 assert_equal('xyz', ((a: string): string => a)('xyz'))
24400
62e978382fa0 patch 8.2.2740: Vim9: lambda with varargs doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 24398
diff changeset
1350 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1351 v9.CheckDefAndScriptSuccess(lines)
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1352
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1353 v9.CheckDefFailure(['echo ((i) => 0)()'],
23428
5807e3958e38 patch 8.2.2257: Vim9: using -> for lambda is ambiguous
Bram Moolenaar <Bram@vim.org>
parents: 23426
diff changeset
1354 '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
1355
24400
62e978382fa0 patch 8.2.2740: Vim9: lambda with varargs doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 24398
diff changeset
1356 lines =<< trim END
23428
5807e3958e38 patch 8.2.2257: Vim9: using -> for lambda is ambiguous
Bram Moolenaar <Bram@vim.org>
parents: 23426
diff changeset
1357 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
1358 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
1359 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1360 v9.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
1361
62fe9a7fd582 patch 8.2.2283: Vim9: crash when lambda has fewer arguments than expected
Bram Moolenaar <Bram@vim.org>
parents: 23444
diff changeset
1362 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
1363 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
1364 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
1365 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1366 v9.CheckDefAndScriptFailure(lines, 'E1012:')
23481
62fe9a7fd582 patch 8.2.2283: Vim9: crash when lambda has fewer arguments than expected
Bram Moolenaar <Bram@vim.org>
parents: 23444
diff changeset
1367
62fe9a7fd582 patch 8.2.2283: Vim9: crash when lambda has fewer arguments than expected
Bram Moolenaar <Bram@vim.org>
parents: 23444
diff changeset
1368 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
1369 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
1370 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
1371 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1372 v9.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
1373
308d29307910 patch 8.2.2558: no error if a lambda argument shadows a variable
Bram Moolenaar <Bram@vim.org>
parents: 23996
diff changeset
1374 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
1375 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
1376 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
1377 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
1378 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1379 v9.CheckDefFailure(lines, 'E1167:')
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1380 v9.CheckScriptFailure(['vim9script'] + lines, 'E1168:')
24033
308d29307910 patch 8.2.2558: no error if a lambda argument shadows a variable
Bram Moolenaar <Bram@vim.org>
parents: 23996
diff changeset
1381
308d29307910 patch 8.2.2558: no error if a lambda argument shadows a variable
Bram Moolenaar <Bram@vim.org>
parents: 23996
diff changeset
1382 lines =<< trim END
25038
efdb9608cc11 patch 8.2.3056: Vim9: using default value in lambda gives confusing error
Bram Moolenaar <Bram@vim.org>
parents: 25030
diff changeset
1383 var Ref: func(any, ?any): bool
efdb9608cc11 patch 8.2.3056: Vim9: using default value in lambda gives confusing error
Bram Moolenaar <Bram@vim.org>
parents: 25030
diff changeset
1384 Ref = (_, y = 1) => false
efdb9608cc11 patch 8.2.3056: Vim9: using default value in lambda gives confusing error
Bram Moolenaar <Bram@vim.org>
parents: 25030
diff changeset
1385 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1386 v9.CheckDefAndScriptFailure(lines, 'E1172:')
25038
efdb9608cc11 patch 8.2.3056: Vim9: using default value in lambda gives confusing error
Bram Moolenaar <Bram@vim.org>
parents: 25030
diff changeset
1387
efdb9608cc11 patch 8.2.3056: Vim9: using default value in lambda gives confusing error
Bram Moolenaar <Bram@vim.org>
parents: 25030
diff changeset
1388 lines =<< trim END
25042
3f39b6b73019 patch 8.2.3058: Vim9: cannot use ternary operator in parenthesis
Bram Moolenaar <Bram@vim.org>
parents: 25038
diff changeset
1389 var a = 0
3f39b6b73019 patch 8.2.3058: Vim9: cannot use ternary operator in parenthesis
Bram Moolenaar <Bram@vim.org>
parents: 25038
diff changeset
1390 var b = (a == 0 ? 1 : 2)
3f39b6b73019 patch 8.2.3058: Vim9: cannot use ternary operator in parenthesis
Bram Moolenaar <Bram@vim.org>
parents: 25038
diff changeset
1391 assert_equal(1, b)
25046
2f702d19013a patch 8.2.3060: Vim9: cannot use ternary operator in parenthesis
Bram Moolenaar <Bram@vim.org>
parents: 25042
diff changeset
1392 var txt = 'a'
2f702d19013a patch 8.2.3060: Vim9: cannot use ternary operator in parenthesis
Bram Moolenaar <Bram@vim.org>
parents: 25042
diff changeset
1393 b = (txt =~ 'x' ? 1 : 2)
2f702d19013a patch 8.2.3060: Vim9: cannot use ternary operator in parenthesis
Bram Moolenaar <Bram@vim.org>
parents: 25042
diff changeset
1394 assert_equal(2, b)
25042
3f39b6b73019 patch 8.2.3058: Vim9: cannot use ternary operator in parenthesis
Bram Moolenaar <Bram@vim.org>
parents: 25038
diff changeset
1395 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1396 v9.CheckDefAndScriptSuccess(lines)
25042
3f39b6b73019 patch 8.2.3058: Vim9: cannot use ternary operator in parenthesis
Bram Moolenaar <Bram@vim.org>
parents: 25038
diff changeset
1397
3f39b6b73019 patch 8.2.3058: Vim9: cannot use ternary operator in parenthesis
Bram Moolenaar <Bram@vim.org>
parents: 25038
diff changeset
1398 lines =<< trim 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
1399 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
1400 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
1401 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
1402 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
1403 enddef
308d29307910 patch 8.2.2558: no error if a lambda argument shadows a variable
Bram Moolenaar <Bram@vim.org>
parents: 23996
diff changeset
1404 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1405 v9.CheckDefFailure(lines, 'E1167:')
24033
308d29307910 patch 8.2.2558: no error if a lambda argument shadows a variable
Bram Moolenaar <Bram@vim.org>
parents: 23996
diff changeset
1406
308d29307910 patch 8.2.2558: no error if a lambda argument shadows a variable
Bram Moolenaar <Bram@vim.org>
parents: 23996
diff changeset
1407 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
1408 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
1409 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
1410 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
1411 enddef
308d29307910 patch 8.2.2558: no error if a lambda argument shadows a variable
Bram Moolenaar <Bram@vim.org>
parents: 23996
diff changeset
1412 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1413 v9.CheckDefFailure(lines, 'E1167:')
24398
bed5ec739304 patch 8.2.2739: Vim9: a lambda accepts too many arguments at the script level
Bram Moolenaar <Bram@vim.org>
parents: 24371
diff changeset
1414
bed5ec739304 patch 8.2.2739: Vim9: a lambda accepts too many arguments at the script level
Bram Moolenaar <Bram@vim.org>
parents: 24371
diff changeset
1415 lines =<< trim END
bed5ec739304 patch 8.2.2739: Vim9: a lambda accepts too many arguments at the script level
Bram Moolenaar <Bram@vim.org>
parents: 24371
diff changeset
1416 echo ((a) => a)('aa', 'bb')
bed5ec739304 patch 8.2.2739: Vim9: a lambda accepts too many arguments at the script level
Bram Moolenaar <Bram@vim.org>
parents: 24371
diff changeset
1417 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1418 v9.CheckDefAndScriptFailure(lines, 'E118:', 1)
25316
0716cc2e4a8b patch 8.2.3195: Vim9: unclear error when passing too many arguments to lambda
Bram Moolenaar <Bram@vim.org>
parents: 25276
diff changeset
1419
0716cc2e4a8b patch 8.2.3195: Vim9: unclear error when passing too many arguments to lambda
Bram Moolenaar <Bram@vim.org>
parents: 25276
diff changeset
1420 lines =<< trim END
0716cc2e4a8b patch 8.2.3195: Vim9: unclear error when passing too many arguments to lambda
Bram Moolenaar <Bram@vim.org>
parents: 25276
diff changeset
1421 echo 'aa'->((a) => a)('bb')
0716cc2e4a8b patch 8.2.3195: Vim9: unclear error when passing too many arguments to lambda
Bram Moolenaar <Bram@vim.org>
parents: 25276
diff changeset
1422 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1423 v9.CheckDefFailure(lines, 'E118: Too many arguments for function: ->((a) => a)(''bb'')', 1)
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1424 v9.CheckScriptFailure(['vim9script'] + lines, 'E118: Too many arguments for function: <lambda>', 2)
22816
8a5369f5f2b4 patch 8.2.1956: Vim9: cannot specify argument types for lambda
Bram Moolenaar <Bram@vim.org>
parents: 22760
diff changeset
1425 enddef
8a5369f5f2b4 patch 8.2.1956: Vim9: cannot specify argument types for lambda
Bram Moolenaar <Bram@vim.org>
parents: 22760
diff changeset
1426
26203
a968027f8a2c patch 8.2.3633: Vim9: line number of lambda is off by one
Bram Moolenaar <Bram@vim.org>
parents: 26053
diff changeset
1427 def Test_lambda_line_nr()
a968027f8a2c patch 8.2.3633: Vim9: line number of lambda is off by one
Bram Moolenaar <Bram@vim.org>
parents: 26053
diff changeset
1428 var lines =<< trim END
a968027f8a2c patch 8.2.3633: Vim9: line number of lambda is off by one
Bram Moolenaar <Bram@vim.org>
parents: 26053
diff changeset
1429 vim9script
a968027f8a2c patch 8.2.3633: Vim9: line number of lambda is off by one
Bram Moolenaar <Bram@vim.org>
parents: 26053
diff changeset
1430 # comment
a968027f8a2c patch 8.2.3633: Vim9: line number of lambda is off by one
Bram Moolenaar <Bram@vim.org>
parents: 26053
diff changeset
1431 # comment
a968027f8a2c patch 8.2.3633: Vim9: line number of lambda is off by one
Bram Moolenaar <Bram@vim.org>
parents: 26053
diff changeset
1432 var id = timer_start(1'000, (_) => 0)
a968027f8a2c patch 8.2.3633: Vim9: line number of lambda is off by one
Bram Moolenaar <Bram@vim.org>
parents: 26053
diff changeset
1433 var out = execute('verbose ' .. timer_info(id)[0].callback
a968027f8a2c patch 8.2.3633: Vim9: line number of lambda is off by one
Bram Moolenaar <Bram@vim.org>
parents: 26053
diff changeset
1434 ->string()
a968027f8a2c patch 8.2.3633: Vim9: line number of lambda is off by one
Bram Moolenaar <Bram@vim.org>
parents: 26053
diff changeset
1435 ->substitute("('\\|')", ' ', 'g'))
a968027f8a2c patch 8.2.3633: Vim9: line number of lambda is off by one
Bram Moolenaar <Bram@vim.org>
parents: 26053
diff changeset
1436 assert_match('Last set from .* line 4', out)
a968027f8a2c patch 8.2.3633: Vim9: line number of lambda is off by one
Bram Moolenaar <Bram@vim.org>
parents: 26053
diff changeset
1437 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1438 v9.CheckScriptSuccess(lines)
26203
a968027f8a2c patch 8.2.3633: Vim9: line number of lambda is off by one
Bram Moolenaar <Bram@vim.org>
parents: 26053
diff changeset
1439 enddef
a968027f8a2c patch 8.2.3633: Vim9: line number of lambda is off by one
Bram Moolenaar <Bram@vim.org>
parents: 26053
diff changeset
1440
24156
a358fa462560 patch 8.2.2619: Vim9: no test for return type of lambda
Bram Moolenaar <Bram@vim.org>
parents: 24152
diff changeset
1441 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
1442 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
1443 enddef
a358fa462560 patch 8.2.2619: Vim9: no test for return type of lambda
Bram Moolenaar <Bram@vim.org>
parents: 24152
diff changeset
1444
23808
baf9069f64ca patch 8.2.2445: Vim9: no proper error for lambda missing return type
Bram Moolenaar <Bram@vim.org>
parents: 23727
diff changeset
1445 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
1446 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
1447 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
1448 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1449 v9.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
1450
24685
04205b7d67d5 patch 8.2.2881: various pieces of code not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 24651
diff changeset
1451 # no space before the return type
04205b7d67d5 patch 8.2.2881: various pieces of code not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 24651
diff changeset
1452 lines =<< trim END
04205b7d67d5 patch 8.2.2881: various pieces of code not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 24651
diff changeset
1453 var Ref = (x):number => x + 1
04205b7d67d5 patch 8.2.2881: various pieces of code not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 24651
diff changeset
1454 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1455 v9.CheckDefAndScriptFailure(lines, 'E1069:', 1)
24685
04205b7d67d5 patch 8.2.2881: various pieces of code not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 24651
diff changeset
1456
24156
a358fa462560 patch 8.2.2619: Vim9: no test for return type of lambda
Bram Moolenaar <Bram@vim.org>
parents: 24152
diff changeset
1457 # this works
a358fa462560 patch 8.2.2619: Vim9: no test for return type of lambda
Bram Moolenaar <Bram@vim.org>
parents: 24152
diff changeset
1458 for x in ['foo', 'boo']
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1459 echo g:FilterWithCond(x, (v) => v =~ '^b')
24156
a358fa462560 patch 8.2.2619: Vim9: no test for return type of lambda
Bram Moolenaar <Bram@vim.org>
parents: 24152
diff changeset
1460 endfor
a358fa462560 patch 8.2.2619: Vim9: no test for return type of lambda
Bram Moolenaar <Bram@vim.org>
parents: 24152
diff changeset
1461
a358fa462560 patch 8.2.2619: Vim9: no test for return type of lambda
Bram Moolenaar <Bram@vim.org>
parents: 24152
diff changeset
1462 # this fails
a358fa462560 patch 8.2.2619: Vim9: no test for return type of lambda
Bram Moolenaar <Bram@vim.org>
parents: 24152
diff changeset
1463 lines =<< trim END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1464 echo g:FilterWithCond('foo', (v) => v .. '^b')
24156
a358fa462560 patch 8.2.2619: Vim9: no test for return type of lambda
Bram Moolenaar <Bram@vim.org>
parents: 24152
diff changeset
1465 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1466 v9.CheckDefAndScriptFailure(lines, 'E1013: Argument 2: type mismatch, expected func(string): bool but got func(any): string', 1)
24890
0cba2be8cbd7 patch 8.2.2983: Vim9: an inline function requires specifying the return type
Bram Moolenaar <Bram@vim.org>
parents: 24874
diff changeset
1467
0cba2be8cbd7 patch 8.2.2983: Vim9: an inline function requires specifying the return type
Bram Moolenaar <Bram@vim.org>
parents: 24874
diff changeset
1468 lines =<< trim END
0cba2be8cbd7 patch 8.2.2983: Vim9: an inline function requires specifying the return type
Bram Moolenaar <Bram@vim.org>
parents: 24874
diff changeset
1469 var Lambda1 = (x) => {
0cba2be8cbd7 patch 8.2.2983: Vim9: an inline function requires specifying the return type
Bram Moolenaar <Bram@vim.org>
parents: 24874
diff changeset
1470 return x
0cba2be8cbd7 patch 8.2.2983: Vim9: an inline function requires specifying the return type
Bram Moolenaar <Bram@vim.org>
parents: 24874
diff changeset
1471 }
0cba2be8cbd7 patch 8.2.2983: Vim9: an inline function requires specifying the return type
Bram Moolenaar <Bram@vim.org>
parents: 24874
diff changeset
1472 assert_equal('asdf', Lambda1('asdf'))
0cba2be8cbd7 patch 8.2.2983: Vim9: an inline function requires specifying the return type
Bram Moolenaar <Bram@vim.org>
parents: 24874
diff changeset
1473 var Lambda2 = (x): string => {
0cba2be8cbd7 patch 8.2.2983: Vim9: an inline function requires specifying the return type
Bram Moolenaar <Bram@vim.org>
parents: 24874
diff changeset
1474 return x
0cba2be8cbd7 patch 8.2.2983: Vim9: an inline function requires specifying the return type
Bram Moolenaar <Bram@vim.org>
parents: 24874
diff changeset
1475 }
0cba2be8cbd7 patch 8.2.2983: Vim9: an inline function requires specifying the return type
Bram Moolenaar <Bram@vim.org>
parents: 24874
diff changeset
1476 assert_equal('foo', Lambda2('foo'))
0cba2be8cbd7 patch 8.2.2983: Vim9: an inline function requires specifying the return type
Bram Moolenaar <Bram@vim.org>
parents: 24874
diff changeset
1477 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1478 v9.CheckDefAndScriptSuccess(lines)
24890
0cba2be8cbd7 patch 8.2.2983: Vim9: an inline function requires specifying the return type
Bram Moolenaar <Bram@vim.org>
parents: 24874
diff changeset
1479
0cba2be8cbd7 patch 8.2.2983: Vim9: an inline function requires specifying the return type
Bram Moolenaar <Bram@vim.org>
parents: 24874
diff changeset
1480 lines =<< trim END
0cba2be8cbd7 patch 8.2.2983: Vim9: an inline function requires specifying the return type
Bram Moolenaar <Bram@vim.org>
parents: 24874
diff changeset
1481 var Lambda = (x): string => {
0cba2be8cbd7 patch 8.2.2983: Vim9: an inline function requires specifying the return type
Bram Moolenaar <Bram@vim.org>
parents: 24874
diff changeset
1482 return x
0cba2be8cbd7 patch 8.2.2983: Vim9: an inline function requires specifying the return type
Bram Moolenaar <Bram@vim.org>
parents: 24874
diff changeset
1483 }
0cba2be8cbd7 patch 8.2.2983: Vim9: an inline function requires specifying the return type
Bram Moolenaar <Bram@vim.org>
parents: 24874
diff changeset
1484 echo Lambda(['foo'])
0cba2be8cbd7 patch 8.2.2983: Vim9: an inline function requires specifying the return type
Bram Moolenaar <Bram@vim.org>
parents: 24874
diff changeset
1485 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1486 v9.CheckDefExecAndScriptFailure(lines, 'E1012:')
23808
baf9069f64ca patch 8.2.2445: Vim9: no proper error for lambda missing return type
Bram Moolenaar <Bram@vim.org>
parents: 23727
diff changeset
1487 enddef
baf9069f64ca patch 8.2.2445: Vim9: no proper error for lambda missing return type
Bram Moolenaar <Bram@vim.org>
parents: 23727
diff changeset
1488
23171
bb7531f77529 patch 8.2.2131: Vim9: crash when lambda uses same var as assignment
Bram Moolenaar <Bram@vim.org>
parents: 23112
diff changeset
1489 def Test_lambda_uses_assigned_var()
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1490 v9.CheckDefSuccess([
29782
35cbea786334 patch 9.0.0230: no error for comma missing in list in :def function
Bram Moolenaar <Bram@vim.org>
parents: 29780
diff changeset
1491 '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
1492 '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
1493 enddef
bb7531f77529 patch 8.2.2131: Vim9: crash when lambda uses same var as assignment
Bram Moolenaar <Bram@vim.org>
parents: 23112
diff changeset
1494
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
1495 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
1496 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
1497 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
1498 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
1499 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
1500 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
1501 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
1502 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
1503 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
1504 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1505 v9.CheckScriptSuccess(lines)
24996
0136c6ee1961 patch 8.2.3035: Vim9: crash when calling :def function with partial
Bram Moolenaar <Bram@vim.org>
parents: 24988
diff changeset
1506
0136c6ee1961 patch 8.2.3035: Vim9: crash when calling :def function with partial
Bram Moolenaar <Bram@vim.org>
parents: 24988
diff changeset
1507 lines =<< trim END
0136c6ee1961 patch 8.2.3035: Vim9: crash when calling :def function with partial
Bram Moolenaar <Bram@vim.org>
parents: 24988
diff changeset
1508 vim9script
28123
e5fcd1256ee3 patch 8.2.4586: Vim9: no error for using lower case name for "func" argument
Bram Moolenaar <Bram@vim.org>
parents: 28111
diff changeset
1509 def g:TestFunc(F: func)
24996
0136c6ee1961 patch 8.2.3035: Vim9: crash when calling :def function with partial
Bram Moolenaar <Bram@vim.org>
parents: 24988
diff changeset
1510 enddef
0136c6ee1961 patch 8.2.3035: Vim9: crash when calling :def function with partial
Bram Moolenaar <Bram@vim.org>
parents: 24988
diff changeset
1511 legacy call g:TestFunc({-> 0})
0136c6ee1961 patch 8.2.3035: Vim9: crash when calling :def function with partial
Bram Moolenaar <Bram@vim.org>
parents: 24988
diff changeset
1512 delfunc g:TestFunc
0136c6ee1961 patch 8.2.3035: Vim9: crash when calling :def function with partial
Bram Moolenaar <Bram@vim.org>
parents: 24988
diff changeset
1513
28123
e5fcd1256ee3 patch 8.2.4586: Vim9: no error for using lower case name for "func" argument
Bram Moolenaar <Bram@vim.org>
parents: 28111
diff changeset
1514 def g:TestFunc(F: func(number))
24996
0136c6ee1961 patch 8.2.3035: Vim9: crash when calling :def function with partial
Bram Moolenaar <Bram@vim.org>
parents: 24988
diff changeset
1515 enddef
0136c6ee1961 patch 8.2.3035: Vim9: crash when calling :def function with partial
Bram Moolenaar <Bram@vim.org>
parents: 24988
diff changeset
1516 legacy call g:TestFunc({nr -> 0})
0136c6ee1961 patch 8.2.3035: Vim9: crash when calling :def function with partial
Bram Moolenaar <Bram@vim.org>
parents: 24988
diff changeset
1517 delfunc g:TestFunc
0136c6ee1961 patch 8.2.3035: Vim9: crash when calling :def function with partial
Bram Moolenaar <Bram@vim.org>
parents: 24988
diff changeset
1518 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1519 v9.CheckScriptSuccess(lines)
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
1520 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
1521
26053
e861c5aaedd8 patch 8.2.3560: using freed memory with lambda
Bram Moolenaar <Bram@vim.org>
parents: 25800
diff changeset
1522 def Test_lambda_in_reduce_line_break()
e861c5aaedd8 patch 8.2.3560: using freed memory with lambda
Bram Moolenaar <Bram@vim.org>
parents: 25800
diff changeset
1523 # this was using freed memory
e861c5aaedd8 patch 8.2.3560: using freed memory with lambda
Bram Moolenaar <Bram@vim.org>
parents: 25800
diff changeset
1524 var lines =<< trim END
e861c5aaedd8 patch 8.2.3560: using freed memory with lambda
Bram Moolenaar <Bram@vim.org>
parents: 25800
diff changeset
1525 vim9script
e861c5aaedd8 patch 8.2.3560: using freed memory with lambda
Bram Moolenaar <Bram@vim.org>
parents: 25800
diff changeset
1526 const result: dict<number> =
e861c5aaedd8 patch 8.2.3560: using freed memory with lambda
Bram Moolenaar <Bram@vim.org>
parents: 25800
diff changeset
1527 ['Bob', 'Sam', 'Cat', 'Bob', 'Cat', 'Cat']
e861c5aaedd8 patch 8.2.3560: using freed memory with lambda
Bram Moolenaar <Bram@vim.org>
parents: 25800
diff changeset
1528 ->reduce((acc, val) => {
e861c5aaedd8 patch 8.2.3560: using freed memory with lambda
Bram Moolenaar <Bram@vim.org>
parents: 25800
diff changeset
1529 if has_key(acc, val)
e861c5aaedd8 patch 8.2.3560: using freed memory with lambda
Bram Moolenaar <Bram@vim.org>
parents: 25800
diff changeset
1530 acc[val] += 1
e861c5aaedd8 patch 8.2.3560: using freed memory with lambda
Bram Moolenaar <Bram@vim.org>
parents: 25800
diff changeset
1531 return acc
e861c5aaedd8 patch 8.2.3560: using freed memory with lambda
Bram Moolenaar <Bram@vim.org>
parents: 25800
diff changeset
1532 else
e861c5aaedd8 patch 8.2.3560: using freed memory with lambda
Bram Moolenaar <Bram@vim.org>
parents: 25800
diff changeset
1533 acc[val] = 1
e861c5aaedd8 patch 8.2.3560: using freed memory with lambda
Bram Moolenaar <Bram@vim.org>
parents: 25800
diff changeset
1534 return acc
e861c5aaedd8 patch 8.2.3560: using freed memory with lambda
Bram Moolenaar <Bram@vim.org>
parents: 25800
diff changeset
1535 endif
e861c5aaedd8 patch 8.2.3560: using freed memory with lambda
Bram Moolenaar <Bram@vim.org>
parents: 25800
diff changeset
1536 }, {})
e861c5aaedd8 patch 8.2.3560: using freed memory with lambda
Bram Moolenaar <Bram@vim.org>
parents: 25800
diff changeset
1537 assert_equal({Bob: 2, Sam: 1, Cat: 3}, result)
e861c5aaedd8 patch 8.2.3560: using freed memory with lambda
Bram Moolenaar <Bram@vim.org>
parents: 25800
diff changeset
1538 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1539 v9.CheckScriptSuccess(lines)
26053
e861c5aaedd8 patch 8.2.3560: using freed memory with lambda
Bram Moolenaar <Bram@vim.org>
parents: 25800
diff changeset
1540 enddef
e861c5aaedd8 patch 8.2.3560: using freed memory with lambda
Bram Moolenaar <Bram@vim.org>
parents: 25800
diff changeset
1541
26470
ff0310e6f889 patch 8.2.3765: Vim9: cannot use a lambda for 'opfunc' and others
Bram Moolenaar <Bram@vim.org>
parents: 26378
diff changeset
1542 def Test_set_opfunc_to_lambda()
ff0310e6f889 patch 8.2.3765: Vim9: cannot use a lambda for 'opfunc' and others
Bram Moolenaar <Bram@vim.org>
parents: 26378
diff changeset
1543 var lines =<< trim END
ff0310e6f889 patch 8.2.3765: Vim9: cannot use a lambda for 'opfunc' and others
Bram Moolenaar <Bram@vim.org>
parents: 26378
diff changeset
1544 vim9script
ff0310e6f889 patch 8.2.3765: Vim9: cannot use a lambda for 'opfunc' and others
Bram Moolenaar <Bram@vim.org>
parents: 26378
diff changeset
1545 nnoremap <expr> <F4> <SID>CountSpaces() .. '_'
ff0310e6f889 patch 8.2.3765: Vim9: cannot use a lambda for 'opfunc' and others
Bram Moolenaar <Bram@vim.org>
parents: 26378
diff changeset
1546 def CountSpaces(type = ''): string
ff0310e6f889 patch 8.2.3765: Vim9: cannot use a lambda for 'opfunc' and others
Bram Moolenaar <Bram@vim.org>
parents: 26378
diff changeset
1547 if type == ''
ff0310e6f889 patch 8.2.3765: Vim9: cannot use a lambda for 'opfunc' and others
Bram Moolenaar <Bram@vim.org>
parents: 26378
diff changeset
1548 &operatorfunc = (t) => CountSpaces(t)
ff0310e6f889 patch 8.2.3765: Vim9: cannot use a lambda for 'opfunc' and others
Bram Moolenaar <Bram@vim.org>
parents: 26378
diff changeset
1549 return 'g@'
ff0310e6f889 patch 8.2.3765: Vim9: cannot use a lambda for 'opfunc' and others
Bram Moolenaar <Bram@vim.org>
parents: 26378
diff changeset
1550 endif
ff0310e6f889 patch 8.2.3765: Vim9: cannot use a lambda for 'opfunc' and others
Bram Moolenaar <Bram@vim.org>
parents: 26378
diff changeset
1551 normal! '[V']y
ff0310e6f889 patch 8.2.3765: Vim9: cannot use a lambda for 'opfunc' and others
Bram Moolenaar <Bram@vim.org>
parents: 26378
diff changeset
1552 g:result = getreg('"')->count(' ')
ff0310e6f889 patch 8.2.3765: Vim9: cannot use a lambda for 'opfunc' and others
Bram Moolenaar <Bram@vim.org>
parents: 26378
diff changeset
1553 return ''
ff0310e6f889 patch 8.2.3765: Vim9: cannot use a lambda for 'opfunc' and others
Bram Moolenaar <Bram@vim.org>
parents: 26378
diff changeset
1554 enddef
ff0310e6f889 patch 8.2.3765: Vim9: cannot use a lambda for 'opfunc' and others
Bram Moolenaar <Bram@vim.org>
parents: 26378
diff changeset
1555 new
ff0310e6f889 patch 8.2.3765: Vim9: cannot use a lambda for 'opfunc' and others
Bram Moolenaar <Bram@vim.org>
parents: 26378
diff changeset
1556 'a b c d e'->setline(1)
ff0310e6f889 patch 8.2.3765: Vim9: cannot use a lambda for 'opfunc' and others
Bram Moolenaar <Bram@vim.org>
parents: 26378
diff changeset
1557 feedkeys("\<F4>", 'x')
ff0310e6f889 patch 8.2.3765: Vim9: cannot use a lambda for 'opfunc' and others
Bram Moolenaar <Bram@vim.org>
parents: 26378
diff changeset
1558 assert_equal(4, g:result)
ff0310e6f889 patch 8.2.3765: Vim9: cannot use a lambda for 'opfunc' and others
Bram Moolenaar <Bram@vim.org>
parents: 26378
diff changeset
1559 bwipe!
ff0310e6f889 patch 8.2.3765: Vim9: cannot use a lambda for 'opfunc' and others
Bram Moolenaar <Bram@vim.org>
parents: 26378
diff changeset
1560 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1561 v9.CheckScriptSuccess(lines)
26470
ff0310e6f889 patch 8.2.3765: Vim9: cannot use a lambda for 'opfunc' and others
Bram Moolenaar <Bram@vim.org>
parents: 26378
diff changeset
1562 enddef
ff0310e6f889 patch 8.2.3765: Vim9: cannot use a lambda for 'opfunc' and others
Bram Moolenaar <Bram@vim.org>
parents: 26378
diff changeset
1563
26528
4d8226001391 patch 8.2.3793: using "g:Func" as a funcref does not work in script context
Bram Moolenaar <Bram@vim.org>
parents: 26506
diff changeset
1564 def Test_set_opfunc_to_global_function()
4d8226001391 patch 8.2.3793: using "g:Func" as a funcref does not work in script context
Bram Moolenaar <Bram@vim.org>
parents: 26506
diff changeset
1565 var lines =<< trim END
4d8226001391 patch 8.2.3793: using "g:Func" as a funcref does not work in script context
Bram Moolenaar <Bram@vim.org>
parents: 26506
diff changeset
1566 vim9script
4d8226001391 patch 8.2.3793: using "g:Func" as a funcref does not work in script context
Bram Moolenaar <Bram@vim.org>
parents: 26506
diff changeset
1567 def g:CountSpaces(type = ''): string
4d8226001391 patch 8.2.3793: using "g:Func" as a funcref does not work in script context
Bram Moolenaar <Bram@vim.org>
parents: 26506
diff changeset
1568 normal! '[V']y
4d8226001391 patch 8.2.3793: using "g:Func" as a funcref does not work in script context
Bram Moolenaar <Bram@vim.org>
parents: 26506
diff changeset
1569 g:result = getreg('"')->count(' ')
4d8226001391 patch 8.2.3793: using "g:Func" as a funcref does not work in script context
Bram Moolenaar <Bram@vim.org>
parents: 26506
diff changeset
1570 return ''
4d8226001391 patch 8.2.3793: using "g:Func" as a funcref does not work in script context
Bram Moolenaar <Bram@vim.org>
parents: 26506
diff changeset
1571 enddef
26594
b12d8a5af20e patch 8.2.3826: Vim9: using "g:Func" as funcref doesn't work in :def function
Bram Moolenaar <Bram@vim.org>
parents: 26564
diff changeset
1572 # global function works at script level
26528
4d8226001391 patch 8.2.3793: using "g:Func" as a funcref does not work in script context
Bram Moolenaar <Bram@vim.org>
parents: 26506
diff changeset
1573 &operatorfunc = g:CountSpaces
4d8226001391 patch 8.2.3793: using "g:Func" as a funcref does not work in script context
Bram Moolenaar <Bram@vim.org>
parents: 26506
diff changeset
1574 new
4d8226001391 patch 8.2.3793: using "g:Func" as a funcref does not work in script context
Bram Moolenaar <Bram@vim.org>
parents: 26506
diff changeset
1575 'a b c d e'->setline(1)
4d8226001391 patch 8.2.3793: using "g:Func" as a funcref does not work in script context
Bram Moolenaar <Bram@vim.org>
parents: 26506
diff changeset
1576 feedkeys("g@_", 'x')
4d8226001391 patch 8.2.3793: using "g:Func" as a funcref does not work in script context
Bram Moolenaar <Bram@vim.org>
parents: 26506
diff changeset
1577 assert_equal(4, g:result)
26594
b12d8a5af20e patch 8.2.3826: Vim9: using "g:Func" as funcref doesn't work in :def function
Bram Moolenaar <Bram@vim.org>
parents: 26564
diff changeset
1578
b12d8a5af20e patch 8.2.3826: Vim9: using "g:Func" as funcref doesn't work in :def function
Bram Moolenaar <Bram@vim.org>
parents: 26564
diff changeset
1579 &operatorfunc = ''
b12d8a5af20e patch 8.2.3826: Vim9: using "g:Func" as funcref doesn't work in :def function
Bram Moolenaar <Bram@vim.org>
parents: 26564
diff changeset
1580 g:result = 0
b12d8a5af20e patch 8.2.3826: Vim9: using "g:Func" as funcref doesn't work in :def function
Bram Moolenaar <Bram@vim.org>
parents: 26564
diff changeset
1581 # global function works in :def function
b12d8a5af20e patch 8.2.3826: Vim9: using "g:Func" as funcref doesn't work in :def function
Bram Moolenaar <Bram@vim.org>
parents: 26564
diff changeset
1582 def Func()
b12d8a5af20e patch 8.2.3826: Vim9: using "g:Func" as funcref doesn't work in :def function
Bram Moolenaar <Bram@vim.org>
parents: 26564
diff changeset
1583 &operatorfunc = g:CountSpaces
b12d8a5af20e patch 8.2.3826: Vim9: using "g:Func" as funcref doesn't work in :def function
Bram Moolenaar <Bram@vim.org>
parents: 26564
diff changeset
1584 enddef
b12d8a5af20e patch 8.2.3826: Vim9: using "g:Func" as funcref doesn't work in :def function
Bram Moolenaar <Bram@vim.org>
parents: 26564
diff changeset
1585 Func()
b12d8a5af20e patch 8.2.3826: Vim9: using "g:Func" as funcref doesn't work in :def function
Bram Moolenaar <Bram@vim.org>
parents: 26564
diff changeset
1586 feedkeys("g@_", 'x')
b12d8a5af20e patch 8.2.3826: Vim9: using "g:Func" as funcref doesn't work in :def function
Bram Moolenaar <Bram@vim.org>
parents: 26564
diff changeset
1587 assert_equal(4, g:result)
b12d8a5af20e patch 8.2.3826: Vim9: using "g:Func" as funcref doesn't work in :def function
Bram Moolenaar <Bram@vim.org>
parents: 26564
diff changeset
1588
26528
4d8226001391 patch 8.2.3793: using "g:Func" as a funcref does not work in script context
Bram Moolenaar <Bram@vim.org>
parents: 26506
diff changeset
1589 bwipe!
4d8226001391 patch 8.2.3793: using "g:Func" as a funcref does not work in script context
Bram Moolenaar <Bram@vim.org>
parents: 26506
diff changeset
1590 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1591 v9.CheckScriptSuccess(lines)
26528
4d8226001391 patch 8.2.3793: using "g:Func" as a funcref does not work in script context
Bram Moolenaar <Bram@vim.org>
parents: 26506
diff changeset
1592 &operatorfunc = ''
4d8226001391 patch 8.2.3793: using "g:Func" as a funcref does not work in script context
Bram Moolenaar <Bram@vim.org>
parents: 26506
diff changeset
1593 enddef
4d8226001391 patch 8.2.3793: using "g:Func" as a funcref does not work in script context
Bram Moolenaar <Bram@vim.org>
parents: 26506
diff changeset
1594
26530
2fbd05a873e3 patch 8.2.3794: Vim9: cannot find script-local func using "s:"
Bram Moolenaar <Bram@vim.org>
parents: 26528
diff changeset
1595 def Test_use_script_func_name_with_prefix()
2fbd05a873e3 patch 8.2.3794: Vim9: cannot find script-local func using "s:"
Bram Moolenaar <Bram@vim.org>
parents: 26528
diff changeset
1596 var lines =<< trim END
2fbd05a873e3 patch 8.2.3794: Vim9: cannot find script-local func using "s:"
Bram Moolenaar <Bram@vim.org>
parents: 26528
diff changeset
1597 vim9script
27669
5c4ab8d4472c patch 8.2.4360: Vim9: allowing use of "s:" leads to inconsistencies
Bram Moolenaar <Bram@vim.org>
parents: 27611
diff changeset
1598 func g:Getit()
26530
2fbd05a873e3 patch 8.2.3794: Vim9: cannot find script-local func using "s:"
Bram Moolenaar <Bram@vim.org>
parents: 26528
diff changeset
1599 return 'it'
2fbd05a873e3 patch 8.2.3794: Vim9: cannot find script-local func using "s:"
Bram Moolenaar <Bram@vim.org>
parents: 26528
diff changeset
1600 endfunc
27669
5c4ab8d4472c patch 8.2.4360: Vim9: allowing use of "s:" leads to inconsistencies
Bram Moolenaar <Bram@vim.org>
parents: 27611
diff changeset
1601 var Fn = g:Getit
26530
2fbd05a873e3 patch 8.2.3794: Vim9: cannot find script-local func using "s:"
Bram Moolenaar <Bram@vim.org>
parents: 26528
diff changeset
1602 assert_equal('it', Fn())
2fbd05a873e3 patch 8.2.3794: Vim9: cannot find script-local func using "s:"
Bram Moolenaar <Bram@vim.org>
parents: 26528
diff changeset
1603 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1604 v9.CheckScriptSuccess(lines)
26530
2fbd05a873e3 patch 8.2.3794: Vim9: cannot find script-local func using "s:"
Bram Moolenaar <Bram@vim.org>
parents: 26528
diff changeset
1605 enddef
2fbd05a873e3 patch 8.2.3794: Vim9: cannot find script-local func using "s:"
Bram Moolenaar <Bram@vim.org>
parents: 26528
diff changeset
1606
26482
b115b552071f patch 8.2.3771: Vim9: accessing freed memory when checking type
Bram Moolenaar <Bram@vim.org>
parents: 26470
diff changeset
1607 def Test_lambda_type_allocated()
b115b552071f patch 8.2.3771: Vim9: accessing freed memory when checking type
Bram Moolenaar <Bram@vim.org>
parents: 26470
diff changeset
1608 # Check that unreferencing a partial using a lambda can use the variable type
b115b552071f patch 8.2.3771: Vim9: accessing freed memory when checking type
Bram Moolenaar <Bram@vim.org>
parents: 26470
diff changeset
1609 # after the lambda has been freed and does not leak memory.
b115b552071f patch 8.2.3771: Vim9: accessing freed memory when checking type
Bram Moolenaar <Bram@vim.org>
parents: 26470
diff changeset
1610 var lines =<< trim END
b115b552071f patch 8.2.3771: Vim9: accessing freed memory when checking type
Bram Moolenaar <Bram@vim.org>
parents: 26470
diff changeset
1611 vim9script
b115b552071f patch 8.2.3771: Vim9: accessing freed memory when checking type
Bram Moolenaar <Bram@vim.org>
parents: 26470
diff changeset
1612
b115b552071f patch 8.2.3771: Vim9: accessing freed memory when checking type
Bram Moolenaar <Bram@vim.org>
parents: 26470
diff changeset
1613 func MyomniFunc1(val, findstart, base)
b115b552071f patch 8.2.3771: Vim9: accessing freed memory when checking type
Bram Moolenaar <Bram@vim.org>
parents: 26470
diff changeset
1614 return a:findstart ? 0 : []
b115b552071f patch 8.2.3771: Vim9: accessing freed memory when checking type
Bram Moolenaar <Bram@vim.org>
parents: 26470
diff changeset
1615 endfunc
b115b552071f patch 8.2.3771: Vim9: accessing freed memory when checking type
Bram Moolenaar <Bram@vim.org>
parents: 26470
diff changeset
1616
b115b552071f patch 8.2.3771: Vim9: accessing freed memory when checking type
Bram Moolenaar <Bram@vim.org>
parents: 26470
diff changeset
1617 var Lambda = (a, b) => MyomniFunc1(19, a, b)
b115b552071f patch 8.2.3771: Vim9: accessing freed memory when checking type
Bram Moolenaar <Bram@vim.org>
parents: 26470
diff changeset
1618 &omnifunc = Lambda
b115b552071f patch 8.2.3771: Vim9: accessing freed memory when checking type
Bram Moolenaar <Bram@vim.org>
parents: 26470
diff changeset
1619 Lambda = (a, b) => MyomniFunc1(20, a, b)
b115b552071f patch 8.2.3771: Vim9: accessing freed memory when checking type
Bram Moolenaar <Bram@vim.org>
parents: 26470
diff changeset
1620 &omnifunc = string(Lambda)
b115b552071f patch 8.2.3771: Vim9: accessing freed memory when checking type
Bram Moolenaar <Bram@vim.org>
parents: 26470
diff changeset
1621 Lambda = (a, b) => strlen(a)
b115b552071f patch 8.2.3771: Vim9: accessing freed memory when checking type
Bram Moolenaar <Bram@vim.org>
parents: 26470
diff changeset
1622 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1623 v9.CheckScriptSuccess(lines)
26482
b115b552071f patch 8.2.3771: Vim9: accessing freed memory when checking type
Bram Moolenaar <Bram@vim.org>
parents: 26470
diff changeset
1624 enddef
b115b552071f patch 8.2.3771: Vim9: accessing freed memory when checking type
Bram Moolenaar <Bram@vim.org>
parents: 26470
diff changeset
1625
28775
7fd3a9f05037 patch 8.2.4912: using execute() to define a lambda doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 28735
diff changeset
1626 def Test_define_lambda_in_execute()
7fd3a9f05037 patch 8.2.4912: using execute() to define a lambda doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 28735
diff changeset
1627 var lines =<< trim [CODE]
7fd3a9f05037 patch 8.2.4912: using execute() to define a lambda doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 28735
diff changeset
1628 vim9script
7fd3a9f05037 patch 8.2.4912: using execute() to define a lambda doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 28735
diff changeset
1629
7fd3a9f05037 patch 8.2.4912: using execute() to define a lambda doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 28735
diff changeset
1630 def BuildFuncMultiLine(): func
7fd3a9f05037 patch 8.2.4912: using execute() to define a lambda doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 28735
diff changeset
1631 var x =<< trim END
7fd3a9f05037 patch 8.2.4912: using execute() to define a lambda doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 28735
diff changeset
1632 g:SomeRandomFunc = (d: dict<any>) => {
7fd3a9f05037 patch 8.2.4912: using execute() to define a lambda doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 28735
diff changeset
1633 return d.k1 + d.k2
7fd3a9f05037 patch 8.2.4912: using execute() to define a lambda doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 28735
diff changeset
1634 }
7fd3a9f05037 patch 8.2.4912: using execute() to define a lambda doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 28735
diff changeset
1635 END
7fd3a9f05037 patch 8.2.4912: using execute() to define a lambda doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 28735
diff changeset
1636 execute(x)
7fd3a9f05037 patch 8.2.4912: using execute() to define a lambda doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 28735
diff changeset
1637 return g:SomeRandomFunc
7fd3a9f05037 patch 8.2.4912: using execute() to define a lambda doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 28735
diff changeset
1638 enddef
7fd3a9f05037 patch 8.2.4912: using execute() to define a lambda doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 28735
diff changeset
1639 var ResultPlus = BuildFuncMultiLine()
7fd3a9f05037 patch 8.2.4912: using execute() to define a lambda doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 28735
diff changeset
1640 assert_equal(7, ResultPlus({k1: 3, k2: 4}))
7fd3a9f05037 patch 8.2.4912: using execute() to define a lambda doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 28735
diff changeset
1641 [CODE]
7fd3a9f05037 patch 8.2.4912: using execute() to define a lambda doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 28735
diff changeset
1642 v9.CheckScriptSuccess(lines)
7fd3a9f05037 patch 8.2.4912: using execute() to define a lambda doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 28735
diff changeset
1643 unlet g:SomeRandomFunc
7fd3a9f05037 patch 8.2.4912: using execute() to define a lambda doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 28735
diff changeset
1644 enddef
7fd3a9f05037 patch 8.2.4912: using execute() to define a lambda doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 28735
diff changeset
1645
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1646 " Default arg and varargs
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1647 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
1648 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
1649 for s in rest
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1650 res ..= ',' .. s
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1651 endfor
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1652 return res
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1653 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1654
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1655 def Test_call_def_varargs()
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1656 assert_fails('g:MyDefVarargs()', 'E119:', '', 1, 'Test_call_def_varargs')
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1657 g:MyDefVarargs('one')->assert_equal('one,foo')
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1658 g:MyDefVarargs('one', 'two')->assert_equal('one,two')
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1659 g:MyDefVarargs('one', 'two', 'three')->assert_equal('one,two,three')
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1660 v9.CheckDefFailure(['g:MyDefVarargs("one", 22)'],
22296
006b8ab9d554 patch 8.2.1697: inconsistent capitalization of error messages
Bram Moolenaar <Bram@vim.org>
parents: 22292
diff changeset
1661 'E1013: Argument 2: type mismatch, expected string but got number')
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1662 v9.CheckDefFailure(['g:MyDefVarargs("one", "two", 123)'],
22296
006b8ab9d554 patch 8.2.1697: inconsistent capitalization of error messages
Bram Moolenaar <Bram@vim.org>
parents: 22292
diff changeset
1663 '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
1664
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1665 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
1666 vim9script
279b3415947f patch 8.2.1291: Vim9: type of varargs items is not checked
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
1667 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
1668 echo l
279b3415947f patch 8.2.1291: Vim9: type of varargs items is not checked
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
1669 enddef
279b3415947f patch 8.2.1291: Vim9: type of varargs items is not checked
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
1670 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
1671 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1672 v9.CheckScriptSuccess(lines)
21481
279b3415947f patch 8.2.1291: Vim9: type of varargs items is not checked
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
1673
279b3415947f patch 8.2.1291: Vim9: type of varargs items is not checked
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
1674 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
1675 vim9script
279b3415947f patch 8.2.1291: Vim9: type of varargs items is not checked
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
1676 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
1677 echo l
279b3415947f patch 8.2.1291: Vim9: type of varargs items is not checked
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
1678 enddef
279b3415947f patch 8.2.1291: Vim9: type of varargs items is not checked
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
1679 Func()
279b3415947f patch 8.2.1291: Vim9: type of varargs items is not checked
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
1680 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1681 v9.CheckScriptSuccess(lines)
21481
279b3415947f patch 8.2.1291: Vim9: type of varargs items is not checked
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
1682
279b3415947f patch 8.2.1291: Vim9: type of varargs items is not checked
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
1683 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
1684 vim9script
24400
62e978382fa0 patch 8.2.2740: Vim9: lambda with varargs doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 24398
diff changeset
1685 def Func(...l: list<any>)
62e978382fa0 patch 8.2.2740: Vim9: lambda with varargs doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 24398
diff changeset
1686 echo l
62e978382fa0 patch 8.2.2740: Vim9: lambda with varargs doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 24398
diff changeset
1687 enddef
62e978382fa0 patch 8.2.2740: Vim9: lambda with varargs doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 24398
diff changeset
1688 Func(0)
62e978382fa0 patch 8.2.2740: Vim9: lambda with varargs doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 24398
diff changeset
1689 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1690 v9.CheckScriptSuccess(lines)
24400
62e978382fa0 patch 8.2.2740: Vim9: lambda with varargs doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 24398
diff changeset
1691
62e978382fa0 patch 8.2.2740: Vim9: lambda with varargs doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 24398
diff changeset
1692 lines =<< trim END
62e978382fa0 patch 8.2.2740: Vim9: lambda with varargs doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 24398
diff changeset
1693 vim9script
22292
3515f341e8ac patch 8.2.1695: Vim9: crash when using varargs type "any"
Bram Moolenaar <Bram@vim.org>
parents: 22284
diff changeset
1694 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
1695 echo l
3515f341e8ac patch 8.2.1695: Vim9: crash when using varargs type "any"
Bram Moolenaar <Bram@vim.org>
parents: 22284
diff changeset
1696 enddef
3515f341e8ac patch 8.2.1695: Vim9: crash when using varargs type "any"
Bram Moolenaar <Bram@vim.org>
parents: 22284
diff changeset
1697 Func(0)
3515f341e8ac patch 8.2.1695: Vim9: crash when using varargs type "any"
Bram Moolenaar <Bram@vim.org>
parents: 22284
diff changeset
1698 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1699 v9.CheckScriptFailure(lines, 'E1180:', 2)
22292
3515f341e8ac patch 8.2.1695: Vim9: crash when using varargs type "any"
Bram Moolenaar <Bram@vim.org>
parents: 22284
diff changeset
1700
3515f341e8ac patch 8.2.1695: Vim9: crash when using varargs type "any"
Bram Moolenaar <Bram@vim.org>
parents: 22284
diff changeset
1701 lines =<< trim END
3515f341e8ac patch 8.2.1695: Vim9: crash when using varargs type "any"
Bram Moolenaar <Bram@vim.org>
parents: 22284
diff changeset
1702 vim9script
22349
b66a2e046c2e patch 8.2.1723: Vim9: Variable argument name cannot start with underscore
Bram Moolenaar <Bram@vim.org>
parents: 22339
diff changeset
1703 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
1704 echo _l
b66a2e046c2e patch 8.2.1723: Vim9: Variable argument name cannot start with underscore
Bram Moolenaar <Bram@vim.org>
parents: 22339
diff changeset
1705 enddef
b66a2e046c2e patch 8.2.1723: Vim9: Variable argument name cannot start with underscore
Bram Moolenaar <Bram@vim.org>
parents: 22339
diff changeset
1706 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
1707 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1708 v9.CheckScriptSuccess(lines)
22349
b66a2e046c2e patch 8.2.1723: Vim9: Variable argument name cannot start with underscore
Bram Moolenaar <Bram@vim.org>
parents: 22339
diff changeset
1709
b66a2e046c2e patch 8.2.1723: Vim9: Variable argument name cannot start with underscore
Bram Moolenaar <Bram@vim.org>
parents: 22339
diff changeset
1710 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
1711 vim9script
21481
279b3415947f patch 8.2.1291: Vim9: type of varargs items is not checked
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
1712 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
1713 echo l
279b3415947f patch 8.2.1291: Vim9: type of varargs items is not checked
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
1714 enddef
279b3415947f patch 8.2.1291: Vim9: type of varargs items is not checked
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
1715 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
1716 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1717 v9.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
1718
279b3415947f patch 8.2.1291: Vim9: type of varargs items is not checked
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
1719 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
1720 vim9script
279b3415947f patch 8.2.1291: Vim9: type of varargs items is not checked
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
1721 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
1722 echo l
279b3415947f patch 8.2.1291: Vim9: type of varargs items is not checked
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
1723 enddef
279b3415947f patch 8.2.1291: Vim9: type of varargs items is not checked
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
1724 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
1725 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1726 v9.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
1727
279b3415947f patch 8.2.1291: Vim9: type of varargs items is not checked
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
1728 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
1729 vim9script
279b3415947f patch 8.2.1291: Vim9: type of varargs items is not checked
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
1730 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
1731 echo l
279b3415947f patch 8.2.1291: Vim9: type of varargs items is not checked
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
1732 enddef
279b3415947f patch 8.2.1291: Vim9: type of varargs items is not checked
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
1733 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
1734 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1735 v9.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
1736
9ddf1a537fc2 patch 8.2.2481: Vim9: confusing error when variable arguments have default
Bram Moolenaar <Bram@vim.org>
parents: 23808
diff changeset
1737 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
1738 vim9script
9ddf1a537fc2 patch 8.2.2481: Vim9: confusing error when variable arguments have default
Bram Moolenaar <Bram@vim.org>
parents: 23808
diff changeset
1739 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
1740 ...l = []
9ddf1a537fc2 patch 8.2.2481: Vim9: confusing error when variable arguments have default
Bram Moolenaar <Bram@vim.org>
parents: 23808
diff changeset
1741 )
9ddf1a537fc2 patch 8.2.2481: Vim9: confusing error when variable arguments have default
Bram Moolenaar <Bram@vim.org>
parents: 23808
diff changeset
1742 echo l
9ddf1a537fc2 patch 8.2.2481: Vim9: confusing error when variable arguments have default
Bram Moolenaar <Bram@vim.org>
parents: 23808
diff changeset
1743 enddef
9ddf1a537fc2 patch 8.2.2481: Vim9: confusing error when variable arguments have default
Bram Moolenaar <Bram@vim.org>
parents: 23808
diff changeset
1744 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1745 v9.CheckScriptFailure(lines, 'E1160:')
25543
a84e75d73fde patch 8.2.3308: Vim9: no runtime check for argument type with varargs only
Bram Moolenaar <Bram@vim.org>
parents: 25489
diff changeset
1746
a84e75d73fde patch 8.2.3308: Vim9: no runtime check for argument type with varargs only
Bram Moolenaar <Bram@vim.org>
parents: 25489
diff changeset
1747 lines =<< trim END
a84e75d73fde patch 8.2.3308: Vim9: no runtime check for argument type with varargs only
Bram Moolenaar <Bram@vim.org>
parents: 25489
diff changeset
1748 vim9script
a84e75d73fde patch 8.2.3308: Vim9: no runtime check for argument type with varargs only
Bram Moolenaar <Bram@vim.org>
parents: 25489
diff changeset
1749 def DoIt()
a84e75d73fde patch 8.2.3308: Vim9: no runtime check for argument type with varargs only
Bram Moolenaar <Bram@vim.org>
parents: 25489
diff changeset
1750 g:Later('')
a84e75d73fde patch 8.2.3308: Vim9: no runtime check for argument type with varargs only
Bram Moolenaar <Bram@vim.org>
parents: 25489
diff changeset
1751 enddef
a84e75d73fde patch 8.2.3308: Vim9: no runtime check for argument type with varargs only
Bram Moolenaar <Bram@vim.org>
parents: 25489
diff changeset
1752 defcompile
a84e75d73fde patch 8.2.3308: Vim9: no runtime check for argument type with varargs only
Bram Moolenaar <Bram@vim.org>
parents: 25489
diff changeset
1753 def g:Later(...l: list<number>)
a84e75d73fde patch 8.2.3308: Vim9: no runtime check for argument type with varargs only
Bram Moolenaar <Bram@vim.org>
parents: 25489
diff changeset
1754 enddef
a84e75d73fde patch 8.2.3308: Vim9: no runtime check for argument type with varargs only
Bram Moolenaar <Bram@vim.org>
parents: 25489
diff changeset
1755 DoIt()
a84e75d73fde patch 8.2.3308: Vim9: no runtime check for argument type with varargs only
Bram Moolenaar <Bram@vim.org>
parents: 25489
diff changeset
1756 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1757 v9.CheckScriptFailure(lines, 'E1013: Argument 1: type mismatch, expected number but got string')
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1758 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1759
19975
4e8e0ce576af patch 8.2.0543: Vim9: function with varargs does not work properly
Bram Moolenaar <Bram@vim.org>
parents: 19946
diff changeset
1760 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
1761
4e8e0ce576af patch 8.2.0543: Vim9: function with varargs does not work properly
Bram Moolenaar <Bram@vim.org>
parents: 19946
diff changeset
1762 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
1763 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
1764 enddef
4e8e0ce576af patch 8.2.0543: Vim9: function with varargs does not work properly
Bram Moolenaar <Bram@vim.org>
parents: 19946
diff changeset
1765
4e8e0ce576af patch 8.2.0543: Vim9: function with varargs does not work properly
Bram Moolenaar <Bram@vim.org>
parents: 19946
diff changeset
1766 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
1767 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
1768 enddef
4e8e0ce576af patch 8.2.0543: Vim9: function with varargs does not work properly
Bram Moolenaar <Bram@vim.org>
parents: 19946
diff changeset
1769
4e8e0ce576af patch 8.2.0543: Vim9: function with varargs does not work properly
Bram Moolenaar <Bram@vim.org>
parents: 19946
diff changeset
1770 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
1771 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
1772 enddef
4e8e0ce576af patch 8.2.0543: Vim9: function with varargs does not work properly
Bram Moolenaar <Bram@vim.org>
parents: 19946
diff changeset
1773
4e8e0ce576af patch 8.2.0543: Vim9: function with varargs does not work properly
Bram Moolenaar <Bram@vim.org>
parents: 19946
diff changeset
1774 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
1775 var RefDefArg: func(?string)
27464
a14c4d3e3260 patch 8.2.4260: Vim9: can still use a global function without g:
Bram Moolenaar <Bram@vim.org>
parents: 27457
diff changeset
1776 RefDefArg = g:FuncOneDefArg
19975
4e8e0ce576af patch 8.2.0543: Vim9: function with varargs does not work properly
Bram Moolenaar <Bram@vim.org>
parents: 19946
diff changeset
1777 RefDefArg()
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1778 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
1779 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
1780 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
1781
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1782 var RefDef2Arg: func(?number, ?string): string
27464
a14c4d3e3260 patch 8.2.4260: Vim9: can still use a global function without g:
Bram Moolenaar <Bram@vim.org>
parents: 27457
diff changeset
1783 RefDef2Arg = g:FuncTwoDefArg
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1784 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
1785 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
1786 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
1787
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1788 v9.CheckDefFailure(['var RefWrong: func(string?)'], 'E1010:')
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1789 v9.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
1790
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1791 var RefVarargs: func(...list<string>): string
27464
a14c4d3e3260 patch 8.2.4260: Vim9: can still use a global function without g:
Bram Moolenaar <Bram@vim.org>
parents: 27457
diff changeset
1792 RefVarargs = g:FuncVarargs
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1793 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
1794 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
1795 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
1796
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1797 v9.CheckDefFailure(['var RefWrong: func(...list<string>, string)'], 'E110:')
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1798 v9.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
1799 enddef
4e8e0ce576af patch 8.2.0543: Vim9: function with varargs does not work properly
Bram Moolenaar <Bram@vim.org>
parents: 19946
diff changeset
1800
19944
3055cd26e139 patch 8.2.0528: Vim9: function arguments insufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 19942
diff changeset
1801 " Only varargs
3055cd26e139 patch 8.2.0528: Vim9: function arguments insufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 19942
diff changeset
1802 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
1803 return join(args, ',')
3055cd26e139 patch 8.2.0528: Vim9: function arguments insufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 19942
diff changeset
1804 enddef
3055cd26e139 patch 8.2.0528: Vim9: function arguments insufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 19942
diff changeset
1805
3055cd26e139 patch 8.2.0528: Vim9: function arguments insufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 19942
diff changeset
1806 def Test_call_varargs_only()
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1807 g:MyVarargsOnly()->assert_equal('')
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1808 g:MyVarargsOnly('one')->assert_equal('one')
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1809 g:MyVarargsOnly('one', 'two')->assert_equal('one,two')
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1810 v9.CheckDefFailure(['g:MyVarargsOnly(1)'], 'E1013: Argument 1: type mismatch, expected string but got number')
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1811 v9.CheckDefFailure(['g: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
1812 enddef
3055cd26e139 patch 8.2.0528: Vim9: function arguments insufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 19942
diff changeset
1813
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1814 def Test_using_var_as_arg()
26845
a6ccb6ec581c patch 8.2.3951: Vim9: memory leak when text after a nested function
Bram Moolenaar <Bram@vim.org>
parents: 26792
diff changeset
1815 var lines =<< trim END
a6ccb6ec581c patch 8.2.3951: Vim9: memory leak when text after a nested function
Bram Moolenaar <Bram@vim.org>
parents: 26792
diff changeset
1816 def Func(x: number)
a6ccb6ec581c patch 8.2.3951: Vim9: memory leak when text after a nested function
Bram Moolenaar <Bram@vim.org>
parents: 26792
diff changeset
1817 var x = 234
a6ccb6ec581c patch 8.2.3951: Vim9: memory leak when text after a nested function
Bram Moolenaar <Bram@vim.org>
parents: 26792
diff changeset
1818 enddef
a6ccb6ec581c patch 8.2.3951: Vim9: memory leak when text after a nested function
Bram Moolenaar <Bram@vim.org>
parents: 26792
diff changeset
1819 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1820 v9.CheckDefFailure(lines, 'E1006:')
26845
a6ccb6ec581c patch 8.2.3951: Vim9: memory leak when text after a nested function
Bram Moolenaar <Bram@vim.org>
parents: 26792
diff changeset
1821
a6ccb6ec581c patch 8.2.3951: Vim9: memory leak when text after a nested function
Bram Moolenaar <Bram@vim.org>
parents: 26792
diff changeset
1822 lines =<< trim END
a6ccb6ec581c patch 8.2.3951: Vim9: memory leak when text after a nested function
Bram Moolenaar <Bram@vim.org>
parents: 26792
diff changeset
1823 def Func(Ref: number)
a6ccb6ec581c patch 8.2.3951: Vim9: memory leak when text after a nested function
Bram Moolenaar <Bram@vim.org>
parents: 26792
diff changeset
1824 def Ref()
a6ccb6ec581c patch 8.2.3951: Vim9: memory leak when text after a nested function
Bram Moolenaar <Bram@vim.org>
parents: 26792
diff changeset
1825 enddef
a6ccb6ec581c patch 8.2.3951: Vim9: memory leak when text after a nested function
Bram Moolenaar <Bram@vim.org>
parents: 26792
diff changeset
1826 enddef
a6ccb6ec581c patch 8.2.3951: Vim9: memory leak when text after a nested function
Bram Moolenaar <Bram@vim.org>
parents: 26792
diff changeset
1827 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1828 v9.CheckDefFailure(lines, 'E1073:')
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1829 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1830
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1831 def s:DictArg(arg: 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
1832 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
1833 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
1834
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1835 def s:ListArg(arg: 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
1836 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
1837 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
1838
fc2d76e0994c patch 8.2.0733: Vim9: assigning to dict or list argument does not work
Bram Moolenaar <Bram@vim.org>
parents: 20303
diff changeset
1839 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
1840 # 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
1841 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
1842 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
1843 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
1844 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
1845 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
1846 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
1847
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1848 v9.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
1849 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
1850 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
1851
22339
56f674e7518c patch 8.2.1718: Vim9: :def function disallows "firstline" for no good reason
Bram Moolenaar <Bram@vim.org>
parents: 22318
diff changeset
1852 " These argument names are reserved in legacy functions.
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1853 def s:WithReservedNames(firstline: string, lastline: string): string
22339
56f674e7518c patch 8.2.1718: Vim9: :def function disallows "firstline" for no good reason
Bram Moolenaar <Bram@vim.org>
parents: 22318
diff changeset
1854 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
1855 enddef
56f674e7518c patch 8.2.1718: Vim9: :def function disallows "firstline" for no good reason
Bram Moolenaar <Bram@vim.org>
parents: 22318
diff changeset
1856
56f674e7518c patch 8.2.1718: Vim9: :def function disallows "firstline" for no good reason
Bram Moolenaar <Bram@vim.org>
parents: 22318
diff changeset
1857 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
1858 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
1859 enddef
56f674e7518c patch 8.2.1718: Vim9: :def function disallows "firstline" for no good reason
Bram Moolenaar <Bram@vim.org>
parents: 22318
diff changeset
1860
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1861 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
1862 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
1863 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
1864 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1865
20140
39a18a0df429 patch 8.2.0625: Vim9: confusing error when calling unknown function
Bram Moolenaar <Bram@vim.org>
parents: 20029
diff changeset
1866 func DefinedLater(arg)
39a18a0df429 patch 8.2.0625: Vim9: confusing error when calling unknown function
Bram Moolenaar <Bram@vim.org>
parents: 20029
diff changeset
1867 return a:arg
39a18a0df429 patch 8.2.0625: Vim9: confusing error when calling unknown function
Bram Moolenaar <Bram@vim.org>
parents: 20029
diff changeset
1868 endfunc
39a18a0df429 patch 8.2.0625: Vim9: confusing error when calling unknown function
Bram Moolenaar <Bram@vim.org>
parents: 20029
diff changeset
1869
39a18a0df429 patch 8.2.0625: Vim9: confusing error when calling unknown function
Bram Moolenaar <Bram@vim.org>
parents: 20029
diff changeset
1870 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
1871 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
1872 assert_fails('NotAFunc()', 'E117:', '', 2, 'Test_call_funcref') # comment after call
26506
4a1d2abc2016 patch 8.2.3783: confusing error for using a variable as a function
Bram Moolenaar <Bram@vim.org>
parents: 26482
diff changeset
1873 assert_fails('g:NotAFunc()', 'E1085:', '', 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
1874
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1875 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
1876 vim9script
166c15374bda patch 8.2.1270: Vim9: not skipping over function type declaration
Bram Moolenaar <Bram@vim.org>
parents: 21383
diff changeset
1877 def RetNumber(): number
166c15374bda patch 8.2.1270: Vim9: not skipping over function type declaration
Bram Moolenaar <Bram@vim.org>
parents: 21383
diff changeset
1878 return 123
166c15374bda patch 8.2.1270: Vim9: not skipping over function type declaration
Bram Moolenaar <Bram@vim.org>
parents: 21383
diff changeset
1879 enddef
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1880 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
1881 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
1882 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1883 v9.CheckScriptSuccess(lines)
21441
78d97ee2c707 patch 8.2.1271: Vim9: Error for Funcref function argument type
Bram Moolenaar <Bram@vim.org>
parents: 21439
diff changeset
1884
78d97ee2c707 patch 8.2.1271: Vim9: Error for Funcref function argument type
Bram Moolenaar <Bram@vim.org>
parents: 21439
diff changeset
1885 lines =<< trim END
78d97ee2c707 patch 8.2.1271: Vim9: Error for Funcref function argument type
Bram Moolenaar <Bram@vim.org>
parents: 21439
diff changeset
1886 vim9script
78d97ee2c707 patch 8.2.1271: Vim9: Error for Funcref function argument type
Bram Moolenaar <Bram@vim.org>
parents: 21439
diff changeset
1887 def RetNumber(): number
78d97ee2c707 patch 8.2.1271: Vim9: Error for Funcref function argument type
Bram Moolenaar <Bram@vim.org>
parents: 21439
diff changeset
1888 return 123
78d97ee2c707 patch 8.2.1271: Vim9: Error for Funcref function argument type
Bram Moolenaar <Bram@vim.org>
parents: 21439
diff changeset
1889 enddef
78d97ee2c707 patch 8.2.1271: Vim9: Error for Funcref function argument type
Bram Moolenaar <Bram@vim.org>
parents: 21439
diff changeset
1890 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
1891 return F()
78d97ee2c707 patch 8.2.1271: Vim9: Error for Funcref function argument type
Bram Moolenaar <Bram@vim.org>
parents: 21439
diff changeset
1892 enddef
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1893 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
1894 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
1895 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1896 v9.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
1897
49072a858baf patch 8.2.1284: Vim9: skipping over type includes following white space
Bram Moolenaar <Bram@vim.org>
parents: 21463
diff changeset
1898 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
1899 vim9script
49072a858baf patch 8.2.1284: Vim9: skipping over type includes following white space
Bram Moolenaar <Bram@vim.org>
parents: 21463
diff changeset
1900 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
1901 echo nr
49072a858baf patch 8.2.1284: Vim9: skipping over type includes following white space
Bram Moolenaar <Bram@vim.org>
parents: 21463
diff changeset
1902 enddef
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1903 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
1904 Funcref(123)
49072a858baf patch 8.2.1284: Vim9: skipping over type includes following white space
Bram Moolenaar <Bram@vim.org>
parents: 21463
diff changeset
1905 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1906 v9.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
1907
4d156aead799 patch 8.2.1285: Vim9: argument types are not checked on assignment
Bram Moolenaar <Bram@vim.org>
parents: 21467
diff changeset
1908 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
1909 vim9script
4d156aead799 patch 8.2.1285: Vim9: argument types are not checked on assignment
Bram Moolenaar <Bram@vim.org>
parents: 21467
diff changeset
1910 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
1911 echo nr
4d156aead799 patch 8.2.1285: Vim9: argument types are not checked on assignment
Bram Moolenaar <Bram@vim.org>
parents: 21467
diff changeset
1912 enddef
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1913 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
1914 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1915 v9.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
1916
574517d682cf patch 8.2.1300: Vim9: optional argument type not parsed properly
Bram Moolenaar <Bram@vim.org>
parents: 21481
diff changeset
1917 lines =<< trim END
574517d682cf patch 8.2.1300: Vim9: optional argument type not parsed properly
Bram Moolenaar <Bram@vim.org>
parents: 21481
diff changeset
1918 vim9script
574517d682cf patch 8.2.1300: Vim9: optional argument type not parsed properly
Bram Moolenaar <Bram@vim.org>
parents: 21481
diff changeset
1919 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
1920 g:echo = nr
574517d682cf patch 8.2.1300: Vim9: optional argument type not parsed properly
Bram Moolenaar <Bram@vim.org>
parents: 21481
diff changeset
1921 enddef
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1922 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
1923 Funcref()
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1924 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
1925 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
1926 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
1927 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1928 v9.CheckScriptSuccess(lines)
21502
179697662a5a patch 8.2.1301: Vim9: varargs argument type not parsed properly
Bram Moolenaar <Bram@vim.org>
parents: 21500
diff changeset
1929
179697662a5a patch 8.2.1301: Vim9: varargs argument type not parsed properly
Bram Moolenaar <Bram@vim.org>
parents: 21500
diff changeset
1930 lines =<< trim END
179697662a5a patch 8.2.1301: Vim9: varargs argument type not parsed properly
Bram Moolenaar <Bram@vim.org>
parents: 21500
diff changeset
1931 vim9script
179697662a5a patch 8.2.1301: Vim9: varargs argument type not parsed properly
Bram Moolenaar <Bram@vim.org>
parents: 21500
diff changeset
1932 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
1933 g:echo = l
179697662a5a patch 8.2.1301: Vim9: varargs argument type not parsed properly
Bram Moolenaar <Bram@vim.org>
parents: 21500
diff changeset
1934 enddef
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1935 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
1936 Funcref()
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1937 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
1938 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
1939 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
1940 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1941 v9.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
1942
e87a97868bbc patch 8.2.1302: Vim9: varargs arg after optional arg does not work
Bram Moolenaar <Bram@vim.org>
parents: 21502
diff changeset
1943 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
1944 vim9script
e87a97868bbc patch 8.2.1302: Vim9: varargs arg after optional arg does not work
Bram Moolenaar <Bram@vim.org>
parents: 21502
diff changeset
1945 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
1946 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
1947 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
1948 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
1949 enddef
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
1950 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
1951 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
1952 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
1953 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
1954
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1955 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
1956 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
1957 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
1958
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
1959 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
1960 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
1961 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
1962 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
1963 v9.CheckScriptSuccess(lines)
29759
d19adfd545e2 patch 9.0.0219: cannot make a funcref with "s:func" in a def function
Bram Moolenaar <Bram@vim.org>
parents: 29668
diff changeset
1964
d19adfd545e2 patch 9.0.0219: cannot make a funcref with "s:func" in a def function
Bram Moolenaar <Bram@vim.org>
parents: 29668
diff changeset
1965 lines =<< trim END
d19adfd545e2 patch 9.0.0219: cannot make a funcref with "s:func" in a def function
Bram Moolenaar <Bram@vim.org>
parents: 29668
diff changeset
1966 function s:func(num)
d19adfd545e2 patch 9.0.0219: cannot make a funcref with "s:func" in a def function
Bram Moolenaar <Bram@vim.org>
parents: 29668
diff changeset
1967 return a:num * 2
d19adfd545e2 patch 9.0.0219: cannot make a funcref with "s:func" in a def function
Bram Moolenaar <Bram@vim.org>
parents: 29668
diff changeset
1968 endfunction
d19adfd545e2 patch 9.0.0219: cannot make a funcref with "s:func" in a def function
Bram Moolenaar <Bram@vim.org>
parents: 29668
diff changeset
1969
d19adfd545e2 patch 9.0.0219: cannot make a funcref with "s:func" in a def function
Bram Moolenaar <Bram@vim.org>
parents: 29668
diff changeset
1970 def s:CallFuncref()
d19adfd545e2 patch 9.0.0219: cannot make a funcref with "s:func" in a def function
Bram Moolenaar <Bram@vim.org>
parents: 29668
diff changeset
1971 var Funcref = function('s:func')
d19adfd545e2 patch 9.0.0219: cannot make a funcref with "s:func" in a def function
Bram Moolenaar <Bram@vim.org>
parents: 29668
diff changeset
1972 Funcref(3)->assert_equal(6)
d19adfd545e2 patch 9.0.0219: cannot make a funcref with "s:func" in a def function
Bram Moolenaar <Bram@vim.org>
parents: 29668
diff changeset
1973 enddef
d19adfd545e2 patch 9.0.0219: cannot make a funcref with "s:func" in a def function
Bram Moolenaar <Bram@vim.org>
parents: 29668
diff changeset
1974 call s:CallFuncref()
d19adfd545e2 patch 9.0.0219: cannot make a funcref with "s:func" in a def function
Bram Moolenaar <Bram@vim.org>
parents: 29668
diff changeset
1975 END
d19adfd545e2 patch 9.0.0219: cannot make a funcref with "s:func" in a def function
Bram Moolenaar <Bram@vim.org>
parents: 29668
diff changeset
1976 v9.CheckScriptSuccess(lines)
d19adfd545e2 patch 9.0.0219: cannot make a funcref with "s:func" in a def function
Bram Moolenaar <Bram@vim.org>
parents: 29668
diff changeset
1977
d19adfd545e2 patch 9.0.0219: cannot make a funcref with "s:func" in a def function
Bram Moolenaar <Bram@vim.org>
parents: 29668
diff changeset
1978 lines =<< trim END
d19adfd545e2 patch 9.0.0219: cannot make a funcref with "s:func" in a def function
Bram Moolenaar <Bram@vim.org>
parents: 29668
diff changeset
1979 function s:func(num)
d19adfd545e2 patch 9.0.0219: cannot make a funcref with "s:func" in a def function
Bram Moolenaar <Bram@vim.org>
parents: 29668
diff changeset
1980 return a:num * 2
d19adfd545e2 patch 9.0.0219: cannot make a funcref with "s:func" in a def function
Bram Moolenaar <Bram@vim.org>
parents: 29668
diff changeset
1981 endfunction
d19adfd545e2 patch 9.0.0219: cannot make a funcref with "s:func" in a def function
Bram Moolenaar <Bram@vim.org>
parents: 29668
diff changeset
1982
d19adfd545e2 patch 9.0.0219: cannot make a funcref with "s:func" in a def function
Bram Moolenaar <Bram@vim.org>
parents: 29668
diff changeset
1983 def s:CallFuncref()
d19adfd545e2 patch 9.0.0219: cannot make a funcref with "s:func" in a def function
Bram Moolenaar <Bram@vim.org>
parents: 29668
diff changeset
1984 var Funcref = function(s:func)
d19adfd545e2 patch 9.0.0219: cannot make a funcref with "s:func" in a def function
Bram Moolenaar <Bram@vim.org>
parents: 29668
diff changeset
1985 Funcref(3)->assert_equal(6)
d19adfd545e2 patch 9.0.0219: cannot make a funcref with "s:func" in a def function
Bram Moolenaar <Bram@vim.org>
parents: 29668
diff changeset
1986 enddef
d19adfd545e2 patch 9.0.0219: cannot make a funcref with "s:func" in a def function
Bram Moolenaar <Bram@vim.org>
parents: 29668
diff changeset
1987 call s:CallFuncref()
d19adfd545e2 patch 9.0.0219: cannot make a funcref with "s:func" in a def function
Bram Moolenaar <Bram@vim.org>
parents: 29668
diff changeset
1988 END
d19adfd545e2 patch 9.0.0219: cannot make a funcref with "s:func" in a def function
Bram Moolenaar <Bram@vim.org>
parents: 29668
diff changeset
1989 v9.CheckScriptSuccess(lines)
d19adfd545e2 patch 9.0.0219: cannot make a funcref with "s:func" in a def function
Bram Moolenaar <Bram@vim.org>
parents: 29668
diff changeset
1990
d19adfd545e2 patch 9.0.0219: cannot make a funcref with "s:func" in a def function
Bram Moolenaar <Bram@vim.org>
parents: 29668
diff changeset
1991 lines =<< trim END
d19adfd545e2 patch 9.0.0219: cannot make a funcref with "s:func" in a def function
Bram Moolenaar <Bram@vim.org>
parents: 29668
diff changeset
1992 function s:func(num)
d19adfd545e2 patch 9.0.0219: cannot make a funcref with "s:func" in a def function
Bram Moolenaar <Bram@vim.org>
parents: 29668
diff changeset
1993 return a:num * 2
d19adfd545e2 patch 9.0.0219: cannot make a funcref with "s:func" in a def function
Bram Moolenaar <Bram@vim.org>
parents: 29668
diff changeset
1994 endfunction
d19adfd545e2 patch 9.0.0219: cannot make a funcref with "s:func" in a def function
Bram Moolenaar <Bram@vim.org>
parents: 29668
diff changeset
1995
d19adfd545e2 patch 9.0.0219: cannot make a funcref with "s:func" in a def function
Bram Moolenaar <Bram@vim.org>
parents: 29668
diff changeset
1996 def s:CallFuncref()
d19adfd545e2 patch 9.0.0219: cannot make a funcref with "s:func" in a def function
Bram Moolenaar <Bram@vim.org>
parents: 29668
diff changeset
1997 var Funcref = s:func
d19adfd545e2 patch 9.0.0219: cannot make a funcref with "s:func" in a def function
Bram Moolenaar <Bram@vim.org>
parents: 29668
diff changeset
1998 Funcref(3)->assert_equal(6)
d19adfd545e2 patch 9.0.0219: cannot make a funcref with "s:func" in a def function
Bram Moolenaar <Bram@vim.org>
parents: 29668
diff changeset
1999 enddef
d19adfd545e2 patch 9.0.0219: cannot make a funcref with "s:func" in a def function
Bram Moolenaar <Bram@vim.org>
parents: 29668
diff changeset
2000 call s:CallFuncref()
d19adfd545e2 patch 9.0.0219: cannot make a funcref with "s:func" in a def function
Bram Moolenaar <Bram@vim.org>
parents: 29668
diff changeset
2001 END
d19adfd545e2 patch 9.0.0219: cannot make a funcref with "s:func" in a def function
Bram Moolenaar <Bram@vim.org>
parents: 29668
diff changeset
2002 v9.CheckScriptSuccess(lines)
20140
39a18a0df429 patch 8.2.0625: Vim9: confusing error when calling unknown function
Bram Moolenaar <Bram@vim.org>
parents: 20029
diff changeset
2003 enddef
39a18a0df429 patch 8.2.0625: Vim9: confusing error when calling unknown function
Bram Moolenaar <Bram@vim.org>
parents: 20029
diff changeset
2004
39a18a0df429 patch 8.2.0625: Vim9: confusing error when calling unknown function
Bram Moolenaar <Bram@vim.org>
parents: 20029
diff changeset
2005 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
2006 let NotAFunc = 'text'
39a18a0df429 patch 8.2.0625: Vim9: confusing error when calling unknown function
Bram Moolenaar <Bram@vim.org>
parents: 20029
diff changeset
2007
19993
efe864a7ce4f patch 8.2.0552: Vim9: some errors not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 19985
diff changeset
2008 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
2009 # 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
2010 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
2011 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
2012 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
2013 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
2014
21353
fb8c8fcb7b60 patch 8.2.1227: Vim9: allowing both quoted and # comments is confusing
Bram Moolenaar <Bram@vim.org>
parents: 21347
diff changeset
2015 # 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
2016 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
2017 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
2018 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
2019 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
2020
21353
fb8c8fcb7b60 patch 8.2.1227: Vim9: allowing both quoted and # comments is confusing
Bram Moolenaar <Bram@vim.org>
parents: 21347
diff changeset
2021 # 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
2022 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
2023 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
2024 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
2025 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
2026 enddef
efe864a7ce4f patch 8.2.0552: Vim9: some errors not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 19985
diff changeset
2027
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2028 def FuncWithForwardCall()
20140
39a18a0df429 patch 8.2.0625: Vim9: confusing error when calling unknown function
Bram Moolenaar <Bram@vim.org>
parents: 20029
diff changeset
2029 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
2030 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2031
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2032 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
2033 return arg
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2034 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2035
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2036 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
2037 # Error in called function requires unwinding the call stack.
27464
a14c4d3e3260 patch 8.2.4260: Vim9: can still use a global function without g:
Bram Moolenaar <Bram@vim.org>
parents: 27457
diff changeset
2038 assert_fails('g: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
2039 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2040
26790
83b35c75c21a patch 8.2.3923: Vim9: double free with split argument list in nested function
Bram Moolenaar <Bram@vim.org>
parents: 26747
diff changeset
2041 def Test_nested_function_with_nextcmd()
26747
a8a4e1e7b111 patch 8.2.3902: Vim9: double free with nested :def function
Bram Moolenaar <Bram@vim.org>
parents: 26735
diff changeset
2042 var lines =<< trim END
a8a4e1e7b111 patch 8.2.3902: Vim9: double free with nested :def function
Bram Moolenaar <Bram@vim.org>
parents: 26735
diff changeset
2043 vim9script
a8a4e1e7b111 patch 8.2.3902: Vim9: double free with nested :def function
Bram Moolenaar <Bram@vim.org>
parents: 26735
diff changeset
2044 # Define an outer function
a8a4e1e7b111 patch 8.2.3902: Vim9: double free with nested :def function
Bram Moolenaar <Bram@vim.org>
parents: 26735
diff changeset
2045 def FirstFunction()
a8a4e1e7b111 patch 8.2.3902: Vim9: double free with nested :def function
Bram Moolenaar <Bram@vim.org>
parents: 26735
diff changeset
2046 # Define an inner function
a8a4e1e7b111 patch 8.2.3902: Vim9: double free with nested :def function
Bram Moolenaar <Bram@vim.org>
parents: 26735
diff changeset
2047 def SecondFunction()
a8a4e1e7b111 patch 8.2.3902: Vim9: double free with nested :def function
Bram Moolenaar <Bram@vim.org>
parents: 26735
diff changeset
2048 # the function has a body, a double free is detected.
a8a4e1e7b111 patch 8.2.3902: Vim9: double free with nested :def function
Bram Moolenaar <Bram@vim.org>
parents: 26735
diff changeset
2049 AAAAA
a8a4e1e7b111 patch 8.2.3902: Vim9: double free with nested :def function
Bram Moolenaar <Bram@vim.org>
parents: 26735
diff changeset
2050
a8a4e1e7b111 patch 8.2.3902: Vim9: double free with nested :def function
Bram Moolenaar <Bram@vim.org>
parents: 26735
diff changeset
2051 # enddef followed by | or } followed by # one or more characters
a8a4e1e7b111 patch 8.2.3902: Vim9: double free with nested :def function
Bram Moolenaar <Bram@vim.org>
parents: 26735
diff changeset
2052 enddef|BBBB
a8a4e1e7b111 patch 8.2.3902: Vim9: double free with nested :def function
Bram Moolenaar <Bram@vim.org>
parents: 26735
diff changeset
2053 enddef
a8a4e1e7b111 patch 8.2.3902: Vim9: double free with nested :def function
Bram Moolenaar <Bram@vim.org>
parents: 26735
diff changeset
2054
a8a4e1e7b111 patch 8.2.3902: Vim9: double free with nested :def function
Bram Moolenaar <Bram@vim.org>
parents: 26735
diff changeset
2055 # Compile all functions
a8a4e1e7b111 patch 8.2.3902: Vim9: double free with nested :def function
Bram Moolenaar <Bram@vim.org>
parents: 26735
diff changeset
2056 defcompile
a8a4e1e7b111 patch 8.2.3902: Vim9: double free with nested :def function
Bram Moolenaar <Bram@vim.org>
parents: 26735
diff changeset
2057 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2058 v9.CheckScriptFailure(lines, 'E1173: Text found after enddef: BBBB')
26747
a8a4e1e7b111 patch 8.2.3902: Vim9: double free with nested :def function
Bram Moolenaar <Bram@vim.org>
parents: 26735
diff changeset
2059 enddef
a8a4e1e7b111 patch 8.2.3902: Vim9: double free with nested :def function
Bram Moolenaar <Bram@vim.org>
parents: 26735
diff changeset
2060
26790
83b35c75c21a patch 8.2.3923: Vim9: double free with split argument list in nested function
Bram Moolenaar <Bram@vim.org>
parents: 26747
diff changeset
2061 def Test_nested_function_with_args_split()
83b35c75c21a patch 8.2.3923: Vim9: double free with split argument list in nested function
Bram Moolenaar <Bram@vim.org>
parents: 26747
diff changeset
2062 var lines =<< trim END
83b35c75c21a patch 8.2.3923: Vim9: double free with split argument list in nested function
Bram Moolenaar <Bram@vim.org>
parents: 26747
diff changeset
2063 vim9script
83b35c75c21a patch 8.2.3923: Vim9: double free with split argument list in nested function
Bram Moolenaar <Bram@vim.org>
parents: 26747
diff changeset
2064 def FirstFunction()
83b35c75c21a patch 8.2.3923: Vim9: double free with split argument list in nested function
Bram Moolenaar <Bram@vim.org>
parents: 26747
diff changeset
2065 def SecondFunction(
83b35c75c21a patch 8.2.3923: Vim9: double free with split argument list in nested function
Bram Moolenaar <Bram@vim.org>
parents: 26747
diff changeset
2066 )
83b35c75c21a patch 8.2.3923: Vim9: double free with split argument list in nested function
Bram Moolenaar <Bram@vim.org>
parents: 26747
diff changeset
2067 # had a double free if the right parenthesis of the nested function is
83b35c75c21a patch 8.2.3923: Vim9: double free with split argument list in nested function
Bram Moolenaar <Bram@vim.org>
parents: 26747
diff changeset
2068 # on the next line
83b35c75c21a patch 8.2.3923: Vim9: double free with split argument list in nested function
Bram Moolenaar <Bram@vim.org>
parents: 26747
diff changeset
2069
83b35c75c21a patch 8.2.3923: Vim9: double free with split argument list in nested function
Bram Moolenaar <Bram@vim.org>
parents: 26747
diff changeset
2070 enddef|BBBB
83b35c75c21a patch 8.2.3923: Vim9: double free with split argument list in nested function
Bram Moolenaar <Bram@vim.org>
parents: 26747
diff changeset
2071 enddef
83b35c75c21a patch 8.2.3923: Vim9: double free with split argument list in nested function
Bram Moolenaar <Bram@vim.org>
parents: 26747
diff changeset
2072 # Compile all functions
83b35c75c21a patch 8.2.3923: Vim9: double free with split argument list in nested function
Bram Moolenaar <Bram@vim.org>
parents: 26747
diff changeset
2073 defcompile
83b35c75c21a patch 8.2.3923: Vim9: double free with split argument list in nested function
Bram Moolenaar <Bram@vim.org>
parents: 26747
diff changeset
2074 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2075 v9.CheckScriptFailure(lines, 'E1173: Text found after enddef: BBBB')
26792
30d8377ea1b1 patch 8.2.3924: Vim9: no error if something follows :enddef
Bram Moolenaar <Bram@vim.org>
parents: 26790
diff changeset
2076
30d8377ea1b1 patch 8.2.3924: Vim9: no error if something follows :enddef
Bram Moolenaar <Bram@vim.org>
parents: 26790
diff changeset
2077 lines =<< trim END
30d8377ea1b1 patch 8.2.3924: Vim9: no error if something follows :enddef
Bram Moolenaar <Bram@vim.org>
parents: 26790
diff changeset
2078 vim9script
30d8377ea1b1 patch 8.2.3924: Vim9: no error if something follows :enddef
Bram Moolenaar <Bram@vim.org>
parents: 26790
diff changeset
2079 def FirstFunction()
30d8377ea1b1 patch 8.2.3924: Vim9: no error if something follows :enddef
Bram Moolenaar <Bram@vim.org>
parents: 26790
diff changeset
2080 func SecondFunction()
30d8377ea1b1 patch 8.2.3924: Vim9: no error if something follows :enddef
Bram Moolenaar <Bram@vim.org>
parents: 26790
diff changeset
2081 endfunc|BBBB
30d8377ea1b1 patch 8.2.3924: Vim9: no error if something follows :enddef
Bram Moolenaar <Bram@vim.org>
parents: 26790
diff changeset
2082 enddef
30d8377ea1b1 patch 8.2.3924: Vim9: no error if something follows :enddef
Bram Moolenaar <Bram@vim.org>
parents: 26790
diff changeset
2083 defcompile
30d8377ea1b1 patch 8.2.3924: Vim9: no error if something follows :enddef
Bram Moolenaar <Bram@vim.org>
parents: 26790
diff changeset
2084 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2085 v9.CheckScriptFailure(lines, 'E1173: Text found after endfunction: BBBB')
26790
83b35c75c21a patch 8.2.3923: Vim9: double free with split argument list in nested function
Bram Moolenaar <Bram@vim.org>
parents: 26747
diff changeset
2086 enddef
83b35c75c21a patch 8.2.3923: Vim9: double free with split argument list in nested function
Bram Moolenaar <Bram@vim.org>
parents: 26747
diff changeset
2087
27022
eebbcc83fb75 patch 8.2.4040: keeping track of allocated lines is too complicated
Bram Moolenaar <Bram@vim.org>
parents: 26974
diff changeset
2088 def Test_error_in_function_args()
eebbcc83fb75 patch 8.2.4040: keeping track of allocated lines is too complicated
Bram Moolenaar <Bram@vim.org>
parents: 26974
diff changeset
2089 var lines =<< trim END
eebbcc83fb75 patch 8.2.4040: keeping track of allocated lines is too complicated
Bram Moolenaar <Bram@vim.org>
parents: 26974
diff changeset
2090 def FirstFunction()
eebbcc83fb75 patch 8.2.4040: keeping track of allocated lines is too complicated
Bram Moolenaar <Bram@vim.org>
parents: 26974
diff changeset
2091 def SecondFunction(J =
eebbcc83fb75 patch 8.2.4040: keeping track of allocated lines is too complicated
Bram Moolenaar <Bram@vim.org>
parents: 26974
diff changeset
2092 # Nois
eebbcc83fb75 patch 8.2.4040: keeping track of allocated lines is too complicated
Bram Moolenaar <Bram@vim.org>
parents: 26974
diff changeset
2093 # one
eebbcc83fb75 patch 8.2.4040: keeping track of allocated lines is too complicated
Bram Moolenaar <Bram@vim.org>
parents: 26974
diff changeset
2094
eebbcc83fb75 patch 8.2.4040: keeping track of allocated lines is too complicated
Bram Moolenaar <Bram@vim.org>
parents: 26974
diff changeset
2095 enddef|BBBB
eebbcc83fb75 patch 8.2.4040: keeping track of allocated lines is too complicated
Bram Moolenaar <Bram@vim.org>
parents: 26974
diff changeset
2096 enddef
eebbcc83fb75 patch 8.2.4040: keeping track of allocated lines is too complicated
Bram Moolenaar <Bram@vim.org>
parents: 26974
diff changeset
2097 # Compile all functions
eebbcc83fb75 patch 8.2.4040: keeping track of allocated lines is too complicated
Bram Moolenaar <Bram@vim.org>
parents: 26974
diff changeset
2098 defcompile
eebbcc83fb75 patch 8.2.4040: keeping track of allocated lines is too complicated
Bram Moolenaar <Bram@vim.org>
parents: 26974
diff changeset
2099 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2100 v9.CheckScriptFailure(lines, 'E488:')
27022
eebbcc83fb75 patch 8.2.4040: keeping track of allocated lines is too complicated
Bram Moolenaar <Bram@vim.org>
parents: 26974
diff changeset
2101 enddef
eebbcc83fb75 patch 8.2.4040: keeping track of allocated lines is too complicated
Bram Moolenaar <Bram@vim.org>
parents: 26974
diff changeset
2102
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2103 def Test_return_type_wrong()
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2104 v9.CheckScriptFailure([
21693
4e4fd845553d patch 8.2.1396: Vim9: no error for unexpectedly returning a value
Bram Moolenaar <Bram@vim.org>
parents: 21689
diff changeset
2105 '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
2106 'return "a"',
4e4fd845553d patch 8.2.1396: Vim9: no error for unexpectedly returning a value
Bram Moolenaar <Bram@vim.org>
parents: 21689
diff changeset
2107 'enddef',
4e4fd845553d patch 8.2.1396: Vim9: no error for unexpectedly returning a value
Bram Moolenaar <Bram@vim.org>
parents: 21689
diff changeset
2108 '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
2109 delfunc! g:Func
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2110 v9.CheckScriptFailure([
21693
4e4fd845553d patch 8.2.1396: Vim9: no error for unexpectedly returning a value
Bram Moolenaar <Bram@vim.org>
parents: 21689
diff changeset
2111 '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
2112 'return 1',
4e4fd845553d patch 8.2.1396: Vim9: no error for unexpectedly returning a value
Bram Moolenaar <Bram@vim.org>
parents: 21689
diff changeset
2113 'enddef',
4e4fd845553d patch 8.2.1396: Vim9: no error for unexpectedly returning a value
Bram Moolenaar <Bram@vim.org>
parents: 21689
diff changeset
2114 '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
2115 delfunc! g:Func
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2116 v9.CheckScriptFailure([
21693
4e4fd845553d patch 8.2.1396: Vim9: no error for unexpectedly returning a value
Bram Moolenaar <Bram@vim.org>
parents: 21689
diff changeset
2117 '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
2118 'return "a"',
4e4fd845553d patch 8.2.1396: Vim9: no error for unexpectedly returning a value
Bram Moolenaar <Bram@vim.org>
parents: 21689
diff changeset
2119 'enddef',
4e4fd845553d patch 8.2.1396: Vim9: no error for unexpectedly returning a value
Bram Moolenaar <Bram@vim.org>
parents: 21689
diff changeset
2120 'defcompile'],
4e4fd845553d patch 8.2.1396: Vim9: no error for unexpectedly returning a value
Bram Moolenaar <Bram@vim.org>
parents: 21689
diff changeset
2121 '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
2122 delfunc! g:Func
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2123 v9.CheckScriptFailure([
21693
4e4fd845553d patch 8.2.1396: Vim9: no error for unexpectedly returning a value
Bram Moolenaar <Bram@vim.org>
parents: 21689
diff changeset
2124 'def Func()',
4e4fd845553d patch 8.2.1396: Vim9: no error for unexpectedly returning a value
Bram Moolenaar <Bram@vim.org>
parents: 21689
diff changeset
2125 'return "a"',
4e4fd845553d patch 8.2.1396: Vim9: no error for unexpectedly returning a value
Bram Moolenaar <Bram@vim.org>
parents: 21689
diff changeset
2126 'enddef',
4e4fd845553d patch 8.2.1396: Vim9: no error for unexpectedly returning a value
Bram Moolenaar <Bram@vim.org>
parents: 21689
diff changeset
2127 'defcompile'],
4e4fd845553d patch 8.2.1396: Vim9: no error for unexpectedly returning a value
Bram Moolenaar <Bram@vim.org>
parents: 21689
diff changeset
2128 '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
2129 delfunc! g:Func
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2130
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2131 v9.CheckScriptFailure([
21693
4e4fd845553d patch 8.2.1396: Vim9: no error for unexpectedly returning a value
Bram Moolenaar <Bram@vim.org>
parents: 21689
diff changeset
2132 '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
2133 'return',
4e4fd845553d patch 8.2.1396: Vim9: no error for unexpectedly returning a value
Bram Moolenaar <Bram@vim.org>
parents: 21689
diff changeset
2134 'enddef',
4e4fd845553d patch 8.2.1396: Vim9: no error for unexpectedly returning a value
Bram Moolenaar <Bram@vim.org>
parents: 21689
diff changeset
2135 'defcompile'], 'E1003:')
23092
c713358da074 patch 8.2.2092: Vim9: unpredictable errors for script tests
Bram Moolenaar <Bram@vim.org>
parents: 23074
diff changeset
2136 delfunc! g:Func
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2137
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2138 v9.CheckScriptFailure([
25561
164cef0bc7ab patch 8.2.3317: Vim9: No error for missing white space before return type
Bram Moolenaar <Bram@vim.org>
parents: 25543
diff changeset
2139 'def Func():number',
164cef0bc7ab patch 8.2.3317: Vim9: No error for missing white space before return type
Bram Moolenaar <Bram@vim.org>
parents: 25543
diff changeset
2140 'return 123',
164cef0bc7ab patch 8.2.3317: Vim9: No error for missing white space before return type
Bram Moolenaar <Bram@vim.org>
parents: 25543
diff changeset
2141 'enddef',
164cef0bc7ab patch 8.2.3317: Vim9: No error for missing white space before return type
Bram Moolenaar <Bram@vim.org>
parents: 25543
diff changeset
2142 'defcompile'], 'E1069:')
164cef0bc7ab patch 8.2.3317: Vim9: No error for missing white space before return type
Bram Moolenaar <Bram@vim.org>
parents: 25543
diff changeset
2143 delfunc! g:Func
164cef0bc7ab patch 8.2.3317: Vim9: No error for missing white space before return type
Bram Moolenaar <Bram@vim.org>
parents: 25543
diff changeset
2144
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2145 v9.CheckScriptFailure([
25561
164cef0bc7ab patch 8.2.3317: Vim9: No error for missing white space before return type
Bram Moolenaar <Bram@vim.org>
parents: 25543
diff changeset
2146 'def Func() :number',
164cef0bc7ab patch 8.2.3317: Vim9: No error for missing white space before return type
Bram Moolenaar <Bram@vim.org>
parents: 25543
diff changeset
2147 'return 123',
164cef0bc7ab patch 8.2.3317: Vim9: No error for missing white space before return type
Bram Moolenaar <Bram@vim.org>
parents: 25543
diff changeset
2148 'enddef',
164cef0bc7ab patch 8.2.3317: Vim9: No error for missing white space before return type
Bram Moolenaar <Bram@vim.org>
parents: 25543
diff changeset
2149 'defcompile'], 'E1059:')
164cef0bc7ab patch 8.2.3317: Vim9: No error for missing white space before return type
Bram Moolenaar <Bram@vim.org>
parents: 25543
diff changeset
2150 delfunc! g:Func
164cef0bc7ab patch 8.2.3317: Vim9: No error for missing white space before return type
Bram Moolenaar <Bram@vim.org>
parents: 25543
diff changeset
2151
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2152 v9.CheckScriptFailure([
25561
164cef0bc7ab patch 8.2.3317: Vim9: No error for missing white space before return type
Bram Moolenaar <Bram@vim.org>
parents: 25543
diff changeset
2153 'def Func() : number',
164cef0bc7ab patch 8.2.3317: Vim9: No error for missing white space before return type
Bram Moolenaar <Bram@vim.org>
parents: 25543
diff changeset
2154 'return 123',
164cef0bc7ab patch 8.2.3317: Vim9: No error for missing white space before return type
Bram Moolenaar <Bram@vim.org>
parents: 25543
diff changeset
2155 'enddef',
164cef0bc7ab patch 8.2.3317: Vim9: No error for missing white space before return type
Bram Moolenaar <Bram@vim.org>
parents: 25543
diff changeset
2156 'defcompile'], 'E1059:')
164cef0bc7ab patch 8.2.3317: Vim9: No error for missing white space before return type
Bram Moolenaar <Bram@vim.org>
parents: 25543
diff changeset
2157 delfunc! g:Func
164cef0bc7ab patch 8.2.3317: Vim9: No error for missing white space before return type
Bram Moolenaar <Bram@vim.org>
parents: 25543
diff changeset
2158
29780
9f8dd1b77563 patch 9.0.0229: Vim9: error message for missing type is not clear
Bram Moolenaar <Bram@vim.org>
parents: 29763
diff changeset
2159 v9.CheckScriptFailure(['def Func(): list', 'return []', 'enddef'], 'E1008: Missing <type> after list')
23092
c713358da074 patch 8.2.2092: Vim9: unpredictable errors for script tests
Bram Moolenaar <Bram@vim.org>
parents: 23074
diff changeset
2160 delfunc! g:Func
29780
9f8dd1b77563 patch 9.0.0229: Vim9: error message for missing type is not clear
Bram Moolenaar <Bram@vim.org>
parents: 29763
diff changeset
2161 v9.CheckScriptFailure(['def Func(): dict', 'return {}', 'enddef'], 'E1008: Missing <type> after dict')
23092
c713358da074 patch 8.2.2092: Vim9: unpredictable errors for script tests
Bram Moolenaar <Bram@vim.org>
parents: 23074
diff changeset
2162 delfunc! g:Func
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2163 v9.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
2164 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
2165
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2166 v9.CheckScriptFailure([
21693
4e4fd845553d patch 8.2.1396: Vim9: no error for unexpectedly returning a value
Bram Moolenaar <Bram@vim.org>
parents: 21689
diff changeset
2167 'vim9script',
4e4fd845553d patch 8.2.1396: Vim9: no error for unexpectedly returning a value
Bram Moolenaar <Bram@vim.org>
parents: 21689
diff changeset
2168 'def FuncB()',
4e4fd845553d patch 8.2.1396: Vim9: no error for unexpectedly returning a value
Bram Moolenaar <Bram@vim.org>
parents: 21689
diff changeset
2169 ' return 123',
4e4fd845553d patch 8.2.1396: Vim9: no error for unexpectedly returning a value
Bram Moolenaar <Bram@vim.org>
parents: 21689
diff changeset
2170 'enddef',
4e4fd845553d patch 8.2.1396: Vim9: no error for unexpectedly returning a value
Bram Moolenaar <Bram@vim.org>
parents: 21689
diff changeset
2171 'def FuncA()',
4e4fd845553d patch 8.2.1396: Vim9: no error for unexpectedly returning a value
Bram Moolenaar <Bram@vim.org>
parents: 21689
diff changeset
2172 ' FuncB()',
4e4fd845553d patch 8.2.1396: Vim9: no error for unexpectedly returning a value
Bram Moolenaar <Bram@vim.org>
parents: 21689
diff changeset
2173 'enddef',
4e4fd845553d patch 8.2.1396: Vim9: no error for unexpectedly returning a value
Bram Moolenaar <Bram@vim.org>
parents: 21689
diff changeset
2174 'defcompile'], 'E1096:')
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2175 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2176
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2177 def Test_arg_type_wrong()
29780
9f8dd1b77563 patch 9.0.0229: Vim9: error message for missing type is not clear
Bram Moolenaar <Bram@vim.org>
parents: 29763
diff changeset
2178 v9.CheckScriptFailure(['def Func3(items: list)', 'echo "a"', 'enddef'], 'E1008: Missing <type> after list')
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2179 v9.CheckScriptFailure(['def Func4(...)', 'echo "a"', 'enddef'], 'E1055: Missing name after ...')
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2180 v9.CheckScriptFailure(['def Func5(items:string)', 'echo "a"'], 'E1069:')
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2181 v9.CheckScriptFailure(['def Func5(items)', 'echo "a"'], 'E1077:')
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2182 v9.CheckScriptFailure(['def Func6(...x:list<number>)', 'echo "a"', 'enddef'], 'E1069:')
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2183 v9.CheckScriptFailure(['def Func7(...x: int)', 'echo "a"', 'enddef'], 'E1010:')
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2184 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2185
24371
2b4883926a24 patch 8.2.2726: confusing error message with white space before comma
Bram Moolenaar <Bram@vim.org>
parents: 24369
diff changeset
2186 def Test_white_space_before_comma()
2b4883926a24 patch 8.2.2726: confusing error message with white space before comma
Bram Moolenaar <Bram@vim.org>
parents: 24369
diff changeset
2187 var lines =<< trim END
2b4883926a24 patch 8.2.2726: confusing error message with white space before comma
Bram Moolenaar <Bram@vim.org>
parents: 24369
diff changeset
2188 vim9script
2b4883926a24 patch 8.2.2726: confusing error message with white space before comma
Bram Moolenaar <Bram@vim.org>
parents: 24369
diff changeset
2189 def Func(a: number , b: number)
2b4883926a24 patch 8.2.2726: confusing error message with white space before comma
Bram Moolenaar <Bram@vim.org>
parents: 24369
diff changeset
2190 enddef
2b4883926a24 patch 8.2.2726: confusing error message with white space before comma
Bram Moolenaar <Bram@vim.org>
parents: 24369
diff changeset
2191 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2192 v9.CheckScriptFailure(lines, 'E1068:')
24685
04205b7d67d5 patch 8.2.2881: various pieces of code not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 24651
diff changeset
2193 call assert_fails('vim9cmd echo stridx("a" .. "b" , "a")', 'E1068:')
24371
2b4883926a24 patch 8.2.2726: confusing error message with white space before comma
Bram Moolenaar <Bram@vim.org>
parents: 24369
diff changeset
2194 enddef
2b4883926a24 patch 8.2.2726: confusing error message with white space before comma
Bram Moolenaar <Bram@vim.org>
parents: 24369
diff changeset
2195
24069
324408c61b20 patch 8.2.2576: Vim9: defining a :func function checks for white space
Bram Moolenaar <Bram@vim.org>
parents: 24065
diff changeset
2196 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
2197 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
2198 vim9script
324408c61b20 patch 8.2.2576: Vim9: defining a :func function checks for white space
Bram Moolenaar <Bram@vim.org>
parents: 24065
diff changeset
2199 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
2200 enddef
324408c61b20 patch 8.2.2576: Vim9: defining a :func function checks for white space
Bram Moolenaar <Bram@vim.org>
parents: 24065
diff changeset
2201 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2202 v9.CheckScriptFailure(lines, 'E1069:')
24069
324408c61b20 patch 8.2.2576: Vim9: defining a :func function checks for white space
Bram Moolenaar <Bram@vim.org>
parents: 24065
diff changeset
2203
324408c61b20 patch 8.2.2576: Vim9: defining a :func function checks for white space
Bram Moolenaar <Bram@vim.org>
parents: 24065
diff changeset
2204 # 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
2205 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
2206 vim9script
324408c61b20 patch 8.2.2576: Vim9: defining a :func function checks for white space
Bram Moolenaar <Bram@vim.org>
parents: 24065
diff changeset
2207 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
2208 endfunc
324408c61b20 patch 8.2.2576: Vim9: defining a :func function checks for white space
Bram Moolenaar <Bram@vim.org>
parents: 24065
diff changeset
2209 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2210 v9.CheckScriptSuccess(lines)
24069
324408c61b20 patch 8.2.2576: Vim9: defining a :func function checks for white space
Bram Moolenaar <Bram@vim.org>
parents: 24065
diff changeset
2211 enddef
324408c61b20 patch 8.2.2576: Vim9: defining a :func function checks for white space
Bram Moolenaar <Bram@vim.org>
parents: 24065
diff changeset
2212
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2213 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
2214 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
2215 vim9script
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
2216 var name = ''
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2217 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
2218 name = arg
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2219 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2220 MyFunc('foobar')
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
2221 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
2222
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
2223 var str = 'barfoo'
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2224 str->MyFunc()
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
2225 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
2226
20945
0653b9b72091 patch 8.2.1024: Vim9: no error for using "let g:var = val"
Bram Moolenaar <Bram@vim.org>
parents: 20909
diff changeset
2227 g:value = 'value'
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2228 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
2229 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
2230
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
2231 var listvar = []
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2232 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
2233 listvar = arg
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2234 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2235 [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
2236 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
2237
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
2238 var dictvar = {}
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2239 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
2240 dictvar = arg
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2241 enddef
23072
4b398a229b0b patch 8.2.2082: Vim9: can still use the depricated #{} dict syntax
Bram Moolenaar <Bram@vim.org>
parents: 23009
diff changeset
2242 {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
2243 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
2244 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
2245 {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
2246 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2247 CompiledDict()
23072
4b398a229b0b patch 8.2.2082: Vim9: can still use the depricated #{} dict syntax
Bram Moolenaar <Bram@vim.org>
parents: 23009
diff changeset
2248 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
2249
23072
4b398a229b0b patch 8.2.2082: Vim9: can still use the depricated #{} dict syntax
Bram Moolenaar <Bram@vim.org>
parents: 23009
diff changeset
2250 {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
2251 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
2252
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2253 ('text')->MyFunc()
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
2254 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
2255 ("some")->MyFunc()
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
2256 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
2257
21475
eec2d2120cde patch 8.2.1288: Vim9: cannot use mark in range
Bram Moolenaar <Bram@vim.org>
parents: 21469
diff changeset
2258 # 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
2259 # 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
2260 'asdfasdf'->MyFunc()
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
2261 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
2262 "xyz"->MyFunc()
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
2263 name->assert_equal('xyz')
21335
af3663df42bf patch 8.2.1218: Vim9: cannot use 'text'->func()
Bram Moolenaar <Bram@vim.org>
parents: 21303
diff changeset
2264
af3663df42bf patch 8.2.1218: Vim9: cannot use 'text'->func()
Bram Moolenaar <Bram@vim.org>
parents: 21303
diff changeset
2265 def UseString()
af3663df42bf patch 8.2.1218: Vim9: cannot use 'text'->func()
Bram Moolenaar <Bram@vim.org>
parents: 21303
diff changeset
2266 'xyork'->MyFunc()
af3663df42bf patch 8.2.1218: Vim9: cannot use 'text'->func()
Bram Moolenaar <Bram@vim.org>
parents: 21303
diff changeset
2267 enddef
af3663df42bf patch 8.2.1218: Vim9: cannot use 'text'->func()
Bram Moolenaar <Bram@vim.org>
parents: 21303
diff changeset
2268 UseString()
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
2269 name->assert_equal('xyork')
21335
af3663df42bf patch 8.2.1218: Vim9: cannot use 'text'->func()
Bram Moolenaar <Bram@vim.org>
parents: 21303
diff changeset
2270
21544
6c67c86a202a patch 8.2.1322: Vim9: method on double quoted string doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 21504
diff changeset
2271 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
2272 "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
2273 enddef
6c67c86a202a patch 8.2.1322: Vim9: method on double quoted string doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 21504
diff changeset
2274 UseString2()
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
2275 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
2276
21475
eec2d2120cde patch 8.2.1288: Vim9: cannot use mark in range
Bram Moolenaar <Bram@vim.org>
parents: 21469
diff changeset
2277 # 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
2278 new
eec2d2120cde patch 8.2.1288: Vim9: cannot use mark in range
Bram Moolenaar <Bram@vim.org>
parents: 21469
diff changeset
2279 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
2280 normal! 3Gmt1G
eec2d2120cde patch 8.2.1288: Vim9: cannot use mark in range
Bram Moolenaar <Bram@vim.org>
parents: 21469
diff changeset
2281 :'t
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
2282 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
2283 bwipe!
eec2d2120cde patch 8.2.1288: Vim9: cannot use mark in range
Bram Moolenaar <Bram@vim.org>
parents: 21469
diff changeset
2284
21118
b0baa80cb53f patch 8.2.1110: Vim9: line continuation does not work in function arguments
Bram Moolenaar <Bram@vim.org>
parents: 21089
diff changeset
2285 MyFunc(
b0baa80cb53f patch 8.2.1110: Vim9: line continuation does not work in function arguments
Bram Moolenaar <Bram@vim.org>
parents: 21089
diff changeset
2286 'continued'
b0baa80cb53f patch 8.2.1110: Vim9: line continuation does not work in function arguments
Bram Moolenaar <Bram@vim.org>
parents: 21089
diff changeset
2287 )
b0baa80cb53f patch 8.2.1110: Vim9: line continuation does not work in function arguments
Bram Moolenaar <Bram@vim.org>
parents: 21089
diff changeset
2288 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
2289 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
2290 )
b0baa80cb53f patch 8.2.1110: Vim9: line continuation does not work in function arguments
Bram Moolenaar <Bram@vim.org>
parents: 21089
diff changeset
2291
b0baa80cb53f patch 8.2.1110: Vim9: line continuation does not work in function arguments
Bram Moolenaar <Bram@vim.org>
parents: 21089
diff changeset
2292 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
2293 'more'
b0baa80cb53f patch 8.2.1110: Vim9: line continuation does not work in function arguments
Bram Moolenaar <Bram@vim.org>
parents: 21089
diff changeset
2294 ..
b0baa80cb53f patch 8.2.1110: Vim9: line continuation does not work in function arguments
Bram Moolenaar <Bram@vim.org>
parents: 21089
diff changeset
2295 'lines'
b0baa80cb53f patch 8.2.1110: Vim9: line continuation does not work in function arguments
Bram Moolenaar <Bram@vim.org>
parents: 21089
diff changeset
2296 )
b0baa80cb53f patch 8.2.1110: Vim9: line continuation does not work in function arguments
Bram Moolenaar <Bram@vim.org>
parents: 21089
diff changeset
2297 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
2298 'morelines',
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
2299 name)
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2300 END
30209
a970b48c25a3 patch 9.0.0440: crash when using mkdir() with "R" flag in compiled function
Bram Moolenaar <Bram@vim.org>
parents: 30192
diff changeset
2301 writefile(lines, 'Xcall.vim', 'D')
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2302 source Xcall.vim
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2303 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2304
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2305 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
2306 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
2307 vim9script
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
2308 var name = ''
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2309 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
2310 var name = 123
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2311 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
2312 defcompile
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2313 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2314 v9.CheckScriptFailure(lines, 'E1054:')
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2315 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2316
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
2317 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
2318 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
2319 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
2320 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
2321 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
2322 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
2323 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
2324 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2325 v9.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
2326 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
2327
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2328 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
2329 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
2330 vim9script
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2331 const var = ''
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2332 def MyFunc(arg: string)
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2333 var = 'asdf'
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2334 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
2335 defcompile
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2336 END
30209
a970b48c25a3 patch 9.0.0440: crash when using mkdir() with "R" flag in compiled function
Bram Moolenaar <Bram@vim.org>
parents: 30192
diff changeset
2337 writefile(lines, 'Xcall_const.vim', 'D')
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
2338 assert_fails('source Xcall_const.vim', 'E46:', '', 1, 'MyFunc')
23295
d9ae7dd3a0f2 patch 8.2.2193: Vim9: can change constant in :def function
Bram Moolenaar <Bram@vim.org>
parents: 23291
diff changeset
2339
d9ae7dd3a0f2 patch 8.2.2193: Vim9: can change constant in :def function
Bram Moolenaar <Bram@vim.org>
parents: 23291
diff changeset
2340 lines =<< trim END
d9ae7dd3a0f2 patch 8.2.2193: Vim9: can change constant in :def function
Bram Moolenaar <Bram@vim.org>
parents: 23291
diff changeset
2341 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
2342 def Change()
d9ae7dd3a0f2 patch 8.2.2193: Vim9: can change constant in :def function
Bram Moolenaar <Bram@vim.org>
parents: 23291
diff changeset
2343 # comment
d9ae7dd3a0f2 patch 8.2.2193: Vim9: can change constant in :def function
Bram Moolenaar <Bram@vim.org>
parents: 23291
diff changeset
2344 g:Aconst = 99
d9ae7dd3a0f2 patch 8.2.2193: Vim9: can change constant in :def function
Bram Moolenaar <Bram@vim.org>
parents: 23291
diff changeset
2345 enddef
d9ae7dd3a0f2 patch 8.2.2193: Vim9: can change constant in :def function
Bram Moolenaar <Bram@vim.org>
parents: 23291
diff changeset
2346 call Change()
d9ae7dd3a0f2 patch 8.2.2193: Vim9: can change constant in :def function
Bram Moolenaar <Bram@vim.org>
parents: 23291
diff changeset
2347 unlet g:Aconst
d9ae7dd3a0f2 patch 8.2.2193: Vim9: can change constant in :def function
Bram Moolenaar <Bram@vim.org>
parents: 23291
diff changeset
2348 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2349 v9.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
2350 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2351
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2352 " 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
2353 " recognized.
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2354 func Test_function_python()
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2355 CheckFeature python3
22437
7bd80999ea21 patch 8.2.1767: Vim9: test fails with python support
Bram Moolenaar <Bram@vim.org>
parents: 22435
diff changeset
2356 let py = 'python3'
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2357 execute py "<< EOF"
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2358 def do_something():
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2359 return 1
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2360 EOF
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2361 endfunc
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2362
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2363 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
2364 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
2365 vim9script
20189
63cc54100ae4 patch 8.2.0650: Vim9: script function can be deleted
Bram Moolenaar <Bram@vim.org>
parents: 20142
diff changeset
2366 def g:GoneSoon()
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2367 echo 'hello'
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2368 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2369
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2370 def CallGoneSoon()
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2371 g:GoneSoon()
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2372 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
2373 defcompile
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2374
20189
63cc54100ae4 patch 8.2.0650: Vim9: script function can be deleted
Bram Moolenaar <Bram@vim.org>
parents: 20142
diff changeset
2375 delfunc g:GoneSoon
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2376 CallGoneSoon()
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2377 END
30209
a970b48c25a3 patch 9.0.0440: crash when using mkdir() with "R" flag in compiled function
Bram Moolenaar <Bram@vim.org>
parents: 30192
diff changeset
2378 writefile(lines, 'XToDelFunc', 'D')
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
2379 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
2380 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
2381 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2382
26560
454a1c9ef797 patch 8.2.3809: Vim9: crash when garbage collecting a nested partial
Bram Moolenaar <Bram@vim.org>
parents: 26538
diff changeset
2383 func Test_free_dict_while_in_funcstack()
454a1c9ef797 patch 8.2.3809: Vim9: crash when garbage collecting a nested partial
Bram Moolenaar <Bram@vim.org>
parents: 26538
diff changeset
2384 " relies on the sleep command
454a1c9ef797 patch 8.2.3809: Vim9: crash when garbage collecting a nested partial
Bram Moolenaar <Bram@vim.org>
parents: 26538
diff changeset
2385 CheckUnix
454a1c9ef797 patch 8.2.3809: Vim9: crash when garbage collecting a nested partial
Bram Moolenaar <Bram@vim.org>
parents: 26538
diff changeset
2386 call Run_Test_free_dict_while_in_funcstack()
454a1c9ef797 patch 8.2.3809: Vim9: crash when garbage collecting a nested partial
Bram Moolenaar <Bram@vim.org>
parents: 26538
diff changeset
2387 endfunc
454a1c9ef797 patch 8.2.3809: Vim9: crash when garbage collecting a nested partial
Bram Moolenaar <Bram@vim.org>
parents: 26538
diff changeset
2388
454a1c9ef797 patch 8.2.3809: Vim9: crash when garbage collecting a nested partial
Bram Moolenaar <Bram@vim.org>
parents: 26538
diff changeset
2389 def Run_Test_free_dict_while_in_funcstack()
454a1c9ef797 patch 8.2.3809: Vim9: crash when garbage collecting a nested partial
Bram Moolenaar <Bram@vim.org>
parents: 26538
diff changeset
2390 # this was freeing the TermRun() default argument dictionary while it was
454a1c9ef797 patch 8.2.3809: Vim9: crash when garbage collecting a nested partial
Bram Moolenaar <Bram@vim.org>
parents: 26538
diff changeset
2391 # still referenced in a funcstack_T
454a1c9ef797 patch 8.2.3809: Vim9: crash when garbage collecting a nested partial
Bram Moolenaar <Bram@vim.org>
parents: 26538
diff changeset
2392 var lines =<< trim END
454a1c9ef797 patch 8.2.3809: Vim9: crash when garbage collecting a nested partial
Bram Moolenaar <Bram@vim.org>
parents: 26538
diff changeset
2393 vim9script
454a1c9ef797 patch 8.2.3809: Vim9: crash when garbage collecting a nested partial
Bram Moolenaar <Bram@vim.org>
parents: 26538
diff changeset
2394
454a1c9ef797 patch 8.2.3809: Vim9: crash when garbage collecting a nested partial
Bram Moolenaar <Bram@vim.org>
parents: 26538
diff changeset
2395 &updatetime = 400
454a1c9ef797 patch 8.2.3809: Vim9: crash when garbage collecting a nested partial
Bram Moolenaar <Bram@vim.org>
parents: 26538
diff changeset
2396 def TermRun(_ = {})
454a1c9ef797 patch 8.2.3809: Vim9: crash when garbage collecting a nested partial
Bram Moolenaar <Bram@vim.org>
parents: 26538
diff changeset
2397 def Post()
454a1c9ef797 patch 8.2.3809: Vim9: crash when garbage collecting a nested partial
Bram Moolenaar <Bram@vim.org>
parents: 26538
diff changeset
2398 enddef
454a1c9ef797 patch 8.2.3809: Vim9: crash when garbage collecting a nested partial
Bram Moolenaar <Bram@vim.org>
parents: 26538
diff changeset
2399 def Exec()
454a1c9ef797 patch 8.2.3809: Vim9: crash when garbage collecting a nested partial
Bram Moolenaar <Bram@vim.org>
parents: 26538
diff changeset
2400 term_start('sleep 1', {
454a1c9ef797 patch 8.2.3809: Vim9: crash when garbage collecting a nested partial
Bram Moolenaar <Bram@vim.org>
parents: 26538
diff changeset
2401 term_finish: 'close',
454a1c9ef797 patch 8.2.3809: Vim9: crash when garbage collecting a nested partial
Bram Moolenaar <Bram@vim.org>
parents: 26538
diff changeset
2402 exit_cb: (_, _) => Post(),
454a1c9ef797 patch 8.2.3809: Vim9: crash when garbage collecting a nested partial
Bram Moolenaar <Bram@vim.org>
parents: 26538
diff changeset
2403 })
454a1c9ef797 patch 8.2.3809: Vim9: crash when garbage collecting a nested partial
Bram Moolenaar <Bram@vim.org>
parents: 26538
diff changeset
2404 enddef
454a1c9ef797 patch 8.2.3809: Vim9: crash when garbage collecting a nested partial
Bram Moolenaar <Bram@vim.org>
parents: 26538
diff changeset
2405 Exec()
454a1c9ef797 patch 8.2.3809: Vim9: crash when garbage collecting a nested partial
Bram Moolenaar <Bram@vim.org>
parents: 26538
diff changeset
2406 enddef
454a1c9ef797 patch 8.2.3809: Vim9: crash when garbage collecting a nested partial
Bram Moolenaar <Bram@vim.org>
parents: 26538
diff changeset
2407 nnoremap <F4> <Cmd>call <SID>TermRun()<CR>
454a1c9ef797 patch 8.2.3809: Vim9: crash when garbage collecting a nested partial
Bram Moolenaar <Bram@vim.org>
parents: 26538
diff changeset
2408 timer_start(100, (_) => feedkeys("\<F4>"))
454a1c9ef797 patch 8.2.3809: Vim9: crash when garbage collecting a nested partial
Bram Moolenaar <Bram@vim.org>
parents: 26538
diff changeset
2409 timer_start(1000, (_) => feedkeys("\<F4>"))
454a1c9ef797 patch 8.2.3809: Vim9: crash when garbage collecting a nested partial
Bram Moolenaar <Bram@vim.org>
parents: 26538
diff changeset
2410 sleep 1500m
454a1c9ef797 patch 8.2.3809: Vim9: crash when garbage collecting a nested partial
Bram Moolenaar <Bram@vim.org>
parents: 26538
diff changeset
2411 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2412 v9.CheckScriptSuccess(lines)
26560
454a1c9ef797 patch 8.2.3809: Vim9: crash when garbage collecting a nested partial
Bram Moolenaar <Bram@vim.org>
parents: 26538
diff changeset
2413 nunmap <F4>
454a1c9ef797 patch 8.2.3809: Vim9: crash when garbage collecting a nested partial
Bram Moolenaar <Bram@vim.org>
parents: 26538
diff changeset
2414 set updatetime&
454a1c9ef797 patch 8.2.3809: Vim9: crash when garbage collecting a nested partial
Bram Moolenaar <Bram@vim.org>
parents: 26538
diff changeset
2415 enddef
454a1c9ef797 patch 8.2.3809: Vim9: crash when garbage collecting a nested partial
Bram Moolenaar <Bram@vim.org>
parents: 26538
diff changeset
2416
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2417 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
2418 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
2419 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
2420 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
2421 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
2422 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
2423 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
2424 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
2425 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
2426 delete('Xdef')
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2427
24404
a2a7d2d6e724 patch 8.2.2742: Vim9: when compiling a function fails it is cleared
Bram Moolenaar <Bram@vim.org>
parents: 24402
diff changeset
2428 assert_fails('g:Func0()', 'E1091:')
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
2429 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
2430 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
2431
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2432 delfunc! Func0
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2433 delfunc! Func1
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2434 delfunc! Func2
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2435 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2436
20142
fe8d0a4344df patch 8.2.0626: Vim9: wrong syntax of function in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents: 20140
diff changeset
2437 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
2438 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
2439 vim9script
fe8d0a4344df patch 8.2.0626: Vim9: wrong syntax of function in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents: 20140
diff changeset
2440 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
2441 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
2442 endfunc
fe8d0a4344df patch 8.2.0626: Vim9: wrong syntax of function in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents: 20140
diff changeset
2443 Func('text')
fe8d0a4344df patch 8.2.0626: Vim9: wrong syntax of function in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents: 20140
diff changeset
2444 END
30209
a970b48c25a3 patch 9.0.0440: crash when using mkdir() with "R" flag in compiled function
Bram Moolenaar <Bram@vim.org>
parents: 30192
diff changeset
2445 writefile(lines, 'XVim9Func', 'D')
20142
fe8d0a4344df patch 8.2.0626: Vim9: wrong syntax of function in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents: 20140
diff changeset
2446 so XVim9Func
fe8d0a4344df patch 8.2.0626: Vim9: wrong syntax of function in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents: 20140
diff changeset
2447 enddef
fe8d0a4344df patch 8.2.0626: Vim9: wrong syntax of function in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents: 20140
diff changeset
2448
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2449 let s:funcResult = 0
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2450
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2451 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
2452 s:funcResult = 11
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2453 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2454
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2455 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
2456 s:funcResult = 22
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2457 return 1234
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2458 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2459
19942
b471038ec3ea patch 8.2.0527: Vim9: function types insufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 19932
diff changeset
2460 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
2461 s:funcResult = 45
19942
b471038ec3ea patch 8.2.0527: Vim9: function types insufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 19932
diff changeset
2462 return 'text'
b471038ec3ea patch 8.2.0527: Vim9: function types insufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 19932
diff changeset
2463 enddef
b471038ec3ea patch 8.2.0527: Vim9: function types insufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 19932
diff changeset
2464
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2465 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
2466 s:funcResult = arg
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2467 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2468
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2469 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
2470 s:funcResult = arg
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2471 return arg
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2472 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2473
19985
f863aa96cae5 patch 8.2.0548: Vim9: not all possible func type errors tested
Bram Moolenaar <Bram@vim.org>
parents: 19975
diff changeset
2474 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
2475 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
2476 enddef
f863aa96cae5 patch 8.2.0548: Vim9: not all possible func type errors tested
Bram Moolenaar <Bram@vim.org>
parents: 19975
diff changeset
2477
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2478 def s:FuncOneArgRetString(arg: string): string
19942
b471038ec3ea patch 8.2.0527: Vim9: function types insufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 19932
diff changeset
2479 return arg
b471038ec3ea patch 8.2.0527: Vim9: function types insufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 19932
diff changeset
2480 enddef
b471038ec3ea patch 8.2.0527: Vim9: function types insufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 19932
diff changeset
2481
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2482 def s:FuncOneArgRetAny(arg: any): any
19926
d286bfc44149 patch 8.2.0519: Vim9: return type not properly checked
Bram Moolenaar <Bram@vim.org>
parents: 19922
diff changeset
2483 return arg
d286bfc44149 patch 8.2.0519: Vim9: return type not properly checked
Bram Moolenaar <Bram@vim.org>
parents: 19922
diff changeset
2484 enddef
d286bfc44149 patch 8.2.0519: Vim9: return type not properly checked
Bram Moolenaar <Bram@vim.org>
parents: 19922
diff changeset
2485
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2486 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
2487 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
2488 s:funcResult = 0
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2489 Ref1 = g:FuncNoArgNoRet
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2490 Ref1()
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
2491 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
2492
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
2493 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
2494 s:funcResult = 0
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2495 Ref2 = g:FuncNoArgNoRet
19922
1f42c49c3d29 patch 8.2.0517: Vim9: cannot separate "func" and "func(): void"
Bram Moolenaar <Bram@vim.org>
parents: 19912
diff changeset
2496 Ref2()
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
2497 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
2498
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
2499 s:funcResult = 0
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2500 Ref2 = g:FuncOneArgNoRet
19922
1f42c49c3d29 patch 8.2.0517: Vim9: cannot separate "func" and "func(): void"
Bram Moolenaar <Bram@vim.org>
parents: 19912
diff changeset
2501 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
2502 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
2503
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
2504 s:funcResult = 0
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2505 Ref2 = g:FuncNoArgRetNumber
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
2506 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
2507 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
2508
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
2509 s:funcResult = 0
27464
a14c4d3e3260 patch 8.2.4260: Vim9: can still use a global function without g:
Bram Moolenaar <Bram@vim.org>
parents: 27457
diff changeset
2510 Ref2 = g:FuncOneArgRetNumber
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
2511 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
2512 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
2513 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2514
21162
3158cc2384cc patch 8.2.1132: Vim9: return type of repeat() is not specific enough
Bram Moolenaar <Bram@vim.org>
parents: 21160
diff changeset
2515 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
2516 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
2517 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
2518 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
2519 endfor
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
2520 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
2521
4a190861f0cc patch 8.2.1133: Vim9: return type of add() is not specific enough
Bram Moolenaar <Bram@vim.org>
parents: 21162
diff changeset
2522 res = 0
30188
ba22d5536d3e patch 9.0.0430: cannot use repeat() with a blob
Bram Moolenaar <Bram@vim.org>
parents: 30065
diff changeset
2523 for n in repeat(0z01, 3)->blob2list()
ba22d5536d3e patch 9.0.0430: cannot use repeat() with a blob
Bram Moolenaar <Bram@vim.org>
parents: 30065
diff changeset
2524 res += n
ba22d5536d3e patch 9.0.0430: cannot use repeat() with a blob
Bram Moolenaar <Bram@vim.org>
parents: 30065
diff changeset
2525 endfor
ba22d5536d3e patch 9.0.0430: cannot use repeat() with a blob
Bram Moolenaar <Bram@vim.org>
parents: 30065
diff changeset
2526 res->assert_equal(3)
ba22d5536d3e patch 9.0.0430: cannot use repeat() with a blob
Bram Moolenaar <Bram@vim.org>
parents: 30065
diff changeset
2527
ba22d5536d3e patch 9.0.0430: cannot use repeat() with a blob
Bram Moolenaar <Bram@vim.org>
parents: 30065
diff changeset
2528 res = 0
21164
4a190861f0cc patch 8.2.1133: Vim9: return type of add() is not specific enough
Bram Moolenaar <Bram@vim.org>
parents: 21162
diff changeset
2529 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
2530 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
2531 endfor
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
2532 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
2533 enddef
3158cc2384cc patch 8.2.1132: Vim9: return type of repeat() is not specific enough
Bram Moolenaar <Bram@vim.org>
parents: 21160
diff changeset
2534
21170
8c494353c6bc patch 8.2.1136: Vim9: return type of argv() is always any
Bram Moolenaar <Bram@vim.org>
parents: 21164
diff changeset
2535 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
2536 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
2537 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
2538 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
2539 res ..= name
8c494353c6bc patch 8.2.1136: Vim9: return type of argv() is always any
Bram Moolenaar <Bram@vim.org>
parents: 21164
diff changeset
2540 endfor
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
2541 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
2542 enddef
8c494353c6bc patch 8.2.1136: Vim9: return type of argv() is always any
Bram Moolenaar <Bram@vim.org>
parents: 21164
diff changeset
2543
19942
b471038ec3ea patch 8.2.0527: Vim9: function types insufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 19932
diff changeset
2544 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
2545 var RefVoid: func: void
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2546 RefVoid = g:FuncNoArgNoRet
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2547 RefVoid = g:FuncOneArgNoRet
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2548 v9.CheckDefFailure(['var RefVoid: func: void', 'RefVoid = g:FuncNoArgRetNumber'], 'E1012: Type mismatch; expected func(...) but got func(): number')
27464
a14c4d3e3260 patch 8.2.4260: Vim9: can still use a global function without g:
Bram Moolenaar <Bram@vim.org>
parents: 27457
diff changeset
2549 v9.CheckDefFailure(['var RefVoid: func: void', 'RefVoid = g: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
2550
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
2551 var RefAny: func(): any
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2552 RefAny = g:FuncNoArgRetNumber
27464
a14c4d3e3260 patch 8.2.4260: Vim9: can still use a global function without g:
Bram Moolenaar <Bram@vim.org>
parents: 27457
diff changeset
2553 RefAny = g:FuncNoArgRetString
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2554 v9.CheckDefFailure(['var RefAny: func(): any', 'RefAny = g:FuncNoArgNoRet'], 'E1012: Type mismatch; expected func(): any but got func()')
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2555 v9.CheckDefFailure(['var RefAny: func(): any', 'RefAny = g: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
2556
22498
04a9b1399d8e patch 8.2.1797: Vim9: some parts of the code not tested
Bram Moolenaar <Bram@vim.org>
parents: 22496
diff changeset
2557 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
2558
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
2559 var RefNr: func: number
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2560 RefNr = g:FuncNoArgRetNumber
27464
a14c4d3e3260 patch 8.2.4260: Vim9: can still use a global function without g:
Bram Moolenaar <Bram@vim.org>
parents: 27457
diff changeset
2561 RefNr = g:FuncOneArgRetNumber
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2562 v9.CheckDefFailure(['var RefNr: func: number', 'RefNr = g:FuncNoArgNoRet'], 'E1012: Type mismatch; expected func(...): number but got func()')
27464
a14c4d3e3260 patch 8.2.4260: Vim9: can still use a global function without g:
Bram Moolenaar <Bram@vim.org>
parents: 27457
diff changeset
2563 v9.CheckDefFailure(['var RefNr: func: number', 'RefNr = g: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
2564
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
2565 var RefStr: func: string
27464
a14c4d3e3260 patch 8.2.4260: Vim9: can still use a global function without g:
Bram Moolenaar <Bram@vim.org>
parents: 27457
diff changeset
2566 RefStr = g:FuncNoArgRetString
19942
b471038ec3ea patch 8.2.0527: Vim9: function types insufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 19932
diff changeset
2567 RefStr = FuncOneArgRetString
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2568 v9.CheckDefFailure(['var RefStr: func: string', 'RefStr = g:FuncNoArgNoRet'], 'E1012: Type mismatch; expected func(...): string but got func()')
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2569 v9.CheckDefFailure(['var RefStr: func: string', 'RefStr = g: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
2570 enddef
b471038ec3ea patch 8.2.0527: Vim9: function types insufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 19932
diff changeset
2571
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2572 def Test_func_type_fails()
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2573 v9.CheckDefFailure(['var ref1: func()'], 'E704:')
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2574
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2575 v9.CheckDefFailure(['var Ref1: func()', 'Ref1 = g:FuncNoArgRetNumber'], 'E1012: Type mismatch; expected func() but got func(): number')
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2576 v9.CheckDefFailure(['var Ref1: func()', 'Ref1 = g:FuncOneArgNoRet'], 'E1012: Type mismatch; expected func() but got func(number)')
27464
a14c4d3e3260 patch 8.2.4260: Vim9: can still use a global function without g:
Bram Moolenaar <Bram@vim.org>
parents: 27457
diff changeset
2577 v9.CheckDefFailure(['var Ref1: func()', 'Ref1 = g:FuncOneArgRetNumber'], 'E1012: Type mismatch; expected func() but got func(number): number')
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2578 v9.CheckDefFailure(['var Ref1: func(bool)', 'Ref1 = g:FuncTwoArgNoRet'], 'E1012: Type mismatch; expected func(bool) but got func(bool, number)')
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2579 v9.CheckDefFailure(['var Ref1: func(?bool)', 'Ref1 = g:FuncTwoArgNoRet'], 'E1012: Type mismatch; expected func(?bool) but got func(bool, number)')
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2580 v9.CheckDefFailure(['var Ref1: func(...bool)', 'Ref1 = g:FuncTwoArgNoRet'], 'E1012: Type mismatch; expected func(...bool) but got func(bool, number)')
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2581
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2582 v9.CheckDefFailure(['var RefWrong: func(string ,number)'], 'E1068:')
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2583 v9.CheckDefFailure(['var RefWrong: func(string,number)'], 'E1069:')
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2584 v9.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:')
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2585 v9.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
2586 enddef
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2587
19926
d286bfc44149 patch 8.2.0519: Vim9: return type not properly checked
Bram Moolenaar <Bram@vim.org>
parents: 19922
diff changeset
2588 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
2589 var nr: number
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2590 nr = g:FuncNoArgRetNumber()
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
2591 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
2592
d286bfc44149 patch 8.2.0519: Vim9: return type not properly checked
Bram Moolenaar <Bram@vim.org>
parents: 19922
diff changeset
2593 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
2594 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
2595
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
2596 var str: string
19926
d286bfc44149 patch 8.2.0519: Vim9: return type not properly checked
Bram Moolenaar <Bram@vim.org>
parents: 19922
diff changeset
2597 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
2598 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
2599
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2600 v9.CheckDefFailure(['var str: string', 'str = g: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
2601 enddef
d286bfc44149 patch 8.2.0519: Vim9: return type not properly checked
Bram Moolenaar <Bram@vim.org>
parents: 19922
diff changeset
2602
22498
04a9b1399d8e patch 8.2.1797: Vim9: some parts of the code not tested
Bram Moolenaar <Bram@vim.org>
parents: 22496
diff changeset
2603 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
2604 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
2605 return n
04a9b1399d8e patch 8.2.1797: Vim9: some parts of the code not tested
Bram Moolenaar <Bram@vim.org>
parents: 22496
diff changeset
2606 enddef
04a9b1399d8e patch 8.2.1797: Vim9: some parts of the code not tested
Bram Moolenaar <Bram@vim.org>
parents: 22496
diff changeset
2607 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
2608 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
2609 enddef
04a9b1399d8e patch 8.2.1797: Vim9: some parts of the code not tested
Bram Moolenaar <Bram@vim.org>
parents: 22496
diff changeset
2610 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
2611 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
2612 enddef
04a9b1399d8e patch 8.2.1797: Vim9: some parts of the code not tested
Bram Moolenaar <Bram@vim.org>
parents: 22496
diff changeset
2613 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
2614 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
2615 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
2616 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
2617 enddef
04a9b1399d8e patch 8.2.1797: Vim9: some parts of the code not tested
Bram Moolenaar <Bram@vim.org>
parents: 22496
diff changeset
2618
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2619 def s:MultiLine(
20015
c001ee73519a patch 8.2.0563: Vim9: cannot split a function line
Bram Moolenaar <Bram@vim.org>
parents: 19993
diff changeset
2620 arg1: string,
c001ee73519a patch 8.2.0563: Vim9: cannot split a function line
Bram Moolenaar <Bram@vim.org>
parents: 19993
diff changeset
2621 arg2 = 1234,
c001ee73519a patch 8.2.0563: Vim9: cannot split a function line
Bram Moolenaar <Bram@vim.org>
parents: 19993
diff changeset
2622 ...rest: list<string>
c001ee73519a patch 8.2.0563: Vim9: cannot split a function line
Bram Moolenaar <Bram@vim.org>
parents: 19993
diff changeset
2623 ): string
c001ee73519a patch 8.2.0563: Vim9: cannot split a function line
Bram Moolenaar <Bram@vim.org>
parents: 19993
diff changeset
2624 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
2625 enddef
c001ee73519a patch 8.2.0563: Vim9: cannot split a function line
Bram Moolenaar <Bram@vim.org>
parents: 19993
diff changeset
2626
20023
c85d4e173cc9 patch 8.2.0567: Vim9: cannot put comments halfway expressions
Bram Moolenaar <Bram@vim.org>
parents: 20017
diff changeset
2627 def MultiLineComment(
c85d4e173cc9 patch 8.2.0567: Vim9: cannot put comments halfway expressions
Bram Moolenaar <Bram@vim.org>
parents: 20017
diff changeset
2628 arg1: string, # comment
c85d4e173cc9 patch 8.2.0567: Vim9: cannot put comments halfway expressions
Bram Moolenaar <Bram@vim.org>
parents: 20017
diff changeset
2629 arg2 = 1234, # comment
c85d4e173cc9 patch 8.2.0567: Vim9: cannot put comments halfway expressions
Bram Moolenaar <Bram@vim.org>
parents: 20017
diff changeset
2630 ...rest: list<string> # comment
c85d4e173cc9 patch 8.2.0567: Vim9: cannot put comments halfway expressions
Bram Moolenaar <Bram@vim.org>
parents: 20017
diff changeset
2631 ): string # comment
c85d4e173cc9 patch 8.2.0567: Vim9: cannot put comments halfway expressions
Bram Moolenaar <Bram@vim.org>
parents: 20017
diff changeset
2632 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
2633 enddef
c85d4e173cc9 patch 8.2.0567: Vim9: cannot put comments halfway expressions
Bram Moolenaar <Bram@vim.org>
parents: 20017
diff changeset
2634
20015
c001ee73519a patch 8.2.0563: Vim9: cannot split a function line
Bram Moolenaar <Bram@vim.org>
parents: 19993
diff changeset
2635 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
2636 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
2637 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
2638 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
2639 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
2640 enddef
c001ee73519a patch 8.2.0563: Vim9: cannot split a function line
Bram Moolenaar <Bram@vim.org>
parents: 19993
diff changeset
2641
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
2642 func Test_multiline_not_vim9()
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2643 call s:MultiLine('text')->assert_equal('text1234')
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2644 call s:MultiLine('text', 777)->assert_equal('text777')
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2645 call s:MultiLine('text', 777, 'one')->assert_equal('text777one')
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2646 call s: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
2647 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
2648
20015
c001ee73519a patch 8.2.0563: Vim9: cannot split a function line
Bram Moolenaar <Bram@vim.org>
parents: 19993
diff changeset
2649
19932
2c4d9ca33769 patch 8.2.0522: several errors are not tested for
Bram Moolenaar <Bram@vim.org>
parents: 19926
diff changeset
2650 " 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
2651 " of E1056.
2c4d9ca33769 patch 8.2.0522: several errors are not tested for
Bram Moolenaar <Bram@vim.org>
parents: 19926
diff changeset
2652 func Test_E1056_1059()
2c4d9ca33769 patch 8.2.0522: several errors are not tested for
Bram Moolenaar <Bram@vim.org>
parents: 19926
diff changeset
2653 let caught_1056 = 0
2c4d9ca33769 patch 8.2.0522: several errors are not tested for
Bram Moolenaar <Bram@vim.org>
parents: 19926
diff changeset
2654 try
2c4d9ca33769 patch 8.2.0522: several errors are not tested for
Bram Moolenaar <Bram@vim.org>
parents: 19926
diff changeset
2655 def F():
2c4d9ca33769 patch 8.2.0522: several errors are not tested for
Bram Moolenaar <Bram@vim.org>
parents: 19926
diff changeset
2656 return 1
2c4d9ca33769 patch 8.2.0522: several errors are not tested for
Bram Moolenaar <Bram@vim.org>
parents: 19926
diff changeset
2657 enddef
2c4d9ca33769 patch 8.2.0522: several errors are not tested for
Bram Moolenaar <Bram@vim.org>
parents: 19926
diff changeset
2658 catch /E1056:/
2c4d9ca33769 patch 8.2.0522: several errors are not tested for
Bram Moolenaar <Bram@vim.org>
parents: 19926
diff changeset
2659 let caught_1056 = 1
2c4d9ca33769 patch 8.2.0522: several errors are not tested for
Bram Moolenaar <Bram@vim.org>
parents: 19926
diff changeset
2660 endtry
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
2661 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
2662
2c4d9ca33769 patch 8.2.0522: several errors are not tested for
Bram Moolenaar <Bram@vim.org>
parents: 19926
diff changeset
2663 let caught_1059 = 0
2c4d9ca33769 patch 8.2.0522: several errors are not tested for
Bram Moolenaar <Bram@vim.org>
parents: 19926
diff changeset
2664 try
2c4d9ca33769 patch 8.2.0522: several errors are not tested for
Bram Moolenaar <Bram@vim.org>
parents: 19926
diff changeset
2665 def F5(items : list)
2c4d9ca33769 patch 8.2.0522: several errors are not tested for
Bram Moolenaar <Bram@vim.org>
parents: 19926
diff changeset
2666 echo 'a'
2c4d9ca33769 patch 8.2.0522: several errors are not tested for
Bram Moolenaar <Bram@vim.org>
parents: 19926
diff changeset
2667 enddef
2c4d9ca33769 patch 8.2.0522: several errors are not tested for
Bram Moolenaar <Bram@vim.org>
parents: 19926
diff changeset
2668 catch /E1059:/
2c4d9ca33769 patch 8.2.0522: several errors are not tested for
Bram Moolenaar <Bram@vim.org>
parents: 19926
diff changeset
2669 let caught_1059 = 1
2c4d9ca33769 patch 8.2.0522: several errors are not tested for
Bram Moolenaar <Bram@vim.org>
parents: 19926
diff changeset
2670 endtry
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
2671 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
2672 endfunc
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2673
20287
ce1b73835822 patch 8.2.0699: Vim9: not all errors tested
Bram Moolenaar <Bram@vim.org>
parents: 20281
diff changeset
2674 func DelMe()
ce1b73835822 patch 8.2.0699: Vim9: not all errors tested
Bram Moolenaar <Bram@vim.org>
parents: 20281
diff changeset
2675 echo 'DelMe'
ce1b73835822 patch 8.2.0699: Vim9: not all errors tested
Bram Moolenaar <Bram@vim.org>
parents: 20281
diff changeset
2676 endfunc
ce1b73835822 patch 8.2.0699: Vim9: not all errors tested
Bram Moolenaar <Bram@vim.org>
parents: 20281
diff changeset
2677
21685
26a4b53c4587 patch 8.2.1392: Vim9: line number incorrect after skipping over comment lines
Bram Moolenaar <Bram@vim.org>
parents: 21660
diff changeset
2678 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
2679 # 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
2680 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
2681 " comment
26a4b53c4587 patch 8.2.1392: Vim9: line number incorrect after skipping over comment lines
Bram Moolenaar <Bram@vim.org>
parents: 21660
diff changeset
2682 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
2683 # comment
26a4b53c4587 patch 8.2.1392: Vim9: line number incorrect after skipping over comment lines
Bram Moolenaar <Bram@vim.org>
parents: 21660
diff changeset
2684 # comment
26a4b53c4587 patch 8.2.1392: Vim9: line number incorrect after skipping over comment lines
Bram Moolenaar <Bram@vim.org>
parents: 21660
diff changeset
2685 invalid
26a4b53c4587 patch 8.2.1392: Vim9: line number incorrect after skipping over comment lines
Bram Moolenaar <Bram@vim.org>
parents: 21660
diff changeset
2686 enddef
26a4b53c4587 patch 8.2.1392: Vim9: line number incorrect after skipping over comment lines
Bram Moolenaar <Bram@vim.org>
parents: 21660
diff changeset
2687 defcompile
26a4b53c4587 patch 8.2.1392: Vim9: line number incorrect after skipping over comment lines
Bram Moolenaar <Bram@vim.org>
parents: 21660
diff changeset
2688 END
30209
a970b48c25a3 patch 9.0.0440: crash when using mkdir() with "R" flag in compiled function
Bram Moolenaar <Bram@vim.org>
parents: 30192
diff changeset
2689 writefile(lines, 'Xdef', 'D')
21685
26a4b53c4587 patch 8.2.1392: Vim9: line number incorrect after skipping over comment lines
Bram Moolenaar <Bram@vim.org>
parents: 21660
diff changeset
2690 try
26a4b53c4587 patch 8.2.1392: Vim9: line number incorrect after skipping over comment lines
Bram Moolenaar <Bram@vim.org>
parents: 21660
diff changeset
2691 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
2692 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
2693 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
2694 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
2695 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
2696 endtry
23092
c713358da074 patch 8.2.2092: Vim9: unpredictable errors for script tests
Bram Moolenaar <Bram@vim.org>
parents: 23074
diff changeset
2697 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
2698
26a4b53c4587 patch 8.2.1392: Vim9: line number incorrect after skipping over comment lines
Bram Moolenaar <Bram@vim.org>
parents: 21660
diff changeset
2699 # 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
2700 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
2701 " comment
26a4b53c4587 patch 8.2.1392: Vim9: line number incorrect after skipping over comment lines
Bram Moolenaar <Bram@vim.org>
parents: 21660
diff changeset
2702 def Func()
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
2703 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
2704 # comment
26a4b53c4587 patch 8.2.1392: Vim9: line number incorrect after skipping over comment lines
Bram Moolenaar <Bram@vim.org>
parents: 21660
diff changeset
2705 # comment
26a4b53c4587 patch 8.2.1392: Vim9: line number incorrect after skipping over comment lines
Bram Moolenaar <Bram@vim.org>
parents: 21660
diff changeset
2706 invalid
26a4b53c4587 patch 8.2.1392: Vim9: line number incorrect after skipping over comment lines
Bram Moolenaar <Bram@vim.org>
parents: 21660
diff changeset
2707 enddef
26a4b53c4587 patch 8.2.1392: Vim9: line number incorrect after skipping over comment lines
Bram Moolenaar <Bram@vim.org>
parents: 21660
diff changeset
2708 defcompile
26a4b53c4587 patch 8.2.1392: Vim9: line number incorrect after skipping over comment lines
Bram Moolenaar <Bram@vim.org>
parents: 21660
diff changeset
2709 END
22264
e0a4d029cb87 patch 8.2.1681: Vim9: unnessary :call commands in tests
Bram Moolenaar <Bram@vim.org>
parents: 22236
diff changeset
2710 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
2711 try
26a4b53c4587 patch 8.2.1392: Vim9: line number incorrect after skipping over comment lines
Bram Moolenaar <Bram@vim.org>
parents: 21660
diff changeset
2712 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
2713 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
2714 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
2715 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
2716 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
2717 endtry
23092
c713358da074 patch 8.2.2092: Vim9: unpredictable errors for script tests
Bram Moolenaar <Bram@vim.org>
parents: 23074
diff changeset
2718 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
2719
21793
0706bd071fa3 patch 8.2.1446: Vim9: line number in error message is not correct
Bram Moolenaar <Bram@vim.org>
parents: 21759
diff changeset
2720 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
2721 vim9script
0706bd071fa3 patch 8.2.1446: Vim9: line number in error message is not correct
Bram Moolenaar <Bram@vim.org>
parents: 21759
diff changeset
2722 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
2723 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
2724 # comment
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
2725 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
2726 enddef
0706bd071fa3 patch 8.2.1446: Vim9: line number in error message is not correct
Bram Moolenaar <Bram@vim.org>
parents: 21759
diff changeset
2727 defcompile
0706bd071fa3 patch 8.2.1446: Vim9: line number in error message is not correct
Bram Moolenaar <Bram@vim.org>
parents: 21759
diff changeset
2728 Func()
0706bd071fa3 patch 8.2.1446: Vim9: line number in error message is not correct
Bram Moolenaar <Bram@vim.org>
parents: 21759
diff changeset
2729 END
22264
e0a4d029cb87 patch 8.2.1681: Vim9: unnessary :call commands in tests
Bram Moolenaar <Bram@vim.org>
parents: 22236
diff changeset
2730 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
2731 try
0706bd071fa3 patch 8.2.1446: Vim9: line number in error message is not correct
Bram Moolenaar <Bram@vim.org>
parents: 21759
diff changeset
2732 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
2733 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
2734 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
2735 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
2736 endtry
23092
c713358da074 patch 8.2.2092: Vim9: unpredictable errors for script tests
Bram Moolenaar <Bram@vim.org>
parents: 23074
diff changeset
2737 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
2738 enddef
26a4b53c4587 patch 8.2.1392: Vim9: line number incorrect after skipping over comment lines
Bram Moolenaar <Bram@vim.org>
parents: 21660
diff changeset
2739
20287
ce1b73835822 patch 8.2.0699: Vim9: not all errors tested
Bram Moolenaar <Bram@vim.org>
parents: 20281
diff changeset
2740 def Test_deleted_function()
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2741 v9.CheckDefExecFailure([
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
2742 '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
2743 'delfunc g:DelMe',
ce1b73835822 patch 8.2.0699: Vim9: not all errors tested
Bram Moolenaar <Bram@vim.org>
parents: 20281
diff changeset
2744 'echo RefMe()'], 'E117:')
ce1b73835822 patch 8.2.0699: Vim9: not all errors tested
Bram Moolenaar <Bram@vim.org>
parents: 20281
diff changeset
2745 enddef
ce1b73835822 patch 8.2.0699: Vim9: not all errors tested
Bram Moolenaar <Bram@vim.org>
parents: 20281
diff changeset
2746
ce1b73835822 patch 8.2.0699: Vim9: not all errors tested
Bram Moolenaar <Bram@vim.org>
parents: 20281
diff changeset
2747 def Test_unknown_function()
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2748 v9.CheckDefExecFailure([
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
2749 '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
2750 'delfunc g:NotExist'], 'E700:')
20287
ce1b73835822 patch 8.2.0699: Vim9: not all errors tested
Bram Moolenaar <Bram@vim.org>
parents: 20281
diff changeset
2751 enddef
ce1b73835822 patch 8.2.0699: Vim9: not all errors tested
Bram Moolenaar <Bram@vim.org>
parents: 20281
diff changeset
2752
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2753 def s: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
2754 return Ref('more')
23d75968ca5e patch 8.2.0677: Vim9: no support for closures
Bram Moolenaar <Bram@vim.org>
parents: 20189
diff changeset
2755 enddef
23d75968ca5e patch 8.2.0677: Vim9: no support for closures
Bram Moolenaar <Bram@vim.org>
parents: 20189
diff changeset
2756
23d75968ca5e patch 8.2.0677: Vim9: no support for closures
Bram Moolenaar <Bram@vim.org>
parents: 20189
diff changeset
2757 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
2758 var local = 'some '
23428
5807e3958e38 patch 8.2.2257: Vim9: using -> for lambda is ambiguous
Bram Moolenaar <Bram@vim.org>
parents: 23426
diff changeset
2759 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
2760 enddef
23d75968ca5e patch 8.2.0677: Vim9: no support for closures
Bram Moolenaar <Bram@vim.org>
parents: 20189
diff changeset
2761
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2762 def s:MakeRef()
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
2763 var local = 'some '
23428
5807e3958e38 patch 8.2.2257: Vim9: using -> for lambda is ambiguous
Bram Moolenaar <Bram@vim.org>
parents: 23426
diff changeset
2764 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
2765 enddef
e46e72aaff74 patch 8.2.0679: Vim9: incomplete support for closures
Bram Moolenaar <Bram@vim.org>
parents: 20244
diff changeset
2766
e46e72aaff74 patch 8.2.0679: Vim9: incomplete support for closures
Bram Moolenaar <Bram@vim.org>
parents: 20244
diff changeset
2767 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
2768 MakeRef()
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
2769 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
2770 unlet g:Ref
e46e72aaff74 patch 8.2.0679: Vim9: incomplete support for closures
Bram Moolenaar <Bram@vim.org>
parents: 20244
diff changeset
2771 enddef
e46e72aaff74 patch 8.2.0679: Vim9: incomplete support for closures
Bram Moolenaar <Bram@vim.org>
parents: 20244
diff changeset
2772
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2773 def s:MakeTwoRefs()
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
2774 var local = ['some']
23428
5807e3958e38 patch 8.2.2257: Vim9: using -> for lambda is ambiguous
Bram Moolenaar <Bram@vim.org>
parents: 23426
diff changeset
2775 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
2776 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
2777 enddef
aac52c32a91f patch 8.2.0683: Vim9: parsing type does not always work
Bram Moolenaar <Bram@vim.org>
parents: 20253
diff changeset
2778
aac52c32a91f patch 8.2.0683: Vim9: parsing type does not always work
Bram Moolenaar <Bram@vim.org>
parents: 20253
diff changeset
2779 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
2780 MakeTwoRefs()
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
2781 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
2782 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
2783 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
2784 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
2785 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
2786
aac52c32a91f patch 8.2.0683: Vim9: parsing type does not always work
Bram Moolenaar <Bram@vim.org>
parents: 20253
diff changeset
2787 unlet g:Extend
aac52c32a91f patch 8.2.0683: Vim9: parsing type does not always work
Bram Moolenaar <Bram@vim.org>
parents: 20253
diff changeset
2788 unlet g:Read
aac52c32a91f patch 8.2.0683: Vim9: parsing type does not always work
Bram Moolenaar <Bram@vim.org>
parents: 20253
diff changeset
2789 enddef
aac52c32a91f patch 8.2.0683: Vim9: parsing type does not always work
Bram Moolenaar <Bram@vim.org>
parents: 20253
diff changeset
2790
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2791 def s:ReadRef(Ref: func(): list<string>): string
20255
aac52c32a91f patch 8.2.0683: Vim9: parsing type does not always work
Bram Moolenaar <Bram@vim.org>
parents: 20253
diff changeset
2792 return join(Ref(), ' ')
aac52c32a91f patch 8.2.0683: Vim9: parsing type does not always work
Bram Moolenaar <Bram@vim.org>
parents: 20253
diff changeset
2793 enddef
aac52c32a91f patch 8.2.0683: Vim9: parsing type does not always work
Bram Moolenaar <Bram@vim.org>
parents: 20253
diff changeset
2794
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2795 def s: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
2796 Ref(add)
aac52c32a91f patch 8.2.0683: Vim9: parsing type does not always work
Bram Moolenaar <Bram@vim.org>
parents: 20253
diff changeset
2797 enddef
aac52c32a91f patch 8.2.0683: Vim9: parsing type does not always work
Bram Moolenaar <Bram@vim.org>
parents: 20253
diff changeset
2798
aac52c32a91f patch 8.2.0683: Vim9: parsing type does not always work
Bram Moolenaar <Bram@vim.org>
parents: 20253
diff changeset
2799 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
2800 MakeTwoRefs()
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
2801 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
2802 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
2803 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
2804 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
2805 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
2806
aac52c32a91f patch 8.2.0683: Vim9: parsing type does not always work
Bram Moolenaar <Bram@vim.org>
parents: 20253
diff changeset
2807 unlet g:Extend
aac52c32a91f patch 8.2.0683: Vim9: parsing type does not always work
Bram Moolenaar <Bram@vim.org>
parents: 20253
diff changeset
2808 unlet g:Read
aac52c32a91f patch 8.2.0683: Vim9: parsing type does not always work
Bram Moolenaar <Bram@vim.org>
parents: 20253
diff changeset
2809 enddef
20247
e46e72aaff74 patch 8.2.0679: Vim9: incomplete support for closures
Bram Moolenaar <Bram@vim.org>
parents: 20244
diff changeset
2810
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2811 def s: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
2812 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
2813 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
2814 enddef
350bb78345ba patch 8.2.0693: closure using argument not tested
Bram Moolenaar <Bram@vim.org>
parents: 20257
diff changeset
2815
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2816 def s: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
2817 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
2818 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
2819 enddef
350bb78345ba patch 8.2.0693: closure using argument not tested
Bram Moolenaar <Bram@vim.org>
parents: 20257
diff changeset
2820
350bb78345ba patch 8.2.0693: closure using argument not tested
Bram Moolenaar <Bram@vim.org>
parents: 20257
diff changeset
2821 def Test_closure_using_argument()
350bb78345ba patch 8.2.0693: closure using argument not tested
Bram Moolenaar <Bram@vim.org>
parents: 20257
diff changeset
2822 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
2823 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
2824
350bb78345ba patch 8.2.0693: closure using argument not tested
Bram Moolenaar <Bram@vim.org>
parents: 20257
diff changeset
2825 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
2826 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
2827
350bb78345ba patch 8.2.0693: closure using argument not tested
Bram Moolenaar <Bram@vim.org>
parents: 20257
diff changeset
2828 unlet g:UseArg
350bb78345ba patch 8.2.0693: closure using argument not tested
Bram Moolenaar <Bram@vim.org>
parents: 20257
diff changeset
2829 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
2830
be36288235af patch 8.2.2504: Vim9: crash when using an argument from a closure
Bram Moolenaar <Bram@vim.org>
parents: 23879
diff changeset
2831 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
2832 vim9script
be36288235af patch 8.2.2504: Vim9: crash when using an argument from a closure
Bram Moolenaar <Bram@vim.org>
parents: 23879
diff changeset
2833 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
2834 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
2835 enddef
be36288235af patch 8.2.2504: Vim9: crash when using an argument from a closure
Bram Moolenaar <Bram@vim.org>
parents: 23879
diff changeset
2836 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
2837 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
2838 enddef
be36288235af patch 8.2.2504: Vim9: crash when using an argument from a closure
Bram Moolenaar <Bram@vim.org>
parents: 23879
diff changeset
2839 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
2840 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2841 v9.CheckScriptSuccess(lines)
20275
350bb78345ba patch 8.2.0693: closure using argument not tested
Bram Moolenaar <Bram@vim.org>
parents: 20257
diff changeset
2842 enddef
350bb78345ba patch 8.2.0693: closure using argument not tested
Bram Moolenaar <Bram@vim.org>
parents: 20257
diff changeset
2843
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2844 def s:MakeGetAndAppendRefs()
22541
7d6ba4204f66 patch 8.2.1819: Vim9: Memory leak when using a closure
Bram Moolenaar <Bram@vim.org>
parents: 22537
diff changeset
2845 var local = 'a'
7d6ba4204f66 patch 8.2.1819: Vim9: Memory leak when using a closure
Bram Moolenaar <Bram@vim.org>
parents: 22537
diff changeset
2846
7d6ba4204f66 patch 8.2.1819: Vim9: Memory leak when using a closure
Bram Moolenaar <Bram@vim.org>
parents: 22537
diff changeset
2847 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
2848 local ..= arg
7d6ba4204f66 patch 8.2.1819: Vim9: Memory leak when using a closure
Bram Moolenaar <Bram@vim.org>
parents: 22537
diff changeset
2849 enddef
7d6ba4204f66 patch 8.2.1819: Vim9: Memory leak when using a closure
Bram Moolenaar <Bram@vim.org>
parents: 22537
diff changeset
2850 g:Append = Append
7d6ba4204f66 patch 8.2.1819: Vim9: Memory leak when using a closure
Bram Moolenaar <Bram@vim.org>
parents: 22537
diff changeset
2851
7d6ba4204f66 patch 8.2.1819: Vim9: Memory leak when using a closure
Bram Moolenaar <Bram@vim.org>
parents: 22537
diff changeset
2852 def Get(): string
7d6ba4204f66 patch 8.2.1819: Vim9: Memory leak when using a closure
Bram Moolenaar <Bram@vim.org>
parents: 22537
diff changeset
2853 return local
7d6ba4204f66 patch 8.2.1819: Vim9: Memory leak when using a closure
Bram Moolenaar <Bram@vim.org>
parents: 22537
diff changeset
2854 enddef
7d6ba4204f66 patch 8.2.1819: Vim9: Memory leak when using a closure
Bram Moolenaar <Bram@vim.org>
parents: 22537
diff changeset
2855 g:Get = Get
7d6ba4204f66 patch 8.2.1819: Vim9: Memory leak when using a closure
Bram Moolenaar <Bram@vim.org>
parents: 22537
diff changeset
2856 enddef
7d6ba4204f66 patch 8.2.1819: Vim9: Memory leak when using a closure
Bram Moolenaar <Bram@vim.org>
parents: 22537
diff changeset
2857
7d6ba4204f66 patch 8.2.1819: Vim9: Memory leak when using a closure
Bram Moolenaar <Bram@vim.org>
parents: 22537
diff changeset
2858 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
2859 MakeGetAndAppendRefs()
7d6ba4204f66 patch 8.2.1819: Vim9: Memory leak when using a closure
Bram Moolenaar <Bram@vim.org>
parents: 22537
diff changeset
2860 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
2861 g:Append('-b')
7d6ba4204f66 patch 8.2.1819: Vim9: Memory leak when using a closure
Bram Moolenaar <Bram@vim.org>
parents: 22537
diff changeset
2862 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
2863 g:Append('-c')
7d6ba4204f66 patch 8.2.1819: Vim9: Memory leak when using a closure
Bram Moolenaar <Bram@vim.org>
parents: 22537
diff changeset
2864 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
2865
7d6ba4204f66 patch 8.2.1819: Vim9: Memory leak when using a closure
Bram Moolenaar <Bram@vim.org>
parents: 22537
diff changeset
2866 unlet g:Append
7d6ba4204f66 patch 8.2.1819: Vim9: Memory leak when using a closure
Bram Moolenaar <Bram@vim.org>
parents: 22537
diff changeset
2867 unlet g:Get
7d6ba4204f66 patch 8.2.1819: Vim9: Memory leak when using a closure
Bram Moolenaar <Bram@vim.org>
parents: 22537
diff changeset
2868 enddef
20295
bc2c9ea94ec1 patch 8.2.0703: Vim9: closure cannot store value in outer context
Bram Moolenaar <Bram@vim.org>
parents: 20287
diff changeset
2869
20279
49b50843e725 patch 8.2.0695: Vim9: cannot define a function inside a function
Bram Moolenaar <Bram@vim.org>
parents: 20275
diff changeset
2870 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
2871 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
2872 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
2873 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
2874 enddef
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
2875 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
2876 enddef
49b50843e725 patch 8.2.0695: Vim9: cannot define a function inside a function
Bram Moolenaar <Bram@vim.org>
parents: 20275
diff changeset
2877
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2878 func s:GetResult(Ref)
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
2879 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
2880 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
2881
5950284a517f patch 8.2.0771: Vim9: cannot call a compiled closure from not compiled code
Bram Moolenaar <Bram@vim.org>
parents: 20355
diff changeset
2882 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
2883 var text = 'text'
23428
5807e3958e38 patch 8.2.2257: Vim9: using -> for lambda is ambiguous
Bram Moolenaar <Bram@vim.org>
parents: 23426
diff changeset
2884 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
2885 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
2886 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
2887
22314
41e118669df3 patch 8.2.1706: Vim9: crash after running into the "Multiple closures" error
Bram Moolenaar <Bram@vim.org>
parents: 22303
diff changeset
2888 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
2889 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
2890 vim9script
41e118669df3 patch 8.2.1706: Vim9: crash after running into the "Multiple closures" error
Bram Moolenaar <Bram@vim.org>
parents: 22303
diff changeset
2891 def Func()
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
2892 var name = 0
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
2893 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
2894 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
2895 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
2896 enddef
41e118669df3 patch 8.2.1706: Vim9: crash after running into the "Multiple closures" error
Bram Moolenaar <Bram@vim.org>
parents: 22303
diff changeset
2897 Func()
41e118669df3 patch 8.2.1706: Vim9: crash after running into the "Multiple closures" error
Bram Moolenaar <Bram@vim.org>
parents: 22303
diff changeset
2898 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2899 v9.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
2900 enddef
41e118669df3 patch 8.2.1706: Vim9: crash after running into the "Multiple closures" error
Bram Moolenaar <Bram@vim.org>
parents: 22303
diff changeset
2901
22541
7d6ba4204f66 patch 8.2.1819: Vim9: Memory leak when using a closure
Bram Moolenaar <Bram@vim.org>
parents: 22537
diff changeset
2902 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
2903 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
2904 vim9script
7d6ba4204f66 patch 8.2.1819: Vim9: Memory leak when using a closure
Bram Moolenaar <Bram@vim.org>
parents: 22537
diff changeset
2905 def Func()
7d6ba4204f66 patch 8.2.1819: Vim9: Memory leak when using a closure
Bram Moolenaar <Bram@vim.org>
parents: 22537
diff changeset
2906 var x = 'hello'
23428
5807e3958e38 patch 8.2.2257: Vim9: using -> for lambda is ambiguous
Bram Moolenaar <Bram@vim.org>
parents: 23426
diff changeset
2907 var Closure = () => x
5807e3958e38 patch 8.2.2257: Vim9: using -> for lambda is ambiguous
Bram Moolenaar <Bram@vim.org>
parents: 23426
diff changeset
2908 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
2909 enddef
7d6ba4204f66 patch 8.2.1819: Vim9: Memory leak when using a closure
Bram Moolenaar <Bram@vim.org>
parents: 22537
diff changeset
2910 Func()
7d6ba4204f66 patch 8.2.1819: Vim9: Memory leak when using a closure
Bram Moolenaar <Bram@vim.org>
parents: 22537
diff changeset
2911 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
2912 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2913 v9.CheckScriptSuccess(lines)
22541
7d6ba4204f66 patch 8.2.1819: Vim9: Memory leak when using a closure
Bram Moolenaar <Bram@vim.org>
parents: 22537
diff changeset
2914 enddef
22527
c3e3c5707fe9 patch 8.2.1812: Vim9: nested closure throws an internal error
Bram Moolenaar <Bram@vim.org>
parents: 22498
diff changeset
2915
22401
df1d7a560b35 patch 8.2.1749: Vim9: crash when closure fails in nested function
Bram Moolenaar <Bram@vim.org>
parents: 22371
diff changeset
2916 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
2917 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
2918 vim9script
df1d7a560b35 patch 8.2.1749: Vim9: crash when closure fails in nested function
Bram Moolenaar <Bram@vim.org>
parents: 22371
diff changeset
2919 def FuncA()
df1d7a560b35 patch 8.2.1749: Vim9: crash when closure fails in nested function
Bram Moolenaar <Bram@vim.org>
parents: 22371
diff changeset
2920 FuncB(0)
df1d7a560b35 patch 8.2.1749: Vim9: crash when closure fails in nested function
Bram Moolenaar <Bram@vim.org>
parents: 22371
diff changeset
2921 enddef
df1d7a560b35 patch 8.2.1749: Vim9: crash when closure fails in nested function
Bram Moolenaar <Bram@vim.org>
parents: 22371
diff changeset
2922 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
2923 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
2924 enddef
df1d7a560b35 patch 8.2.1749: Vim9: crash when closure fails in nested function
Bram Moolenaar <Bram@vim.org>
parents: 22371
diff changeset
2925 FuncA()
df1d7a560b35 patch 8.2.1749: Vim9: crash when closure fails in nested function
Bram Moolenaar <Bram@vim.org>
parents: 22371
diff changeset
2926 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2927 v9.CheckScriptFailure(lines, 'E1012:')
22401
df1d7a560b35 patch 8.2.1749: Vim9: crash when closure fails in nested function
Bram Moolenaar <Bram@vim.org>
parents: 22371
diff changeset
2928 enddef
df1d7a560b35 patch 8.2.1749: Vim9: crash when closure fails in nested function
Bram Moolenaar <Bram@vim.org>
parents: 22371
diff changeset
2929
30192
9f8b1f584395 patch 9.0.0432: crash when using for loop variable in closure
Bram Moolenaar <Bram@vim.org>
parents: 30188
diff changeset
2930 def Run_Test_closure_in_for_loop_fails()
9f8b1f584395 patch 9.0.0432: crash when using for loop variable in closure
Bram Moolenaar <Bram@vim.org>
parents: 30188
diff changeset
2931 var lines =<< trim END
9f8b1f584395 patch 9.0.0432: crash when using for loop variable in closure
Bram Moolenaar <Bram@vim.org>
parents: 30188
diff changeset
2932 vim9script
30249
c0f0118b6790 patch 9.0.0460: loop variable can't be found
Bram Moolenaar <Bram@vim.org>
parents: 30211
diff changeset
2933 redraw
30192
9f8b1f584395 patch 9.0.0432: crash when using for loop variable in closure
Bram Moolenaar <Bram@vim.org>
parents: 30188
diff changeset
2934 for n in [0]
30249
c0f0118b6790 patch 9.0.0460: loop variable can't be found
Bram Moolenaar <Bram@vim.org>
parents: 30211
diff changeset
2935 # time should be enough for startup to finish
c0f0118b6790 patch 9.0.0460: loop variable can't be found
Bram Moolenaar <Bram@vim.org>
parents: 30211
diff changeset
2936 timer_start(200, (_) => {
30192
9f8b1f584395 patch 9.0.0432: crash when using for loop variable in closure
Bram Moolenaar <Bram@vim.org>
parents: 30188
diff changeset
2937 echo n
9f8b1f584395 patch 9.0.0432: crash when using for loop variable in closure
Bram Moolenaar <Bram@vim.org>
parents: 30188
diff changeset
2938 })
9f8b1f584395 patch 9.0.0432: crash when using for loop variable in closure
Bram Moolenaar <Bram@vim.org>
parents: 30188
diff changeset
2939 endfor
9f8b1f584395 patch 9.0.0432: crash when using for loop variable in closure
Bram Moolenaar <Bram@vim.org>
parents: 30188
diff changeset
2940 END
9f8b1f584395 patch 9.0.0432: crash when using for loop variable in closure
Bram Moolenaar <Bram@vim.org>
parents: 30188
diff changeset
2941 writefile(lines, 'XTest_closure_fails', 'D')
9f8b1f584395 patch 9.0.0432: crash when using for loop variable in closure
Bram Moolenaar <Bram@vim.org>
parents: 30188
diff changeset
2942
9f8b1f584395 patch 9.0.0432: crash when using for loop variable in closure
Bram Moolenaar <Bram@vim.org>
parents: 30188
diff changeset
2943 # Check that an error shows
30211
6ed06ffc5821 patch 9.0.0441: closure in for loop test fails on some systems
Bram Moolenaar <Bram@vim.org>
parents: 30209
diff changeset
2944 var buf = g:RunVimInTerminal('-S XTest_closure_fails', {rows: 6, wait_for_ruler: 0})
30249
c0f0118b6790 patch 9.0.0460: loop variable can't be found
Bram Moolenaar <Bram@vim.org>
parents: 30211
diff changeset
2945 g:VerifyScreenDump(buf, 'Test_vim9_closure_fails', {wait: 3000})
30192
9f8b1f584395 patch 9.0.0432: crash when using for loop variable in closure
Bram Moolenaar <Bram@vim.org>
parents: 30188
diff changeset
2946
9f8b1f584395 patch 9.0.0432: crash when using for loop variable in closure
Bram Moolenaar <Bram@vim.org>
parents: 30188
diff changeset
2947 # clean up
9f8b1f584395 patch 9.0.0432: crash when using for loop variable in closure
Bram Moolenaar <Bram@vim.org>
parents: 30188
diff changeset
2948 g:StopVimInTerminal(buf)
9f8b1f584395 patch 9.0.0432: crash when using for loop variable in closure
Bram Moolenaar <Bram@vim.org>
parents: 30188
diff changeset
2949 enddef
9f8b1f584395 patch 9.0.0432: crash when using for loop variable in closure
Bram Moolenaar <Bram@vim.org>
parents: 30188
diff changeset
2950
9f8b1f584395 patch 9.0.0432: crash when using for loop variable in closure
Bram Moolenaar <Bram@vim.org>
parents: 30188
diff changeset
2951 func Test_closure_in_for_loop_fails()
9f8b1f584395 patch 9.0.0432: crash when using for loop variable in closure
Bram Moolenaar <Bram@vim.org>
parents: 30188
diff changeset
2952 CheckScreendump
9f8b1f584395 patch 9.0.0432: crash when using for loop variable in closure
Bram Moolenaar <Bram@vim.org>
parents: 30188
diff changeset
2953 call Run_Test_closure_in_for_loop_fails()
9f8b1f584395 patch 9.0.0432: crash when using for loop variable in closure
Bram Moolenaar <Bram@vim.org>
parents: 30188
diff changeset
2954 endfunc
9f8b1f584395 patch 9.0.0432: crash when using for loop variable in closure
Bram Moolenaar <Bram@vim.org>
parents: 30188
diff changeset
2955
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
2956 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
2957 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
2958 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
2959 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
2960 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
2961 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
2962 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
2963 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
2964 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
2965 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
2966 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
2967 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
2968
43532077b5ff patch 8.2.2170: Vim9: a global function defined in a :def function fails
Bram Moolenaar <Bram@vim.org>
parents: 23177
diff changeset
2969 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
2970 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
2971 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
2972 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2973 v9.CheckScriptSuccess(lines)
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
2974 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
2975 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
2976 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
2977 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
2978
23285
112fa621b127 patch 8.2.2188: Vim9: crash when calling global function from :def function
Bram Moolenaar <Bram@vim.org>
parents: 23281
diff changeset
2979 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
2980 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
2981 vim9script
112fa621b127 patch 8.2.2188: Vim9: crash when calling global function from :def function
Bram Moolenaar <Bram@vim.org>
parents: 23281
diff changeset
2982 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
2983 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
2984 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
2985 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
2986 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
2987 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
2988 enddef
112fa621b127 patch 8.2.2188: Vim9: crash when calling global function from :def function
Bram Moolenaar <Bram@vim.org>
parents: 23281
diff changeset
2989 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
2990 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
2991 enddef
112fa621b127 patch 8.2.2188: Vim9: crash when calling global function from :def function
Bram Moolenaar <Bram@vim.org>
parents: 23281
diff changeset
2992 Outer()
112fa621b127 patch 8.2.2188: Vim9: crash when calling global function from :def function
Bram Moolenaar <Bram@vim.org>
parents: 23281
diff changeset
2993 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
2994 v9.CheckScriptSuccess(lines)
23285
112fa621b127 patch 8.2.2188: Vim9: crash when calling global function from :def function
Bram Moolenaar <Bram@vim.org>
parents: 23281
diff changeset
2995 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
2996 enddef
112fa621b127 patch 8.2.2188: Vim9: crash when calling global function from :def function
Bram Moolenaar <Bram@vim.org>
parents: 23281
diff changeset
2997
26378
a926ccd92ae1 patch 8.2.3720: Vim9: Internal error when invoking closure in legacy context
Bram Moolenaar <Bram@vim.org>
parents: 26323
diff changeset
2998 def Test_closure_called_from_legacy()
a926ccd92ae1 patch 8.2.3720: Vim9: Internal error when invoking closure in legacy context
Bram Moolenaar <Bram@vim.org>
parents: 26323
diff changeset
2999 var lines =<< trim END
a926ccd92ae1 patch 8.2.3720: Vim9: Internal error when invoking closure in legacy context
Bram Moolenaar <Bram@vim.org>
parents: 26323
diff changeset
3000 vim9script
a926ccd92ae1 patch 8.2.3720: Vim9: Internal error when invoking closure in legacy context
Bram Moolenaar <Bram@vim.org>
parents: 26323
diff changeset
3001 def Func()
a926ccd92ae1 patch 8.2.3720: Vim9: Internal error when invoking closure in legacy context
Bram Moolenaar <Bram@vim.org>
parents: 26323
diff changeset
3002 var outer = 'foo'
a926ccd92ae1 patch 8.2.3720: Vim9: Internal error when invoking closure in legacy context
Bram Moolenaar <Bram@vim.org>
parents: 26323
diff changeset
3003 var F = () => {
a926ccd92ae1 patch 8.2.3720: Vim9: Internal error when invoking closure in legacy context
Bram Moolenaar <Bram@vim.org>
parents: 26323
diff changeset
3004 outer = 'bar'
a926ccd92ae1 patch 8.2.3720: Vim9: Internal error when invoking closure in legacy context
Bram Moolenaar <Bram@vim.org>
parents: 26323
diff changeset
3005 }
a926ccd92ae1 patch 8.2.3720: Vim9: Internal error when invoking closure in legacy context
Bram Moolenaar <Bram@vim.org>
parents: 26323
diff changeset
3006 execute printf('call %s()', string(F))
a926ccd92ae1 patch 8.2.3720: Vim9: Internal error when invoking closure in legacy context
Bram Moolenaar <Bram@vim.org>
parents: 26323
diff changeset
3007 enddef
a926ccd92ae1 patch 8.2.3720: Vim9: Internal error when invoking closure in legacy context
Bram Moolenaar <Bram@vim.org>
parents: 26323
diff changeset
3008 Func()
a926ccd92ae1 patch 8.2.3720: Vim9: Internal error when invoking closure in legacy context
Bram Moolenaar <Bram@vim.org>
parents: 26323
diff changeset
3009 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
3010 v9.CheckScriptFailure(lines, 'E1248')
26378
a926ccd92ae1 patch 8.2.3720: Vim9: Internal error when invoking closure in legacy context
Bram Moolenaar <Bram@vim.org>
parents: 26323
diff changeset
3011 enddef
a926ccd92ae1 patch 8.2.3720: Vim9: Internal error when invoking closure in legacy context
Bram Moolenaar <Bram@vim.org>
parents: 26323
diff changeset
3012
23009
1fa84623fc68 patch 8.2.2051: Vim9: crash when aborting a user function call
Bram Moolenaar <Bram@vim.org>
parents: 22973
diff changeset
3013 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
3014 # 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
3015 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
3016 vim9script
1fa84623fc68 patch 8.2.2051: Vim9: crash when aborting a user function call
Bram Moolenaar <Bram@vim.org>
parents: 22973
diff changeset
3017 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
3018 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
3019 # 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
3020 ['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
3021 FireEvent()
1fa84623fc68 patch 8.2.2051: Vim9: crash when aborting a user function call
Bram Moolenaar <Bram@vim.org>
parents: 22973
diff changeset
3022 enddef
1fa84623fc68 patch 8.2.2051: Vim9: crash when aborting a user function call
Bram Moolenaar <Bram@vim.org>
parents: 22973
diff changeset
3023 def FireEvent()
1fa84623fc68 patch 8.2.2051: Vim9: crash when aborting a user function call
Bram Moolenaar <Bram@vim.org>
parents: 22973
diff changeset
3024 do TerminalWinOpen
1fa84623fc68 patch 8.2.2051: Vim9: crash when aborting a user function call
Bram Moolenaar <Bram@vim.org>
parents: 22973
diff changeset
3025 enddef
1fa84623fc68 patch 8.2.2051: Vim9: crash when aborting a user function call
Bram Moolenaar <Bram@vim.org>
parents: 22973
diff changeset
3026 # 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
3027 try
1fa84623fc68 patch 8.2.2051: Vim9: crash when aborting a user function call
Bram Moolenaar <Bram@vim.org>
parents: 22973
diff changeset
3028 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
3029 catch
1fa84623fc68 patch 8.2.2051: Vim9: crash when aborting a user function call
Bram Moolenaar <Bram@vim.org>
parents: 22973
diff changeset
3030 endtry
1fa84623fc68 patch 8.2.2051: Vim9: crash when aborting a user function call
Bram Moolenaar <Bram@vim.org>
parents: 22973
diff changeset
3031 au! TerminalWinOpen
1fa84623fc68 patch 8.2.2051: Vim9: crash when aborting a user function call
Bram Moolenaar <Bram@vim.org>
parents: 22973
diff changeset
3032 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
3033 v9.CheckScriptSuccess(lines)
23009
1fa84623fc68 patch 8.2.2051: Vim9: crash when aborting a user function call
Bram Moolenaar <Bram@vim.org>
parents: 22973
diff changeset
3034 enddef
1fa84623fc68 patch 8.2.2051: Vim9: crash when aborting a user function call
Bram Moolenaar <Bram@vim.org>
parents: 22973
diff changeset
3035
22460
4097509ecc1e patch 8.2.1778: Vim9: returning from a partial call clears outer context
Bram Moolenaar <Bram@vim.org>
parents: 22437
diff changeset
3036 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
3037 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
3038 vim9script
4097509ecc1e patch 8.2.1778: Vim9: returning from a partial call clears outer context
Bram Moolenaar <Bram@vim.org>
parents: 22437
diff changeset
3039 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
3040 var x = 4
23428
5807e3958e38 patch 8.2.2257: Vim9: using -> for lambda is ambiguous
Bram Moolenaar <Bram@vim.org>
parents: 23426
diff changeset
3041 var Lambda1 = () => 7
5807e3958e38 patch 8.2.2257: Vim9: using -> for lambda is ambiguous
Bram Moolenaar <Bram@vim.org>
parents: 23426
diff changeset
3042 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
3043 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
3044 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
3045 enddef
4097509ecc1e patch 8.2.1778: Vim9: returning from a partial call clears outer context
Bram Moolenaar <Bram@vim.org>
parents: 22437
diff changeset
3046 Func()
4097509ecc1e patch 8.2.1778: Vim9: returning from a partial call clears outer context
Bram Moolenaar <Bram@vim.org>
parents: 22437
diff changeset
3047 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
3048 v9.CheckScriptSuccess(lines)
22460
4097509ecc1e patch 8.2.1778: Vim9: returning from a partial call clears outer context
Bram Moolenaar <Bram@vim.org>
parents: 22437
diff changeset
3049 enddef
4097509ecc1e patch 8.2.1778: Vim9: returning from a partial call clears outer context
Bram Moolenaar <Bram@vim.org>
parents: 22437
diff changeset
3050
24858
193cc8bd8a2f patch 8.2.2967: Vim9: crash when using two levels of partials
Bram Moolenaar <Bram@vim.org>
parents: 24854
diff changeset
3051 def Test_double_nested_lambda()
193cc8bd8a2f patch 8.2.2967: Vim9: crash when using two levels of partials
Bram Moolenaar <Bram@vim.org>
parents: 24854
diff changeset
3052 var lines =<< trim END
193cc8bd8a2f patch 8.2.2967: Vim9: crash when using two levels of partials
Bram Moolenaar <Bram@vim.org>
parents: 24854
diff changeset
3053 vim9script
193cc8bd8a2f patch 8.2.2967: Vim9: crash when using two levels of partials
Bram Moolenaar <Bram@vim.org>
parents: 24854
diff changeset
3054 def F(head: string): func(string): func(string): string
193cc8bd8a2f patch 8.2.2967: Vim9: crash when using two levels of partials
Bram Moolenaar <Bram@vim.org>
parents: 24854
diff changeset
3055 return (sep: string): func(string): string => ((tail: string): string => {
193cc8bd8a2f patch 8.2.2967: Vim9: crash when using two levels of partials
Bram Moolenaar <Bram@vim.org>
parents: 24854
diff changeset
3056 return head .. sep .. tail
193cc8bd8a2f patch 8.2.2967: Vim9: crash when using two levels of partials
Bram Moolenaar <Bram@vim.org>
parents: 24854
diff changeset
3057 })
193cc8bd8a2f patch 8.2.2967: Vim9: crash when using two levels of partials
Bram Moolenaar <Bram@vim.org>
parents: 24854
diff changeset
3058 enddef
193cc8bd8a2f patch 8.2.2967: Vim9: crash when using two levels of partials
Bram Moolenaar <Bram@vim.org>
parents: 24854
diff changeset
3059 assert_equal('hello-there', F('hello')('-')('there'))
193cc8bd8a2f patch 8.2.2967: Vim9: crash when using two levels of partials
Bram Moolenaar <Bram@vim.org>
parents: 24854
diff changeset
3060 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
3061 v9.CheckScriptSuccess(lines)
24858
193cc8bd8a2f patch 8.2.2967: Vim9: crash when using two levels of partials
Bram Moolenaar <Bram@vim.org>
parents: 24854
diff changeset
3062 enddef
193cc8bd8a2f patch 8.2.2967: Vim9: crash when using two levels of partials
Bram Moolenaar <Bram@vim.org>
parents: 24854
diff changeset
3063
24651
5dea95170907 patch 8.2.2864: Vim9: crash when using inline function
Bram Moolenaar <Bram@vim.org>
parents: 24555
diff changeset
3064 def Test_nested_inline_lambda()
5dea95170907 patch 8.2.2864: Vim9: crash when using inline function
Bram Moolenaar <Bram@vim.org>
parents: 24555
diff changeset
3065 var lines =<< trim END
5dea95170907 patch 8.2.2864: Vim9: crash when using inline function
Bram Moolenaar <Bram@vim.org>
parents: 24555
diff changeset
3066 vim9script
5dea95170907 patch 8.2.2864: Vim9: crash when using inline function
Bram Moolenaar <Bram@vim.org>
parents: 24555
diff changeset
3067 def F(text: string): func(string): func(string): string
5dea95170907 patch 8.2.2864: Vim9: crash when using inline function
Bram Moolenaar <Bram@vim.org>
parents: 24555
diff changeset
3068 return (arg: string): func(string): string => ((sep: string): string => {
25489
911fdca7f736 patch 8.2.3281: Vim9: TODO items in tests can be taken care of
Bram Moolenaar <Bram@vim.org>
parents: 25465
diff changeset
3069 return sep .. arg .. text
24651
5dea95170907 patch 8.2.2864: Vim9: crash when using inline function
Bram Moolenaar <Bram@vim.org>
parents: 24555
diff changeset
3070 })
5dea95170907 patch 8.2.2864: Vim9: crash when using inline function
Bram Moolenaar <Bram@vim.org>
parents: 24555
diff changeset
3071 enddef
25489
911fdca7f736 patch 8.2.3281: Vim9: TODO items in tests can be taken care of
Bram Moolenaar <Bram@vim.org>
parents: 25465
diff changeset
3072 assert_equal('--there++', F('++')('there')('--'))
24651
5dea95170907 patch 8.2.2864: Vim9: crash when using inline function
Bram Moolenaar <Bram@vim.org>
parents: 24555
diff changeset
3073 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
3074 v9.CheckScriptSuccess(lines)
25265
1d6ff96306fc patch 8.2.3169: Vim9: cannot handle nested inline function
Bram Moolenaar <Bram@vim.org>
parents: 25202
diff changeset
3075
1d6ff96306fc patch 8.2.3169: Vim9: cannot handle nested inline function
Bram Moolenaar <Bram@vim.org>
parents: 25202
diff changeset
3076 lines =<< trim END
1d6ff96306fc patch 8.2.3169: Vim9: cannot handle nested inline function
Bram Moolenaar <Bram@vim.org>
parents: 25202
diff changeset
3077 vim9script
1d6ff96306fc patch 8.2.3169: Vim9: cannot handle nested inline function
Bram Moolenaar <Bram@vim.org>
parents: 25202
diff changeset
3078 echo range(4)->mapnew((_, v) => {
1d6ff96306fc patch 8.2.3169: Vim9: cannot handle nested inline function
Bram Moolenaar <Bram@vim.org>
parents: 25202
diff changeset
3079 return range(v) ->mapnew((_, s) => {
1d6ff96306fc patch 8.2.3169: Vim9: cannot handle nested inline function
Bram Moolenaar <Bram@vim.org>
parents: 25202
diff changeset
3080 return string(s)
1d6ff96306fc patch 8.2.3169: Vim9: cannot handle nested inline function
Bram Moolenaar <Bram@vim.org>
parents: 25202
diff changeset
3081 })
1d6ff96306fc patch 8.2.3169: Vim9: cannot handle nested inline function
Bram Moolenaar <Bram@vim.org>
parents: 25202
diff changeset
3082 })
1d6ff96306fc patch 8.2.3169: Vim9: cannot handle nested inline function
Bram Moolenaar <Bram@vim.org>
parents: 25202
diff changeset
3083 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
3084 v9.CheckScriptSuccess(lines)
25276
d26dc79c533f patch 8.2.3175: Vim9: using illegal pointer with nested lambdas.
Bram Moolenaar <Bram@vim.org>
parents: 25265
diff changeset
3085
d26dc79c533f patch 8.2.3175: Vim9: using illegal pointer with nested lambdas.
Bram Moolenaar <Bram@vim.org>
parents: 25265
diff changeset
3086 lines =<< trim END
d26dc79c533f patch 8.2.3175: Vim9: using illegal pointer with nested lambdas.
Bram Moolenaar <Bram@vim.org>
parents: 25265
diff changeset
3087 vim9script
d26dc79c533f patch 8.2.3175: Vim9: using illegal pointer with nested lambdas.
Bram Moolenaar <Bram@vim.org>
parents: 25265
diff changeset
3088
27669
5c4ab8d4472c patch 8.2.4360: Vim9: allowing use of "s:" leads to inconsistencies
Bram Moolenaar <Bram@vim.org>
parents: 27611
diff changeset
3089 def Func()
25276
d26dc79c533f patch 8.2.3175: Vim9: using illegal pointer with nested lambdas.
Bram Moolenaar <Bram@vim.org>
parents: 25265
diff changeset
3090 range(10)
d26dc79c533f patch 8.2.3175: Vim9: using illegal pointer with nested lambdas.
Bram Moolenaar <Bram@vim.org>
parents: 25265
diff changeset
3091 ->mapnew((_, _) => ({
d26dc79c533f patch 8.2.3175: Vim9: using illegal pointer with nested lambdas.
Bram Moolenaar <Bram@vim.org>
parents: 25265
diff changeset
3092 key: range(10)->mapnew((_, _) => {
d26dc79c533f patch 8.2.3175: Vim9: using illegal pointer with nested lambdas.
Bram Moolenaar <Bram@vim.org>
parents: 25265
diff changeset
3093 return ' '
d26dc79c533f patch 8.2.3175: Vim9: using illegal pointer with nested lambdas.
Bram Moolenaar <Bram@vim.org>
parents: 25265
diff changeset
3094 }),
d26dc79c533f patch 8.2.3175: Vim9: using illegal pointer with nested lambdas.
Bram Moolenaar <Bram@vim.org>
parents: 25265
diff changeset
3095 }))
d26dc79c533f patch 8.2.3175: Vim9: using illegal pointer with nested lambdas.
Bram Moolenaar <Bram@vim.org>
parents: 25265
diff changeset
3096 enddef
d26dc79c533f patch 8.2.3175: Vim9: using illegal pointer with nested lambdas.
Bram Moolenaar <Bram@vim.org>
parents: 25265
diff changeset
3097
d26dc79c533f patch 8.2.3175: Vim9: using illegal pointer with nested lambdas.
Bram Moolenaar <Bram@vim.org>
parents: 25265
diff changeset
3098 defcomp
d26dc79c533f patch 8.2.3175: Vim9: using illegal pointer with nested lambdas.
Bram Moolenaar <Bram@vim.org>
parents: 25265
diff changeset
3099 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
3100 v9.CheckScriptSuccess(lines)
24651
5dea95170907 patch 8.2.2864: Vim9: crash when using inline function
Bram Moolenaar <Bram@vim.org>
parents: 24555
diff changeset
3101 enddef
5dea95170907 patch 8.2.2864: Vim9: crash when using inline function
Bram Moolenaar <Bram@vim.org>
parents: 24555
diff changeset
3102
22910
f78057703df9 patch 8.2.2002: Vim9: lambda argument shadowed by function name
Bram Moolenaar <Bram@vim.org>
parents: 22908
diff changeset
3103 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
3104 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
3105 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
3106 enddef
f78057703df9 patch 8.2.2002: Vim9: lambda argument shadowed by function name
Bram Moolenaar <Bram@vim.org>
parents: 22908
diff changeset
3107
f78057703df9 patch 8.2.2002: Vim9: lambda argument shadowed by function name
Bram Moolenaar <Bram@vim.org>
parents: 22908
diff changeset
3108 def Test_lambda_arg_shadows_func()
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
3109 assert_equal([42], g:Shadowed())
22910
f78057703df9 patch 8.2.2002: Vim9: lambda argument shadowed by function name
Bram Moolenaar <Bram@vim.org>
parents: 22908
diff changeset
3110 enddef
f78057703df9 patch 8.2.2002: Vim9: lambda argument shadowed by function name
Bram Moolenaar <Bram@vim.org>
parents: 22908
diff changeset
3111
28111
d54541ce3e1b patch 8.2.4580: Vim9: incorrect error for shadowing variable
Bram Moolenaar <Bram@vim.org>
parents: 28095
diff changeset
3112 def Test_compiling_referenced_func_no_shadow()
d54541ce3e1b patch 8.2.4580: Vim9: incorrect error for shadowing variable
Bram Moolenaar <Bram@vim.org>
parents: 28095
diff changeset
3113 var lines =<< trim END
d54541ce3e1b patch 8.2.4580: Vim9: incorrect error for shadowing variable
Bram Moolenaar <Bram@vim.org>
parents: 28095
diff changeset
3114 vim9script
d54541ce3e1b patch 8.2.4580: Vim9: incorrect error for shadowing variable
Bram Moolenaar <Bram@vim.org>
parents: 28095
diff changeset
3115
d54541ce3e1b patch 8.2.4580: Vim9: incorrect error for shadowing variable
Bram Moolenaar <Bram@vim.org>
parents: 28095
diff changeset
3116 def InitializeReply(lspserver: dict<any>)
d54541ce3e1b patch 8.2.4580: Vim9: incorrect error for shadowing variable
Bram Moolenaar <Bram@vim.org>
parents: 28095
diff changeset
3117 enddef
d54541ce3e1b patch 8.2.4580: Vim9: incorrect error for shadowing variable
Bram Moolenaar <Bram@vim.org>
parents: 28095
diff changeset
3118
d54541ce3e1b patch 8.2.4580: Vim9: incorrect error for shadowing variable
Bram Moolenaar <Bram@vim.org>
parents: 28095
diff changeset
3119 def ProcessReply(lspserver: dict<any>)
d54541ce3e1b patch 8.2.4580: Vim9: incorrect error for shadowing variable
Bram Moolenaar <Bram@vim.org>
parents: 28095
diff changeset
3120 var lsp_reply_handlers: dict<func> =
d54541ce3e1b patch 8.2.4580: Vim9: incorrect error for shadowing variable
Bram Moolenaar <Bram@vim.org>
parents: 28095
diff changeset
3121 { 'initialize': InitializeReply }
d54541ce3e1b patch 8.2.4580: Vim9: incorrect error for shadowing variable
Bram Moolenaar <Bram@vim.org>
parents: 28095
diff changeset
3122 lsp_reply_handlers['initialize'](lspserver)
d54541ce3e1b patch 8.2.4580: Vim9: incorrect error for shadowing variable
Bram Moolenaar <Bram@vim.org>
parents: 28095
diff changeset
3123 enddef
d54541ce3e1b patch 8.2.4580: Vim9: incorrect error for shadowing variable
Bram Moolenaar <Bram@vim.org>
parents: 28095
diff changeset
3124
d54541ce3e1b patch 8.2.4580: Vim9: incorrect error for shadowing variable
Bram Moolenaar <Bram@vim.org>
parents: 28095
diff changeset
3125 call ProcessReply({})
d54541ce3e1b patch 8.2.4580: Vim9: incorrect error for shadowing variable
Bram Moolenaar <Bram@vim.org>
parents: 28095
diff changeset
3126 END
d54541ce3e1b patch 8.2.4580: Vim9: incorrect error for shadowing variable
Bram Moolenaar <Bram@vim.org>
parents: 28095
diff changeset
3127 v9.CheckScriptSuccess(lines)
d54541ce3e1b patch 8.2.4580: Vim9: incorrect error for shadowing variable
Bram Moolenaar <Bram@vim.org>
parents: 28095
diff changeset
3128 enddef
d54541ce3e1b patch 8.2.4580: Vim9: incorrect error for shadowing variable
Bram Moolenaar <Bram@vim.org>
parents: 28095
diff changeset
3129
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
3130 def s: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
3131 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
3132 \ ? 'empty'
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
3133 \ : 'full'
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
3134 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
3135 enddef
d561e3c6cd65 patch 8.2.1037: Vim9: crash when using line continuation inside :def
Bram Moolenaar <Bram@vim.org>
parents: 20945
diff changeset
3136
d561e3c6cd65 patch 8.2.1037: Vim9: crash when using line continuation inside :def
Bram Moolenaar <Bram@vim.org>
parents: 20945
diff changeset
3137 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
3138 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
3139 enddef
d561e3c6cd65 patch 8.2.1037: Vim9: crash when using line continuation inside :def
Bram Moolenaar <Bram@vim.org>
parents: 20945
diff changeset
3140
22942
4759d13193fb patch 8.2.2018: Vim9: script variable not found from lambda
Bram Moolenaar <Bram@vim.org>
parents: 22936
diff changeset
3141 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
3142 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
3143 vim9script
4759d13193fb patch 8.2.2018: Vim9: script variable not found from lambda
Bram Moolenaar <Bram@vim.org>
parents: 22936
diff changeset
3144 var script = 'test'
24414
f539864ba851 patch 8.2.2747: Vim9: not always an error for too many function arguments
Bram Moolenaar <Bram@vim.org>
parents: 24408
diff changeset
3145 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
3146 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
3147 v9.CheckScriptSuccess(lines)
22942
4759d13193fb patch 8.2.2018: Vim9: script variable not found from lambda
Bram Moolenaar <Bram@vim.org>
parents: 22936
diff changeset
3148 enddef
4759d13193fb patch 8.2.2018: Vim9: script variable not found from lambda
Bram Moolenaar <Bram@vim.org>
parents: 22936
diff changeset
3149
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
3150 def s: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
3151 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
3152 ->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
3153 ->toupper())
21208
09377fd59b2e patch 8.2.1155: Vim9: cannot handle line break inside lambda
Bram Moolenaar <Bram@vim.org>
parents: 21186
diff changeset
3154 ->reverse()
09377fd59b2e patch 8.2.1155: Vim9: cannot handle line break inside lambda
Bram Moolenaar <Bram@vim.org>
parents: 21186
diff changeset
3155 return x
09377fd59b2e patch 8.2.1155: Vim9: cannot handle line break inside lambda
Bram Moolenaar <Bram@vim.org>
parents: 21186
diff changeset
3156 enddef
09377fd59b2e patch 8.2.1155: Vim9: cannot handle line break inside lambda
Bram Moolenaar <Bram@vim.org>
parents: 21186
diff changeset
3157
09377fd59b2e patch 8.2.1155: Vim9: cannot handle line break inside lambda
Bram Moolenaar <Bram@vim.org>
parents: 21186
diff changeset
3158 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
3159 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
3160
03acf9c49f07 patch 8.2.2364: Vim9: line break in lambda accesses freed memory
Bram Moolenaar <Bram@vim.org>
parents: 23630
diff changeset
3161 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
3162 vim9script
03acf9c49f07 patch 8.2.2364: Vim9: line break in lambda accesses freed memory
Bram Moolenaar <Bram@vim.org>
parents: 23630
diff changeset
3163 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
3164 ->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
3165 v.n,
03acf9c49f07 patch 8.2.2364: Vim9: line break in lambda accesses freed memory
Bram Moolenaar <Bram@vim.org>
parents: 23630
diff changeset
3166 v.m,
03acf9c49f07 patch 8.2.2364: Vim9: line break in lambda accesses freed memory
Bram Moolenaar <Bram@vim.org>
parents: 23630
diff changeset
3167 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
3168 ))
03acf9c49f07 patch 8.2.2364: Vim9: line break in lambda accesses freed memory
Bram Moolenaar <Bram@vim.org>
parents: 23630
diff changeset
3169 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
3170 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
3171 v9.CheckScriptSuccess(lines)
21208
09377fd59b2e patch 8.2.1155: Vim9: cannot handle line break inside lambda
Bram Moolenaar <Bram@vim.org>
parents: 21186
diff changeset
3172 enddef
09377fd59b2e patch 8.2.1155: Vim9: cannot handle line break inside lambda
Bram Moolenaar <Bram@vim.org>
parents: 21186
diff changeset
3173
23547
7f09cfa9ac4a patch 8.2.2316: Vim9: cannot list a lambda function
Bram Moolenaar <Bram@vim.org>
parents: 23545
diff changeset
3174 def Test_list_lambda()
7f09cfa9ac4a patch 8.2.2316: Vim9: cannot list a lambda function
Bram Moolenaar <Bram@vim.org>
parents: 23545
diff changeset
3175 timer_start(1000, (_) => 0)
7f09cfa9ac4a patch 8.2.2316: Vim9: cannot list a lambda function
Bram Moolenaar <Bram@vim.org>
parents: 23545
diff changeset
3176 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
3177 ->string()
7f09cfa9ac4a patch 8.2.2316: Vim9: cannot list a lambda function
Bram Moolenaar <Bram@vim.org>
parents: 23545
diff changeset
3178 ->substitute("('", ' ', '')
7f09cfa9ac4a patch 8.2.2316: Vim9: cannot list a lambda function
Bram Moolenaar <Bram@vim.org>
parents: 23545
diff changeset
3179 ->substitute("')", '', '')
7f09cfa9ac4a patch 8.2.2316: Vim9: cannot list a lambda function
Bram Moolenaar <Bram@vim.org>
parents: 23545
diff changeset
3180 ->substitute('function\zs', ' ', ''))
24398
bed5ec739304 patch 8.2.2739: Vim9: a lambda accepts too many arguments at the script level
Bram Moolenaar <Bram@vim.org>
parents: 24371
diff changeset
3181 assert_match('def <lambda>\d\+(_: any): number\n1 return 0\n enddef', body)
23547
7f09cfa9ac4a patch 8.2.2316: Vim9: cannot list a lambda function
Bram Moolenaar <Bram@vim.org>
parents: 23545
diff changeset
3182 enddef
7f09cfa9ac4a patch 8.2.2316: Vim9: cannot list a lambda function
Bram Moolenaar <Bram@vim.org>
parents: 23545
diff changeset
3183
25370
d52504ef26ed patch 8.2.3222: Vim9: cannot used loop variable later as lambda argument
Bram Moolenaar <Bram@vim.org>
parents: 25344
diff changeset
3184 def Test_lambda_block_variable()
25344
d1fcd9c14a93 patch 8.2.3209: Vim9: lambda doesn't find block-local variable
Bram Moolenaar <Bram@vim.org>
parents: 25316
diff changeset
3185 var lines =<< trim END
d1fcd9c14a93 patch 8.2.3209: Vim9: lambda doesn't find block-local variable
Bram Moolenaar <Bram@vim.org>
parents: 25316
diff changeset
3186 vim9script
d1fcd9c14a93 patch 8.2.3209: Vim9: lambda doesn't find block-local variable
Bram Moolenaar <Bram@vim.org>
parents: 25316
diff changeset
3187 var flist: list<func>
d1fcd9c14a93 patch 8.2.3209: Vim9: lambda doesn't find block-local variable
Bram Moolenaar <Bram@vim.org>
parents: 25316
diff changeset
3188 for i in range(10)
d1fcd9c14a93 patch 8.2.3209: Vim9: lambda doesn't find block-local variable
Bram Moolenaar <Bram@vim.org>
parents: 25316
diff changeset
3189 var inloop = i
d1fcd9c14a93 patch 8.2.3209: Vim9: lambda doesn't find block-local variable
Bram Moolenaar <Bram@vim.org>
parents: 25316
diff changeset
3190 flist[i] = () => inloop
d1fcd9c14a93 patch 8.2.3209: Vim9: lambda doesn't find block-local variable
Bram Moolenaar <Bram@vim.org>
parents: 25316
diff changeset
3191 endfor
d1fcd9c14a93 patch 8.2.3209: Vim9: lambda doesn't find block-local variable
Bram Moolenaar <Bram@vim.org>
parents: 25316
diff changeset
3192 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
3193 v9.CheckScriptSuccess(lines)
25344
d1fcd9c14a93 patch 8.2.3209: Vim9: lambda doesn't find block-local variable
Bram Moolenaar <Bram@vim.org>
parents: 25316
diff changeset
3194
d1fcd9c14a93 patch 8.2.3209: Vim9: lambda doesn't find block-local variable
Bram Moolenaar <Bram@vim.org>
parents: 25316
diff changeset
3195 lines =<< trim END
d1fcd9c14a93 patch 8.2.3209: Vim9: lambda doesn't find block-local variable
Bram Moolenaar <Bram@vim.org>
parents: 25316
diff changeset
3196 vim9script
d1fcd9c14a93 patch 8.2.3209: Vim9: lambda doesn't find block-local variable
Bram Moolenaar <Bram@vim.org>
parents: 25316
diff changeset
3197 if true
d1fcd9c14a93 patch 8.2.3209: Vim9: lambda doesn't find block-local variable
Bram Moolenaar <Bram@vim.org>
parents: 25316
diff changeset
3198 var outloop = 5
d1fcd9c14a93 patch 8.2.3209: Vim9: lambda doesn't find block-local variable
Bram Moolenaar <Bram@vim.org>
parents: 25316
diff changeset
3199 var flist: list<func>
d1fcd9c14a93 patch 8.2.3209: Vim9: lambda doesn't find block-local variable
Bram Moolenaar <Bram@vim.org>
parents: 25316
diff changeset
3200 for i in range(10)
d1fcd9c14a93 patch 8.2.3209: Vim9: lambda doesn't find block-local variable
Bram Moolenaar <Bram@vim.org>
parents: 25316
diff changeset
3201 flist[i] = () => outloop
d1fcd9c14a93 patch 8.2.3209: Vim9: lambda doesn't find block-local variable
Bram Moolenaar <Bram@vim.org>
parents: 25316
diff changeset
3202 endfor
d1fcd9c14a93 patch 8.2.3209: Vim9: lambda doesn't find block-local variable
Bram Moolenaar <Bram@vim.org>
parents: 25316
diff changeset
3203 endif
d1fcd9c14a93 patch 8.2.3209: Vim9: lambda doesn't find block-local variable
Bram Moolenaar <Bram@vim.org>
parents: 25316
diff changeset
3204 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
3205 v9.CheckScriptSuccess(lines)
25344
d1fcd9c14a93 patch 8.2.3209: Vim9: lambda doesn't find block-local variable
Bram Moolenaar <Bram@vim.org>
parents: 25316
diff changeset
3206
d1fcd9c14a93 patch 8.2.3209: Vim9: lambda doesn't find block-local variable
Bram Moolenaar <Bram@vim.org>
parents: 25316
diff changeset
3207 lines =<< trim END
d1fcd9c14a93 patch 8.2.3209: Vim9: lambda doesn't find block-local variable
Bram Moolenaar <Bram@vim.org>
parents: 25316
diff changeset
3208 vim9script
d1fcd9c14a93 patch 8.2.3209: Vim9: lambda doesn't find block-local variable
Bram Moolenaar <Bram@vim.org>
parents: 25316
diff changeset
3209 if true
d1fcd9c14a93 patch 8.2.3209: Vim9: lambda doesn't find block-local variable
Bram Moolenaar <Bram@vim.org>
parents: 25316
diff changeset
3210 var outloop = 5
d1fcd9c14a93 patch 8.2.3209: Vim9: lambda doesn't find block-local variable
Bram Moolenaar <Bram@vim.org>
parents: 25316
diff changeset
3211 endif
d1fcd9c14a93 patch 8.2.3209: Vim9: lambda doesn't find block-local variable
Bram Moolenaar <Bram@vim.org>
parents: 25316
diff changeset
3212 var flist: list<func>
d1fcd9c14a93 patch 8.2.3209: Vim9: lambda doesn't find block-local variable
Bram Moolenaar <Bram@vim.org>
parents: 25316
diff changeset
3213 for i in range(10)
d1fcd9c14a93 patch 8.2.3209: Vim9: lambda doesn't find block-local variable
Bram Moolenaar <Bram@vim.org>
parents: 25316
diff changeset
3214 flist[i] = () => outloop
d1fcd9c14a93 patch 8.2.3209: Vim9: lambda doesn't find block-local variable
Bram Moolenaar <Bram@vim.org>
parents: 25316
diff changeset
3215 endfor
d1fcd9c14a93 patch 8.2.3209: Vim9: lambda doesn't find block-local variable
Bram Moolenaar <Bram@vim.org>
parents: 25316
diff changeset
3216 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
3217 v9.CheckScriptFailure(lines, 'E1001: Variable not found: outloop', 1)
25370
d52504ef26ed patch 8.2.3222: Vim9: cannot used loop variable later as lambda argument
Bram Moolenaar <Bram@vim.org>
parents: 25344
diff changeset
3218
d52504ef26ed patch 8.2.3222: Vim9: cannot used loop variable later as lambda argument
Bram Moolenaar <Bram@vim.org>
parents: 25344
diff changeset
3219 lines =<< trim END
d52504ef26ed patch 8.2.3222: Vim9: cannot used loop variable later as lambda argument
Bram Moolenaar <Bram@vim.org>
parents: 25344
diff changeset
3220 vim9script
d52504ef26ed patch 8.2.3222: Vim9: cannot used loop variable later as lambda argument
Bram Moolenaar <Bram@vim.org>
parents: 25344
diff changeset
3221 for i in range(10)
d52504ef26ed patch 8.2.3222: Vim9: cannot used loop variable later as lambda argument
Bram Moolenaar <Bram@vim.org>
parents: 25344
diff changeset
3222 var Ref = () => 0
d52504ef26ed patch 8.2.3222: Vim9: cannot used loop variable later as lambda argument
Bram Moolenaar <Bram@vim.org>
parents: 25344
diff changeset
3223 endfor
d52504ef26ed patch 8.2.3222: Vim9: cannot used loop variable later as lambda argument
Bram Moolenaar <Bram@vim.org>
parents: 25344
diff changeset
3224 assert_equal(0, ((i) => 0)(0))
d52504ef26ed patch 8.2.3222: Vim9: cannot used loop variable later as lambda argument
Bram Moolenaar <Bram@vim.org>
parents: 25344
diff changeset
3225 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
3226 v9.CheckScriptSuccess(lines)
25344
d1fcd9c14a93 patch 8.2.3209: Vim9: lambda doesn't find block-local variable
Bram Moolenaar <Bram@vim.org>
parents: 25316
diff changeset
3227 enddef
d1fcd9c14a93 patch 8.2.3209: Vim9: lambda doesn't find block-local variable
Bram Moolenaar <Bram@vim.org>
parents: 25316
diff changeset
3228
24531
3bfec39ce31c patch 8.2.2805: Vim9: cannot use legacy syntax in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents: 24525
diff changeset
3229 def Test_legacy_lambda()
3bfec39ce31c patch 8.2.2805: Vim9: cannot use legacy syntax in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents: 24525
diff changeset
3230 legacy echo {x -> 'hello ' .. x}('foo')
24539
3a290891a015 patch 8.2.2809: Vim9: :def function compilation fails when using :legacy
Bram Moolenaar <Bram@vim.org>
parents: 24531
diff changeset
3231
24531
3bfec39ce31c patch 8.2.2805: Vim9: cannot use legacy syntax in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents: 24525
diff changeset
3232 var lines =<< trim END
3bfec39ce31c patch 8.2.2805: Vim9: cannot use legacy syntax in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents: 24525
diff changeset
3233 echo {x -> 'hello ' .. x}('foo')
3bfec39ce31c patch 8.2.2805: Vim9: cannot use legacy syntax in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents: 24525
diff changeset
3234 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
3235 v9.CheckDefAndScriptFailure(lines, 'E720:')
24539
3a290891a015 patch 8.2.2809: Vim9: :def function compilation fails when using :legacy
Bram Moolenaar <Bram@vim.org>
parents: 24531
diff changeset
3236
3a290891a015 patch 8.2.2809: Vim9: :def function compilation fails when using :legacy
Bram Moolenaar <Bram@vim.org>
parents: 24531
diff changeset
3237 lines =<< trim END
3a290891a015 patch 8.2.2809: Vim9: :def function compilation fails when using :legacy
Bram Moolenaar <Bram@vim.org>
parents: 24531
diff changeset
3238 vim9script
3a290891a015 patch 8.2.2809: Vim9: :def function compilation fails when using :legacy
Bram Moolenaar <Bram@vim.org>
parents: 24531
diff changeset
3239 def Func()
3a290891a015 patch 8.2.2809: Vim9: :def function compilation fails when using :legacy
Bram Moolenaar <Bram@vim.org>
parents: 24531
diff changeset
3240 echo (() => 'no error')()
3a290891a015 patch 8.2.2809: Vim9: :def function compilation fails when using :legacy
Bram Moolenaar <Bram@vim.org>
parents: 24531
diff changeset
3241 enddef
3a290891a015 patch 8.2.2809: Vim9: :def function compilation fails when using :legacy
Bram Moolenaar <Bram@vim.org>
parents: 24531
diff changeset
3242 legacy call s:Func()
3a290891a015 patch 8.2.2809: Vim9: :def function compilation fails when using :legacy
Bram Moolenaar <Bram@vim.org>
parents: 24531
diff changeset
3243 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
3244 v9.CheckScriptSuccess(lines)
24531
3bfec39ce31c patch 8.2.2805: Vim9: cannot use legacy syntax in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents: 24525
diff changeset
3245 enddef
3bfec39ce31c patch 8.2.2805: Vim9: cannot use legacy syntax in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents: 24525
diff changeset
3246
25030
214fddf4c765 patch 8.2.3052: Vim9: "legacy call" does not work
Bram Moolenaar <Bram@vim.org>
parents: 24996
diff changeset
3247 def Test_legacy()
214fddf4c765 patch 8.2.3052: Vim9: "legacy call" does not work
Bram Moolenaar <Bram@vim.org>
parents: 24996
diff changeset
3248 var lines =<< trim END
214fddf4c765 patch 8.2.3052: Vim9: "legacy call" does not work
Bram Moolenaar <Bram@vim.org>
parents: 24996
diff changeset
3249 vim9script
214fddf4c765 patch 8.2.3052: Vim9: "legacy call" does not work
Bram Moolenaar <Bram@vim.org>
parents: 24996
diff changeset
3250 func g:LegacyFunction()
214fddf4c765 patch 8.2.3052: Vim9: "legacy call" does not work
Bram Moolenaar <Bram@vim.org>
parents: 24996
diff changeset
3251 let g:legacyvar = 1
214fddf4c765 patch 8.2.3052: Vim9: "legacy call" does not work
Bram Moolenaar <Bram@vim.org>
parents: 24996
diff changeset
3252 endfunc
214fddf4c765 patch 8.2.3052: Vim9: "legacy call" does not work
Bram Moolenaar <Bram@vim.org>
parents: 24996
diff changeset
3253 def Testit()
214fddf4c765 patch 8.2.3052: Vim9: "legacy call" does not work
Bram Moolenaar <Bram@vim.org>
parents: 24996
diff changeset
3254 legacy call g:LegacyFunction()
214fddf4c765 patch 8.2.3052: Vim9: "legacy call" does not work
Bram Moolenaar <Bram@vim.org>
parents: 24996
diff changeset
3255 enddef
214fddf4c765 patch 8.2.3052: Vim9: "legacy call" does not work
Bram Moolenaar <Bram@vim.org>
parents: 24996
diff changeset
3256 Testit()
214fddf4c765 patch 8.2.3052: Vim9: "legacy call" does not work
Bram Moolenaar <Bram@vim.org>
parents: 24996
diff changeset
3257 assert_equal(1, g:legacyvar)
214fddf4c765 patch 8.2.3052: Vim9: "legacy call" does not work
Bram Moolenaar <Bram@vim.org>
parents: 24996
diff changeset
3258 unlet g:legacyvar
214fddf4c765 patch 8.2.3052: Vim9: "legacy call" does not work
Bram Moolenaar <Bram@vim.org>
parents: 24996
diff changeset
3259 delfunc g:LegacyFunction
214fddf4c765 patch 8.2.3052: Vim9: "legacy call" does not work
Bram Moolenaar <Bram@vim.org>
parents: 24996
diff changeset
3260 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
3261 v9.CheckScriptSuccess(lines)
25030
214fddf4c765 patch 8.2.3052: Vim9: "legacy call" does not work
Bram Moolenaar <Bram@vim.org>
parents: 24996
diff changeset
3262 enddef
214fddf4c765 patch 8.2.3052: Vim9: "legacy call" does not work
Bram Moolenaar <Bram@vim.org>
parents: 24996
diff changeset
3263
24776
7464d4c927f5 patch 8.2.2926: Vim9: no good error for using :legacy in a :def function
Bram Moolenaar <Bram@vim.org>
parents: 24695
diff changeset
3264 def Test_legacy_errors()
7464d4c927f5 patch 8.2.2926: Vim9: no good error for using :legacy in a :def function
Bram Moolenaar <Bram@vim.org>
parents: 24695
diff changeset
3265 for cmd in ['if', 'elseif', 'else', 'endif',
7464d4c927f5 patch 8.2.2926: Vim9: no good error for using :legacy in a :def function
Bram Moolenaar <Bram@vim.org>
parents: 24695
diff changeset
3266 'for', 'endfor', 'continue', 'break',
7464d4c927f5 patch 8.2.2926: Vim9: no good error for using :legacy in a :def function
Bram Moolenaar <Bram@vim.org>
parents: 24695
diff changeset
3267 'while', 'endwhile',
7464d4c927f5 patch 8.2.2926: Vim9: no good error for using :legacy in a :def function
Bram Moolenaar <Bram@vim.org>
parents: 24695
diff changeset
3268 'try', 'catch', 'finally', 'endtry']
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
3269 v9.CheckDefFailure(['legacy ' .. cmd .. ' expr'], 'E1189:')
24776
7464d4c927f5 patch 8.2.2926: Vim9: no good error for using :legacy in a :def function
Bram Moolenaar <Bram@vim.org>
parents: 24695
diff changeset
3270 endfor
7464d4c927f5 patch 8.2.2926: Vim9: no good error for using :legacy in a :def function
Bram Moolenaar <Bram@vim.org>
parents: 24695
diff changeset
3271 enddef
7464d4c927f5 patch 8.2.2926: Vim9: no good error for using :legacy in a :def function
Bram Moolenaar <Bram@vim.org>
parents: 24695
diff changeset
3272
25800
fe8d153cb268 patch 8.2.3435: Vim9: dict is not passed to dict function
Bram Moolenaar <Bram@vim.org>
parents: 25774
diff changeset
3273 def Test_call_legacy_with_dict()
fe8d153cb268 patch 8.2.3435: Vim9: dict is not passed to dict function
Bram Moolenaar <Bram@vim.org>
parents: 25774
diff changeset
3274 var lines =<< trim END
fe8d153cb268 patch 8.2.3435: Vim9: dict is not passed to dict function
Bram Moolenaar <Bram@vim.org>
parents: 25774
diff changeset
3275 vim9script
fe8d153cb268 patch 8.2.3435: Vim9: dict is not passed to dict function
Bram Moolenaar <Bram@vim.org>
parents: 25774
diff changeset
3276 func Legacy() dict
fe8d153cb268 patch 8.2.3435: Vim9: dict is not passed to dict function
Bram Moolenaar <Bram@vim.org>
parents: 25774
diff changeset
3277 let g:result = self.value
fe8d153cb268 patch 8.2.3435: Vim9: dict is not passed to dict function
Bram Moolenaar <Bram@vim.org>
parents: 25774
diff changeset
3278 endfunc
fe8d153cb268 patch 8.2.3435: Vim9: dict is not passed to dict function
Bram Moolenaar <Bram@vim.org>
parents: 25774
diff changeset
3279 def TestDirect()
fe8d153cb268 patch 8.2.3435: Vim9: dict is not passed to dict function
Bram Moolenaar <Bram@vim.org>
parents: 25774
diff changeset
3280 var d = {value: 'yes', func: Legacy}
fe8d153cb268 patch 8.2.3435: Vim9: dict is not passed to dict function
Bram Moolenaar <Bram@vim.org>
parents: 25774
diff changeset
3281 d.func()
fe8d153cb268 patch 8.2.3435: Vim9: dict is not passed to dict function
Bram Moolenaar <Bram@vim.org>
parents: 25774
diff changeset
3282 enddef
fe8d153cb268 patch 8.2.3435: Vim9: dict is not passed to dict function
Bram Moolenaar <Bram@vim.org>
parents: 25774
diff changeset
3283 TestDirect()
fe8d153cb268 patch 8.2.3435: Vim9: dict is not passed to dict function
Bram Moolenaar <Bram@vim.org>
parents: 25774
diff changeset
3284 assert_equal('yes', g:result)
fe8d153cb268 patch 8.2.3435: Vim9: dict is not passed to dict function
Bram Moolenaar <Bram@vim.org>
parents: 25774
diff changeset
3285 unlet g:result
fe8d153cb268 patch 8.2.3435: Vim9: dict is not passed to dict function
Bram Moolenaar <Bram@vim.org>
parents: 25774
diff changeset
3286
fe8d153cb268 patch 8.2.3435: Vim9: dict is not passed to dict function
Bram Moolenaar <Bram@vim.org>
parents: 25774
diff changeset
3287 def TestIndirect()
fe8d153cb268 patch 8.2.3435: Vim9: dict is not passed to dict function
Bram Moolenaar <Bram@vim.org>
parents: 25774
diff changeset
3288 var d = {value: 'foo', func: Legacy}
fe8d153cb268 patch 8.2.3435: Vim9: dict is not passed to dict function
Bram Moolenaar <Bram@vim.org>
parents: 25774
diff changeset
3289 var Fi = d.func
fe8d153cb268 patch 8.2.3435: Vim9: dict is not passed to dict function
Bram Moolenaar <Bram@vim.org>
parents: 25774
diff changeset
3290 Fi()
fe8d153cb268 patch 8.2.3435: Vim9: dict is not passed to dict function
Bram Moolenaar <Bram@vim.org>
parents: 25774
diff changeset
3291 enddef
fe8d153cb268 patch 8.2.3435: Vim9: dict is not passed to dict function
Bram Moolenaar <Bram@vim.org>
parents: 25774
diff changeset
3292 TestIndirect()
fe8d153cb268 patch 8.2.3435: Vim9: dict is not passed to dict function
Bram Moolenaar <Bram@vim.org>
parents: 25774
diff changeset
3293 assert_equal('foo', g:result)
fe8d153cb268 patch 8.2.3435: Vim9: dict is not passed to dict function
Bram Moolenaar <Bram@vim.org>
parents: 25774
diff changeset
3294 unlet g:result
fe8d153cb268 patch 8.2.3435: Vim9: dict is not passed to dict function
Bram Moolenaar <Bram@vim.org>
parents: 25774
diff changeset
3295
fe8d153cb268 patch 8.2.3435: Vim9: dict is not passed to dict function
Bram Moolenaar <Bram@vim.org>
parents: 25774
diff changeset
3296 var d = {value: 'bar', func: Legacy}
fe8d153cb268 patch 8.2.3435: Vim9: dict is not passed to dict function
Bram Moolenaar <Bram@vim.org>
parents: 25774
diff changeset
3297 d.func()
fe8d153cb268 patch 8.2.3435: Vim9: dict is not passed to dict function
Bram Moolenaar <Bram@vim.org>
parents: 25774
diff changeset
3298 assert_equal('bar', g:result)
fe8d153cb268 patch 8.2.3435: Vim9: dict is not passed to dict function
Bram Moolenaar <Bram@vim.org>
parents: 25774
diff changeset
3299 unlet g:result
fe8d153cb268 patch 8.2.3435: Vim9: dict is not passed to dict function
Bram Moolenaar <Bram@vim.org>
parents: 25774
diff changeset
3300 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
3301 v9.CheckScriptSuccess(lines)
25800
fe8d153cb268 patch 8.2.3435: Vim9: dict is not passed to dict function
Bram Moolenaar <Bram@vim.org>
parents: 25774
diff changeset
3302 enddef
fe8d153cb268 patch 8.2.3435: Vim9: dict is not passed to dict function
Bram Moolenaar <Bram@vim.org>
parents: 25774
diff changeset
3303
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
3304 def s:DoFilterThis(a: string): list<string>
23557
f50ee1ae4d9b patch 8.2.2321: Vim9: cannot nest closures
Bram Moolenaar <Bram@vim.org>
parents: 23547
diff changeset
3305 # 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
3306 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
3307 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
3308 enddef
f50ee1ae4d9b patch 8.2.2321: Vim9: cannot nest closures
Bram Moolenaar <Bram@vim.org>
parents: 23547
diff changeset
3309
f50ee1ae4d9b patch 8.2.2321: Vim9: cannot nest closures
Bram Moolenaar <Bram@vim.org>
parents: 23547
diff changeset
3310 def Test_nested_closure_using_argument()
f50ee1ae4d9b patch 8.2.2321: Vim9: cannot nest closures
Bram Moolenaar <Bram@vim.org>
parents: 23547
diff changeset
3311 assert_equal(['x', 'x2'], DoFilterThis('x'))
f50ee1ae4d9b patch 8.2.2321: Vim9: cannot nest closures
Bram Moolenaar <Bram@vim.org>
parents: 23547
diff changeset
3312 enddef
f50ee1ae4d9b patch 8.2.2321: Vim9: cannot nest closures
Bram Moolenaar <Bram@vim.org>
parents: 23547
diff changeset
3313
23559
64dfb69e7d46 patch 8.2.2322: Vim9: closure nested limiting to one level
Bram Moolenaar <Bram@vim.org>
parents: 23557
diff changeset
3314 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
3315 var what = 'x'
64dfb69e7d46 patch 8.2.2322: Vim9: closure nested limiting to one level
Bram Moolenaar <Bram@vim.org>
parents: 23557
diff changeset
3316 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
3317 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
3318 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
3319 enddef
64dfb69e7d46 patch 8.2.2322: Vim9: closure nested limiting to one level
Bram Moolenaar <Bram@vim.org>
parents: 23557
diff changeset
3320
21176
54c665ad2db3 patch 8.2.1139: Vim9: test for silent echo fails in some environments
Bram Moolenaar <Bram@vim.org>
parents: 21174
diff changeset
3321 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
3322 CheckScreendump
26538
dfa658800f21 patch 8.2.3798: a :def callback function postpones an error message
Bram Moolenaar <Bram@vim.org>
parents: 26530
diff changeset
3323 call Run_Test_silent_echo()
dfa658800f21 patch 8.2.3798: a :def callback function postpones an error message
Bram Moolenaar <Bram@vim.org>
parents: 26530
diff changeset
3324 endfunc
dfa658800f21 patch 8.2.3798: a :def callback function postpones an error message
Bram Moolenaar <Bram@vim.org>
parents: 26530
diff changeset
3325
dfa658800f21 patch 8.2.3798: a :def callback function postpones an error message
Bram Moolenaar <Bram@vim.org>
parents: 26530
diff changeset
3326 def Run_Test_silent_echo()
dfa658800f21 patch 8.2.3798: a :def callback function postpones an error message
Bram Moolenaar <Bram@vim.org>
parents: 26530
diff changeset
3327 var lines =<< trim END
21172
96ae8622cfb6 patch 8.2.1137: Vim9: modifiers not cleared after compiling function
Bram Moolenaar <Bram@vim.org>
parents: 21170
diff changeset
3328 vim9script
96ae8622cfb6 patch 8.2.1137: Vim9: modifiers not cleared after compiling function
Bram Moolenaar <Bram@vim.org>
parents: 21170
diff changeset
3329 def EchoNothing()
96ae8622cfb6 patch 8.2.1137: Vim9: modifiers not cleared after compiling function
Bram Moolenaar <Bram@vim.org>
parents: 21170
diff changeset
3330 silent echo ''
96ae8622cfb6 patch 8.2.1137: Vim9: modifiers not cleared after compiling function
Bram Moolenaar <Bram@vim.org>
parents: 21170
diff changeset
3331 enddef
96ae8622cfb6 patch 8.2.1137: Vim9: modifiers not cleared after compiling function
Bram Moolenaar <Bram@vim.org>
parents: 21170
diff changeset
3332 defcompile
96ae8622cfb6 patch 8.2.1137: Vim9: modifiers not cleared after compiling function
Bram Moolenaar <Bram@vim.org>
parents: 21170
diff changeset
3333 END
30192
9f8b1f584395 patch 9.0.0432: crash when using for loop variable in closure
Bram Moolenaar <Bram@vim.org>
parents: 30188
diff changeset
3334 writefile(lines, 'XTest_silent_echo', 'D')
26538
dfa658800f21 patch 8.2.3798: a :def callback function postpones an error message
Bram Moolenaar <Bram@vim.org>
parents: 26530
diff changeset
3335
dfa658800f21 patch 8.2.3798: a :def callback function postpones an error message
Bram Moolenaar <Bram@vim.org>
parents: 26530
diff changeset
3336 # Check that the balloon shows up after a mouse move
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
3337 var buf = g:RunVimInTerminal('-S XTest_silent_echo', {'rows': 6})
26538
dfa658800f21 patch 8.2.3798: a :def callback function postpones an error message
Bram Moolenaar <Bram@vim.org>
parents: 26530
diff changeset
3338 term_sendkeys(buf, ":abc")
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
3339 g:VerifyScreenDump(buf, 'Test_vim9_silent_echo', {})
26538
dfa658800f21 patch 8.2.3798: a :def callback function postpones an error message
Bram Moolenaar <Bram@vim.org>
parents: 26530
diff changeset
3340
dfa658800f21 patch 8.2.3798: a :def callback function postpones an error message
Bram Moolenaar <Bram@vim.org>
parents: 26530
diff changeset
3341 # clean up
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
3342 g:StopVimInTerminal(buf)
26538
dfa658800f21 patch 8.2.3798: a :def callback function postpones an error message
Bram Moolenaar <Bram@vim.org>
parents: 26530
diff changeset
3343 enddef
21172
96ae8622cfb6 patch 8.2.1137: Vim9: modifiers not cleared after compiling function
Bram Moolenaar <Bram@vim.org>
parents: 21170
diff changeset
3344
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
3345 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
3346 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
3347 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
3348 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
3349
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
3350 func s:UserError()
22742
f7f2d73ff85e patch 8.2.1919: assert_fails() setting emsg_silent changes normal execution
Bram Moolenaar <Bram@vim.org>
parents: 22736
diff changeset
3351 silent! invalid
f7f2d73ff85e patch 8.2.1919: assert_fails() setting emsg_silent changes normal execution
Bram Moolenaar <Bram@vim.org>
parents: 22736
diff changeset
3352 endfunc
f7f2d73ff85e patch 8.2.1919: assert_fails() setting emsg_silent changes normal execution
Bram Moolenaar <Bram@vim.org>
parents: 22736
diff changeset
3353
f7f2d73ff85e patch 8.2.1919: assert_fails() setting emsg_silent changes normal execution
Bram Moolenaar <Bram@vim.org>
parents: 22736
diff changeset
3354 def SilentlyUserError()
f7f2d73ff85e patch 8.2.1919: assert_fails() setting emsg_silent changes normal execution
Bram Moolenaar <Bram@vim.org>
parents: 22736
diff changeset
3355 UserError()
f7f2d73ff85e patch 8.2.1919: assert_fails() setting emsg_silent changes normal execution
Bram Moolenaar <Bram@vim.org>
parents: 22736
diff changeset
3356 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
3357 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
3358
56907027dba7 patch 8.2.1916: Vim9: function call is aborted even when "silent!" is used
Bram Moolenaar <Bram@vim.org>
parents: 22734
diff changeset
3359 " 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
3360 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
3361 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
3362 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
3363 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
3364
22742
f7f2d73ff85e patch 8.2.1919: assert_fails() setting emsg_silent changes normal execution
Bram Moolenaar <Bram@vim.org>
parents: 22736
diff changeset
3365 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
3366 call SilentlyUserError()
f7f2d73ff85e patch 8.2.1919: assert_fails() setting emsg_silent changes normal execution
Bram Moolenaar <Bram@vim.org>
parents: 22736
diff changeset
3367 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
3368
56907027dba7 patch 8.2.1916: Vim9: function call is aborted even when "silent!" is used
Bram Moolenaar <Bram@vim.org>
parents: 22734
diff changeset
3369 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
3370 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
3371
22760
d235c5fa0bbe patch 8.2.1928: Vim9: "silent!" not effective when list index is wrong
Bram Moolenaar <Bram@vim.org>
parents: 22742
diff changeset
3372 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
3373 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
3374 vim9script
d235c5fa0bbe patch 8.2.1928: Vim9: "silent!" not effective when list index is wrong
Bram Moolenaar <Bram@vim.org>
parents: 22742
diff changeset
3375 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
3376 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
3377 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
3378 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
3379 endif
d235c5fa0bbe patch 8.2.1928: Vim9: "silent!" not effective when list index is wrong
Bram Moolenaar <Bram@vim.org>
parents: 22742
diff changeset
3380 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
3381 enddef
d235c5fa0bbe patch 8.2.1928: Vim9: "silent!" not effective when list index is wrong
Bram Moolenaar <Bram@vim.org>
parents: 22742
diff changeset
3382
23072
4b398a229b0b patch 8.2.2082: Vim9: can still use the depricated #{} dict syntax
Bram Moolenaar <Bram@vim.org>
parents: 23009
diff changeset
3383 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
3384 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
3385 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
3386 v9.CheckScriptSuccess(lines)
22760
d235c5fa0bbe patch 8.2.1928: Vim9: "silent!" not effective when list index is wrong
Bram Moolenaar <Bram@vim.org>
parents: 22742
diff changeset
3387 enddef
d235c5fa0bbe patch 8.2.1928: Vim9: "silent!" not effective when list index is wrong
Bram Moolenaar <Bram@vim.org>
parents: 22742
diff changeset
3388
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
3389 def s:Fibonacci(n: number): number
22135
f45127fbe9ba patch 8.2.1617: Vim9: cannot pass "true" to win_splitmove()
Bram Moolenaar <Bram@vim.org>
parents: 22133
diff changeset
3390 if n < 2
f45127fbe9ba patch 8.2.1617: Vim9: cannot pass "true" to win_splitmove()
Bram Moolenaar <Bram@vim.org>
parents: 22133
diff changeset
3391 return n
f45127fbe9ba patch 8.2.1617: Vim9: cannot pass "true" to win_splitmove()
Bram Moolenaar <Bram@vim.org>
parents: 22133
diff changeset
3392 else
f45127fbe9ba patch 8.2.1617: Vim9: cannot pass "true" to win_splitmove()
Bram Moolenaar <Bram@vim.org>
parents: 22133
diff changeset
3393 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
3394 endif
f45127fbe9ba patch 8.2.1617: Vim9: cannot pass "true" to win_splitmove()
Bram Moolenaar <Bram@vim.org>
parents: 22133
diff changeset
3395 enddef
f45127fbe9ba patch 8.2.1617: Vim9: cannot pass "true" to win_splitmove()
Bram Moolenaar <Bram@vim.org>
parents: 22133
diff changeset
3396
21281
13b1567ae0c6 patch 8.2.1191: Vim9: crash when function calls itself
Bram Moolenaar <Bram@vim.org>
parents: 21265
diff changeset
3397 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
3398 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
3399 enddef
13b1567ae0c6 patch 8.2.1191: Vim9: crash when function calls itself
Bram Moolenaar <Bram@vim.org>
parents: 21265
diff changeset
3400
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
3401 def s: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
3402 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
3403 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
3404 ? {[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
3405 : val
23428
5807e3958e38 patch 8.2.2257: Vim9: using -> for lambda is ambiguous
Bram Moolenaar <Bram@vim.org>
parents: 23426
diff changeset
3406 )
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
3407 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
3408
7c50dfe302f8 patch 8.2.1202: Vim9: crash when calling a closure from a builtin function
Bram Moolenaar <Bram@vim.org>
parents: 21301
diff changeset
3409 def Test_closure_in_map()
30209
a970b48c25a3 patch 9.0.0440: crash when using mkdir() with "R" flag in compiled function
Bram Moolenaar <Bram@vim.org>
parents: 30192
diff changeset
3410 mkdir('XclosureDir/tdir', 'pR')
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
3411 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
3412 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
3413 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
3414
23072
4b398a229b0b patch 8.2.2082: Vim9: can still use the depricated #{} dict syntax
Bram Moolenaar <Bram@vim.org>
parents: 23009
diff changeset
3415 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
3416 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
3417
22496
454b78ca8247 patch 8.2.1796: Vim9: invalid memory access with weird function name
Bram Moolenaar <Bram@vim.org>
parents: 22468
diff changeset
3418 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
3419 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
3420 vim9script
454b78ca8247 patch 8.2.1796: Vim9: invalid memory access with weird function name
Bram Moolenaar <Bram@vim.org>
parents: 22468
diff changeset
3421 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
3422 END
27669
5c4ab8d4472c patch 8.2.4360: Vim9: allowing use of "s:" leads to inconsistencies
Bram Moolenaar <Bram@vim.org>
parents: 27611
diff changeset
3423 v9.CheckScriptFailure(lines, 'E1268:')
22496
454b78ca8247 patch 8.2.1796: Vim9: invalid memory access with weird function name
Bram Moolenaar <Bram@vim.org>
parents: 22468
diff changeset
3424
454b78ca8247 patch 8.2.1796: Vim9: invalid memory access with weird function name
Bram Moolenaar <Bram@vim.org>
parents: 22468
diff changeset
3425 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
3426 vim9script
454b78ca8247 patch 8.2.1796: Vim9: invalid memory access with weird function name
Bram Moolenaar <Bram@vim.org>
parents: 22468
diff changeset
3427 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
3428 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
3429 v9.CheckScriptFailure(lines, 'E129:')
22496
454b78ca8247 patch 8.2.1796: Vim9: invalid memory access with weird function name
Bram Moolenaar <Bram@vim.org>
parents: 22468
diff changeset
3430
454b78ca8247 patch 8.2.1796: Vim9: invalid memory access with weird function name
Bram Moolenaar <Bram@vim.org>
parents: 22468
diff changeset
3431 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
3432 vim9script
454b78ca8247 patch 8.2.1796: Vim9: invalid memory access with weird function name
Bram Moolenaar <Bram@vim.org>
parents: 22468
diff changeset
3433 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
3434 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
3435 v9.CheckScriptFailure(lines, 'E884:')
22496
454b78ca8247 patch 8.2.1796: Vim9: invalid memory access with weird function name
Bram Moolenaar <Bram@vim.org>
parents: 22468
diff changeset
3436
454b78ca8247 patch 8.2.1796: Vim9: invalid memory access with weird function name
Bram Moolenaar <Bram@vim.org>
parents: 22468
diff changeset
3437 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
3438 vim9script
454b78ca8247 patch 8.2.1796: Vim9: invalid memory access with weird function name
Bram Moolenaar <Bram@vim.org>
parents: 22468
diff changeset
3439 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
3440 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
3441 v9.CheckScriptFailure(lines, 'E488:')
22496
454b78ca8247 patch 8.2.1796: Vim9: invalid memory access with weird function name
Bram Moolenaar <Bram@vim.org>
parents: 22468
diff changeset
3442 enddef
454b78ca8247 patch 8.2.1796: Vim9: invalid memory access with weird function name
Bram Moolenaar <Bram@vim.org>
parents: 22468
diff changeset
3443
21347
d636c7bbe9ab patch 8.2.1224: Vim9: arguments from partial are not used
Bram Moolenaar <Bram@vim.org>
parents: 21345
diff changeset
3444 def Test_partial_call()
25465
b8a6a0007dc3 patch 8.2.3269: Vim9: wrong argument check for partial
Bram Moolenaar <Bram@vim.org>
parents: 25370
diff changeset
3445 var lines =<< trim END
b8a6a0007dc3 patch 8.2.3269: Vim9: wrong argument check for partial
Bram Moolenaar <Bram@vim.org>
parents: 25370
diff changeset
3446 var Xsetlist: func
b8a6a0007dc3 patch 8.2.3269: Vim9: wrong argument check for partial
Bram Moolenaar <Bram@vim.org>
parents: 25370
diff changeset
3447 Xsetlist = function('setloclist', [0])
b8a6a0007dc3 patch 8.2.3269: Vim9: wrong argument check for partial
Bram Moolenaar <Bram@vim.org>
parents: 25370
diff changeset
3448 Xsetlist([], ' ', {title: 'test'})
b8a6a0007dc3 patch 8.2.3269: Vim9: wrong argument check for partial
Bram Moolenaar <Bram@vim.org>
parents: 25370
diff changeset
3449 getloclist(0, {title: 1})->assert_equal({title: 'test'})
b8a6a0007dc3 patch 8.2.3269: Vim9: wrong argument check for partial
Bram Moolenaar <Bram@vim.org>
parents: 25370
diff changeset
3450
b8a6a0007dc3 patch 8.2.3269: Vim9: wrong argument check for partial
Bram Moolenaar <Bram@vim.org>
parents: 25370
diff changeset
3451 Xsetlist = function('setloclist', [0, [], ' '])
b8a6a0007dc3 patch 8.2.3269: Vim9: wrong argument check for partial
Bram Moolenaar <Bram@vim.org>
parents: 25370
diff changeset
3452 Xsetlist({title: 'test'})
b8a6a0007dc3 patch 8.2.3269: Vim9: wrong argument check for partial
Bram Moolenaar <Bram@vim.org>
parents: 25370
diff changeset
3453 getloclist(0, {title: 1})->assert_equal({title: 'test'})
b8a6a0007dc3 patch 8.2.3269: Vim9: wrong argument check for partial
Bram Moolenaar <Bram@vim.org>
parents: 25370
diff changeset
3454
b8a6a0007dc3 patch 8.2.3269: Vim9: wrong argument check for partial
Bram Moolenaar <Bram@vim.org>
parents: 25370
diff changeset
3455 Xsetlist = function('setqflist')
b8a6a0007dc3 patch 8.2.3269: Vim9: wrong argument check for partial
Bram Moolenaar <Bram@vim.org>
parents: 25370
diff changeset
3456 Xsetlist([], ' ', {title: 'test'})
b8a6a0007dc3 patch 8.2.3269: Vim9: wrong argument check for partial
Bram Moolenaar <Bram@vim.org>
parents: 25370
diff changeset
3457 getqflist({title: 1})->assert_equal({title: 'test'})
b8a6a0007dc3 patch 8.2.3269: Vim9: wrong argument check for partial
Bram Moolenaar <Bram@vim.org>
parents: 25370
diff changeset
3458
b8a6a0007dc3 patch 8.2.3269: Vim9: wrong argument check for partial
Bram Moolenaar <Bram@vim.org>
parents: 25370
diff changeset
3459 Xsetlist = function('setqflist', [[], ' '])
b8a6a0007dc3 patch 8.2.3269: Vim9: wrong argument check for partial
Bram Moolenaar <Bram@vim.org>
parents: 25370
diff changeset
3460 Xsetlist({title: 'test'})
b8a6a0007dc3 patch 8.2.3269: Vim9: wrong argument check for partial
Bram Moolenaar <Bram@vim.org>
parents: 25370
diff changeset
3461 getqflist({title: 1})->assert_equal({title: 'test'})
b8a6a0007dc3 patch 8.2.3269: Vim9: wrong argument check for partial
Bram Moolenaar <Bram@vim.org>
parents: 25370
diff changeset
3462
b8a6a0007dc3 patch 8.2.3269: Vim9: wrong argument check for partial
Bram Moolenaar <Bram@vim.org>
parents: 25370
diff changeset
3463 var Len: func: number = function('len', ['word'])
b8a6a0007dc3 patch 8.2.3269: Vim9: wrong argument check for partial
Bram Moolenaar <Bram@vim.org>
parents: 25370
diff changeset
3464 assert_equal(4, Len())
b8a6a0007dc3 patch 8.2.3269: Vim9: wrong argument check for partial
Bram Moolenaar <Bram@vim.org>
parents: 25370
diff changeset
3465
b8a6a0007dc3 patch 8.2.3269: Vim9: wrong argument check for partial
Bram Moolenaar <Bram@vim.org>
parents: 25370
diff changeset
3466 var RepeatFunc = function('repeat', ['o'])
b8a6a0007dc3 patch 8.2.3269: Vim9: wrong argument check for partial
Bram Moolenaar <Bram@vim.org>
parents: 25370
diff changeset
3467 assert_equal('ooooo', RepeatFunc(5))
b8a6a0007dc3 patch 8.2.3269: Vim9: wrong argument check for partial
Bram Moolenaar <Bram@vim.org>
parents: 25370
diff changeset
3468 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
3469 v9.CheckDefAndScriptSuccess(lines)
25646
99fbffe75217 patch 8.2.3359: Vim9: error for type when variable is not set
Bram Moolenaar <Bram@vim.org>
parents: 25632
diff changeset
3470
99fbffe75217 patch 8.2.3359: Vim9: error for type when variable is not set
Bram Moolenaar <Bram@vim.org>
parents: 25632
diff changeset
3471 lines =<< trim END
99fbffe75217 patch 8.2.3359: Vim9: error for type when variable is not set
Bram Moolenaar <Bram@vim.org>
parents: 25632
diff changeset
3472 vim9script
99fbffe75217 patch 8.2.3359: Vim9: error for type when variable is not set
Bram Moolenaar <Bram@vim.org>
parents: 25632
diff changeset
3473 def Foo(Parser: any)
99fbffe75217 patch 8.2.3359: Vim9: error for type when variable is not set
Bram Moolenaar <Bram@vim.org>
parents: 25632
diff changeset
3474 enddef
99fbffe75217 patch 8.2.3359: Vim9: error for type when variable is not set
Bram Moolenaar <Bram@vim.org>
parents: 25632
diff changeset
3475 var Expr: func(dict<any>): dict<any>
99fbffe75217 patch 8.2.3359: Vim9: error for type when variable is not set
Bram Moolenaar <Bram@vim.org>
parents: 25632
diff changeset
3476 const Call = Foo(Expr)
99fbffe75217 patch 8.2.3359: Vim9: error for type when variable is not set
Bram Moolenaar <Bram@vim.org>
parents: 25632
diff changeset
3477 END
28002
1012048eed26 patch 8.2.4526: Vim9: cannot set variables to a null value
Bram Moolenaar <Bram@vim.org>
parents: 27918
diff changeset
3478 v9.CheckScriptFailure(lines, 'E1031:')
21347
d636c7bbe9ab patch 8.2.1224: Vim9: arguments from partial are not used
Bram Moolenaar <Bram@vim.org>
parents: 21345
diff changeset
3479 enddef
d636c7bbe9ab patch 8.2.1224: Vim9: arguments from partial are not used
Bram Moolenaar <Bram@vim.org>
parents: 21345
diff changeset
3480
27756
60ac4228a73d patch 8.2.4404: Vim9: some code not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 27740
diff changeset
3481 def Test_partial_double_nested()
60ac4228a73d patch 8.2.4404: Vim9: some code not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 27740
diff changeset
3482 var idx = 123
60ac4228a73d patch 8.2.4404: Vim9: some code not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 27740
diff changeset
3483 var Get = () => idx
60ac4228a73d patch 8.2.4404: Vim9: some code not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 27740
diff changeset
3484 var Ref = function(Get, [])
60ac4228a73d patch 8.2.4404: Vim9: some code not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 27740
diff changeset
3485 var RefRef = function(Ref, [])
60ac4228a73d patch 8.2.4404: Vim9: some code not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 27740
diff changeset
3486 assert_equal(123, RefRef())
60ac4228a73d patch 8.2.4404: Vim9: some code not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 27740
diff changeset
3487 enddef
60ac4228a73d patch 8.2.4404: Vim9: some code not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 27740
diff changeset
3488
28006
02f787034998 patch 8.2.4528: crash when using null_function for a partial
Bram Moolenaar <Bram@vim.org>
parents: 28002
diff changeset
3489 def Test_partial_null_function()
02f787034998 patch 8.2.4528: crash when using null_function for a partial
Bram Moolenaar <Bram@vim.org>
parents: 28002
diff changeset
3490 var lines =<< trim END
02f787034998 patch 8.2.4528: crash when using null_function for a partial
Bram Moolenaar <Bram@vim.org>
parents: 28002
diff changeset
3491 var d: dict<func> = {f: null_function}
02f787034998 patch 8.2.4528: crash when using null_function for a partial
Bram Moolenaar <Bram@vim.org>
parents: 28002
diff changeset
3492 var Ref = d.f
28008
cc7d54a134e4 patch 8.2.4529: Vim9: comparing partial with function fails
Bram Moolenaar <Bram@vim.org>
parents: 28006
diff changeset
3493 assert_equal('func(...): unknown', typename(Ref))
28006
02f787034998 patch 8.2.4528: crash when using null_function for a partial
Bram Moolenaar <Bram@vim.org>
parents: 28002
diff changeset
3494 END
02f787034998 patch 8.2.4528: crash when using null_function for a partial
Bram Moolenaar <Bram@vim.org>
parents: 28002
diff changeset
3495 v9.CheckDefAndScriptSuccess(lines)
02f787034998 patch 8.2.4528: crash when using null_function for a partial
Bram Moolenaar <Bram@vim.org>
parents: 28002
diff changeset
3496 enddef
02f787034998 patch 8.2.4528: crash when using null_function for a partial
Bram Moolenaar <Bram@vim.org>
parents: 28002
diff changeset
3497
27565
0b12dd90a5d6 patch 8.2.4309: Vim9: crash when using a partial in the wrong context
Bram Moolenaar <Bram@vim.org>
parents: 27519
diff changeset
3498 " Using "idx" from a legacy global function does not work.
0b12dd90a5d6 patch 8.2.4309: Vim9: crash when using a partial in the wrong context
Bram Moolenaar <Bram@vim.org>
parents: 27519
diff changeset
3499 " This caused a crash when called from legacy context.
0b12dd90a5d6 patch 8.2.4309: Vim9: crash when using a partial in the wrong context
Bram Moolenaar <Bram@vim.org>
parents: 27519
diff changeset
3500 func Test_partial_call_fails()
0b12dd90a5d6 patch 8.2.4309: Vim9: crash when using a partial in the wrong context
Bram Moolenaar <Bram@vim.org>
parents: 27519
diff changeset
3501 let lines =<< trim END
0b12dd90a5d6 patch 8.2.4309: Vim9: crash when using a partial in the wrong context
Bram Moolenaar <Bram@vim.org>
parents: 27519
diff changeset
3502 vim9script
0b12dd90a5d6 patch 8.2.4309: Vim9: crash when using a partial in the wrong context
Bram Moolenaar <Bram@vim.org>
parents: 27519
diff changeset
3503
0b12dd90a5d6 patch 8.2.4309: Vim9: crash when using a partial in the wrong context
Bram Moolenaar <Bram@vim.org>
parents: 27519
diff changeset
3504 var l = ['a', 'b', 'c']
0b12dd90a5d6 patch 8.2.4309: Vim9: crash when using a partial in the wrong context
Bram Moolenaar <Bram@vim.org>
parents: 27519
diff changeset
3505 def Iter(container: any): any
0b12dd90a5d6 patch 8.2.4309: Vim9: crash when using a partial in the wrong context
Bram Moolenaar <Bram@vim.org>
parents: 27519
diff changeset
3506 var idx = -1
0b12dd90a5d6 patch 8.2.4309: Vim9: crash when using a partial in the wrong context
Bram Moolenaar <Bram@vim.org>
parents: 27519
diff changeset
3507 var obj = {state: container}
27593
8c7836f8668d patch 8.2.4323: Vim9: nested function name can start with "_"
Bram Moolenaar <Bram@vim.org>
parents: 27591
diff changeset
3508 def g:NextItem__(self: dict<any>): any
27565
0b12dd90a5d6 patch 8.2.4309: Vim9: crash when using a partial in the wrong context
Bram Moolenaar <Bram@vim.org>
parents: 27519
diff changeset
3509 ++idx
0b12dd90a5d6 patch 8.2.4309: Vim9: crash when using a partial in the wrong context
Bram Moolenaar <Bram@vim.org>
parents: 27519
diff changeset
3510 return self.state[idx]
0b12dd90a5d6 patch 8.2.4309: Vim9: crash when using a partial in the wrong context
Bram Moolenaar <Bram@vim.org>
parents: 27519
diff changeset
3511 enddef
27593
8c7836f8668d patch 8.2.4323: Vim9: nested function name can start with "_"
Bram Moolenaar <Bram@vim.org>
parents: 27591
diff changeset
3512 obj.__next__ = function('g:NextItem__', [obj])
27565
0b12dd90a5d6 patch 8.2.4309: Vim9: crash when using a partial in the wrong context
Bram Moolenaar <Bram@vim.org>
parents: 27519
diff changeset
3513 return obj
0b12dd90a5d6 patch 8.2.4309: Vim9: crash when using a partial in the wrong context
Bram Moolenaar <Bram@vim.org>
parents: 27519
diff changeset
3514 enddef
0b12dd90a5d6 patch 8.2.4309: Vim9: crash when using a partial in the wrong context
Bram Moolenaar <Bram@vim.org>
parents: 27519
diff changeset
3515
0b12dd90a5d6 patch 8.2.4309: Vim9: crash when using a partial in the wrong context
Bram Moolenaar <Bram@vim.org>
parents: 27519
diff changeset
3516 var it = Iter(l)
0b12dd90a5d6 patch 8.2.4309: Vim9: crash when using a partial in the wrong context
Bram Moolenaar <Bram@vim.org>
parents: 27519
diff changeset
3517 echo it.__next__()
0b12dd90a5d6 patch 8.2.4309: Vim9: crash when using a partial in the wrong context
Bram Moolenaar <Bram@vim.org>
parents: 27519
diff changeset
3518 END
30209
a970b48c25a3 patch 9.0.0440: crash when using mkdir() with "R" flag in compiled function
Bram Moolenaar <Bram@vim.org>
parents: 30192
diff changeset
3519 call writefile(lines, 'XpartialCall', 'D')
27565
0b12dd90a5d6 patch 8.2.4309: Vim9: crash when using a partial in the wrong context
Bram Moolenaar <Bram@vim.org>
parents: 27519
diff changeset
3520 try
0b12dd90a5d6 patch 8.2.4309: Vim9: crash when using a partial in the wrong context
Bram Moolenaar <Bram@vim.org>
parents: 27519
diff changeset
3521 source XpartialCall
0b12dd90a5d6 patch 8.2.4309: Vim9: crash when using a partial in the wrong context
Bram Moolenaar <Bram@vim.org>
parents: 27519
diff changeset
3522 catch /E1248:/
0b12dd90a5d6 patch 8.2.4309: Vim9: crash when using a partial in the wrong context
Bram Moolenaar <Bram@vim.org>
parents: 27519
diff changeset
3523 endtry
0b12dd90a5d6 patch 8.2.4309: Vim9: crash when using a partial in the wrong context
Bram Moolenaar <Bram@vim.org>
parents: 27519
diff changeset
3524 endfunc
0b12dd90a5d6 patch 8.2.4309: Vim9: crash when using a partial in the wrong context
Bram Moolenaar <Bram@vim.org>
parents: 27519
diff changeset
3525
21689
10866fd07595 patch 8.2.1394: Vim9: compiling a function interferes with command modifiers
Bram Moolenaar <Bram@vim.org>
parents: 21685
diff changeset
3526 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
3527 tab echo '0'
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
3528 v9.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
3529 enddef
10866fd07595 patch 8.2.1394: Vim9: compiling a function interferes with command modifiers
Bram Moolenaar <Bram@vim.org>
parents: 21685
diff changeset
3530
10866fd07595 patch 8.2.1394: Vim9: compiling a function interferes with command modifiers
Bram Moolenaar <Bram@vim.org>
parents: 21685
diff changeset
3531 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
3532 # 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
3533 # up.
22435
166a0f17b05e patch 8.2.1766: Vim9: Some tests are still using :let
Bram Moolenaar <Bram@vim.org>
parents: 22401
diff changeset
3534 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
3535 vim9script
10866fd07595 patch 8.2.1394: Vim9: compiling a function interferes with command modifiers
Bram Moolenaar <Bram@vim.org>
parents: 21685
diff changeset
3536 set eventignore=
10866fd07595 patch 8.2.1394: Vim9: compiling a function interferes with command modifiers
Bram Moolenaar <Bram@vim.org>
parents: 21685
diff changeset
3537 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
3538 def AutocmdsDisabled()
25202
e5d85e83a887 patch 8.2.3137: Vim9: no error when a line only has a variable name
Bram Moolenaar <Bram@vim.org>
parents: 25126
diff changeset
3539 eval 1 + 2
21689
10866fd07595 patch 8.2.1394: Vim9: compiling a function interferes with command modifiers
Bram Moolenaar <Bram@vim.org>
parents: 21685
diff changeset
3540 enddef
10866fd07595 patch 8.2.1394: Vim9: compiling a function interferes with command modifiers
Bram Moolenaar <Bram@vim.org>
parents: 21685
diff changeset
3541 func Func()
10866fd07595 patch 8.2.1394: Vim9: compiling a function interferes with command modifiers
Bram Moolenaar <Bram@vim.org>
parents: 21685
diff changeset
3542 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
3543 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
3544 endfunc
10866fd07595 patch 8.2.1394: Vim9: compiling a function interferes with command modifiers
Bram Moolenaar <Bram@vim.org>
parents: 21685
diff changeset
3545 Func()
10866fd07595 patch 8.2.1394: Vim9: compiling a function interferes with command modifiers
Bram Moolenaar <Bram@vim.org>
parents: 21685
diff changeset
3546 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
3547 v9.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
3548 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
3549 enddef
10866fd07595 patch 8.2.1394: Vim9: compiling a function interferes with command modifiers
Bram Moolenaar <Bram@vim.org>
parents: 21685
diff changeset
3550
22214
efa1511a5bf3 patch 8.2.1656: Vim9: callstack wrong if :def function calls :def function
Bram Moolenaar <Bram@vim.org>
parents: 22165
diff changeset
3551 def StackTop()
25202
e5d85e83a887 patch 8.2.3137: Vim9: no error when a line only has a variable name
Bram Moolenaar <Bram@vim.org>
parents: 25126
diff changeset
3552 eval 1 + 2
e5d85e83a887 patch 8.2.3137: Vim9: no error when a line only has a variable name
Bram Moolenaar <Bram@vim.org>
parents: 25126
diff changeset
3553 eval 2 + 3
22214
efa1511a5bf3 patch 8.2.1656: Vim9: callstack wrong if :def function calls :def function
Bram Moolenaar <Bram@vim.org>
parents: 22165
diff changeset
3554 # call not on fourth line
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
3555 g:StackBot()
22214
efa1511a5bf3 patch 8.2.1656: Vim9: callstack wrong if :def function calls :def function
Bram Moolenaar <Bram@vim.org>
parents: 22165
diff changeset
3556 enddef
efa1511a5bf3 patch 8.2.1656: Vim9: callstack wrong if :def function calls :def function
Bram Moolenaar <Bram@vim.org>
parents: 22165
diff changeset
3557
efa1511a5bf3 patch 8.2.1656: Vim9: callstack wrong if :def function calls :def function
Bram Moolenaar <Bram@vim.org>
parents: 22165
diff changeset
3558 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
3559 # 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
3560 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
3561 enddef
efa1511a5bf3 patch 8.2.1656: Vim9: callstack wrong if :def function calls :def function
Bram Moolenaar <Bram@vim.org>
parents: 22165
diff changeset
3562
efa1511a5bf3 patch 8.2.1656: Vim9: callstack wrong if :def function calls :def function
Bram Moolenaar <Bram@vim.org>
parents: 22165
diff changeset
3563 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
3564 try
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
3565 g:StackTop()
22214
efa1511a5bf3 patch 8.2.1656: Vim9: callstack wrong if :def function calls :def function
Bram Moolenaar <Bram@vim.org>
parents: 22165
diff changeset
3566 catch
22222
7b9e8fd7ea5b patch 8.2.1660: assert functions require passing expected as first argument
Bram Moolenaar <Bram@vim.org>
parents: 22216
diff changeset
3567 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
3568 endtry
efa1511a5bf3 patch 8.2.1656: Vim9: callstack wrong if :def function calls :def function
Bram Moolenaar <Bram@vim.org>
parents: 22165
diff changeset
3569 enddef
efa1511a5bf3 patch 8.2.1656: Vim9: callstack wrong if :def function calls :def function
Bram Moolenaar <Bram@vim.org>
parents: 22165
diff changeset
3570
22537
9870e8b6ed78 patch 8.2.1817: Vim9: wrong instruction when reusing a local variable spot
Bram Moolenaar <Bram@vim.org>
parents: 22535
diff changeset
3571 " 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
3572 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
3573 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
3574 vim9script
9870e8b6ed78 patch 8.2.1817: Vim9: wrong instruction when reusing a local variable spot
Bram Moolenaar <Bram@vim.org>
parents: 22535
diff changeset
3575 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
3576 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
3577 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
3578 var y = 'x'
24414
f539864ba851 patch 8.2.2747: Vim9: not always an error for too many function arguments
Bram Moolenaar <Bram@vim.org>
parents: 24408
diff changeset
3579 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
3580 endif
9870e8b6ed78 patch 8.2.1817: Vim9: wrong instruction when reusing a local variable spot
Bram Moolenaar <Bram@vim.org>
parents: 22535
diff changeset
3581 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
3582 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
3583 enddef
9870e8b6ed78 patch 8.2.1817: Vim9: wrong instruction when reusing a local variable spot
Bram Moolenaar <Bram@vim.org>
parents: 22535
diff changeset
3584 Func()
9870e8b6ed78 patch 8.2.1817: Vim9: wrong instruction when reusing a local variable spot
Bram Moolenaar <Bram@vim.org>
parents: 22535
diff changeset
3585 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
3586 v9.CheckScriptSuccess(lines)
22537
9870e8b6ed78 patch 8.2.1817: Vim9: wrong instruction when reusing a local variable spot
Bram Moolenaar <Bram@vim.org>
parents: 22535
diff changeset
3587 enddef
9870e8b6ed78 patch 8.2.1817: Vim9: wrong instruction when reusing a local variable spot
Bram Moolenaar <Bram@vim.org>
parents: 22535
diff changeset
3588
22948
707b90980de5 patch 8.2.2021: Vim9: get E1099 when autocommand resets did_emsg
Bram Moolenaar <Bram@vim.org>
parents: 22942
diff changeset
3589 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
3590 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
3591 @s = 'blah'
707b90980de5 patch 8.2.2021: Vim9: get E1099 when autocommand resets did_emsg
Bram Moolenaar <Bram@vim.org>
parents: 22942
diff changeset
3592 au BufWinLeave * #
707b90980de5 patch 8.2.2021: Vim9: get E1099 when autocommand resets did_emsg
Bram Moolenaar <Bram@vim.org>
parents: 22942
diff changeset
3593 def Func()
707b90980de5 patch 8.2.2021: Vim9: get E1099 when autocommand resets did_emsg
Bram Moolenaar <Bram@vim.org>
parents: 22942
diff changeset
3594 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
3595 exe '*s'
707b90980de5 patch 8.2.2021: Vim9: get E1099 when autocommand resets did_emsg
Bram Moolenaar <Bram@vim.org>
parents: 22942
diff changeset
3596 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
3597 enddef
707b90980de5 patch 8.2.2021: Vim9: get E1099 when autocommand resets did_emsg
Bram Moolenaar <Bram@vim.org>
parents: 22942
diff changeset
3598 Func()
707b90980de5 patch 8.2.2021: Vim9: get E1099 when autocommand resets did_emsg
Bram Moolenaar <Bram@vim.org>
parents: 22942
diff changeset
3599 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
3600 v9.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
3601 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
3602 enddef
707b90980de5 patch 8.2.2021: Vim9: get E1099 when autocommand resets did_emsg
Bram Moolenaar <Bram@vim.org>
parents: 22942
diff changeset
3603
23177
cc24ac009f29 patch 8.2.2134: Vim9: get E1099 when autocmd triggered in builtin function
Bram Moolenaar <Bram@vim.org>
parents: 23171
diff changeset
3604 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
3605 # 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
3606 # 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
3607 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
3608 vim9script
cc24ac009f29 patch 8.2.2134: Vim9: get E1099 when autocmd triggered in builtin function
Bram Moolenaar <Bram@vim.org>
parents: 23171
diff changeset
3609 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
3610 def Func()
24398
bed5ec739304 patch 8.2.2739: Vim9: a lambda accepts too many arguments at the script level
Bram Moolenaar <Bram@vim.org>
parents: 24371
diff changeset
3611 popup_menu('', {callback: (a, b) => 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
3612 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
3613 enddef
cc24ac009f29 patch 8.2.2134: Vim9: get E1099 when autocmd triggered in builtin function
Bram Moolenaar <Bram@vim.org>
parents: 23171
diff changeset
3614 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
3615 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
3616 END
30209
a970b48c25a3 patch 9.0.0440: crash when using mkdir() with "R" flag in compiled function
Bram Moolenaar <Bram@vim.org>
parents: 30192
diff changeset
3617 writefile(lines, 'XemsgReset', 'D')
23177
cc24ac009f29 patch 8.2.2134: Vim9: get E1099 when autocmd triggered in builtin function
Bram Moolenaar <Bram@vim.org>
parents: 23171
diff changeset
3618 assert_fails('so XemsgReset', ['E684:', 'E684:'], lines, 2)
30209
a970b48c25a3 patch 9.0.0440: crash when using mkdir() with "R" flag in compiled function
Bram Moolenaar <Bram@vim.org>
parents: 30192
diff changeset
3619
23177
cc24ac009f29 patch 8.2.2134: Vim9: get E1099 when autocmd triggered in builtin function
Bram Moolenaar <Bram@vim.org>
parents: 23171
diff changeset
3620 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
3621 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
3622 enddef
cc24ac009f29 patch 8.2.2134: Vim9: get E1099 when autocmd triggered in builtin function
Bram Moolenaar <Bram@vim.org>
parents: 23171
diff changeset
3623
23102
3239b0f3c592 patch 8.2.2097: Vim9: using :silent! when calling a function prevents abort
Bram Moolenaar <Bram@vim.org>
parents: 23100
diff changeset
3624 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
3625 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
3626 vim9script
3239b0f3c592 patch 8.2.2097: Vim9: using :silent! when calling a function prevents abort
Bram Moolenaar <Bram@vim.org>
parents: 23100
diff changeset
3627 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
3628 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
3629 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
3630 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
3631 enddef
3239b0f3c592 patch 8.2.2097: Vim9: using :silent! when calling a function prevents abort
Bram Moolenaar <Bram@vim.org>
parents: 23100
diff changeset
3632 # 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
3633 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
3634 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
3635 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
3636 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
3637 v9.CheckScriptSuccess(lines)
23102
3239b0f3c592 patch 8.2.2097: Vim9: using :silent! when calling a function prevents abort
Bram Moolenaar <Bram@vim.org>
parents: 23100
diff changeset
3638 enddef
3239b0f3c592 patch 8.2.2097: Vim9: using :silent! when calling a function prevents abort
Bram Moolenaar <Bram@vim.org>
parents: 23100
diff changeset
3639
23100
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
3640 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
3641 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
3642 vim9script
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
3643 g:result = 'none'
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
3644 def Func()
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
3645 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
3646 g:result = 'yes'
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
3647 enddef
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
3648 # 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
3649 Func()
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
3650 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
3651 unlet g:result
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
3652 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
3653 v9.CheckScriptSuccess(lines)
23100
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
3654 enddef
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
3655
23074
cd885eb0e50c patch 8.2.2083: Vim9: crash when using ":silent!" and getting member fails
Bram Moolenaar <Bram@vim.org>
parents: 23072
diff changeset
3656 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
3657 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
3658 vim9script
cd885eb0e50c patch 8.2.2083: Vim9: crash when using ":silent!" and getting member fails
Bram Moolenaar <Bram@vim.org>
parents: 23072
diff changeset
3659 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
3660 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
3661 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
3662 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
3663 enddef
23100
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
3664 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
3665 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
3666 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
3667 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
3668 v9.CheckScriptSuccess(lines)
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
3669 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
3670
23100
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
3671 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
3672 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
3673 vim9script
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
3674 def Func()
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
3675 g:result = 'none'
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
3676 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
3677 g:result = 'none'
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
3678 g:result += 3
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
3679 enddef
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
3680 Func()
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
3681 END
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
3682 # 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
3683 var fname = 'Xdefsilent'
30209
a970b48c25a3 patch 9.0.0440: crash when using mkdir() with "R" flag in compiled function
Bram Moolenaar <Bram@vim.org>
parents: 30192
diff changeset
3684 writefile(lines, fname, 'D')
23100
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
3685 var caught = 'no'
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
3686 try
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
3687 exe 'source ' .. fname
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
3688 catch /E1030:/
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
3689 caught = 'yes'
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
3690 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
3691 endtry
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
3692 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
3693 enddef
9c3a6c33c0e5 patch 8.2.2096: Vim9: command modifiers not restored after assignment
Bram Moolenaar <Bram@vim.org>
parents: 23098
diff changeset
3694
24218
40e27d96e395 patch 8.2.2650: Vim9: command modifiers not handled in nested function
Bram Moolenaar <Bram@vim.org>
parents: 24208
diff changeset
3695 def Test_cmdmod_silent_nested()
40e27d96e395 patch 8.2.2650: Vim9: command modifiers not handled in nested function
Bram Moolenaar <Bram@vim.org>
parents: 24208
diff changeset
3696 var lines =<< trim END
40e27d96e395 patch 8.2.2650: Vim9: command modifiers not handled in nested function
Bram Moolenaar <Bram@vim.org>
parents: 24208
diff changeset
3697 vim9script
40e27d96e395 patch 8.2.2650: Vim9: command modifiers not handled in nested function
Bram Moolenaar <Bram@vim.org>
parents: 24208
diff changeset
3698 var result = ''
40e27d96e395 patch 8.2.2650: Vim9: command modifiers not handled in nested function
Bram Moolenaar <Bram@vim.org>
parents: 24208
diff changeset
3699
40e27d96e395 patch 8.2.2650: Vim9: command modifiers not handled in nested function
Bram Moolenaar <Bram@vim.org>
parents: 24208
diff changeset
3700 def Error()
40e27d96e395 patch 8.2.2650: Vim9: command modifiers not handled in nested function
Bram Moolenaar <Bram@vim.org>
parents: 24208
diff changeset
3701 result ..= 'Eb'
40e27d96e395 patch 8.2.2650: Vim9: command modifiers not handled in nested function
Bram Moolenaar <Bram@vim.org>
parents: 24208
diff changeset
3702 eval [][0]
40e27d96e395 patch 8.2.2650: Vim9: command modifiers not handled in nested function
Bram Moolenaar <Bram@vim.org>
parents: 24208
diff changeset
3703 result ..= 'Ea'
40e27d96e395 patch 8.2.2650: Vim9: command modifiers not handled in nested function
Bram Moolenaar <Bram@vim.org>
parents: 24208
diff changeset
3704 enddef
40e27d96e395 patch 8.2.2650: Vim9: command modifiers not handled in nested function
Bram Moolenaar <Bram@vim.org>
parents: 24208
diff changeset
3705
40e27d96e395 patch 8.2.2650: Vim9: command modifiers not handled in nested function
Bram Moolenaar <Bram@vim.org>
parents: 24208
diff changeset
3706 def Crash()
40e27d96e395 patch 8.2.2650: Vim9: command modifiers not handled in nested function
Bram Moolenaar <Bram@vim.org>
parents: 24208
diff changeset
3707 result ..= 'Cb'
40e27d96e395 patch 8.2.2650: Vim9: command modifiers not handled in nested function
Bram Moolenaar <Bram@vim.org>
parents: 24208
diff changeset
3708 sil! Error()
40e27d96e395 patch 8.2.2650: Vim9: command modifiers not handled in nested function
Bram Moolenaar <Bram@vim.org>
parents: 24208
diff changeset
3709 result ..= 'Ca'
40e27d96e395 patch 8.2.2650: Vim9: command modifiers not handled in nested function
Bram Moolenaar <Bram@vim.org>
parents: 24208
diff changeset
3710 enddef
40e27d96e395 patch 8.2.2650: Vim9: command modifiers not handled in nested function
Bram Moolenaar <Bram@vim.org>
parents: 24208
diff changeset
3711
40e27d96e395 patch 8.2.2650: Vim9: command modifiers not handled in nested function
Bram Moolenaar <Bram@vim.org>
parents: 24208
diff changeset
3712 Crash()
40e27d96e395 patch 8.2.2650: Vim9: command modifiers not handled in nested function
Bram Moolenaar <Bram@vim.org>
parents: 24208
diff changeset
3713 assert_equal('CbEbEaCa', result)
40e27d96e395 patch 8.2.2650: Vim9: command modifiers not handled in nested function
Bram Moolenaar <Bram@vim.org>
parents: 24208
diff changeset
3714 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
3715 v9.CheckScriptSuccess(lines)
24218
40e27d96e395 patch 8.2.2650: Vim9: command modifiers not handled in nested function
Bram Moolenaar <Bram@vim.org>
parents: 24208
diff changeset
3716 enddef
40e27d96e395 patch 8.2.2650: Vim9: command modifiers not handled in nested function
Bram Moolenaar <Bram@vim.org>
parents: 24208
diff changeset
3717
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
3718 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
3719 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
3720 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
3721 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
3722 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
3723 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
3724 try
23428
5807e3958e38 patch 8.2.2257: Vim9: using -> for lambda is ambiguous
Bram Moolenaar <Bram@vim.org>
parents: 23426
diff changeset
3725 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
3726 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
3727 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
3728 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
3729 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
3730 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
3731 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
3732 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
3733 v9.CheckScriptSuccess(lines)
23074
cd885eb0e50c patch 8.2.2083: Vim9: crash when using ":silent!" and getting member fails
Bram Moolenaar <Bram@vim.org>
parents: 23072
diff changeset
3734 enddef
cd885eb0e50c patch 8.2.2083: Vim9: crash when using ":silent!" and getting member fails
Bram Moolenaar <Bram@vim.org>
parents: 23072
diff changeset
3735
23689
e7f5931b46ca patch 8.2.2386: Vim9: crash when using ":silent! put"
Bram Moolenaar <Bram@vim.org>
parents: 23644
diff changeset
3736 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
3737 var lines =<< trim END
e7f5931b46ca patch 8.2.2386: Vim9: crash when using ":silent! put"
Bram Moolenaar <Bram@vim.org>
parents: 23644
diff changeset
3738 vim9script
e7f5931b46ca patch 8.2.2386: Vim9: crash when using ":silent! put"
Bram Moolenaar <Bram@vim.org>
parents: 23644
diff changeset
3739
e7f5931b46ca patch 8.2.2386: Vim9: crash when using ":silent! put"
Bram Moolenaar <Bram@vim.org>
parents: 23644
diff changeset
3740 def Func(b: bool)
e7f5931b46ca patch 8.2.2386: Vim9: crash when using ":silent! put"
Bram Moolenaar <Bram@vim.org>
parents: 23644
diff changeset
3741 Crash()
e7f5931b46ca patch 8.2.2386: Vim9: crash when using ":silent! put"
Bram Moolenaar <Bram@vim.org>
parents: 23644
diff changeset
3742 enddef
e7f5931b46ca patch 8.2.2386: Vim9: crash when using ":silent! put"
Bram Moolenaar <Bram@vim.org>
parents: 23644
diff changeset
3743
e7f5931b46ca patch 8.2.2386: Vim9: crash when using ":silent! put"
Bram Moolenaar <Bram@vim.org>
parents: 23644
diff changeset
3744 def Crash()
e7f5931b46ca patch 8.2.2386: Vim9: crash when using ":silent! put"
Bram Moolenaar <Bram@vim.org>
parents: 23644
diff changeset
3745 sil! :/not found/d _
e7f5931b46ca patch 8.2.2386: Vim9: crash when using ":silent! put"
Bram Moolenaar <Bram@vim.org>
parents: 23644
diff changeset
3746 sil! :/not found/put _
e7f5931b46ca patch 8.2.2386: Vim9: crash when using ":silent! put"
Bram Moolenaar <Bram@vim.org>
parents: 23644
diff changeset
3747 enddef
e7f5931b46ca patch 8.2.2386: Vim9: crash when using ":silent! put"
Bram Moolenaar <Bram@vim.org>
parents: 23644
diff changeset
3748
e7f5931b46ca patch 8.2.2386: Vim9: crash when using ":silent! put"
Bram Moolenaar <Bram@vim.org>
parents: 23644
diff changeset
3749 Func(true)
e7f5931b46ca patch 8.2.2386: Vim9: crash when using ":silent! put"
Bram Moolenaar <Bram@vim.org>
parents: 23644
diff changeset
3750 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
3751 v9.CheckScriptSuccess(lines)
23689
e7f5931b46ca patch 8.2.2386: Vim9: crash when using ":silent! put"
Bram Moolenaar <Bram@vim.org>
parents: 23644
diff changeset
3752 enddef
e7f5931b46ca patch 8.2.2386: Vim9: crash when using ":silent! put"
Bram Moolenaar <Bram@vim.org>
parents: 23644
diff changeset
3753
23281
5b4db8035d1d patch 8.2.2186: Vim9: error when using 'opfunc'
Bram Moolenaar <Bram@vim.org>
parents: 23252
diff changeset
3754 def Test_opfunc()
27464
a14c4d3e3260 patch 8.2.4260: Vim9: can still use a global function without g:
Bram Moolenaar <Bram@vim.org>
parents: 27457
diff changeset
3755 nnoremap <F3> <cmd>set opfunc=g:Opfunc<cr>g@
23281
5b4db8035d1d patch 8.2.2186: Vim9: error when using 'opfunc'
Bram Moolenaar <Bram@vim.org>
parents: 23252
diff changeset
3756 def g:Opfunc(_: any): string
5b4db8035d1d patch 8.2.2186: Vim9: error when using 'opfunc'
Bram Moolenaar <Bram@vim.org>
parents: 23252
diff changeset
3757 setline(1, 'ASDF')
5b4db8035d1d patch 8.2.2186: Vim9: error when using 'opfunc'
Bram Moolenaar <Bram@vim.org>
parents: 23252
diff changeset
3758 return ''
5b4db8035d1d patch 8.2.2186: Vim9: error when using 'opfunc'
Bram Moolenaar <Bram@vim.org>
parents: 23252
diff changeset
3759 enddef
5b4db8035d1d patch 8.2.2186: Vim9: error when using 'opfunc'
Bram Moolenaar <Bram@vim.org>
parents: 23252
diff changeset
3760 new
5b4db8035d1d patch 8.2.2186: Vim9: error when using 'opfunc'
Bram Moolenaar <Bram@vim.org>
parents: 23252
diff changeset
3761 setline(1, 'asdf')
5b4db8035d1d patch 8.2.2186: Vim9: error when using 'opfunc'
Bram Moolenaar <Bram@vim.org>
parents: 23252
diff changeset
3762 feedkeys("\<F3>$", 'x')
5b4db8035d1d patch 8.2.2186: Vim9: error when using 'opfunc'
Bram Moolenaar <Bram@vim.org>
parents: 23252
diff changeset
3763 assert_equal('ASDF', getline(1))
5b4db8035d1d patch 8.2.2186: Vim9: error when using 'opfunc'
Bram Moolenaar <Bram@vim.org>
parents: 23252
diff changeset
3764
5b4db8035d1d patch 8.2.2186: Vim9: error when using 'opfunc'
Bram Moolenaar <Bram@vim.org>
parents: 23252
diff changeset
3765 bwipe!
5b4db8035d1d patch 8.2.2186: Vim9: error when using 'opfunc'
Bram Moolenaar <Bram@vim.org>
parents: 23252
diff changeset
3766 nunmap <F3>
5b4db8035d1d patch 8.2.2186: Vim9: error when using 'opfunc'
Bram Moolenaar <Bram@vim.org>
parents: 23252
diff changeset
3767 enddef
5b4db8035d1d patch 8.2.2186: Vim9: error when using 'opfunc'
Bram Moolenaar <Bram@vim.org>
parents: 23252
diff changeset
3768
26538
dfa658800f21 patch 8.2.3798: a :def callback function postpones an error message
Bram Moolenaar <Bram@vim.org>
parents: 26530
diff changeset
3769 func Test_opfunc_error()
dfa658800f21 patch 8.2.3798: a :def callback function postpones an error message
Bram Moolenaar <Bram@vim.org>
parents: 26530
diff changeset
3770 CheckScreendump
dfa658800f21 patch 8.2.3798: a :def callback function postpones an error message
Bram Moolenaar <Bram@vim.org>
parents: 26530
diff changeset
3771 call Run_Test_opfunc_error()
dfa658800f21 patch 8.2.3798: a :def callback function postpones an error message
Bram Moolenaar <Bram@vim.org>
parents: 26530
diff changeset
3772 endfunc
dfa658800f21 patch 8.2.3798: a :def callback function postpones an error message
Bram Moolenaar <Bram@vim.org>
parents: 26530
diff changeset
3773
dfa658800f21 patch 8.2.3798: a :def callback function postpones an error message
Bram Moolenaar <Bram@vim.org>
parents: 26530
diff changeset
3774 def Run_Test_opfunc_error()
dfa658800f21 patch 8.2.3798: a :def callback function postpones an error message
Bram Moolenaar <Bram@vim.org>
parents: 26530
diff changeset
3775 # test that the error from Opfunc() is displayed right away
dfa658800f21 patch 8.2.3798: a :def callback function postpones an error message
Bram Moolenaar <Bram@vim.org>
parents: 26530
diff changeset
3776 var lines =<< trim END
dfa658800f21 patch 8.2.3798: a :def callback function postpones an error message
Bram Moolenaar <Bram@vim.org>
parents: 26530
diff changeset
3777 vim9script
dfa658800f21 patch 8.2.3798: a :def callback function postpones an error message
Bram Moolenaar <Bram@vim.org>
parents: 26530
diff changeset
3778
dfa658800f21 patch 8.2.3798: a :def callback function postpones an error message
Bram Moolenaar <Bram@vim.org>
parents: 26530
diff changeset
3779 def Opfunc(type: string)
dfa658800f21 patch 8.2.3798: a :def callback function postpones an error message
Bram Moolenaar <Bram@vim.org>
parents: 26530
diff changeset
3780 try
dfa658800f21 patch 8.2.3798: a :def callback function postpones an error message
Bram Moolenaar <Bram@vim.org>
parents: 26530
diff changeset
3781 eval [][0]
dfa658800f21 patch 8.2.3798: a :def callback function postpones an error message
Bram Moolenaar <Bram@vim.org>
parents: 26530
diff changeset
3782 catch /nothing/ # error not caught
dfa658800f21 patch 8.2.3798: a :def callback function postpones an error message
Bram Moolenaar <Bram@vim.org>
parents: 26530
diff changeset
3783 endtry
dfa658800f21 patch 8.2.3798: a :def callback function postpones an error message
Bram Moolenaar <Bram@vim.org>
parents: 26530
diff changeset
3784 enddef
dfa658800f21 patch 8.2.3798: a :def callback function postpones an error message
Bram Moolenaar <Bram@vim.org>
parents: 26530
diff changeset
3785 &operatorfunc = Opfunc
dfa658800f21 patch 8.2.3798: a :def callback function postpones an error message
Bram Moolenaar <Bram@vim.org>
parents: 26530
diff changeset
3786 nnoremap <expr> l <SID>L()
dfa658800f21 patch 8.2.3798: a :def callback function postpones an error message
Bram Moolenaar <Bram@vim.org>
parents: 26530
diff changeset
3787 def L(): string
dfa658800f21 patch 8.2.3798: a :def callback function postpones an error message
Bram Moolenaar <Bram@vim.org>
parents: 26530
diff changeset
3788 return 'l'
dfa658800f21 patch 8.2.3798: a :def callback function postpones an error message
Bram Moolenaar <Bram@vim.org>
parents: 26530
diff changeset
3789 enddef
dfa658800f21 patch 8.2.3798: a :def callback function postpones an error message
Bram Moolenaar <Bram@vim.org>
parents: 26530
diff changeset
3790 'x'->repeat(10)->setline(1)
dfa658800f21 patch 8.2.3798: a :def callback function postpones an error message
Bram Moolenaar <Bram@vim.org>
parents: 26530
diff changeset
3791 feedkeys('g@l', 'n')
dfa658800f21 patch 8.2.3798: a :def callback function postpones an error message
Bram Moolenaar <Bram@vim.org>
parents: 26530
diff changeset
3792 feedkeys('llll')
dfa658800f21 patch 8.2.3798: a :def callback function postpones an error message
Bram Moolenaar <Bram@vim.org>
parents: 26530
diff changeset
3793 END
30209
a970b48c25a3 patch 9.0.0440: crash when using mkdir() with "R" flag in compiled function
Bram Moolenaar <Bram@vim.org>
parents: 30192
diff changeset
3794 call writefile(lines, 'XTest_opfunc_error', 'D')
26538
dfa658800f21 patch 8.2.3798: a :def callback function postpones an error message
Bram Moolenaar <Bram@vim.org>
parents: 26530
diff changeset
3795
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
3796 var buf = g:RunVimInTerminal('-S XTest_opfunc_error', {rows: 6, wait_for_ruler: 0})
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
3797 g:WaitForAssert(() => assert_match('Press ENTER', term_getline(buf, 6)))
28735
c428a4e53b9c patch 8.2.4892: test failures because of changed error messages
Bram Moolenaar <Bram@vim.org>
parents: 28382
diff changeset
3798 g:WaitForAssert(() => assert_match('E684: List index out of range: 0', term_getline(buf, 5)))
26538
dfa658800f21 patch 8.2.3798: a :def callback function postpones an error message
Bram Moolenaar <Bram@vim.org>
parents: 26530
diff changeset
3799
dfa658800f21 patch 8.2.3798: a :def callback function postpones an error message
Bram Moolenaar <Bram@vim.org>
parents: 26530
diff changeset
3800 # clean up
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
3801 g:StopVimInTerminal(buf)
26538
dfa658800f21 patch 8.2.3798: a :def callback function postpones an error message
Bram Moolenaar <Bram@vim.org>
parents: 26530
diff changeset
3802 enddef
dfa658800f21 patch 8.2.3798: a :def callback function postpones an error message
Bram Moolenaar <Bram@vim.org>
parents: 26530
diff changeset
3803
23289
ac701146c708 patch 8.2.2190: Vim9: crash when compiled with EXITFREE
Bram Moolenaar <Bram@vim.org>
parents: 23285
diff changeset
3804 " 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
3805 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
3806 var lines =<< trim END
ac701146c708 patch 8.2.2190: Vim9: crash when compiled with EXITFREE
Bram Moolenaar <Bram@vim.org>
parents: 23285
diff changeset
3807 vim9script
24555
83877a1b66fd patch 8.2.2817: Vim9: script sourcing continues after an error
Bram Moolenaar <Bram@vim.org>
parents: 24539
diff changeset
3808 command WriteDone writefile(['Done'], 'XnestedDone')
23289
ac701146c708 patch 8.2.2190: Vim9: crash when compiled with EXITFREE
Bram Moolenaar <Bram@vim.org>
parents: 23285
diff changeset
3809 def Outer()
ac701146c708 patch 8.2.2190: Vim9: crash when compiled with EXITFREE
Bram Moolenaar <Bram@vim.org>
parents: 23285
diff changeset
3810 def g:Inner()
ac701146c708 patch 8.2.2190: Vim9: crash when compiled with EXITFREE
Bram Moolenaar <Bram@vim.org>
parents: 23285
diff changeset
3811 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
3812 enddef
ac701146c708 patch 8.2.2190: Vim9: crash when compiled with EXITFREE
Bram Moolenaar <Bram@vim.org>
parents: 23285
diff changeset
3813 g:Inner()
ac701146c708 patch 8.2.2190: Vim9: crash when compiled with EXITFREE
Bram Moolenaar <Bram@vim.org>
parents: 23285
diff changeset
3814 enddef
ac701146c708 patch 8.2.2190: Vim9: crash when compiled with EXITFREE
Bram Moolenaar <Bram@vim.org>
parents: 23285
diff changeset
3815 defcompile
24555
83877a1b66fd patch 8.2.2817: Vim9: script sourcing continues after an error
Bram Moolenaar <Bram@vim.org>
parents: 24539
diff changeset
3816 # not reached
23289
ac701146c708 patch 8.2.2190: Vim9: crash when compiled with EXITFREE
Bram Moolenaar <Bram@vim.org>
parents: 23285
diff changeset
3817 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
3818 if !g:RunVim([], lines, '--clean -c WriteDone -c quit')
23289
ac701146c708 patch 8.2.2190: Vim9: crash when compiled with EXITFREE
Bram Moolenaar <Bram@vim.org>
parents: 23285
diff changeset
3819 return
ac701146c708 patch 8.2.2190: Vim9: crash when compiled with EXITFREE
Bram Moolenaar <Bram@vim.org>
parents: 23285
diff changeset
3820 endif
ac701146c708 patch 8.2.2190: Vim9: crash when compiled with EXITFREE
Bram Moolenaar <Bram@vim.org>
parents: 23285
diff changeset
3821 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
3822 delete('XnestedDone')
ac701146c708 patch 8.2.2190: Vim9: crash when compiled with EXITFREE
Bram Moolenaar <Bram@vim.org>
parents: 23285
diff changeset
3823 enddef
ac701146c708 patch 8.2.2190: Vim9: crash when compiled with EXITFREE
Bram Moolenaar <Bram@vim.org>
parents: 23285
diff changeset
3824
27589
ecea41486e8a patch 8.2.4321: Vim9: crash when using a funcref to a closure
Bram Moolenaar <Bram@vim.org>
parents: 27565
diff changeset
3825 def Test_nested_closure_funcref()
ecea41486e8a patch 8.2.4321: Vim9: crash when using a funcref to a closure
Bram Moolenaar <Bram@vim.org>
parents: 27565
diff changeset
3826 var lines =<< trim END
ecea41486e8a patch 8.2.4321: Vim9: crash when using a funcref to a closure
Bram Moolenaar <Bram@vim.org>
parents: 27565
diff changeset
3827 vim9script
ecea41486e8a patch 8.2.4321: Vim9: crash when using a funcref to a closure
Bram Moolenaar <Bram@vim.org>
parents: 27565
diff changeset
3828 def Func()
ecea41486e8a patch 8.2.4321: Vim9: crash when using a funcref to a closure
Bram Moolenaar <Bram@vim.org>
parents: 27565
diff changeset
3829 var n: number
ecea41486e8a patch 8.2.4321: Vim9: crash when using a funcref to a closure
Bram Moolenaar <Bram@vim.org>
parents: 27565
diff changeset
3830 def Nested()
ecea41486e8a patch 8.2.4321: Vim9: crash when using a funcref to a closure
Bram Moolenaar <Bram@vim.org>
parents: 27565
diff changeset
3831 ++n
ecea41486e8a patch 8.2.4321: Vim9: crash when using a funcref to a closure
Bram Moolenaar <Bram@vim.org>
parents: 27565
diff changeset
3832 enddef
ecea41486e8a patch 8.2.4321: Vim9: crash when using a funcref to a closure
Bram Moolenaar <Bram@vim.org>
parents: 27565
diff changeset
3833 Nested()
ecea41486e8a patch 8.2.4321: Vim9: crash when using a funcref to a closure
Bram Moolenaar <Bram@vim.org>
parents: 27565
diff changeset
3834 g:result_one = n
ecea41486e8a patch 8.2.4321: Vim9: crash when using a funcref to a closure
Bram Moolenaar <Bram@vim.org>
parents: 27565
diff changeset
3835 var Ref = function(Nested)
ecea41486e8a patch 8.2.4321: Vim9: crash when using a funcref to a closure
Bram Moolenaar <Bram@vim.org>
parents: 27565
diff changeset
3836 Ref()
ecea41486e8a patch 8.2.4321: Vim9: crash when using a funcref to a closure
Bram Moolenaar <Bram@vim.org>
parents: 27565
diff changeset
3837 g:result_two = n
ecea41486e8a patch 8.2.4321: Vim9: crash when using a funcref to a closure
Bram Moolenaar <Bram@vim.org>
parents: 27565
diff changeset
3838 enddef
ecea41486e8a patch 8.2.4321: Vim9: crash when using a funcref to a closure
Bram Moolenaar <Bram@vim.org>
parents: 27565
diff changeset
3839 Func()
ecea41486e8a patch 8.2.4321: Vim9: crash when using a funcref to a closure
Bram Moolenaar <Bram@vim.org>
parents: 27565
diff changeset
3840 END
ecea41486e8a patch 8.2.4321: Vim9: crash when using a funcref to a closure
Bram Moolenaar <Bram@vim.org>
parents: 27565
diff changeset
3841 v9.CheckScriptSuccess(lines)
ecea41486e8a patch 8.2.4321: Vim9: crash when using a funcref to a closure
Bram Moolenaar <Bram@vim.org>
parents: 27565
diff changeset
3842 assert_equal(1, g:result_one)
ecea41486e8a patch 8.2.4321: Vim9: crash when using a funcref to a closure
Bram Moolenaar <Bram@vim.org>
parents: 27565
diff changeset
3843 assert_equal(2, g:result_two)
ecea41486e8a patch 8.2.4321: Vim9: crash when using a funcref to a closure
Bram Moolenaar <Bram@vim.org>
parents: 27565
diff changeset
3844 unlet g:result_one g:result_two
ecea41486e8a patch 8.2.4321: Vim9: crash when using a funcref to a closure
Bram Moolenaar <Bram@vim.org>
parents: 27565
diff changeset
3845 enddef
ecea41486e8a patch 8.2.4321: Vim9: crash when using a funcref to a closure
Bram Moolenaar <Bram@vim.org>
parents: 27565
diff changeset
3846
27591
d91be28bbdbb patch 8.2.4322: Vim9: crash when using funcref with closure
Bram Moolenaar <Bram@vim.org>
parents: 27589
diff changeset
3847 def Test_nested_closure_in_dict()
d91be28bbdbb patch 8.2.4322: Vim9: crash when using funcref with closure
Bram Moolenaar <Bram@vim.org>
parents: 27589
diff changeset
3848 var lines =<< trim END
d91be28bbdbb patch 8.2.4322: Vim9: crash when using funcref with closure
Bram Moolenaar <Bram@vim.org>
parents: 27589
diff changeset
3849 vim9script
d91be28bbdbb patch 8.2.4322: Vim9: crash when using funcref with closure
Bram Moolenaar <Bram@vim.org>
parents: 27589
diff changeset
3850 def Func(): dict<any>
d91be28bbdbb patch 8.2.4322: Vim9: crash when using funcref with closure
Bram Moolenaar <Bram@vim.org>
parents: 27589
diff changeset
3851 var n: number
d91be28bbdbb patch 8.2.4322: Vim9: crash when using funcref with closure
Bram Moolenaar <Bram@vim.org>
parents: 27589
diff changeset
3852 def Inc(): number
d91be28bbdbb patch 8.2.4322: Vim9: crash when using funcref with closure
Bram Moolenaar <Bram@vim.org>
parents: 27589
diff changeset
3853 ++n
d91be28bbdbb patch 8.2.4322: Vim9: crash when using funcref with closure
Bram Moolenaar <Bram@vim.org>
parents: 27589
diff changeset
3854 return n
d91be28bbdbb patch 8.2.4322: Vim9: crash when using funcref with closure
Bram Moolenaar <Bram@vim.org>
parents: 27589
diff changeset
3855 enddef
d91be28bbdbb patch 8.2.4322: Vim9: crash when using funcref with closure
Bram Moolenaar <Bram@vim.org>
parents: 27589
diff changeset
3856 return {inc: function(Inc)}
d91be28bbdbb patch 8.2.4322: Vim9: crash when using funcref with closure
Bram Moolenaar <Bram@vim.org>
parents: 27589
diff changeset
3857 enddef
d91be28bbdbb patch 8.2.4322: Vim9: crash when using funcref with closure
Bram Moolenaar <Bram@vim.org>
parents: 27589
diff changeset
3858 disas Func
d91be28bbdbb patch 8.2.4322: Vim9: crash when using funcref with closure
Bram Moolenaar <Bram@vim.org>
parents: 27589
diff changeset
3859 var d = Func()
d91be28bbdbb patch 8.2.4322: Vim9: crash when using funcref with closure
Bram Moolenaar <Bram@vim.org>
parents: 27589
diff changeset
3860 assert_equal(1, d.inc())
d91be28bbdbb patch 8.2.4322: Vim9: crash when using funcref with closure
Bram Moolenaar <Bram@vim.org>
parents: 27589
diff changeset
3861 assert_equal(2, d.inc())
d91be28bbdbb patch 8.2.4322: Vim9: crash when using funcref with closure
Bram Moolenaar <Bram@vim.org>
parents: 27589
diff changeset
3862 END
d91be28bbdbb patch 8.2.4322: Vim9: crash when using funcref with closure
Bram Moolenaar <Bram@vim.org>
parents: 27589
diff changeset
3863 v9.CheckScriptSuccess(lines)
d91be28bbdbb patch 8.2.4322: Vim9: crash when using funcref with closure
Bram Moolenaar <Bram@vim.org>
parents: 27589
diff changeset
3864 enddef
d91be28bbdbb patch 8.2.4322: Vim9: crash when using funcref with closure
Bram Moolenaar <Bram@vim.org>
parents: 27589
diff changeset
3865
28047
b10fa9b17c85 patch 8.2.4548: script-local function is deleted when used in a funcref
Bram Moolenaar <Bram@vim.org>
parents: 28008
diff changeset
3866 def Test_script_local_other_script()
b10fa9b17c85 patch 8.2.4548: script-local function is deleted when used in a funcref
Bram Moolenaar <Bram@vim.org>
parents: 28008
diff changeset
3867 var lines =<< trim END
b10fa9b17c85 patch 8.2.4548: script-local function is deleted when used in a funcref
Bram Moolenaar <Bram@vim.org>
parents: 28008
diff changeset
3868 function LegacyJob()
b10fa9b17c85 patch 8.2.4548: script-local function is deleted when used in a funcref
Bram Moolenaar <Bram@vim.org>
parents: 28008
diff changeset
3869 let FuncRef = function('s:close_cb')
b10fa9b17c85 patch 8.2.4548: script-local function is deleted when used in a funcref
Bram Moolenaar <Bram@vim.org>
parents: 28008
diff changeset
3870 endfunction
b10fa9b17c85 patch 8.2.4548: script-local function is deleted when used in a funcref
Bram Moolenaar <Bram@vim.org>
parents: 28008
diff changeset
3871 function s:close_cb(...)
b10fa9b17c85 patch 8.2.4548: script-local function is deleted when used in a funcref
Bram Moolenaar <Bram@vim.org>
parents: 28008
diff changeset
3872 endfunction
b10fa9b17c85 patch 8.2.4548: script-local function is deleted when used in a funcref
Bram Moolenaar <Bram@vim.org>
parents: 28008
diff changeset
3873 END
30209
a970b48c25a3 patch 9.0.0440: crash when using mkdir() with "R" flag in compiled function
Bram Moolenaar <Bram@vim.org>
parents: 30192
diff changeset
3874 lines->writefile('Xlegacy.vim', 'D')
28047
b10fa9b17c85 patch 8.2.4548: script-local function is deleted when used in a funcref
Bram Moolenaar <Bram@vim.org>
parents: 28008
diff changeset
3875 source Xlegacy.vim
b10fa9b17c85 patch 8.2.4548: script-local function is deleted when used in a funcref
Bram Moolenaar <Bram@vim.org>
parents: 28008
diff changeset
3876 g:LegacyJob()
b10fa9b17c85 patch 8.2.4548: script-local function is deleted when used in a funcref
Bram Moolenaar <Bram@vim.org>
parents: 28008
diff changeset
3877 g:LegacyJob()
b10fa9b17c85 patch 8.2.4548: script-local function is deleted when used in a funcref
Bram Moolenaar <Bram@vim.org>
parents: 28008
diff changeset
3878 g:LegacyJob()
b10fa9b17c85 patch 8.2.4548: script-local function is deleted when used in a funcref
Bram Moolenaar <Bram@vim.org>
parents: 28008
diff changeset
3879
b10fa9b17c85 patch 8.2.4548: script-local function is deleted when used in a funcref
Bram Moolenaar <Bram@vim.org>
parents: 28008
diff changeset
3880 delfunc g:LegacyJob
b10fa9b17c85 patch 8.2.4548: script-local function is deleted when used in a funcref
Bram Moolenaar <Bram@vim.org>
parents: 28008
diff changeset
3881 enddef
b10fa9b17c85 patch 8.2.4548: script-local function is deleted when used in a funcref
Bram Moolenaar <Bram@vim.org>
parents: 28008
diff changeset
3882
24065
a6aec9a89184 patch 8.2.2574: Vim9: crash when calling partial with wrong function
Bram Moolenaar <Bram@vim.org>
parents: 24061
diff changeset
3883 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
3884 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
3885 vim9script
a6aec9a89184 patch 8.2.2574: Vim9: crash when calling partial with wrong function
Bram Moolenaar <Bram@vim.org>
parents: 24061
diff changeset
3886 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
3887 return x
a6aec9a89184 patch 8.2.2574: Vim9: crash when calling partial with wrong function
Bram Moolenaar <Bram@vim.org>
parents: 24061
diff changeset
3888 enddef
a6aec9a89184 patch 8.2.2574: Vim9: crash when calling partial with wrong function
Bram Moolenaar <Bram@vim.org>
parents: 24061
diff changeset
3889
a6aec9a89184 patch 8.2.2574: Vim9: crash when calling partial with wrong function
Bram Moolenaar <Bram@vim.org>
parents: 24061
diff changeset
3890 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
3891 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
3892 enddef
a6aec9a89184 patch 8.2.2574: Vim9: crash when calling partial with wrong function
Bram Moolenaar <Bram@vim.org>
parents: 24061
diff changeset
3893
28123
e5fcd1256ee3 patch 8.2.4586: Vim9: no error for using lower case name for "func" argument
Bram Moolenaar <Bram@vim.org>
parents: 28111
diff changeset
3894 def G(Fg: func): dict<func>
e5fcd1256ee3 patch 8.2.4586: Vim9: no error for using lower case name for "func" argument
Bram Moolenaar <Bram@vim.org>
parents: 28111
diff changeset
3895 return {f: Fg}
24065
a6aec9a89184 patch 8.2.2574: Vim9: crash when calling partial with wrong function
Bram Moolenaar <Bram@vim.org>
parents: 24061
diff changeset
3896 enddef
a6aec9a89184 patch 8.2.2574: Vim9: crash when calling partial with wrong function
Bram Moolenaar <Bram@vim.org>
parents: 24061
diff changeset
3897
a6aec9a89184 patch 8.2.2574: Vim9: crash when calling partial with wrong function
Bram Moolenaar <Bram@vim.org>
parents: 24061
diff changeset
3898 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
3899 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
3900 enddef
a6aec9a89184 patch 8.2.2574: Vim9: crash when calling partial with wrong function
Bram Moolenaar <Bram@vim.org>
parents: 24061
diff changeset
3901 END
a6aec9a89184 patch 8.2.2574: Vim9: crash when calling partial with wrong function
Bram Moolenaar <Bram@vim.org>
parents: 24061
diff changeset
3902
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
3903 v9.CheckScriptSuccess(lines + ['echo H(G(F1))'])
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
3904 v9.CheckScriptFailure(lines + ['echo H(G(F2))'], 'E1013:')
28123
e5fcd1256ee3 patch 8.2.4586: Vim9: no error for using lower case name for "func" argument
Bram Moolenaar <Bram@vim.org>
parents: 28111
diff changeset
3905
e5fcd1256ee3 patch 8.2.4586: Vim9: no error for using lower case name for "func" argument
Bram Moolenaar <Bram@vim.org>
parents: 28111
diff changeset
3906 v9.CheckScriptFailure(lines + ['def SomeFunc(ff: func)', 'enddef'], 'E704:')
24065
a6aec9a89184 patch 8.2.2574: Vim9: crash when calling partial with wrong function
Bram Moolenaar <Bram@vim.org>
parents: 24061
diff changeset
3907 enddef
a6aec9a89184 patch 8.2.2574: Vim9: crash when calling partial with wrong function
Bram Moolenaar <Bram@vim.org>
parents: 24061
diff changeset
3908
28059
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3909 def Test_call_func_with_null()
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3910 var lines =<< trim END
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3911 def Fstring(v: string)
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3912 assert_equal(null_string, v)
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3913 enddef
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3914 Fstring(null_string)
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3915 def Fblob(v: blob)
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3916 assert_equal(null_blob, v)
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3917 enddef
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3918 Fblob(null_blob)
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3919 def Flist(v: list<number>)
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3920 assert_equal(null_list, v)
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3921 enddef
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3922 Flist(null_list)
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3923 def Fdict(v: dict<number>)
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3924 assert_equal(null_dict, v)
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3925 enddef
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3926 Fdict(null_dict)
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3927 def Ffunc(Fv: func(number): number)
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3928 assert_equal(null_function, Fv)
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3929 enddef
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3930 Ffunc(null_function)
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3931 if has('channel')
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3932 def Fchannel(v: channel)
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3933 assert_equal(null_channel, v)
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3934 enddef
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3935 Fchannel(null_channel)
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3936 def Fjob(v: job)
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3937 assert_equal(null_job, v)
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3938 enddef
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3939 Fjob(null_job)
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3940 endif
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3941 END
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3942 v9.CheckDefAndScriptSuccess(lines)
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3943 enddef
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3944
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3945 def Test_null_default_argument()
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3946 var lines =<< trim END
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3947 def Fstring(v: string = null_string)
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3948 assert_equal(null_string, v)
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3949 enddef
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3950 Fstring()
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3951 def Fblob(v: blob = null_blob)
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3952 assert_equal(null_blob, v)
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3953 enddef
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3954 Fblob()
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3955 def Flist(v: list<number> = null_list)
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3956 assert_equal(null_list, v)
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3957 enddef
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3958 Flist()
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3959 def Fdict(v: dict<number> = null_dict)
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3960 assert_equal(null_dict, v)
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3961 enddef
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3962 Fdict()
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3963 def Ffunc(Fv: func(number): number = null_function)
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3964 assert_equal(null_function, Fv)
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3965 enddef
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3966 Ffunc()
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3967 if has('channel')
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3968 def Fchannel(v: channel = null_channel)
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3969 assert_equal(null_channel, v)
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3970 enddef
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3971 Fchannel()
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3972 def Fjob(v: job = null_job)
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3973 assert_equal(null_job, v)
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3974 enddef
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3975 Fjob()
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3976 endif
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3977 END
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3978 v9.CheckDefAndScriptSuccess(lines)
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3979 enddef
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3980
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3981 def Test_null_return()
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3982 var lines =<< trim END
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3983 def Fstring(): string
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3984 return null_string
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3985 enddef
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3986 assert_equal(null_string, Fstring())
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3987 def Fblob(): blob
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3988 return null_blob
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3989 enddef
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3990 assert_equal(null_blob, Fblob())
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3991 def Flist(): list<number>
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3992 return null_list
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3993 enddef
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3994 assert_equal(null_list, Flist())
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3995 def Fdict(): dict<number>
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3996 return null_dict
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3997 enddef
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3998 assert_equal(null_dict, Fdict())
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
3999 def Ffunc(): func(number): number
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
4000 return null_function
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
4001 enddef
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
4002 assert_equal(null_function, Ffunc())
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
4003 if has('channel')
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
4004 def Fchannel(): channel
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
4005 return null_channel
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
4006 enddef
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
4007 assert_equal(null_channel, Fchannel())
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
4008 def Fjob(): job
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
4009 return null_job
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
4010 enddef
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
4011 assert_equal(null_job, Fjob())
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
4012 endif
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
4013 END
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
4014 v9.CheckDefAndScriptSuccess(lines)
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
4015 enddef
230115610b6a patch 8.2.4554: Vim9: using null values not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 28047
diff changeset
4016
25579
d8fb5bb88362 patch 8.2.3326: Vim9: no error passing an empty list of the wrong type
Bram Moolenaar <Bram@vim.org>
parents: 25561
diff changeset
4017 def Test_list_any_type_checked()
d8fb5bb88362 patch 8.2.3326: Vim9: no error passing an empty list of the wrong type
Bram Moolenaar <Bram@vim.org>
parents: 25561
diff changeset
4018 var lines =<< trim END
d8fb5bb88362 patch 8.2.3326: Vim9: no error passing an empty list of the wrong type
Bram Moolenaar <Bram@vim.org>
parents: 25561
diff changeset
4019 vim9script
d8fb5bb88362 patch 8.2.3326: Vim9: no error passing an empty list of the wrong type
Bram Moolenaar <Bram@vim.org>
parents: 25561
diff changeset
4020 def Foo()
d8fb5bb88362 patch 8.2.3326: Vim9: no error passing an empty list of the wrong type
Bram Moolenaar <Bram@vim.org>
parents: 25561
diff changeset
4021 --decl--
d8fb5bb88362 patch 8.2.3326: Vim9: no error passing an empty list of the wrong type
Bram Moolenaar <Bram@vim.org>
parents: 25561
diff changeset
4022 Bar(l)
d8fb5bb88362 patch 8.2.3326: Vim9: no error passing an empty list of the wrong type
Bram Moolenaar <Bram@vim.org>
parents: 25561
diff changeset
4023 enddef
d8fb5bb88362 patch 8.2.3326: Vim9: no error passing an empty list of the wrong type
Bram Moolenaar <Bram@vim.org>
parents: 25561
diff changeset
4024 def Bar(ll: list<dict<any>>)
d8fb5bb88362 patch 8.2.3326: Vim9: no error passing an empty list of the wrong type
Bram Moolenaar <Bram@vim.org>
parents: 25561
diff changeset
4025 enddef
d8fb5bb88362 patch 8.2.3326: Vim9: no error passing an empty list of the wrong type
Bram Moolenaar <Bram@vim.org>
parents: 25561
diff changeset
4026 Foo()
d8fb5bb88362 patch 8.2.3326: Vim9: no error passing an empty list of the wrong type
Bram Moolenaar <Bram@vim.org>
parents: 25561
diff changeset
4027 END
27519
7898c7847293 patch 8.2.4287: cannot assign empty list with type to variable with list type
Bram Moolenaar <Bram@vim.org>
parents: 27472
diff changeset
4028 # "any" could be "dict<any>", thus OK
25579
d8fb5bb88362 patch 8.2.3326: Vim9: no error passing an empty list of the wrong type
Bram Moolenaar <Bram@vim.org>
parents: 25561
diff changeset
4029 lines[2] = 'var l: list<any>'
27519
7898c7847293 patch 8.2.4287: cannot assign empty list with type to variable with list type
Bram Moolenaar <Bram@vim.org>
parents: 27472
diff changeset
4030 v9.CheckScriptSuccess(lines)
25579
d8fb5bb88362 patch 8.2.3326: Vim9: no error passing an empty list of the wrong type
Bram Moolenaar <Bram@vim.org>
parents: 25561
diff changeset
4031 lines[2] = 'var l: list<any> = []'
27519
7898c7847293 patch 8.2.4287: cannot assign empty list with type to variable with list type
Bram Moolenaar <Bram@vim.org>
parents: 27472
diff changeset
4032 v9.CheckScriptSuccess(lines)
25579
d8fb5bb88362 patch 8.2.3326: Vim9: no error passing an empty list of the wrong type
Bram Moolenaar <Bram@vim.org>
parents: 25561
diff changeset
4033
d8fb5bb88362 patch 8.2.3326: Vim9: no error passing an empty list of the wrong type
Bram Moolenaar <Bram@vim.org>
parents: 25561
diff changeset
4034 lines[2] = 'var l: list<any> = [11]'
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
4035 v9.CheckScriptFailure(lines, 'E1013: Argument 1: type mismatch, expected list<dict<any>> but got list<number>', 2)
25579
d8fb5bb88362 patch 8.2.3326: Vim9: no error passing an empty list of the wrong type
Bram Moolenaar <Bram@vim.org>
parents: 25561
diff changeset
4036 enddef
d8fb5bb88362 patch 8.2.3326: Vim9: no error passing an empty list of the wrong type
Bram Moolenaar <Bram@vim.org>
parents: 25561
diff changeset
4037
24404
a2a7d2d6e724 patch 8.2.2742: Vim9: when compiling a function fails it is cleared
Bram Moolenaar <Bram@vim.org>
parents: 24402
diff changeset
4038 def Test_compile_error()
a2a7d2d6e724 patch 8.2.2742: Vim9: when compiling a function fails it is cleared
Bram Moolenaar <Bram@vim.org>
parents: 24402
diff changeset
4039 var lines =<< trim END
a2a7d2d6e724 patch 8.2.2742: Vim9: when compiling a function fails it is cleared
Bram Moolenaar <Bram@vim.org>
parents: 24402
diff changeset
4040 def g:Broken()
a2a7d2d6e724 patch 8.2.2742: Vim9: when compiling a function fails it is cleared
Bram Moolenaar <Bram@vim.org>
parents: 24402
diff changeset
4041 echo 'a' + {}
a2a7d2d6e724 patch 8.2.2742: Vim9: when compiling a function fails it is cleared
Bram Moolenaar <Bram@vim.org>
parents: 24402
diff changeset
4042 enddef
a2a7d2d6e724 patch 8.2.2742: Vim9: when compiling a function fails it is cleared
Bram Moolenaar <Bram@vim.org>
parents: 24402
diff changeset
4043 call g:Broken()
a2a7d2d6e724 patch 8.2.2742: Vim9: when compiling a function fails it is cleared
Bram Moolenaar <Bram@vim.org>
parents: 24402
diff changeset
4044 END
a2a7d2d6e724 patch 8.2.2742: Vim9: when compiling a function fails it is cleared
Bram Moolenaar <Bram@vim.org>
parents: 24402
diff changeset
4045 # First call: compilation error
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
4046 v9.CheckScriptFailure(lines, 'E1051: Wrong argument type for +')
24404
a2a7d2d6e724 patch 8.2.2742: Vim9: when compiling a function fails it is cleared
Bram Moolenaar <Bram@vim.org>
parents: 24402
diff changeset
4047
a2a7d2d6e724 patch 8.2.2742: Vim9: when compiling a function fails it is cleared
Bram Moolenaar <Bram@vim.org>
parents: 24402
diff changeset
4048 # Second call won't try compiling again
a2a7d2d6e724 patch 8.2.2742: Vim9: when compiling a function fails it is cleared
Bram Moolenaar <Bram@vim.org>
parents: 24402
diff changeset
4049 assert_fails('call g:Broken()', 'E1091: Function is not compiled: Broken')
24406
a26f0fa12845 patch 8.2.2743: Vim9: function state stuck when compiling with ":silent!"
Bram Moolenaar <Bram@vim.org>
parents: 24404
diff changeset
4050 delfunc g:Broken
a26f0fa12845 patch 8.2.2743: Vim9: function state stuck when compiling with ":silent!"
Bram Moolenaar <Bram@vim.org>
parents: 24404
diff changeset
4051
a26f0fa12845 patch 8.2.2743: Vim9: function state stuck when compiling with ":silent!"
Bram Moolenaar <Bram@vim.org>
parents: 24404
diff changeset
4052 # No error when compiling with :silent!
a26f0fa12845 patch 8.2.2743: Vim9: function state stuck when compiling with ":silent!"
Bram Moolenaar <Bram@vim.org>
parents: 24404
diff changeset
4053 lines =<< trim END
a26f0fa12845 patch 8.2.2743: Vim9: function state stuck when compiling with ":silent!"
Bram Moolenaar <Bram@vim.org>
parents: 24404
diff changeset
4054 def g:Broken()
a26f0fa12845 patch 8.2.2743: Vim9: function state stuck when compiling with ":silent!"
Bram Moolenaar <Bram@vim.org>
parents: 24404
diff changeset
4055 echo 'a' + []
a26f0fa12845 patch 8.2.2743: Vim9: function state stuck when compiling with ":silent!"
Bram Moolenaar <Bram@vim.org>
parents: 24404
diff changeset
4056 enddef
a26f0fa12845 patch 8.2.2743: Vim9: function state stuck when compiling with ":silent!"
Bram Moolenaar <Bram@vim.org>
parents: 24404
diff changeset
4057 silent! defcompile
a26f0fa12845 patch 8.2.2743: Vim9: function state stuck when compiling with ":silent!"
Bram Moolenaar <Bram@vim.org>
parents: 24404
diff changeset
4058 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
4059 v9.CheckScriptSuccess(lines)
24406
a26f0fa12845 patch 8.2.2743: Vim9: function state stuck when compiling with ":silent!"
Bram Moolenaar <Bram@vim.org>
parents: 24404
diff changeset
4060
a26f0fa12845 patch 8.2.2743: Vim9: function state stuck when compiling with ":silent!"
Bram Moolenaar <Bram@vim.org>
parents: 24404
diff changeset
4061 # Calling the function won't try compiling again
a26f0fa12845 patch 8.2.2743: Vim9: function state stuck when compiling with ":silent!"
Bram Moolenaar <Bram@vim.org>
parents: 24404
diff changeset
4062 assert_fails('call g:Broken()', 'E1091: Function is not compiled: Broken')
a26f0fa12845 patch 8.2.2743: Vim9: function state stuck when compiling with ":silent!"
Bram Moolenaar <Bram@vim.org>
parents: 24404
diff changeset
4063 delfunc g:Broken
24404
a2a7d2d6e724 patch 8.2.2742: Vim9: when compiling a function fails it is cleared
Bram Moolenaar <Bram@vim.org>
parents: 24402
diff changeset
4064 enddef
a2a7d2d6e724 patch 8.2.2742: Vim9: when compiling a function fails it is cleared
Bram Moolenaar <Bram@vim.org>
parents: 24402
diff changeset
4065
24408
96e0b898d5b4 patch 8.2.2744: Vim9: no way to explicitly ignore an argument
Bram Moolenaar <Bram@vim.org>
parents: 24406
diff changeset
4066 def Test_ignored_argument()
96e0b898d5b4 patch 8.2.2744: Vim9: no way to explicitly ignore an argument
Bram Moolenaar <Bram@vim.org>
parents: 24406
diff changeset
4067 var lines =<< trim END
96e0b898d5b4 patch 8.2.2744: Vim9: no way to explicitly ignore an argument
Bram Moolenaar <Bram@vim.org>
parents: 24406
diff changeset
4068 vim9script
96e0b898d5b4 patch 8.2.2744: Vim9: no way to explicitly ignore an argument
Bram Moolenaar <Bram@vim.org>
parents: 24406
diff changeset
4069 def Ignore(_, _): string
96e0b898d5b4 patch 8.2.2744: Vim9: no way to explicitly ignore an argument
Bram Moolenaar <Bram@vim.org>
parents: 24406
diff changeset
4070 return 'yes'
96e0b898d5b4 patch 8.2.2744: Vim9: no way to explicitly ignore an argument
Bram Moolenaar <Bram@vim.org>
parents: 24406
diff changeset
4071 enddef
96e0b898d5b4 patch 8.2.2744: Vim9: no way to explicitly ignore an argument
Bram Moolenaar <Bram@vim.org>
parents: 24406
diff changeset
4072 assert_equal('yes', Ignore(1, 2))
96e0b898d5b4 patch 8.2.2744: Vim9: no way to explicitly ignore an argument
Bram Moolenaar <Bram@vim.org>
parents: 24406
diff changeset
4073
96e0b898d5b4 patch 8.2.2744: Vim9: no way to explicitly ignore an argument
Bram Moolenaar <Bram@vim.org>
parents: 24406
diff changeset
4074 func Ok(_)
96e0b898d5b4 patch 8.2.2744: Vim9: no way to explicitly ignore an argument
Bram Moolenaar <Bram@vim.org>
parents: 24406
diff changeset
4075 return a:_
96e0b898d5b4 patch 8.2.2744: Vim9: no way to explicitly ignore an argument
Bram Moolenaar <Bram@vim.org>
parents: 24406
diff changeset
4076 endfunc
96e0b898d5b4 patch 8.2.2744: Vim9: no way to explicitly ignore an argument
Bram Moolenaar <Bram@vim.org>
parents: 24406
diff changeset
4077 assert_equal('ok', Ok('ok'))
96e0b898d5b4 patch 8.2.2744: Vim9: no way to explicitly ignore an argument
Bram Moolenaar <Bram@vim.org>
parents: 24406
diff changeset
4078
96e0b898d5b4 patch 8.2.2744: Vim9: no way to explicitly ignore an argument
Bram Moolenaar <Bram@vim.org>
parents: 24406
diff changeset
4079 func Oktoo()
96e0b898d5b4 patch 8.2.2744: Vim9: no way to explicitly ignore an argument
Bram Moolenaar <Bram@vim.org>
parents: 24406
diff changeset
4080 let _ = 'too'
96e0b898d5b4 patch 8.2.2744: Vim9: no way to explicitly ignore an argument
Bram Moolenaar <Bram@vim.org>
parents: 24406
diff changeset
4081 return _
96e0b898d5b4 patch 8.2.2744: Vim9: no way to explicitly ignore an argument
Bram Moolenaar <Bram@vim.org>
parents: 24406
diff changeset
4082 endfunc
96e0b898d5b4 patch 8.2.2744: Vim9: no way to explicitly ignore an argument
Bram Moolenaar <Bram@vim.org>
parents: 24406
diff changeset
4083 assert_equal('too', Oktoo())
24420
e0fa539a9b34 patch 8.2.2750: Vim9: error for using underscore in nested function
Bram Moolenaar <Bram@vim.org>
parents: 24414
diff changeset
4084
e0fa539a9b34 patch 8.2.2750: Vim9: error for using underscore in nested function
Bram Moolenaar <Bram@vim.org>
parents: 24414
diff changeset
4085 assert_equal([[1], [2], [3]], range(3)->mapnew((_, v) => [v]->map((_, w) => w + 1)))
24408
96e0b898d5b4 patch 8.2.2744: Vim9: no way to explicitly ignore an argument
Bram Moolenaar <Bram@vim.org>
parents: 24406
diff changeset
4086 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
4087 v9.CheckScriptSuccess(lines)
24408
96e0b898d5b4 patch 8.2.2744: Vim9: no way to explicitly ignore an argument
Bram Moolenaar <Bram@vim.org>
parents: 24406
diff changeset
4088
96e0b898d5b4 patch 8.2.2744: Vim9: no way to explicitly ignore an argument
Bram Moolenaar <Bram@vim.org>
parents: 24406
diff changeset
4089 lines =<< trim END
96e0b898d5b4 patch 8.2.2744: Vim9: no way to explicitly ignore an argument
Bram Moolenaar <Bram@vim.org>
parents: 24406
diff changeset
4090 def Ignore(_: string): string
96e0b898d5b4 patch 8.2.2744: Vim9: no way to explicitly ignore an argument
Bram Moolenaar <Bram@vim.org>
parents: 24406
diff changeset
4091 return _
96e0b898d5b4 patch 8.2.2744: Vim9: no way to explicitly ignore an argument
Bram Moolenaar <Bram@vim.org>
parents: 24406
diff changeset
4092 enddef
96e0b898d5b4 patch 8.2.2744: Vim9: no way to explicitly ignore an argument
Bram Moolenaar <Bram@vim.org>
parents: 24406
diff changeset
4093 defcompile
96e0b898d5b4 patch 8.2.2744: Vim9: no way to explicitly ignore an argument
Bram Moolenaar <Bram@vim.org>
parents: 24406
diff changeset
4094 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
4095 v9.CheckScriptFailure(lines, 'E1181:', 1)
24408
96e0b898d5b4 patch 8.2.2744: Vim9: no way to explicitly ignore an argument
Bram Moolenaar <Bram@vim.org>
parents: 24406
diff changeset
4096
96e0b898d5b4 patch 8.2.2744: Vim9: no way to explicitly ignore an argument
Bram Moolenaar <Bram@vim.org>
parents: 24406
diff changeset
4097 lines =<< trim END
96e0b898d5b4 patch 8.2.2744: Vim9: no way to explicitly ignore an argument
Bram Moolenaar <Bram@vim.org>
parents: 24406
diff changeset
4098 var _ = 1
96e0b898d5b4 patch 8.2.2744: Vim9: no way to explicitly ignore an argument
Bram Moolenaar <Bram@vim.org>
parents: 24406
diff changeset
4099 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
4100 v9.CheckDefAndScriptFailure(lines, 'E1181:', 1)
24695
13efbfc53054 patch 8.2.2886: various pieces of code not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 24685
diff changeset
4101
13efbfc53054 patch 8.2.2886: various pieces of code not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 24685
diff changeset
4102 lines =<< trim END
13efbfc53054 patch 8.2.2886: various pieces of code not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 24685
diff changeset
4103 var x = _
13efbfc53054 patch 8.2.2886: various pieces of code not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 24685
diff changeset
4104 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
4105 v9.CheckDefAndScriptFailure(lines, 'E1181:', 1)
24408
96e0b898d5b4 patch 8.2.2744: Vim9: no way to explicitly ignore an argument
Bram Moolenaar <Bram@vim.org>
parents: 24406
diff changeset
4106 enddef
96e0b898d5b4 patch 8.2.2744: Vim9: no way to explicitly ignore an argument
Bram Moolenaar <Bram@vim.org>
parents: 24406
diff changeset
4107
24414
f539864ba851 patch 8.2.2747: Vim9: not always an error for too many function arguments
Bram Moolenaar <Bram@vim.org>
parents: 24408
diff changeset
4108 def Test_too_many_arguments()
f539864ba851 patch 8.2.2747: Vim9: not always an error for too many function arguments
Bram Moolenaar <Bram@vim.org>
parents: 24408
diff changeset
4109 var lines =<< trim END
f539864ba851 patch 8.2.2747: Vim9: not always an error for too many function arguments
Bram Moolenaar <Bram@vim.org>
parents: 24408
diff changeset
4110 echo [0, 1, 2]->map(() => 123)
f539864ba851 patch 8.2.2747: Vim9: not always an error for too many function arguments
Bram Moolenaar <Bram@vim.org>
parents: 24408
diff changeset
4111 END
27798
324d394e314e patch 8.2.4425: map() function does not check function arguments
Bram Moolenaar <Bram@vim.org>
parents: 27762
diff changeset
4112 v9.CheckDefAndScriptFailure(lines, ['E176:', 'E1106: 2 arguments too many'], 1)
24414
f539864ba851 patch 8.2.2747: Vim9: not always an error for too many function arguments
Bram Moolenaar <Bram@vim.org>
parents: 24408
diff changeset
4113
f539864ba851 patch 8.2.2747: Vim9: not always an error for too many function arguments
Bram Moolenaar <Bram@vim.org>
parents: 24408
diff changeset
4114 lines =<< trim END
f539864ba851 patch 8.2.2747: Vim9: not always an error for too many function arguments
Bram Moolenaar <Bram@vim.org>
parents: 24408
diff changeset
4115 echo [0, 1, 2]->map((_) => 123)
f539864ba851 patch 8.2.2747: Vim9: not always an error for too many function arguments
Bram Moolenaar <Bram@vim.org>
parents: 24408
diff changeset
4116 END
27798
324d394e314e patch 8.2.4425: map() function does not check function arguments
Bram Moolenaar <Bram@vim.org>
parents: 27762
diff changeset
4117 v9.CheckDefAndScriptFailure(lines, ['E176', 'E1106: One argument too many'], 1)
29008
49d8b54802f3 patch 8.2.5026: Vim9: a few lines not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 28952
diff changeset
4118
49d8b54802f3 patch 8.2.5026: Vim9: a few lines not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 28952
diff changeset
4119 lines =<< trim END
49d8b54802f3 patch 8.2.5026: Vim9: a few lines not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 28952
diff changeset
4120 vim9script
49d8b54802f3 patch 8.2.5026: Vim9: a few lines not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 28952
diff changeset
4121 def OneArgument(arg: string)
49d8b54802f3 patch 8.2.5026: Vim9: a few lines not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 28952
diff changeset
4122 echo arg
49d8b54802f3 patch 8.2.5026: Vim9: a few lines not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 28952
diff changeset
4123 enddef
49d8b54802f3 patch 8.2.5026: Vim9: a few lines not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 28952
diff changeset
4124 var Ref = OneArgument
49d8b54802f3 patch 8.2.5026: Vim9: a few lines not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 28952
diff changeset
4125 Ref('a', 'b')
49d8b54802f3 patch 8.2.5026: Vim9: a few lines not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 28952
diff changeset
4126 END
49d8b54802f3 patch 8.2.5026: Vim9: a few lines not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 28952
diff changeset
4127 v9.CheckScriptFailure(lines, 'E118:')
49d8b54802f3 patch 8.2.5026: Vim9: a few lines not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 28952
diff changeset
4128 enddef
49d8b54802f3 patch 8.2.5026: Vim9: a few lines not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 28952
diff changeset
4129
49d8b54802f3 patch 8.2.5026: Vim9: a few lines not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 28952
diff changeset
4130 def Test_funcref_with_base()
49d8b54802f3 patch 8.2.5026: Vim9: a few lines not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 28952
diff changeset
4131 var lines =<< trim END
49d8b54802f3 patch 8.2.5026: Vim9: a few lines not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 28952
diff changeset
4132 vim9script
49d8b54802f3 patch 8.2.5026: Vim9: a few lines not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 28952
diff changeset
4133 def TwoArguments(str: string, nr: number)
49d8b54802f3 patch 8.2.5026: Vim9: a few lines not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 28952
diff changeset
4134 echo str nr
49d8b54802f3 patch 8.2.5026: Vim9: a few lines not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 28952
diff changeset
4135 enddef
49d8b54802f3 patch 8.2.5026: Vim9: a few lines not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 28952
diff changeset
4136 var Ref = TwoArguments
49d8b54802f3 patch 8.2.5026: Vim9: a few lines not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 28952
diff changeset
4137 Ref('a', 12)
49d8b54802f3 patch 8.2.5026: Vim9: a few lines not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 28952
diff changeset
4138 'b'->Ref(34)
49d8b54802f3 patch 8.2.5026: Vim9: a few lines not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 28952
diff changeset
4139 END
49d8b54802f3 patch 8.2.5026: Vim9: a few lines not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 28952
diff changeset
4140 v9.CheckScriptSuccess(lines)
49d8b54802f3 patch 8.2.5026: Vim9: a few lines not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 28952
diff changeset
4141
49d8b54802f3 patch 8.2.5026: Vim9: a few lines not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 28952
diff changeset
4142 lines =<< trim END
49d8b54802f3 patch 8.2.5026: Vim9: a few lines not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 28952
diff changeset
4143 vim9script
49d8b54802f3 patch 8.2.5026: Vim9: a few lines not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 28952
diff changeset
4144 def TwoArguments(str: string, nr: number)
49d8b54802f3 patch 8.2.5026: Vim9: a few lines not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 28952
diff changeset
4145 echo str nr
49d8b54802f3 patch 8.2.5026: Vim9: a few lines not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 28952
diff changeset
4146 enddef
49d8b54802f3 patch 8.2.5026: Vim9: a few lines not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 28952
diff changeset
4147 var Ref = TwoArguments
49d8b54802f3 patch 8.2.5026: Vim9: a few lines not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 28952
diff changeset
4148 'a'->Ref('b')
49d8b54802f3 patch 8.2.5026: Vim9: a few lines not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 28952
diff changeset
4149 END
49d8b54802f3 patch 8.2.5026: Vim9: a few lines not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 28952
diff changeset
4150 v9.CheckScriptFailure(lines, 'E1013: Argument 2: type mismatch, expected number but got string', 6)
49d8b54802f3 patch 8.2.5026: Vim9: a few lines not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 28952
diff changeset
4151
49d8b54802f3 patch 8.2.5026: Vim9: a few lines not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 28952
diff changeset
4152 lines =<< trim END
49d8b54802f3 patch 8.2.5026: Vim9: a few lines not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 28952
diff changeset
4153 vim9script
49d8b54802f3 patch 8.2.5026: Vim9: a few lines not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 28952
diff changeset
4154 def TwoArguments(str: string, nr: number)
49d8b54802f3 patch 8.2.5026: Vim9: a few lines not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 28952
diff changeset
4155 echo str nr
49d8b54802f3 patch 8.2.5026: Vim9: a few lines not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 28952
diff changeset
4156 enddef
49d8b54802f3 patch 8.2.5026: Vim9: a few lines not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 28952
diff changeset
4157 var Ref = TwoArguments
49d8b54802f3 patch 8.2.5026: Vim9: a few lines not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 28952
diff changeset
4158 123->Ref(456)
49d8b54802f3 patch 8.2.5026: Vim9: a few lines not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 28952
diff changeset
4159 END
49d8b54802f3 patch 8.2.5026: Vim9: a few lines not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 28952
diff changeset
4160 v9.CheckScriptFailure(lines, 'E1013: Argument 1: type mismatch, expected string but got number')
49d8b54802f3 patch 8.2.5026: Vim9: a few lines not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 28952
diff changeset
4161
49d8b54802f3 patch 8.2.5026: Vim9: a few lines not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 28952
diff changeset
4162 lines =<< trim END
49d8b54802f3 patch 8.2.5026: Vim9: a few lines not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 28952
diff changeset
4163 vim9script
49d8b54802f3 patch 8.2.5026: Vim9: a few lines not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 28952
diff changeset
4164 def TwoArguments(nr: number, str: string)
49d8b54802f3 patch 8.2.5026: Vim9: a few lines not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 28952
diff changeset
4165 echo str nr
49d8b54802f3 patch 8.2.5026: Vim9: a few lines not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 28952
diff changeset
4166 enddef
49d8b54802f3 patch 8.2.5026: Vim9: a few lines not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 28952
diff changeset
4167 var Ref = TwoArguments
49d8b54802f3 patch 8.2.5026: Vim9: a few lines not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 28952
diff changeset
4168 123->Ref('b')
49d8b54802f3 patch 8.2.5026: Vim9: a few lines not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 28952
diff changeset
4169 def AndNowCompiled()
49d8b54802f3 patch 8.2.5026: Vim9: a few lines not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 28952
diff changeset
4170 456->Ref('x')
49d8b54802f3 patch 8.2.5026: Vim9: a few lines not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 28952
diff changeset
4171 enddef
49d8b54802f3 patch 8.2.5026: Vim9: a few lines not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 28952
diff changeset
4172 AndNowCompiled()
49d8b54802f3 patch 8.2.5026: Vim9: a few lines not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 28952
diff changeset
4173 END
49d8b54802f3 patch 8.2.5026: Vim9: a few lines not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 28952
diff changeset
4174 v9.CheckScriptSuccess(lines)
24414
f539864ba851 patch 8.2.2747: Vim9: not always an error for too many function arguments
Bram Moolenaar <Bram@vim.org>
parents: 24408
diff changeset
4175 enddef
23289
ac701146c708 patch 8.2.2190: Vim9: crash when compiled with EXITFREE
Bram Moolenaar <Bram@vim.org>
parents: 23285
diff changeset
4176
24525
887121a6d7cf patch 8.2.2802: Vim9: illegal memory access
Bram Moolenaar <Bram@vim.org>
parents: 24436
diff changeset
4177 def Test_closing_brace_at_start_of_line()
887121a6d7cf patch 8.2.2802: Vim9: illegal memory access
Bram Moolenaar <Bram@vim.org>
parents: 24436
diff changeset
4178 var lines =<< trim END
887121a6d7cf patch 8.2.2802: Vim9: illegal memory access
Bram Moolenaar <Bram@vim.org>
parents: 24436
diff changeset
4179 def Func()
887121a6d7cf patch 8.2.2802: Vim9: illegal memory access
Bram Moolenaar <Bram@vim.org>
parents: 24436
diff changeset
4180 enddef
887121a6d7cf patch 8.2.2802: Vim9: illegal memory access
Bram Moolenaar <Bram@vim.org>
parents: 24436
diff changeset
4181 Func(
887121a6d7cf patch 8.2.2802: Vim9: illegal memory access
Bram Moolenaar <Bram@vim.org>
parents: 24436
diff changeset
4182 )
887121a6d7cf patch 8.2.2802: Vim9: illegal memory access
Bram Moolenaar <Bram@vim.org>
parents: 24436
diff changeset
4183 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
4184 v9.CheckDefAndScriptSuccess(lines)
24525
887121a6d7cf patch 8.2.2802: Vim9: illegal memory access
Bram Moolenaar <Bram@vim.org>
parents: 24436
diff changeset
4185 enddef
887121a6d7cf patch 8.2.2802: Vim9: illegal memory access
Bram Moolenaar <Bram@vim.org>
parents: 24436
diff changeset
4186
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
4187 func s:CreateMydict()
25630
c26eb08a0df2 patch 8.2.3351: Vim9: using a function by name may delete it
Bram Moolenaar <Bram@vim.org>
parents: 25609
diff changeset
4188 let g:mydict = {}
c26eb08a0df2 patch 8.2.3351: Vim9: using a function by name may delete it
Bram Moolenaar <Bram@vim.org>
parents: 25609
diff changeset
4189 func g:mydict.afunc()
c26eb08a0df2 patch 8.2.3351: Vim9: using a function by name may delete it
Bram Moolenaar <Bram@vim.org>
parents: 25609
diff changeset
4190 let g:result = self.key
c26eb08a0df2 patch 8.2.3351: Vim9: using a function by name may delete it
Bram Moolenaar <Bram@vim.org>
parents: 25609
diff changeset
4191 endfunc
c26eb08a0df2 patch 8.2.3351: Vim9: using a function by name may delete it
Bram Moolenaar <Bram@vim.org>
parents: 25609
diff changeset
4192 endfunc
c26eb08a0df2 patch 8.2.3351: Vim9: using a function by name may delete it
Bram Moolenaar <Bram@vim.org>
parents: 25609
diff changeset
4193
c26eb08a0df2 patch 8.2.3351: Vim9: using a function by name may delete it
Bram Moolenaar <Bram@vim.org>
parents: 25609
diff changeset
4194 def Test_numbered_function_reference()
c26eb08a0df2 patch 8.2.3351: Vim9: using a function by name may delete it
Bram Moolenaar <Bram@vim.org>
parents: 25609
diff changeset
4195 CreateMydict()
c26eb08a0df2 patch 8.2.3351: Vim9: using a function by name may delete it
Bram Moolenaar <Bram@vim.org>
parents: 25609
diff changeset
4196 var output = execute('legacy func g:mydict.afunc')
c26eb08a0df2 patch 8.2.3351: Vim9: using a function by name may delete it
Bram Moolenaar <Bram@vim.org>
parents: 25609
diff changeset
4197 var funcName = 'g:' .. substitute(output, '.*function \(\d\+\).*', '\1', '')
c26eb08a0df2 patch 8.2.3351: Vim9: using a function by name may delete it
Bram Moolenaar <Bram@vim.org>
parents: 25609
diff changeset
4198 execute 'function(' .. funcName .. ', [], {key: 42})()'
c26eb08a0df2 patch 8.2.3351: Vim9: using a function by name may delete it
Bram Moolenaar <Bram@vim.org>
parents: 25609
diff changeset
4199 # check that the function still exists
c26eb08a0df2 patch 8.2.3351: Vim9: using a function by name may delete it
Bram Moolenaar <Bram@vim.org>
parents: 25609
diff changeset
4200 assert_equal(output, execute('legacy func g:mydict.afunc'))
c26eb08a0df2 patch 8.2.3351: Vim9: using a function by name may delete it
Bram Moolenaar <Bram@vim.org>
parents: 25609
diff changeset
4201 unlet g:mydict
c26eb08a0df2 patch 8.2.3351: Vim9: using a function by name may delete it
Bram Moolenaar <Bram@vim.org>
parents: 25609
diff changeset
4202 enddef
c26eb08a0df2 patch 8.2.3351: Vim9: using a function by name may delete it
Bram Moolenaar <Bram@vim.org>
parents: 25609
diff changeset
4203
26960
043a15b37bf1 patch 8.2.4009: reading one byte beyond the end of the line
Bram Moolenaar <Bram@vim.org>
parents: 26925
diff changeset
4204 def Test_go_beyond_end_of_cmd()
043a15b37bf1 patch 8.2.4009: reading one byte beyond the end of the line
Bram Moolenaar <Bram@vim.org>
parents: 26925
diff changeset
4205 # this was reading the byte after the end of the line
043a15b37bf1 patch 8.2.4009: reading one byte beyond the end of the line
Bram Moolenaar <Bram@vim.org>
parents: 26925
diff changeset
4206 var lines =<< trim END
043a15b37bf1 patch 8.2.4009: reading one byte beyond the end of the line
Bram Moolenaar <Bram@vim.org>
parents: 26925
diff changeset
4207 def F()
043a15b37bf1 patch 8.2.4009: reading one byte beyond the end of the line
Bram Moolenaar <Bram@vim.org>
parents: 26925
diff changeset
4208 cal
043a15b37bf1 patch 8.2.4009: reading one byte beyond the end of the line
Bram Moolenaar <Bram@vim.org>
parents: 26925
diff changeset
4209 enddef
043a15b37bf1 patch 8.2.4009: reading one byte beyond the end of the line
Bram Moolenaar <Bram@vim.org>
parents: 26925
diff changeset
4210 defcompile
043a15b37bf1 patch 8.2.4009: reading one byte beyond the end of the line
Bram Moolenaar <Bram@vim.org>
parents: 26925
diff changeset
4211 END
27457
4c16acb2525f patch 8.2.4257: Vim9: finding global function without g: prefix inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 27219
diff changeset
4212 v9.CheckScriptFailure(lines, 'E476:')
26960
043a15b37bf1 patch 8.2.4009: reading one byte beyond the end of the line
Bram Moolenaar <Bram@vim.org>
parents: 26925
diff changeset
4213 enddef
043a15b37bf1 patch 8.2.4009: reading one byte beyond the end of the line
Bram Moolenaar <Bram@vim.org>
parents: 26925
diff changeset
4214
28382
f24d4826e6bf patch 8.2.4716: memory allocation failure not tested when defining a function
Bram Moolenaar <Bram@vim.org>
parents: 28173
diff changeset
4215 " Test for memory allocation failure when defining a new lambda
f24d4826e6bf patch 8.2.4716: memory allocation failure not tested when defining a function
Bram Moolenaar <Bram@vim.org>
parents: 28173
diff changeset
4216 func Test_lambda_allocation_failure()
f24d4826e6bf patch 8.2.4716: memory allocation failure not tested when defining a function
Bram Moolenaar <Bram@vim.org>
parents: 28173
diff changeset
4217 new
f24d4826e6bf patch 8.2.4716: memory allocation failure not tested when defining a function
Bram Moolenaar <Bram@vim.org>
parents: 28173
diff changeset
4218 let lines =<< trim END
f24d4826e6bf patch 8.2.4716: memory allocation failure not tested when defining a function
Bram Moolenaar <Bram@vim.org>
parents: 28173
diff changeset
4219 vim9script
f24d4826e6bf patch 8.2.4716: memory allocation failure not tested when defining a function
Bram Moolenaar <Bram@vim.org>
parents: 28173
diff changeset
4220 g:Xlambda = (x): number => {
f24d4826e6bf patch 8.2.4716: memory allocation failure not tested when defining a function
Bram Moolenaar <Bram@vim.org>
parents: 28173
diff changeset
4221 return x + 1
f24d4826e6bf patch 8.2.4716: memory allocation failure not tested when defining a function
Bram Moolenaar <Bram@vim.org>
parents: 28173
diff changeset
4222 }
f24d4826e6bf patch 8.2.4716: memory allocation failure not tested when defining a function
Bram Moolenaar <Bram@vim.org>
parents: 28173
diff changeset
4223 END
f24d4826e6bf patch 8.2.4716: memory allocation failure not tested when defining a function
Bram Moolenaar <Bram@vim.org>
parents: 28173
diff changeset
4224 call setline(1, lines)
f24d4826e6bf patch 8.2.4716: memory allocation failure not tested when defining a function
Bram Moolenaar <Bram@vim.org>
parents: 28173
diff changeset
4225 call test_alloc_fail(GetAllocId('get_func'), 0, 0)
f24d4826e6bf patch 8.2.4716: memory allocation failure not tested when defining a function
Bram Moolenaar <Bram@vim.org>
parents: 28173
diff changeset
4226 call assert_fails('source', 'E342:')
f24d4826e6bf patch 8.2.4716: memory allocation failure not tested when defining a function
Bram Moolenaar <Bram@vim.org>
parents: 28173
diff changeset
4227 call assert_false(exists('g:Xlambda'))
f24d4826e6bf patch 8.2.4716: memory allocation failure not tested when defining a function
Bram Moolenaar <Bram@vim.org>
parents: 28173
diff changeset
4228 bw!
f24d4826e6bf patch 8.2.4716: memory allocation failure not tested when defining a function
Bram Moolenaar <Bram@vim.org>
parents: 28173
diff changeset
4229 endfunc
f24d4826e6bf patch 8.2.4716: memory allocation failure not tested when defining a function
Bram Moolenaar <Bram@vim.org>
parents: 28173
diff changeset
4230
28952
ba083decce5d patch 8.2.4998: Vim9: crash when using multiple funcref()
Bram Moolenaar <Bram@vim.org>
parents: 28850
diff changeset
4231 def Test_multiple_funcref()
ba083decce5d patch 8.2.4998: Vim9: crash when using multiple funcref()
Bram Moolenaar <Bram@vim.org>
parents: 28850
diff changeset
4232 # This was using a NULL pointer
ba083decce5d patch 8.2.4998: Vim9: crash when using multiple funcref()
Bram Moolenaar <Bram@vim.org>
parents: 28850
diff changeset
4233 var lines =<< trim END
ba083decce5d patch 8.2.4998: Vim9: crash when using multiple funcref()
Bram Moolenaar <Bram@vim.org>
parents: 28850
diff changeset
4234 vim9script
ba083decce5d patch 8.2.4998: Vim9: crash when using multiple funcref()
Bram Moolenaar <Bram@vim.org>
parents: 28850
diff changeset
4235 def A(F: func, ...args: list<any>): func
ba083decce5d patch 8.2.4998: Vim9: crash when using multiple funcref()
Bram Moolenaar <Bram@vim.org>
parents: 28850
diff changeset
4236 return funcref(F, args)
ba083decce5d patch 8.2.4998: Vim9: crash when using multiple funcref()
Bram Moolenaar <Bram@vim.org>
parents: 28850
diff changeset
4237 enddef
ba083decce5d patch 8.2.4998: Vim9: crash when using multiple funcref()
Bram Moolenaar <Bram@vim.org>
parents: 28850
diff changeset
4238
ba083decce5d patch 8.2.4998: Vim9: crash when using multiple funcref()
Bram Moolenaar <Bram@vim.org>
parents: 28850
diff changeset
4239 def B(F: func): func
ba083decce5d patch 8.2.4998: Vim9: crash when using multiple funcref()
Bram Moolenaar <Bram@vim.org>
parents: 28850
diff changeset
4240 return funcref(A, [F])
ba083decce5d patch 8.2.4998: Vim9: crash when using multiple funcref()
Bram Moolenaar <Bram@vim.org>
parents: 28850
diff changeset
4241 enddef
ba083decce5d patch 8.2.4998: Vim9: crash when using multiple funcref()
Bram Moolenaar <Bram@vim.org>
parents: 28850
diff changeset
4242
ba083decce5d patch 8.2.4998: Vim9: crash when using multiple funcref()
Bram Moolenaar <Bram@vim.org>
parents: 28850
diff changeset
4243 def Test(n: number)
ba083decce5d patch 8.2.4998: Vim9: crash when using multiple funcref()
Bram Moolenaar <Bram@vim.org>
parents: 28850
diff changeset
4244 enddef
ba083decce5d patch 8.2.4998: Vim9: crash when using multiple funcref()
Bram Moolenaar <Bram@vim.org>
parents: 28850
diff changeset
4245
ba083decce5d patch 8.2.4998: Vim9: crash when using multiple funcref()
Bram Moolenaar <Bram@vim.org>
parents: 28850
diff changeset
4246 const X = B(Test)
ba083decce5d patch 8.2.4998: Vim9: crash when using multiple funcref()
Bram Moolenaar <Bram@vim.org>
parents: 28850
diff changeset
4247 X(1)
ba083decce5d patch 8.2.4998: Vim9: crash when using multiple funcref()
Bram Moolenaar <Bram@vim.org>
parents: 28850
diff changeset
4248 END
ba083decce5d patch 8.2.4998: Vim9: crash when using multiple funcref()
Bram Moolenaar <Bram@vim.org>
parents: 28850
diff changeset
4249 v9.CheckScriptSuccess(lines)
ba083decce5d patch 8.2.4998: Vim9: crash when using multiple funcref()
Bram Moolenaar <Bram@vim.org>
parents: 28850
diff changeset
4250
ba083decce5d patch 8.2.4998: Vim9: crash when using multiple funcref()
Bram Moolenaar <Bram@vim.org>
parents: 28850
diff changeset
4251 # slightly different case
ba083decce5d patch 8.2.4998: Vim9: crash when using multiple funcref()
Bram Moolenaar <Bram@vim.org>
parents: 28850
diff changeset
4252 lines =<< trim END
ba083decce5d patch 8.2.4998: Vim9: crash when using multiple funcref()
Bram Moolenaar <Bram@vim.org>
parents: 28850
diff changeset
4253 vim9script
ba083decce5d patch 8.2.4998: Vim9: crash when using multiple funcref()
Bram Moolenaar <Bram@vim.org>
parents: 28850
diff changeset
4254
ba083decce5d patch 8.2.4998: Vim9: crash when using multiple funcref()
Bram Moolenaar <Bram@vim.org>
parents: 28850
diff changeset
4255 def A(F: func, ...args: list<any>): any
ba083decce5d patch 8.2.4998: Vim9: crash when using multiple funcref()
Bram Moolenaar <Bram@vim.org>
parents: 28850
diff changeset
4256 return call(F, args)
ba083decce5d patch 8.2.4998: Vim9: crash when using multiple funcref()
Bram Moolenaar <Bram@vim.org>
parents: 28850
diff changeset
4257 enddef
ba083decce5d patch 8.2.4998: Vim9: crash when using multiple funcref()
Bram Moolenaar <Bram@vim.org>
parents: 28850
diff changeset
4258
ba083decce5d patch 8.2.4998: Vim9: crash when using multiple funcref()
Bram Moolenaar <Bram@vim.org>
parents: 28850
diff changeset
4259 def B(F: func): func
ba083decce5d patch 8.2.4998: Vim9: crash when using multiple funcref()
Bram Moolenaar <Bram@vim.org>
parents: 28850
diff changeset
4260 return funcref(A, [F])
ba083decce5d patch 8.2.4998: Vim9: crash when using multiple funcref()
Bram Moolenaar <Bram@vim.org>
parents: 28850
diff changeset
4261 enddef
ba083decce5d patch 8.2.4998: Vim9: crash when using multiple funcref()
Bram Moolenaar <Bram@vim.org>
parents: 28850
diff changeset
4262
ba083decce5d patch 8.2.4998: Vim9: crash when using multiple funcref()
Bram Moolenaar <Bram@vim.org>
parents: 28850
diff changeset
4263 def Test(n: number)
ba083decce5d patch 8.2.4998: Vim9: crash when using multiple funcref()
Bram Moolenaar <Bram@vim.org>
parents: 28850
diff changeset
4264 enddef
ba083decce5d patch 8.2.4998: Vim9: crash when using multiple funcref()
Bram Moolenaar <Bram@vim.org>
parents: 28850
diff changeset
4265
ba083decce5d patch 8.2.4998: Vim9: crash when using multiple funcref()
Bram Moolenaar <Bram@vim.org>
parents: 28850
diff changeset
4266 const X = B(Test)
ba083decce5d patch 8.2.4998: Vim9: crash when using multiple funcref()
Bram Moolenaar <Bram@vim.org>
parents: 28850
diff changeset
4267 X(1)
ba083decce5d patch 8.2.4998: Vim9: crash when using multiple funcref()
Bram Moolenaar <Bram@vim.org>
parents: 28850
diff changeset
4268 END
ba083decce5d patch 8.2.4998: Vim9: crash when using multiple funcref()
Bram Moolenaar <Bram@vim.org>
parents: 28850
diff changeset
4269 v9.CheckScriptSuccess(lines)
ba083decce5d patch 8.2.4998: Vim9: crash when using multiple funcref()
Bram Moolenaar <Bram@vim.org>
parents: 28850
diff changeset
4270 enddef
ba083decce5d patch 8.2.4998: Vim9: crash when using multiple funcref()
Bram Moolenaar <Bram@vim.org>
parents: 28850
diff changeset
4271
29429
aeba55253de4 patch 9.0.0056: wrong line number reported when :cexpr fails in :def function
Bram Moolenaar <Bram@vim.org>
parents: 29008
diff changeset
4272 def Test_cexpr_errmsg_line_number()
aeba55253de4 patch 9.0.0056: wrong line number reported when :cexpr fails in :def function
Bram Moolenaar <Bram@vim.org>
parents: 29008
diff changeset
4273 var lines =<< trim END
aeba55253de4 patch 9.0.0056: wrong line number reported when :cexpr fails in :def function
Bram Moolenaar <Bram@vim.org>
parents: 29008
diff changeset
4274 vim9script
aeba55253de4 patch 9.0.0056: wrong line number reported when :cexpr fails in :def function
Bram Moolenaar <Bram@vim.org>
parents: 29008
diff changeset
4275 def Func()
aeba55253de4 patch 9.0.0056: wrong line number reported when :cexpr fails in :def function
Bram Moolenaar <Bram@vim.org>
parents: 29008
diff changeset
4276 var qfl = {}
aeba55253de4 patch 9.0.0056: wrong line number reported when :cexpr fails in :def function
Bram Moolenaar <Bram@vim.org>
parents: 29008
diff changeset
4277 cexpr qfl
aeba55253de4 patch 9.0.0056: wrong line number reported when :cexpr fails in :def function
Bram Moolenaar <Bram@vim.org>
parents: 29008
diff changeset
4278 enddef
aeba55253de4 patch 9.0.0056: wrong line number reported when :cexpr fails in :def function
Bram Moolenaar <Bram@vim.org>
parents: 29008
diff changeset
4279 Func()
aeba55253de4 patch 9.0.0056: wrong line number reported when :cexpr fails in :def function
Bram Moolenaar <Bram@vim.org>
parents: 29008
diff changeset
4280 END
aeba55253de4 patch 9.0.0056: wrong line number reported when :cexpr fails in :def function
Bram Moolenaar <Bram@vim.org>
parents: 29008
diff changeset
4281 v9.CheckScriptFailure(lines, 'E777', 2)
aeba55253de4 patch 9.0.0056: wrong line number reported when :cexpr fails in :def function
Bram Moolenaar <Bram@vim.org>
parents: 29008
diff changeset
4282 enddef
aeba55253de4 patch 9.0.0056: wrong line number reported when :cexpr fails in :def function
Bram Moolenaar <Bram@vim.org>
parents: 29008
diff changeset
4283
30065
6cf788ab844c patch 9.0.0370: cleaning up afterwards can make a function messy
Bram Moolenaar <Bram@vim.org>
parents: 29992
diff changeset
4284 def AddDefer(s: string)
6cf788ab844c patch 9.0.0370: cleaning up afterwards can make a function messy
Bram Moolenaar <Bram@vim.org>
parents: 29992
diff changeset
4285 g:deferred->extend([s])
6cf788ab844c patch 9.0.0370: cleaning up afterwards can make a function messy
Bram Moolenaar <Bram@vim.org>
parents: 29992
diff changeset
4286 enddef
6cf788ab844c patch 9.0.0370: cleaning up afterwards can make a function messy
Bram Moolenaar <Bram@vim.org>
parents: 29992
diff changeset
4287
6cf788ab844c patch 9.0.0370: cleaning up afterwards can make a function messy
Bram Moolenaar <Bram@vim.org>
parents: 29992
diff changeset
4288 def DeferTwo()
6cf788ab844c patch 9.0.0370: cleaning up afterwards can make a function messy
Bram Moolenaar <Bram@vim.org>
parents: 29992
diff changeset
4289 g:deferred->extend(['in Two'])
6cf788ab844c patch 9.0.0370: cleaning up afterwards can make a function messy
Bram Moolenaar <Bram@vim.org>
parents: 29992
diff changeset
4290 for n in range(3)
6cf788ab844c patch 9.0.0370: cleaning up afterwards can make a function messy
Bram Moolenaar <Bram@vim.org>
parents: 29992
diff changeset
4291 defer g:AddDefer('two' .. n)
6cf788ab844c patch 9.0.0370: cleaning up afterwards can make a function messy
Bram Moolenaar <Bram@vim.org>
parents: 29992
diff changeset
4292 endfor
6cf788ab844c patch 9.0.0370: cleaning up afterwards can make a function messy
Bram Moolenaar <Bram@vim.org>
parents: 29992
diff changeset
4293 g:deferred->extend(['end Two'])
6cf788ab844c patch 9.0.0370: cleaning up afterwards can make a function messy
Bram Moolenaar <Bram@vim.org>
parents: 29992
diff changeset
4294 enddef
6cf788ab844c patch 9.0.0370: cleaning up afterwards can make a function messy
Bram Moolenaar <Bram@vim.org>
parents: 29992
diff changeset
4295
6cf788ab844c patch 9.0.0370: cleaning up afterwards can make a function messy
Bram Moolenaar <Bram@vim.org>
parents: 29992
diff changeset
4296 def DeferOne()
6cf788ab844c patch 9.0.0370: cleaning up afterwards can make a function messy
Bram Moolenaar <Bram@vim.org>
parents: 29992
diff changeset
4297 g:deferred->extend(['in One'])
6cf788ab844c patch 9.0.0370: cleaning up afterwards can make a function messy
Bram Moolenaar <Bram@vim.org>
parents: 29992
diff changeset
4298 defer g:AddDefer('one')
6cf788ab844c patch 9.0.0370: cleaning up afterwards can make a function messy
Bram Moolenaar <Bram@vim.org>
parents: 29992
diff changeset
4299 g:DeferTwo()
6cf788ab844c patch 9.0.0370: cleaning up afterwards can make a function messy
Bram Moolenaar <Bram@vim.org>
parents: 29992
diff changeset
4300 g:deferred->extend(['end One'])
6cf788ab844c patch 9.0.0370: cleaning up afterwards can make a function messy
Bram Moolenaar <Bram@vim.org>
parents: 29992
diff changeset
4301
6cf788ab844c patch 9.0.0370: cleaning up afterwards can make a function messy
Bram Moolenaar <Bram@vim.org>
parents: 29992
diff changeset
4302 writefile(['text'], 'XdeferFile')
6cf788ab844c patch 9.0.0370: cleaning up afterwards can make a function messy
Bram Moolenaar <Bram@vim.org>
parents: 29992
diff changeset
4303 defer delete('XdeferFile')
6cf788ab844c patch 9.0.0370: cleaning up afterwards can make a function messy
Bram Moolenaar <Bram@vim.org>
parents: 29992
diff changeset
4304 enddef
6cf788ab844c patch 9.0.0370: cleaning up afterwards can make a function messy
Bram Moolenaar <Bram@vim.org>
parents: 29992
diff changeset
4305
6cf788ab844c patch 9.0.0370: cleaning up afterwards can make a function messy
Bram Moolenaar <Bram@vim.org>
parents: 29992
diff changeset
4306 def Test_defer()
6cf788ab844c patch 9.0.0370: cleaning up afterwards can make a function messy
Bram Moolenaar <Bram@vim.org>
parents: 29992
diff changeset
4307 g:deferred = []
6cf788ab844c patch 9.0.0370: cleaning up afterwards can make a function messy
Bram Moolenaar <Bram@vim.org>
parents: 29992
diff changeset
4308 g:DeferOne()
6cf788ab844c patch 9.0.0370: cleaning up afterwards can make a function messy
Bram Moolenaar <Bram@vim.org>
parents: 29992
diff changeset
4309 assert_equal(['in One', 'in Two', 'end Two', 'two2', 'two1', 'two0', 'end One', 'one'], g:deferred)
6cf788ab844c patch 9.0.0370: cleaning up afterwards can make a function messy
Bram Moolenaar <Bram@vim.org>
parents: 29992
diff changeset
4310 unlet g:deferred
6cf788ab844c patch 9.0.0370: cleaning up afterwards can make a function messy
Bram Moolenaar <Bram@vim.org>
parents: 29992
diff changeset
4311 assert_equal('', glob('XdeferFile'))
6cf788ab844c patch 9.0.0370: cleaning up afterwards can make a function messy
Bram Moolenaar <Bram@vim.org>
parents: 29992
diff changeset
4312 enddef
6cf788ab844c patch 9.0.0370: cleaning up afterwards can make a function messy
Bram Moolenaar <Bram@vim.org>
parents: 29992
diff changeset
4313
27738
d754ac2f5ac5 patch 8.2.4395: some code lines not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 27669
diff changeset
4314 " The following messes up syntax highlight, keep near the end.
24826
a8d64f1a223b patch 8.2.2951: Vim9: cannot use heredoc for :python, :lua, etc.
Bram Moolenaar <Bram@vim.org>
parents: 24776
diff changeset
4315 if has('python3')
27738
d754ac2f5ac5 patch 8.2.4395: some code lines not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 27669
diff changeset
4316 def Test_python3_command()
d754ac2f5ac5 patch 8.2.4395: some code lines not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 27669
diff changeset
4317 py3 import vim
27740
2bd27d5ffbef patch 8.2.4396: Python3 test fails
Bram Moolenaar <Bram@vim.org>
parents: 27738
diff changeset
4318 py3 vim.command("g:done = 'yes'")
27738
d754ac2f5ac5 patch 8.2.4395: some code lines not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 27669
diff changeset
4319 assert_equal('yes', g:done)
d754ac2f5ac5 patch 8.2.4395: some code lines not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 27669
diff changeset
4320 unlet g:done
d754ac2f5ac5 patch 8.2.4395: some code lines not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 27669
diff changeset
4321 enddef
d754ac2f5ac5 patch 8.2.4395: some code lines not covered by tests
Bram Moolenaar <Bram@vim.org>
parents: 27669
diff changeset
4322
24826
a8d64f1a223b patch 8.2.2951: Vim9: cannot use heredoc for :python, :lua, etc.
Bram Moolenaar <Bram@vim.org>
parents: 24776
diff changeset
4323 def Test_python3_heredoc()
a8d64f1a223b patch 8.2.2951: Vim9: cannot use heredoc for :python, :lua, etc.
Bram Moolenaar <Bram@vim.org>
parents: 24776
diff changeset
4324 py3 << trim EOF
a8d64f1a223b patch 8.2.2951: Vim9: cannot use heredoc for :python, :lua, etc.
Bram Moolenaar <Bram@vim.org>
parents: 24776
diff changeset
4325 import vim
a8d64f1a223b patch 8.2.2951: Vim9: cannot use heredoc for :python, :lua, etc.
Bram Moolenaar <Bram@vim.org>
parents: 24776
diff changeset
4326 vim.vars['didit'] = 'yes'
a8d64f1a223b patch 8.2.2951: Vim9: cannot use heredoc for :python, :lua, etc.
Bram Moolenaar <Bram@vim.org>
parents: 24776
diff changeset
4327 EOF
a8d64f1a223b patch 8.2.2951: Vim9: cannot use heredoc for :python, :lua, etc.
Bram Moolenaar <Bram@vim.org>
parents: 24776
diff changeset
4328 assert_equal('yes', g:didit)
a8d64f1a223b patch 8.2.2951: Vim9: cannot use heredoc for :python, :lua, etc.
Bram Moolenaar <Bram@vim.org>
parents: 24776
diff changeset
4329
a8d64f1a223b patch 8.2.2951: Vim9: cannot use heredoc for :python, :lua, etc.
Bram Moolenaar <Bram@vim.org>
parents: 24776
diff changeset
4330 python3 << trim EOF
a8d64f1a223b patch 8.2.2951: Vim9: cannot use heredoc for :python, :lua, etc.
Bram Moolenaar <Bram@vim.org>
parents: 24776
diff changeset
4331 import vim
a8d64f1a223b patch 8.2.2951: Vim9: cannot use heredoc for :python, :lua, etc.
Bram Moolenaar <Bram@vim.org>
parents: 24776
diff changeset
4332 vim.vars['didit'] = 'again'
a8d64f1a223b patch 8.2.2951: Vim9: cannot use heredoc for :python, :lua, etc.
Bram Moolenaar <Bram@vim.org>
parents: 24776
diff changeset
4333 EOF
a8d64f1a223b patch 8.2.2951: Vim9: cannot use heredoc for :python, :lua, etc.
Bram Moolenaar <Bram@vim.org>
parents: 24776
diff changeset
4334 assert_equal('again', g:didit)
a8d64f1a223b patch 8.2.2951: Vim9: cannot use heredoc for :python, :lua, etc.
Bram Moolenaar <Bram@vim.org>
parents: 24776
diff changeset
4335 enddef
a8d64f1a223b patch 8.2.2951: Vim9: cannot use heredoc for :python, :lua, etc.
Bram Moolenaar <Bram@vim.org>
parents: 24776
diff changeset
4336 endif
a8d64f1a223b patch 8.2.2951: Vim9: cannot use heredoc for :python, :lua, etc.
Bram Moolenaar <Bram@vim.org>
parents: 24776
diff changeset
4337
a8d64f1a223b patch 8.2.2951: Vim9: cannot use heredoc for :python, :lua, etc.
Bram Moolenaar <Bram@vim.org>
parents: 24776
diff changeset
4338 if has('lua')
a8d64f1a223b patch 8.2.2951: Vim9: cannot use heredoc for :python, :lua, etc.
Bram Moolenaar <Bram@vim.org>
parents: 24776
diff changeset
4339 def Test_lua_heredoc()
a8d64f1a223b patch 8.2.2951: Vim9: cannot use heredoc for :python, :lua, etc.
Bram Moolenaar <Bram@vim.org>
parents: 24776
diff changeset
4340 g:d = {}
a8d64f1a223b patch 8.2.2951: Vim9: cannot use heredoc for :python, :lua, etc.
Bram Moolenaar <Bram@vim.org>
parents: 24776
diff changeset
4341 lua << trim EOF
a8d64f1a223b patch 8.2.2951: Vim9: cannot use heredoc for :python, :lua, etc.
Bram Moolenaar <Bram@vim.org>
parents: 24776
diff changeset
4342 x = vim.eval('g:d')
a8d64f1a223b patch 8.2.2951: Vim9: cannot use heredoc for :python, :lua, etc.
Bram Moolenaar <Bram@vim.org>
parents: 24776
diff changeset
4343 x['key'] = 'val'
a8d64f1a223b patch 8.2.2951: Vim9: cannot use heredoc for :python, :lua, etc.
Bram Moolenaar <Bram@vim.org>
parents: 24776
diff changeset
4344 EOF
a8d64f1a223b patch 8.2.2951: Vim9: cannot use heredoc for :python, :lua, etc.
Bram Moolenaar <Bram@vim.org>
parents: 24776
diff changeset
4345 assert_equal('val', g:d.key)
a8d64f1a223b patch 8.2.2951: Vim9: cannot use heredoc for :python, :lua, etc.
Bram Moolenaar <Bram@vim.org>
parents: 24776
diff changeset
4346 enddef
28154
ae975c8d5438 patch 8.2.4601: Vim9: not enough test coverage for executing :def function
Bram Moolenaar <Bram@vim.org>
parents: 28123
diff changeset
4347
ae975c8d5438 patch 8.2.4601: Vim9: not enough test coverage for executing :def function
Bram Moolenaar <Bram@vim.org>
parents: 28123
diff changeset
4348 def Test_lua_heredoc_fails()
ae975c8d5438 patch 8.2.4601: Vim9: not enough test coverage for executing :def function
Bram Moolenaar <Bram@vim.org>
parents: 28123
diff changeset
4349 var lines = [
ae975c8d5438 patch 8.2.4601: Vim9: not enough test coverage for executing :def function
Bram Moolenaar <Bram@vim.org>
parents: 28123
diff changeset
4350 'vim9script',
ae975c8d5438 patch 8.2.4601: Vim9: not enough test coverage for executing :def function
Bram Moolenaar <Bram@vim.org>
parents: 28123
diff changeset
4351 'def ExeLua()',
ae975c8d5438 patch 8.2.4601: Vim9: not enough test coverage for executing :def function
Bram Moolenaar <Bram@vim.org>
parents: 28123
diff changeset
4352 'lua << trim EOLUA',
ae975c8d5438 patch 8.2.4601: Vim9: not enough test coverage for executing :def function
Bram Moolenaar <Bram@vim.org>
parents: 28123
diff changeset
4353 "x = vim.eval('g:nodict')",
ae975c8d5438 patch 8.2.4601: Vim9: not enough test coverage for executing :def function
Bram Moolenaar <Bram@vim.org>
parents: 28123
diff changeset
4354 'EOLUA',
ae975c8d5438 patch 8.2.4601: Vim9: not enough test coverage for executing :def function
Bram Moolenaar <Bram@vim.org>
parents: 28123
diff changeset
4355 'enddef',
ae975c8d5438 patch 8.2.4601: Vim9: not enough test coverage for executing :def function
Bram Moolenaar <Bram@vim.org>
parents: 28123
diff changeset
4356 'ExeLua()',
ae975c8d5438 patch 8.2.4601: Vim9: not enough test coverage for executing :def function
Bram Moolenaar <Bram@vim.org>
parents: 28123
diff changeset
4357 ]
ae975c8d5438 patch 8.2.4601: Vim9: not enough test coverage for executing :def function
Bram Moolenaar <Bram@vim.org>
parents: 28123
diff changeset
4358 v9.CheckScriptFailure(lines, 'E121: Undefined variable: g:nodict')
ae975c8d5438 patch 8.2.4601: Vim9: not enough test coverage for executing :def function
Bram Moolenaar <Bram@vim.org>
parents: 28123
diff changeset
4359 enddef
24826
a8d64f1a223b patch 8.2.2951: Vim9: cannot use heredoc for :python, :lua, etc.
Bram Moolenaar <Bram@vim.org>
parents: 24776
diff changeset
4360 endif
a8d64f1a223b patch 8.2.2951: Vim9: cannot use heredoc for :python, :lua, etc.
Bram Moolenaar <Bram@vim.org>
parents: 24776
diff changeset
4361
28850
338212bba072 patch 8.2.4948: cannot use Perl heredoc in nested :def function
Bram Moolenaar <Bram@vim.org>
parents: 28775
diff changeset
4362 if has('perl')
338212bba072 patch 8.2.4948: cannot use Perl heredoc in nested :def function
Bram Moolenaar <Bram@vim.org>
parents: 28775
diff changeset
4363 def Test_perl_heredoc_nested()
338212bba072 patch 8.2.4948: cannot use Perl heredoc in nested :def function
Bram Moolenaar <Bram@vim.org>
parents: 28775
diff changeset
4364 var lines =<< trim END
338212bba072 patch 8.2.4948: cannot use Perl heredoc in nested :def function
Bram Moolenaar <Bram@vim.org>
parents: 28775
diff changeset
4365 vim9script
338212bba072 patch 8.2.4948: cannot use Perl heredoc in nested :def function
Bram Moolenaar <Bram@vim.org>
parents: 28775
diff changeset
4366 def F(): string
338212bba072 patch 8.2.4948: cannot use Perl heredoc in nested :def function
Bram Moolenaar <Bram@vim.org>
parents: 28775
diff changeset
4367 def G(): string
338212bba072 patch 8.2.4948: cannot use Perl heredoc in nested :def function
Bram Moolenaar <Bram@vim.org>
parents: 28775
diff changeset
4368 perl << EOF
338212bba072 patch 8.2.4948: cannot use Perl heredoc in nested :def function
Bram Moolenaar <Bram@vim.org>
parents: 28775
diff changeset
4369 EOF
338212bba072 patch 8.2.4948: cannot use Perl heredoc in nested :def function
Bram Moolenaar <Bram@vim.org>
parents: 28775
diff changeset
4370 return 'done'
338212bba072 patch 8.2.4948: cannot use Perl heredoc in nested :def function
Bram Moolenaar <Bram@vim.org>
parents: 28775
diff changeset
4371 enddef
338212bba072 patch 8.2.4948: cannot use Perl heredoc in nested :def function
Bram Moolenaar <Bram@vim.org>
parents: 28775
diff changeset
4372 return G()
338212bba072 patch 8.2.4948: cannot use Perl heredoc in nested :def function
Bram Moolenaar <Bram@vim.org>
parents: 28775
diff changeset
4373 enddef
338212bba072 patch 8.2.4948: cannot use Perl heredoc in nested :def function
Bram Moolenaar <Bram@vim.org>
parents: 28775
diff changeset
4374 assert_equal('done', F())
338212bba072 patch 8.2.4948: cannot use Perl heredoc in nested :def function
Bram Moolenaar <Bram@vim.org>
parents: 28775
diff changeset
4375 END
338212bba072 patch 8.2.4948: cannot use Perl heredoc in nested :def function
Bram Moolenaar <Bram@vim.org>
parents: 28775
diff changeset
4376 v9.CheckScriptSuccess(lines)
338212bba072 patch 8.2.4948: cannot use Perl heredoc in nested :def function
Bram Moolenaar <Bram@vim.org>
parents: 28775
diff changeset
4377 enddef
338212bba072 patch 8.2.4948: cannot use Perl heredoc in nested :def function
Bram Moolenaar <Bram@vim.org>
parents: 28775
diff changeset
4378 endif
338212bba072 patch 8.2.4948: cannot use Perl heredoc in nested :def function
Bram Moolenaar <Bram@vim.org>
parents: 28775
diff changeset
4379
20257
683c2da4982b patch 8.2.0684: Vim9: memory leak when using lambda
Bram Moolenaar <Bram@vim.org>
parents: 20255
diff changeset
4380
19912
d4fa9db88d16 patch 8.2.0512: Vim9: no optional arguments in func type
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4381 " vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker