annotate src/testdir/test49.vim @ 21666:97b887aecd4a v8.2.1383

patch 8.2.1383: test 49 is old style Commit: https://github.com/vim/vim/commit/9470a4d88acf948af1596101527b3a505f8c14e9 Author: Bram Moolenaar <Bram@vim.org> Date: Fri Aug 7 16:49:11 2020 +0200 patch 8.2.1383: test 49 is old style Problem: Test 49 is old style. Solution: Convert test cases to new style. (Yegappan Lakshmanan, closes #6638)
author Bram Moolenaar <Bram@vim.org>
date Fri, 07 Aug 2020 17:00:05 +0200
parents 792398a9fe39
children 078d98fe1c65
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1 " Vim script language tests
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2 " Author: Servatius Brandt <Servatius.Brandt@fujitsu-siemens.com>
21632
792398a9fe39 patch 8.2.1366: test 49 is old style
Bram Moolenaar <Bram@vim.org>
parents: 18829
diff changeset
3 " Last Change: 2020 Jun 07
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6 " Test environment {{{1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10 " Adding new tests easily. {{{2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12 " Writing new tests is eased considerably with the following functions and
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
13 " abbreviations (see "Commands for recording the execution path", "Automatic
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
14 " argument generation").
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
15 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
16 " To get the abbreviations, execute the command
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
17 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
18 " :let test49_set_env = 1 | source test49.vim
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
19 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
20 " To get them always (from src/testdir), put a line
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
21 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
22 " au! BufRead test49.vim let test49_set_env = 1 | source test49.vim
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
23 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
24 " into the local .vimrc file in the src/testdir directory.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
25 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
26 if exists("test49_set_env") && test49_set_env
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
27
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
28 " Automatic argument generation for the test environment commands.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
29
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
30 function! Xsum()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
31 let addend = substitute(getline("."), '^.*"\s*X:\s*\|^.*', '', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
32 " Evaluate arithmetic expression.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
33 if addend != ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
34 exec "let g:Xsum = g:Xsum + " . addend
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
35 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
36 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
37
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
38 function! Xcheck()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
39 let g:Xsum=0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
40 ?XpathINIT?,.call Xsum()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
41 exec "norm A "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
42 return g:Xsum
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
43 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
44
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
45 iab Xcheck Xcheck<Space><C-R>=Xcheck()<CR><C-O>x
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
46
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
47 function! Xcomment(num)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
48 let str = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
49 let tabwidth = &sts ? &sts : &ts
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
50 let tabs = (48+tabwidth - a:num - virtcol(".")) / tabwidth
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
51 while tabs > 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
52 let str = str . "\t"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
53 let tabs = tabs - 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
54 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
55 let str = str . '" X:'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
56 return str
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
57 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
58
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
59 function! Xloop()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
60 let back = line(".") . "|norm" . virtcol(".") . "|"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
61 norm 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
62 let last = search('X\(loop\|path\)INIT\|Xloop\>', "bW")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
63 exec back
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
64 let theline = getline(last)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
65 if theline =~ 'X\(loop\|path\)INIT'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
66 let num = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
67 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
68 let num = 2 * substitute(theline, '.*Xloop\s*\(\d\+\).*', '\1', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
69 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
70 ?X\(loop\|path\)INIT?
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
71 \s/\(XloopINIT!\=\s*\d\+\s\+\)\@<=\(\d\+\)/\=2*submatch(2)/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
72 exec back
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
73 exec "norm a "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
74 return num . Xcomment(strlen(num))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
75 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
76
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
77 iab Xloop Xloop<Space><C-R>=Xloop()<CR><C-O>x
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
78
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
79 function! Xpath(loopinit)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
80 let back = line(".") . "|norm" . virtcol(".") . "|"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
81 norm 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
82 let last = search('XpathINIT\|Xpath\>\|XloopINIT', "bW")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
83 exec back
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
84 let theline = getline(last)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
85 if theline =~ 'XpathINIT'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
86 let num = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
87 elseif theline =~ 'Xpath\>'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
88 let num = 2 * substitute(theline, '.*Xpath\s*\(\d\+\).*', '\1', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
89 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
90 let pattern = '.*XloopINIT!\=\s*\(\d\+\)\s*\(\d\+\).*'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
91 let num = substitute(theline, pattern, '\1', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
92 let factor = substitute(theline, pattern, '\2', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
93 " The "<C-O>x" from the "Xpath" iab and the character triggering its
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
94 " expansion are in the input buffer. Save and clear typeahead so
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
95 " that it is not read away by the call to "input()" below. Restore
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
96 " afterwards.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
97 call inputsave()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
98 let loops = input("Number of iterations in previous loop? ")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
99 call inputrestore()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
100 while (loops > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
101 let num = num * factor
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
102 let loops = loops - 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
103 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
104 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
105 exec "norm a "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
106 if a:loopinit
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
107 return num . " 1"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
108 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
109 return num . Xcomment(strlen(num))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
110 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
111
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
112 iab Xpath Xpath<Space><C-R>=Xpath(0)<CR><C-O>x
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
113 iab XloopINIT XloopINIT<Space><C-R>=Xpath(1)<CR><C-O>x
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
114
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
115 " Also useful (see ExtraVim below):
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
116 aug ExtraVim
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
117 au!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
118 au BufEnter <sfile> syn region ExtraVim
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
119 \ start=+^if\s\+ExtraVim(.*)+ end=+^endif+
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
120 \ transparent keepend
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
121 au BufEnter <sfile> syn match ExtraComment /^"/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
122 \ contained containedin=ExtraVim
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
123 au BufEnter <sfile> hi link ExtraComment vimComment
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
124 aug END
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
125
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
126 aug Xpath
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
127 au BufEnter <sfile> syn keyword Xpath
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
128 \ XpathINIT Xpath XloopINIT Xloop XloopNEXT Xcheck Xout
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
129 au BufEnter <sfile> hi link Xpath Special
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
130 aug END
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
131
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
132 do BufEnter <sfile>
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
133
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
134 " Do not execute the tests when sourcing this file for getting the functions
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
135 " and abbreviations above, which are intended for easily adding new test
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
136 " cases; they are not needed for test execution. Unlet the variable
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
137 " controlling this so that an explicit ":source" command for this file will
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
138 " execute the tests.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
139 unlet test49_set_env
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
140 finish
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
141
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
142 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
143
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
144
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
145 " Commands for recording the execution path. {{{2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
146 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
147 " The Xpath/Xloop commands can be used for computing the eXecution path by
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
148 " adding (different) powers of 2 from those script lines, for which the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
149 " execution should be checked. Xloop provides different addends for each
303
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
150 " execution of a loop. Permitted values are 2^0 to 2^30, so that 31 execution
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
151 " points (multiply counted inside loops) can be tested.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
152 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
153 " Note that the arguments of the following commands can be generated
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
154 " automatically, see below.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
155 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
156 " Usage: {{{3
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
157 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
158 " - Use XpathINIT at the beginning of the test.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
159 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
160 " - Use Xpath to check if a line is executed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
161 " Argument: power of 2 (decimal).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
162 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
163 " - To check multiple execution of loops use Xloop for automatically
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
164 " computing Xpath values:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
165 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
166 " - Use XloopINIT before the loop.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
167 " Two arguments:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
168 " - the first Xpath value (power of 2) to be used (Xnext),
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
169 " - factor for computing a new Xnext value when reexecuting a loop
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
170 " (by a ":continue" or ":endwhile"); this should be 2^n where
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
171 " n is the number of Xloop commands inside the loop.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
172 " If XloopINIT! is used, the first execution of XloopNEXT is
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
173 " a no-operation.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
174 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
175 " - Use Xloop inside the loop:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
176 " One argument:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
177 " The argument and the Xnext value are multiplied to build the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
178 " next Xpath value. No new Xnext value is prepared. The argument
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
179 " should be 2^(n-1) for the nth Xloop command inside the loop.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
180 " If the loop has only one Xloop command, the argument can be
18829
eff8d8f72a82 patch 8.1.2402: typos and other small things
Bram Moolenaar <Bram@vim.org>
parents: 18504
diff changeset
181 " omitted (default: 1).
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
182 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
183 " - Use XloopNEXT before ":continue" and ":endwhile". This computes a new
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
184 " Xnext value for the next execution of the loop by multiplying the old
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
185 " one with the factor specified in the XloopINIT command. No Argument.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
186 " Alternatively, when XloopINIT! is used, a single XloopNEXT at the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
187 " beginning of the loop can be used.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
188 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
189 " Nested loops are not supported.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
190 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
191 " - Use Xcheck at end of each test. It prints the test number, the expected
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
192 " execution path value, the test result ("OK" or "FAIL"), and, if the tests
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
193 " fails, the actual execution path.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
194 " One argument:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
195 " Expected Xpath/Xloop sum for the correct execution path.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
196 " In order that this value can be computed automatically, do the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
197 " following: For each line in the test with an Xpath and Xloop
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
198 " command, add a comment starting with "X:" and specifying an
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
199 " expression that evaluates to the value contributed by this line to
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
200 " the correct execution path. (For copying an Xpath argument of at
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
201 " least two digits into the comment, press <C-P>.) At the end of the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
202 " test, just type "Xcheck" and press <Esc>.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
203 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
204 " - In order to add additional information to the test output file, use the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
205 " Xout command. Argument(s) like ":echo".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
206 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
207 " Automatic argument generation: {{{3
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
208 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
209 " The arguments of the Xpath, XloopINIT, Xloop, and Xcheck commands can be
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
210 " generated automatically, so that new tests can easily be written without
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
211 " mental arithmetic. The Xcheck argument is computed from the "X:" comments
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
212 " of the preceding Xpath and Xloop commands. See the commands and
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
213 " abbreviations at the beginning of this file.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
214 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
215 " Implementation: {{{3
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
216 " XpathINIT, Xpath, XloopINIT, Xloop, XloopNEXT, Xcheck, Xout.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
217 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
218 " The variants for existing g:ExtraVimResult are needed when executing a script
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
219 " in an extra Vim process, see ExtraVim below.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
220
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
221 " EXTRA_VIM_START - do not change or remove this line.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
222
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
223 com! XpathINIT let g:Xpath = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
224
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
225 if exists("g:ExtraVimResult")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
226 com! -count -bar Xpath exec "!echo <count> >>" . g:ExtraVimResult
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
227 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
228 com! -count -bar Xpath let g:Xpath = g:Xpath + <count>
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
229 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
230
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
231 com! -count -nargs=1 -bang
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
232 \ XloopINIT let g:Xnext = <count> |
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
233 \ let g:Xfactor = <args> |
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
234 \ let g:Xskip = strlen("<bang>")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
235
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
236 if exists("g:ExtraVimResult")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
237 com! -count=1 -bar Xloop exec "!echo " . (g:Xnext * <count>) . " >>" .
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
238 \ g:ExtraVimResult
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
239 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
240 com! -count=1 -bar Xloop let g:Xpath = g:Xpath + g:Xnext * <count>
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
241 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
242
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
243 com! XloopNEXT let g:Xnext = g:Xnext *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
244 \ (g:Xskip ? 1 : g:Xfactor) |
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
245 \ let g:Xskip = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
246
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
247 let @r = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
248 let Xtest = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
249 com! -count Xcheck let Xresult = "*** Test " .
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
250 \ (Xtest<10?" ":Xtest<100?" ":"") .
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
251 \ Xtest . ": " . (
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
252 \ (Xpath==<count>) ? "OK (".Xpath.")" :
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
253 \ "FAIL (".Xpath." instead of <count>)"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
254 \ ) |
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
255 \ let @R = Xresult . "\n" |
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
256 \ echo Xresult |
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
257 \ let Xtest = Xtest + 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
258
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
259 if exists("g:ExtraVimResult")
303
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
260 com! -nargs=+ Xoutq exec "!echo @R:'" .
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
261 \ substitute(substitute(<q-args>,
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
262 \ "'", '&\\&&', "g"), "\n", "@NL@", "g")
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
263 \ . "' >>" . g:ExtraVimResult
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
264 else
303
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
265 com! -nargs=+ Xoutq let @R = "--- Test " .
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
266 \ (g:Xtest<10?" ":g:Xtest<100?" ":"") .
303
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
267 \ g:Xtest . ": " . substitute(<q-args>,
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
268 \ "\n", "&\t ", "g") . "\n"
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
269 endif
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
270 com! -nargs=+ Xout exec 'Xoutq' <args>
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
271
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
272 " Switch off storing of lines for undoing changes. Speeds things up a little.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
273 set undolevels=-1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
274
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
275 " EXTRA_VIM_STOP - do not change or remove this line.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
276
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
277
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
278 " ExtraVim() - Run a script file in an extra Vim process. {{{2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
279 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
280 " This is useful for testing immediate abortion of the script processing due to
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
281 " an error in a command dynamically enclosed by a :try/:tryend region or when an
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
282 " exception is thrown but not caught or when an interrupt occurs. It can also
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
283 " be used for testing :finish.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
284 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
285 " An interrupt location can be specified by an "INTERRUPT" comment. A number
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
286 " telling how often this location is reached (in a loop or in several function
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
287 " calls) should be specified as argument. When missing, once per script
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
288 " invocation or function call is assumed. INTERRUPT locations are tested by
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
289 " setting a breakpoint in that line and using the ">quit" debug command when
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
290 " the breakpoint is reached. A function for which an INTERRUPT location is
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
291 " specified must be defined before calling it (or executing it as a script by
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
292 " using ExecAsScript below).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
293 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
294 " This function is only called in normal modus ("g:ExtraVimResult" undefined).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
295 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
296 " Tests to be executed as an extra script should be written as follows:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
297 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
298 " column 1 column 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
299 " | |
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
300 " v v
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
301 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
302 " XpathINIT XpathINIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
303 " if ExtraVim() if ExtraVim()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
304 " ... " ...
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
305 " ... " ...
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
306 " endif endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
307 " Xcheck <number> Xcheck <number>
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
308 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
309 " Double quotes in column 1 are removed before the script is executed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
310 " They should be used if the test has unbalanced conditionals (:if/:endif,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
311 " :while:/endwhile, :try/:endtry) or for a line with a syntax error. The
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
312 " extra script may use Xpath, XloopINIT, Xloop, XloopNEXT, and Xout as usual.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
313 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
314 " A file name may be specified as argument. All messages of the extra Vim
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
315 " process are then redirected to the file. An existing file is overwritten.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
316 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
317 let ExtraVimCount = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
318 let ExtraVimBase = expand("<sfile>")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
319 let ExtraVimTestEnv = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
320 "
15406
63b02fcf1361 patch 8.1.0711: test files still use function!
Bram Moolenaar <Bram@vim.org>
parents: 10942
diff changeset
321 function ExtraVim(...)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
322 " Count how often this function is called.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
323 let g:ExtraVimCount = g:ExtraVimCount + 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
324
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
325 " Disable folds to prevent that the ranges in the ":write" commands below
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
326 " are extended up to the end of a closed fold. This also speeds things up
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
327 " considerably.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
328 set nofoldenable
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
329
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
330 " Open a buffer for this test script and copy the test environment to
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
331 " a temporary file. Take account of parts relevant for the extra script
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
332 " execution only.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
333 let current_buffnr = bufnr("%")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
334 execute "view +1" g:ExtraVimBase
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
335 if g:ExtraVimCount == 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
336 let g:ExtraVimTestEnv = tempname()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
337 execute "/E" . "XTRA_VIM_START/+,/E" . "XTRA_VIM_STOP/-w"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
338 \ g:ExtraVimTestEnv "|']+"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
339 execute "/E" . "XTRA_VIM_START/+,/E" . "XTRA_VIM_STOP/-w >>"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
340 \ g:ExtraVimTestEnv "|']+"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
341 execute "/E" . "XTRA_VIM_START/+,/E" . "XTRA_VIM_STOP/-w >>"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
342 \ g:ExtraVimTestEnv "|']+"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
343 execute "/E" . "XTRA_VIM_START/+,/E" . "XTRA_VIM_STOP/-w >>"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
344 \ g:ExtraVimTestEnv "|']+"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
345 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
346
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
347 " Start the extra Vim script with a ":source" command for the test
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
348 " environment. The source line number where the extra script will be
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
349 " appended, needs to be passed as variable "ExtraVimBegin" to the script.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
350 let extra_script = tempname()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
351 exec "!echo 'source " . g:ExtraVimTestEnv . "' >" . extra_script
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
352 let extra_begin = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
353
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
354 " Starting behind the test environment, skip over the first g:ExtraVimCount
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
355 " occurrences of "if ExtraVim()" and copy the following lines up to the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
356 " matching "endif" to the extra Vim script.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
357 execute "/E" . "ND_OF_TEST_ENVIRONMENT/"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
358 exec 'norm ' . g:ExtraVimCount . '/^\s*if\s\+ExtraVim(.*)/+' . "\n"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
359 execute ".,/^endif/-write >>" . extra_script
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
360
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
361 " Open a buffer for the extra Vim script, delete all ^", and write the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
362 " script if was actually modified.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
363 execute "edit +" . (extra_begin + 1) extra_script
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
364 ,$s/^"//e
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
365 update
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
366
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
367 " Count the INTERRUPTs and build the breakpoint and quit commands.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
368 let breakpoints = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
369 let debug_quits = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
370 let in_func = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
371 exec extra_begin
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
372 while search(
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
373 \ '"\s*INTERRUPT\h\@!\|^\s*fu\%[nction]\>!\=\s*\%(\u\|s:\)\w*\s*(\|'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
374 \ . '^\s*\\\|^\s*endf\%[unction]\>\|'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
375 \ . '\%(^\s*fu\%[nction]!\=\s*\)\@<!\%(\u\|s:\)\w*\s*(\|'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
376 \ . 'ExecAsScript\s\+\%(\u\|s:\)\w*',
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
377 \ "W") > 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
378 let theline = getline(".")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
379 if theline =~ '^\s*fu'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
380 " Function definition.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
381 let in_func = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
382 let func_start = line(".")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
383 let func_name = substitute(theline,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
384 \ '^\s*fu\%[nction]!\=\s*\(\%(\u\|s:\)\w*\).*', '\1', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
385 elseif theline =~ '^\s*endf'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
386 " End of function definition.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
387 let in_func = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
388 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
389 let finding = substitute(theline, '.*\(\%' . col(".") . 'c.*\)',
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
390 \ '\1', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
391 if finding =~ '^"\s*INTERRUPT\h\@!'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
392 " Interrupt comment. Compose as many quit commands as
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
393 " specified.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
394 let cnt = substitute(finding,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
395 \ '^"\s*INTERRUPT\s*\(\d*\).*$', '\1', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
396 let quits = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
397 while cnt > 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
398 " Use "\r" rather than "\n" to separate the quit commands.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
399 " "\r" is not interpreted as command separator by the ":!"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
400 " command below but works to separate commands in the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
401 " external vim.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
402 let quits = quits . "q\r"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
403 let cnt = cnt - 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
404 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
405 if in_func
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
406 " Add the function breakpoint and note the number of quits
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
407 " to be used, if specified, or one for every call else.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
408 let breakpoints = breakpoints . " -c 'breakadd func " .
697
f08390485cd3 updated for version 7.0210
vimboss
parents: 341
diff changeset
409 \ (line(".") - func_start) . " " .
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
410 \ func_name . "'"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
411 if quits != ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
412 let debug_quits = debug_quits . quits
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
413 elseif !exists("quits{func_name}")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
414 let quits{func_name} = "q\r"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
415 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
416 let quits{func_name} = quits{func_name} . "q\r"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
417 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
418 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
419 " Add the file breakpoint and the quits to be used for it.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
420 let breakpoints = breakpoints . " -c 'breakadd file " .
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
421 \ line(".") . " " . extra_script . "'"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
422 if quits == ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
423 let quits = "q\r"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
424 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
425 let debug_quits = debug_quits . quits
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
426 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
427 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
428 " Add the quits to be used for calling the function or executing
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
429 " it as script file.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
430 if finding =~ '^ExecAsScript'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
431 " Sourcing function as script.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
432 let finding = substitute(finding,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
433 \ '^ExecAsScript\s\+\(\%(\u\|s:\)\w*\).*', '\1', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
434 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
435 " Function call.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
436 let finding = substitute(finding,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
437 \ '^\(\%(\u\|s:\)\w*\).*', '\1', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
438 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
439 if exists("quits{finding}")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
440 let debug_quits = debug_quits . quits{finding}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
441 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
442 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
443 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
444 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
445
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
446 " Close the buffer for the script and create an (empty) resultfile.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
447 bwipeout
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
448 let resultfile = tempname()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
449 exec "!>" . resultfile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
450
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
451 " Run the script in an extra vim. Switch to extra modus by passing the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
452 " resultfile in ExtraVimResult. Redirect messages to the file specified as
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
453 " argument if any. Use ":debuggreedy" so that the commands provided on the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
454 " pipe are consumed at the debug prompt. Use "-N" to enable command-line
303
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
455 " continuation ("C" in 'cpo'). Add "nviminfo" to 'viminfo' to avoid
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
456 " messing up the user's viminfo file.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
457 let redirect = a:0 ?
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
458 \ " -c 'au VimLeave * redir END' -c 'redir\\! >" . a:1 . "'" : ""
18269
57b18521216f patch 8.1.2129: using hard coded executable path in test
Bram Moolenaar <Bram@vim.org>
parents: 17918
diff changeset
459 exec "!echo '" . debug_quits . "q' | " .. v:progpath .. " -u NONE -N -Xes" . redirect .
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
460 \ " -c 'debuggreedy|set viminfo+=nviminfo'" .
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
461 \ " -c 'let ExtraVimBegin = " . extra_begin . "'" .
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
462 \ " -c 'let ExtraVimResult = \"" . resultfile . "\"'" . breakpoints .
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
463 \ " -S " . extra_script
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
464
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
465 " Build the resulting sum for resultfile and add it to g:Xpath. Add Xout
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
466 " information provided by the extra Vim process to the test output.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
467 let sum = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
468 exec "edit" resultfile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
469 let line = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
470 while line <= line("$")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
471 let theline = getline(line)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
472 if theline =~ '^@R:'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
473 exec 'Xout "' . substitute(substitute(
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
474 \ escape(escape(theline, '"'), '\"'),
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
475 \ '^@R:', '', ""), '@NL@', "\n", "g") . '"'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
476 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
477 let sum = sum + getline(line)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
478 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
479 let line = line + 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
480 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
481 bwipeout
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
482 let g:Xpath = g:Xpath + sum
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
483
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
484 " Delete the extra script and the resultfile.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
485 call delete(extra_script)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
486 call delete(resultfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
487
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
488 " Switch back to the buffer that was active when this function was entered.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
489 exec "buffer" current_buffnr
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
490
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
491 " Return 0. This protects extra scripts from being run in the main Vim
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
492 " process.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
493 return 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
494 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
495
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
496
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
497 " ExtraVimThrowpoint() - Relative throwpoint in ExtraVim script {{{2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
498 "
303
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
499 " Evaluates v:throwpoint and returns the throwpoint relative to the beginning of
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
500 " an ExtraVim script as passed by ExtraVim() in ExtraVimBegin.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
501 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
502 " EXTRA_VIM_START - do not change or remove this line.
15406
63b02fcf1361 patch 8.1.0711: test files still use function!
Bram Moolenaar <Bram@vim.org>
parents: 10942
diff changeset
503 function ExtraVimThrowpoint()
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
504 if !exists("g:ExtraVimBegin")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
505 Xout "ExtraVimThrowpoint() used outside ExtraVim() script."
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
506 return v:throwpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
507 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
508
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
509 if v:throwpoint =~ '^function\>'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
510 return v:throwpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
511 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
512
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
513 return "line " .
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
514 \ (substitute(v:throwpoint, '.*, line ', '', "") - g:ExtraVimBegin) .
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
515 \ " of ExtraVim() script"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
516 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
517 " EXTRA_VIM_STOP - do not change or remove this line.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
518
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
519
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
520 " MakeScript() - Make a script file from a function. {{{2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
521 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
522 " Create a script that consists of the body of the function a:funcname.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
523 " Replace any ":return" by a ":finish", any argument variable by a global
17918
9606c0adc148 patch 8.1.1955: tests contain typos
Bram Moolenaar <Bram@vim.org>
parents: 16760
diff changeset
524 " variable, and every ":call" by a ":source" for the next following argument
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
525 " in the variable argument list. This function is useful if similar tests are
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
526 " to be made for a ":return" from a function call or a ":finish" in a script
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
527 " file.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
528 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
529 " In order to execute a function specifying an INTERRUPT location (see ExtraVim)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
530 " as a script file, use ExecAsScript below.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
531 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
532 " EXTRA_VIM_START - do not change or remove this line.
15406
63b02fcf1361 patch 8.1.0711: test files still use function!
Bram Moolenaar <Bram@vim.org>
parents: 10942
diff changeset
533 function MakeScript(funcname, ...)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
534 let script = tempname()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
535 execute "redir! >" . script
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
536 execute "function" a:funcname
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
537 redir END
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
538 execute "edit" script
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
539 " Delete the "function" and the "endfunction" lines. Do not include the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
540 " word "function" in the pattern since it might be translated if LANG is
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
541 " set. When MakeScript() is being debugged, this deletes also the debugging
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
542 " output of its line 3 and 4.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
543 exec '1,/.*' . a:funcname . '(.*)/d'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
544 /^\d*\s*endfunction\>/,$d
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
545 %s/^\d*//e
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
546 %s/return/finish/e
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
547 %s/\<a:\(\h\w*\)/g:\1/ge
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
548 normal gg0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
549 let cnt = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
550 while search('\<call\s*\%(\u\|s:\)\w*\s*(.*)', 'W') > 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
551 let cnt = cnt + 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
552 s/\<call\s*\%(\u\|s:\)\w*\s*(.*)/\='source ' . a:{cnt}/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
553 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
554 g/^\s*$/d
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
555 write
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
556 bwipeout
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
557 return script
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
558 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
559 " EXTRA_VIM_STOP - do not change or remove this line.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
560
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
561
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
562 " ExecAsScript - Source a temporary script made from a function. {{{2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
563 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
564 " Make a temporary script file from the function a:funcname, ":source" it, and
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
565 " delete it afterwards.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
566 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
567 " When inside ":if ExtraVim()", add a file breakpoint for each INTERRUPT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
568 " location specified in the function.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
569 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
570 " EXTRA_VIM_START - do not change or remove this line.
15406
63b02fcf1361 patch 8.1.0711: test files still use function!
Bram Moolenaar <Bram@vim.org>
parents: 10942
diff changeset
571 function ExecAsScript(funcname)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
572 " Make a script from the function passed as argument.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
573 let script = MakeScript(a:funcname)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
574
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
575 " When running in an extra Vim process, add a file breakpoint for each
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
576 " function breakpoint set when the extra Vim process was invoked by
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
577 " ExtraVim().
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
578 if exists("g:ExtraVimResult")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
579 let bplist = tempname()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
580 execute "redir! >" . bplist
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
581 breaklist
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
582 redir END
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
583 execute "edit" bplist
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
584 " Get the line number from the function breakpoint. Works also when
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
585 " LANG is set.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
586 execute 'v/^\s*\d\+\s\+func\s\+' . a:funcname . '\s.*/d'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
587 %s/^\s*\d\+\s\+func\s\+\%(\u\|s:\)\w*\s\D*\(\d*\).*/\1/e
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
588 let cnt = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
589 while cnt < line("$")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
590 let cnt = cnt + 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
591 if getline(cnt) != ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
592 execute "breakadd file" getline(cnt) script
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
593 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
594 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
595 bwipeout!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
596 call delete(bplist)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
597 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
598
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
599 " Source and delete the script.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
600 exec "source" script
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
601 call delete(script)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
602 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
603
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
604 com! -nargs=1 -bar ExecAsScript call ExecAsScript(<f-args>)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
605 " EXTRA_VIM_STOP - do not change or remove this line.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
606
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
607
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
608 " END_OF_TEST_ENVIRONMENT - do not change or remove this line.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
609
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
610 function! MESSAGES(...)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
611 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
612 exec "edit" g:msgfile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
613 catch /^Vim(edit):/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
614 return 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
615 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
616
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
617 let english = v:lang == "C" || v:lang =~ '^[Ee]n'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
618 let match = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
619 norm gg
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
620
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
621 let num = a:0 / 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
622 let cnt = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
623 while cnt <= num
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
624 let enr = a:{2*cnt - 1}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
625 let emsg= a:{2*cnt}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
626 let cnt = cnt + 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
627
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
628 if enr == ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
629 Xout "TODO: Add message number for:" emsg
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
630 elseif enr == "INT"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
631 let enr = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
632 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
633 if enr == "" && !english
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
634 continue
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
635 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
636 let pattern = (enr != "") ? enr . ':.*' : ''
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
637 if english
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
638 let pattern = pattern . emsg
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
639 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
640 if !search(pattern, "W")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
641 let match = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
642 Xout "No match for:" pattern
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
643 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
644 norm $
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
645 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
646
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
647 bwipeout!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
648 return match
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
649 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
650
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
651 " Leave MESSAGES() for the next tests.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
652
21666
97b887aecd4a patch 8.2.1383: test 49 is old style
Bram Moolenaar <Bram@vim.org>
parents: 21632
diff changeset
653 " Tests 1 to 50, 52 to 57, 87 were moved to test_vimscript.vim
97b887aecd4a patch 8.2.1383: test 49 is old style
Bram Moolenaar <Bram@vim.org>
parents: 21632
diff changeset
654 " Tests 25, 26, 32, 33, 41-48, 51, 69-75 were moved to test_trycatch.vim
97b887aecd4a patch 8.2.1383: test 49 is old style
Bram Moolenaar <Bram@vim.org>
parents: 21632
diff changeset
655 let Xtest = 59
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
656
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
657 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
658 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
659 " Test 59: v:exception and v:throwpoint when discarding exceptions {{{1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
660 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
661 " When a :catch clause is left by a ":break" etc or an error or
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
662 " interrupt exception, v:exception and v:throwpoint are reset. They
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
663 " are not affected by an exception that is discarded before being
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
664 " caught.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
665 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
666
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
667 XpathINIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
668
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
669 if ExtraVim()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
670
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
671 XloopINIT! 1 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
672
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
673 let sfile = expand("<sfile>")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
674
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
675 function! LineNumber()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
676 return substitute(substitute(v:throwpoint, g:sfile, '', ""),
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
677 \ '\D*\(\d*\).*', '\1', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
678 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
679
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
680 command! -nargs=1 SetLineNumber
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
681 \ try | throw "line" | catch /.*/ | let <args> = LineNumber() | endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
682
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
683 " Check v:exception/v:throwpoint against second/fourth parameter if
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
684 " specified, check for being empty else.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
685 function! CHECK(n, ...)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
686 XloopNEXT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
687 let exception = a:0 != 0 ? a:1 : "" " second parameter (optional)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
688 let emsg = a:0 != 0 ? a:2 : "" " third parameter (optional)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
689 let line = a:0 != 0 ? a:3 : 0 " fourth parameter (optional)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
690 let error = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
691 if emsg != ""
303
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
692 " exception is the error number, emsg the English error message text
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
693 if exception !~ '^E\d\+$'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
694 Xout "TODO: Add message number for:" emsg
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
695 elseif v:lang == "C" || v:lang =~ '^[Ee]n'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
696 if exception == "E492" && emsg == "Not an editor command"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
697 let exception = '^Vim:' . exception . ': ' . emsg
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
698 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
699 let exception = '^Vim(\a\+):' . exception . ': ' . emsg
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
700 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
701 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
702 if exception == "E492"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
703 let exception = '^Vim:' . exception
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
704 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
705 let exception = '^Vim(\a\+):' . exception
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
706 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
707 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
708 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
709 if exception == "" && v:exception != ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
710 Xout a:n.": v:exception is set:" v:exception
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
711 let error = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
712 elseif exception != "" && v:exception !~ exception
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
713 Xout a:n.": v:exception (".v:exception.") does not match" exception
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
714 let error = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
715 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
716 if line == 0 && v:throwpoint != ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
717 Xout a:n.": v:throwpoint is set:" v:throwpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
718 let error = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
719 elseif line != 0 && v:throwpoint !~ '\<' . line . '\>'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
720 Xout a:n.": v:throwpoint (".v:throwpoint.") does not match" line
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
721 let error = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
722 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
723 if !error
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
724 Xloop 1 " X: 2097151
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
725 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
726 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
727
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
728 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
729 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
730 throw "x1"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
731 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
732 break
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
733 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
734 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
735 call CHECK(1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
736
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
737 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
738 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
739 throw "x2"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
740 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
741 break
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
742 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
743 call CHECK(2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
744 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
745 break
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
746 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
747 call CHECK(3)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
748
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
749 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
750 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
751 let errcaught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
752 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
753 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
754 throw "x3"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
755 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
756 SetLineNumber line_before_error
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
757 asdf
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
758 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
759 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
760 let errcaught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
761 call CHECK(4, 'E492', "Not an editor command",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
762 \ line_before_error + 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
763 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
764 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
765 if !errcaught && $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
766 call CHECK(4)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
767 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
768 break " discard error for $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
769 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
770 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
771 call CHECK(5)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
772
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
773 Xpath 2097152 " X: 2097152
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
774
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
775 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
776 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
777 let intcaught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
778 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
779 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
780 throw "x4"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
781 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
782 SetLineNumber two_lines_before_interrupt
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
783 "INTERRUPT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
784 let dummy = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
785 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
786 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
787 let intcaught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
788 call CHECK(6, "Vim:Interrupt", '',
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
789 \ two_lines_before_interrupt + 2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
790 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
791 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
792 if !intcaught && $VIMNOINTTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
793 call CHECK(6)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
794 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
795 break " discard interrupt for $VIMNOINTTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
796 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
797 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
798 call CHECK(7)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
799
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
800 Xpath 4194304 " X: 4194304
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
801
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
802 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
803 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
804 let errcaught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
805 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
806 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
807 " if 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
808 SetLineNumber line_before_throw
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
809 throw "x5"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
810 " missing endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
811 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
812 Xpath 8388608 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
813 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
814 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
815 let errcaught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
816 call CHECK(8, 'E171', "Missing :endif", line_before_throw + 3)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
817 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
818 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
819 if !errcaught && $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
820 call CHECK(8)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
821 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
822 break " discard error for $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
823 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
824 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
825 call CHECK(9)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
826
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
827 Xpath 16777216 " X: 16777216
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
828
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
829 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
830 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
831 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
832 throw "x6"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
833 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
834 break
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
835 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
836 break
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
837 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
838 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
839 Xpath 33554432 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
840 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
841 call CHECK(10)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
842
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
843 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
844 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
845 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
846 throw "x7"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
847 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
848 break
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
849 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
850 break
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
851 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
852 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
853 Xpath 67108864 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
854 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
855 call CHECK(11)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
856 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
857 call CHECK(12)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
858
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
859 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
860 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
861 let errcaught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
862 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
863 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
864 throw "x8"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
865 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
866 SetLineNumber line_before_error
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
867 asdf
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
868 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
869 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
870 let errcaught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
871 call CHECK(13, 'E492', "Not an editor command",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
872 \ line_before_error + 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
873 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
874 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
875 if !errcaught && $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
876 call CHECK(13)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
877 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
878 break " discard error for $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
879 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
880 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
881 call CHECK(14)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
882
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
883 Xpath 134217728 " X: 134217728
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
884
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
885 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
886 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
887 let intcaught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
888 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
889 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
890 throw "x9"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
891 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
892 SetLineNumber two_lines_before_interrupt
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
893 "INTERRUPT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
894 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
895 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
896 let intcaught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
897 call CHECK(15, "Vim:Interrupt", '',
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
898 \ two_lines_before_interrupt + 2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
899 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
900 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
901 if !intcaught && $VIMNOINTTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
902 call CHECK(15)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
903 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
904 break " discard interrupt for $VIMNOINTTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
905 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
906 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
907 call CHECK(16)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
908
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
909 Xpath 268435456 " X: 268435456
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
910
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
911 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
912 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
913 let errcaught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
914 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
915 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
916 " if 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
917 SetLineNumber line_before_throw
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
918 throw "x10"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
919 " missing endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
920 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
921 call CHECK(17)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
922 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
923 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
924 let errcaught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
925 call CHECK(18, 'E171', "Missing :endif", line_before_throw + 3)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
926 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
927 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
928 if !errcaught && $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
929 call CHECK(18)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
930 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
931 break " discard error for $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
932 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
933 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
934 call CHECK(19)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
935
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
936 Xpath 536870912 " X: 536870912
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
937
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
938 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
939 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
940 let errcaught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
941 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
942 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
943 " if 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
944 SetLineNumber line_before_throw
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
945 throw "x11"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
946 " missing endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
947 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
948 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
949 let errcaught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
950 call CHECK(20, 'E171', "Missing :endif", line_before_throw + 3)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
951 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
952 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
953 if !errcaught && $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
954 call CHECK(20)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
955 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
956 break " discard error for $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
957 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
958 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
959 call CHECK(21)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
960
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
961 Xpath 1073741824 " X: 1073741824
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
962
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
963 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
964
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
965 Xcheck 2038431743
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
966
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
967
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
968 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
969 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
970 " Test 60: (Re)throwing v:exception; :echoerr. {{{1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
971 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
972 " A user exception can be rethrown after catching by throwing
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
973 " v:exception. An error or interrupt exception cannot be rethrown
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
974 " because Vim exceptions cannot be faked. A Vim exception using the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
975 " value of v:exception can, however, be triggered by the :echoerr
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
976 " command.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
977 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
978
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
979 XpathINIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
980
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
981 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
982 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
983 Xpath 1 " X: 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
984 throw "oops"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
985 catch /oops/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
986 Xpath 2 " X: 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
987 throw v:exception " rethrow user exception
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
988 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
989 Xpath 4 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
990 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
991 catch /^oops$/ " catches rethrown user exception
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
992 Xpath 8 " X: 8
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
993 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
994 Xpath 16 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
995 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
996
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
997 function! F()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
998 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
999 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1000 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1001 Xpath 32 " X: 32
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1002 write /n/o/n/w/r/i/t/a/b/l/e/_/f/i/l/e
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1003 Xpath 64 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1004 Xout "did_emsg was reset before executing " .
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1005 \ "BufWritePost autocommands."
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1006 catch /^Vim(write):/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1007 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1008 throw v:exception " throw error: cannot fake Vim exception
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1009 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1010 Xpath 128 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1011 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1012 Xpath 256 " X: 256
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1013 if !caught && !$VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1014 Xpath 512 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1015 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1016 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1017 catch /^Vim(throw):/ " catches throw error
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1018 let caught = caught + 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1019 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1020 Xpath 1024 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1021 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1022 Xpath 2048 " X: 2048
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1023 if caught != 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1024 if !caught && !$VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1025 Xpath 4096 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1026 elseif caught
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1027 Xpath 8192 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1028 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1029 return | " discard error for $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1030 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1031 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1032 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1033
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1034 call F()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1035 delfunction F
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1036
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1037 function! G()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1038 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1039 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1040 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1041 Xpath 16384 " X: 16384
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1042 asdf
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1043 catch /^Vim/ " catch error exception
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1044 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1045 " Trigger Vim error exception with value specified after :echoerr
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1046 let value = substitute(v:exception, '^Vim\((.*)\)\=:', '', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1047 echoerr value
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1048 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1049 Xpath 32768 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1050 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1051 Xpath 65536 " X: 65536
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1052 if !caught
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1053 if !$VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1054 Xpath 131072 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1055 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1056 let value = "Error"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1057 echoerr value
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1058 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1059 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1060 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1061 catch /^Vim(echoerr):/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1062 let caught = caught + 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1063 if v:exception !~ value
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1064 Xpath 262144 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1065 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1066 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1067 Xpath 524288 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1068 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1069 Xpath 1048576 " X: 1048576
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1070 if caught != 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1071 if !caught && !$VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1072 Xpath 2097152 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1073 elseif caught
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1074 Xpath 4194304 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1075 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1076 return | " discard error for $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1077 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1078 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1079 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1080
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1081 call G()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1082 delfunction G
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1083
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1084 unlet! value caught
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1085
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1086 if ExtraVim()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1087 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1088 let errcaught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1089 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1090 Xpath 8388608 " X: 8388608
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1091 let intcaught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1092 "INTERRUPT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1093 catch /^Vim:/ " catch interrupt exception
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1094 let intcaught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1095 " Trigger Vim error exception with value specified after :echoerr
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1096 echoerr substitute(v:exception, '^Vim\((.*)\)\=:', '', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1097 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1098 Xpath 16777216 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1099 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1100 Xpath 33554432 " X: 33554432
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1101 if !intcaught
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1102 if !$VIMNOINTTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1103 Xpath 67108864 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1104 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1105 echoerr "Interrupt"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1106 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1107 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1108 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1109 catch /^Vim(echoerr):/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1110 let errcaught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1111 if v:exception !~ "Interrupt"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1112 Xpath 134217728 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1113 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1114 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1115 Xpath 268435456 " X: 268435456
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1116 if !errcaught && !$VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1117 Xpath 536870912 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1118 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1119 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1120 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1121
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1122 Xcheck 311511339
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1123
21666
97b887aecd4a patch 8.2.1383: test 49 is old style
Bram Moolenaar <Bram@vim.org>
parents: 21632
diff changeset
1124 " Test 61 was moved to test_vimscript.vim
97b887aecd4a patch 8.2.1383: test 49 is old style
Bram Moolenaar <Bram@vim.org>
parents: 21632
diff changeset
1125 let Xtest = 62
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1126
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1127 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1128 " Test 62: Catching error exceptions {{{1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1129 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1130 " An error inside a :try/:endtry region is converted to an exception
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1131 " and can be caught. The error exception has a "Vim(cmdname):" prefix
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1132 " where cmdname is the name of the failing command, or a "Vim:" prefix
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1133 " if no command name is known. The "Vim" prefixes cannot be faked.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1134 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1135
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1136 XpathINIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1137
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1138 function! MSG(enr, emsg)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1139 let english = v:lang == "C" || v:lang =~ '^[Ee]n'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1140 if a:enr == ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1141 Xout "TODO: Add message number for:" a:emsg
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1142 let v:errmsg = ":" . v:errmsg
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1143 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1144 let match = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1145 if v:errmsg !~ '^'.a:enr.':' || (english && v:errmsg !~ a:emsg)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1146 let match = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1147 if v:errmsg == ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1148 Xout "Message missing."
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1149 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1150 let v:errmsg = escape(v:errmsg, '"')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1151 Xout "Unexpected message:" v:errmsg
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1152 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1153 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1154 return match
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1155 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1156
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1157 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1158 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1159 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1160 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1161 unlet novar
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1162 catch /^Vim(unlet):/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1163 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1164 let v:errmsg = substitute(v:exception, '^Vim(unlet):', '', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1165 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1166 Xpath 1 " X: 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1167 if !caught && !$VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1168 Xpath 2 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1169 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1170 if !MSG('E108', "No such variable")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1171 Xpath 4 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1172 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1173 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1174 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1175 Xpath 8 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1176 Xout v:exception "in" v:throwpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1177 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1178 break " discard error for $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1179 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1180 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1181
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1182 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1183 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1184 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1185 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1186 throw novar " error in :throw
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1187 catch /^Vim(throw):/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1188 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1189 let v:errmsg = substitute(v:exception, '^Vim(throw):', '', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1190 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1191 Xpath 16 " X: 16
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1192 if !caught && !$VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1193 Xpath 32 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1194 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1195 if caught ? !MSG('E121', "Undefined variable")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1196 \ : !MSG('E15', "Invalid expression")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1197 Xpath 64 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1198 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1199 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1200 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1201 Xpath 128 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1202 Xout v:exception "in" v:throwpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1203 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1204 break " discard error for $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1205 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1206 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1207
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1208 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1209 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1210 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1211 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1212 throw "Vim:faked" " error: cannot fake Vim exception
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1213 catch /^Vim(throw):/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1214 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1215 let v:errmsg = substitute(v:exception, '^Vim(throw):', '', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1216 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1217 Xpath 256 " X: 256
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1218 if !caught && !$VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1219 Xpath 512 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1220 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1221 if !MSG('E608', "Cannot :throw exceptions with 'Vim' prefix")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1222 Xpath 1024 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1223 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1224 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1225 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1226 Xpath 2048 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1227 Xout v:exception "in" v:throwpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1228 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1229 break " discard error for $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1230 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1231 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1232
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1233 function! F()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1234 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1235 " Missing :endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1236 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1237
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1238 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1239 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1240 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1241 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1242 call F()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1243 catch /^Vim(endfunction):/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1244 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1245 let v:errmsg = substitute(v:exception, '^Vim(endfunction):', '', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1246 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1247 Xpath 4096 " X: 4096
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1248 if !caught && !$VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1249 Xpath 8192 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1250 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1251 if !MSG('E170', "Missing :endwhile")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1252 Xpath 16384 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1253 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1254 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1255 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1256 Xpath 32768 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1257 Xout v:exception "in" v:throwpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1258 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1259 break " discard error for $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1260 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1261 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1262
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1263 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1264 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1265 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1266 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1267 ExecAsScript F
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1268 catch /^Vim:/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1269 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1270 let v:errmsg = substitute(v:exception, '^Vim:', '', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1271 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1272 Xpath 65536 " X: 65536
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1273 if !caught && !$VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1274 Xpath 131072 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1275 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1276 if !MSG('E170', "Missing :endwhile")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1277 Xpath 262144 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1278 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1279 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1280 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1281 Xpath 524288 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1282 Xout v:exception "in" v:throwpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1283 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1284 break " discard error for $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1285 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1286 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1287
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1288 function! G()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1289 call G()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1290 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1291
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1292 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1293 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1294 let mfd_save = &mfd
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1295 set mfd=3
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1296 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1297 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1298 call G()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1299 catch /^Vim(call):/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1300 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1301 let v:errmsg = substitute(v:exception, '^Vim(call):', '', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1302 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1303 Xpath 1048576 " X: 1048576
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1304 if !caught && !$VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1305 Xpath 2097152 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1306 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1307 if !MSG('E132', "Function call depth is higher than 'maxfuncdepth'")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1308 Xpath 4194304 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1309 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1310 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1311 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1312 Xpath 8388608 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1313 Xout v:exception "in" v:throwpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1314 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1315 let &mfd = mfd_save
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1316 break " discard error for $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1317 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1318 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1319
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1320 function! H()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1321 return H()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1322 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1323
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1324 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1325 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1326 let mfd_save = &mfd
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1327 set mfd=3
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1328 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1329 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1330 call H()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1331 catch /^Vim(return):/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1332 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1333 let v:errmsg = substitute(v:exception, '^Vim(return):', '', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1334 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1335 Xpath 16777216 " X: 16777216
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1336 if !caught && !$VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1337 Xpath 33554432 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1338 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1339 if !MSG('E132', "Function call depth is higher than 'maxfuncdepth'")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1340 Xpath 67108864 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1341 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1342 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1343 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1344 Xpath 134217728 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1345 Xout v:exception "in" v:throwpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1346 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1347 let &mfd = mfd_save
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1348 break " discard error for $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1349 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1350 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1351
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1352 unlet! caught mfd_save
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1353 delfunction F
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1354 delfunction G
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1355 delfunction H
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1356 Xpath 268435456 " X: 268435456
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1357
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1358 Xcheck 286331153
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1359
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1360 " Leave MSG() for the next test.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1361
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1362
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1363 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1364 " Test 63: Suppressing error exceptions by :silent!. {{{1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1365 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1366 " A :silent! command inside a :try/:endtry region suppresses the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1367 " conversion of errors to an exception and the immediate abortion on
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1368 " error. When the commands executed by the :silent! themselves open
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1369 " a new :try/:endtry region, conversion of errors to exception and
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1370 " immediate abortion is switched on again - until the next :silent!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1371 " etc. The :silent! has the effect of setting v:errmsg to the error
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1372 " message text (without displaying it) and continuing with the next
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1373 " script line.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1374 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1375 " When a command triggering autocommands is executed by :silent!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1376 " inside a :try/:endtry, the autocommand execution is not suppressed
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1377 " on error.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1378 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1379 " This test reuses the function MSG() from the previous test.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1380 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1381
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1382 XpathINIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1383
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1384 XloopINIT! 1 4
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1385
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1386 let taken = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1387
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1388 function! S(n) abort
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1389 XloopNEXT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1390 let g:taken = g:taken . "E" . a:n
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1391 let v:errmsg = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1392 exec "asdf" . a:n
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1393
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1394 " Check that ":silent!" continues:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1395 Xloop 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1396
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1397 " Check that ":silent!" sets "v:errmsg":
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1398 if MSG('E492', "Not an editor command")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1399 Xloop 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1400 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1401 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1402
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1403 function! Foo()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1404 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1405 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1406 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1407 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1408 " This is not silent:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1409 call S(3) " X: 0 * 16
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1410 catch /^Vim:/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1411 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1412 let errmsg3 = substitute(v:exception, '^Vim:', '', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1413 silent! call S(4) " X: 3 * 64
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1414 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1415 if !caught
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1416 let errmsg3 = v:errmsg
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1417 " Do call S(4) here if not executed in :catch.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1418 silent! call S(4)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1419 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1420 Xpath 1048576 " X: 1048576
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1421 if !caught && !$VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1422 Xpath 2097152 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1423 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1424 let v:errmsg = errmsg3
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1425 if !MSG('E492', "Not an editor command")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1426 Xpath 4194304 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1427 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1428 silent! call S(5) " X: 3 * 256
303
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1429 " Break out of try conditionals that cover ":silent!". This also
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1430 " discards the aborting error when $VIMNOERRTHROW is non-zero.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1431 break
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1432 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1433 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1434 Xpath 8388608 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1435 Xout v:exception "in" v:throwpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1436 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1437 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1438 " This is a double ":silent!" (see caller).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1439 silent! call S(6) " X: 3 * 1024
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1440 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1441
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1442 function! Bar()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1443 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1444 silent! call S(2) " X: 3 * 4
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1445 " X: 3 * 4096
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1446 silent! execute "call Foo() | call S(7)"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1447 silent! call S(8) " X: 3 * 16384
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1448 endtry " normal end of try cond that covers ":silent!"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1449 " This has a ":silent!" from the caller:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1450 call S(9) " X: 3 * 65536
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1451 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1452
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1453 silent! call S(1) " X: 3 * 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1454 silent! call Bar()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1455 silent! call S(10) " X: 3 * 262144
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1456
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1457 let expected = "E1E2E3E4E5E6E7E8E9E10"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1458 if taken != expected
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1459 Xpath 16777216 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1460 Xout "'taken' is" taken "instead of" expected
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1461 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1462
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1463 augroup TMP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1464 autocmd BufWritePost * Xpath 33554432 " X: 33554432
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1465 augroup END
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1466
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1467 Xpath 67108864 " X: 67108864
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1468 write /i/m/p/o/s/s/i/b/l/e
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1469 Xpath 134217728 " X: 134217728
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1470
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1471 autocmd! TMP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1472 unlet! caught errmsg3 taken expected
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1473 delfunction S
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1474 delfunction Foo
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1475 delfunction Bar
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1476 delfunction MSG
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1477
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1478 Xcheck 236978127
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1479
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1480
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1481 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1482 " Test 64: Error exceptions after error, interrupt or :throw {{{1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1483 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1484 " When an error occurs after an interrupt or a :throw but before
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1485 " a matching :catch is reached, all following :catches of that try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1486 " block are ignored, but the error exception can be caught by the next
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1487 " surrounding try conditional. Any previous error exception is
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1488 " discarded. An error is ignored when there is a previous error that
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1489 " has not been caught.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1490 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1491
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1492 XpathINIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1493
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1494 if ExtraVim()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1495
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1496 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1497 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1498 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1499 Xpath 1 " X: 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1500 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1501 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1502 " if 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1503 " Missing :endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1504 endwhile " throw error exception
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1505 catch /^Vim(/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1506 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1507 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1508 Xpath 2 " X: 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1509 if caught || $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1510 Xpath 4 " X: 4
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1511 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1512 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1513 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1514 Xpath 8 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1515 Xout v:exception "in" v:throwpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1516 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1517 break " discard error for $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1518 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1519 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1520
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1521 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1522 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1523 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1524 Xpath 16 " X: 16
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1525 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1526 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1527 " if 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1528 " Missing :endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1529 catch /.*/ " throw error exception
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1530 Xpath 32 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1531 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1532 Xpath 64 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1533 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1534 catch /^Vim(/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1535 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1536 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1537 Xpath 128 " X: 128
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1538 if caught || $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1539 Xpath 256 " X: 256
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1540 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1541 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1542 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1543 Xpath 512 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1544 Xout v:exception "in" v:throwpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1545 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1546 break " discard error for $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1547 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1548 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1549
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1550 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1551 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1552 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1553 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1554 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1555 Xpath 1024 " X: 1024
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1556 "INTERRUPT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1557 catch /do_not_catch/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1558 Xpath 2048 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1559 " if 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1560 " Missing :endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1561 catch /.*/ " throw error exception
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1562 Xpath 4096 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1563 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1564 Xpath 8192 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1565 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1566 catch /^Vim(/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1567 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1568 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1569 Xpath 16384 " X: 16384
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1570 if caught || $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1571 Xpath 32768 " X: 32768
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1572 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1573 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1574 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1575 Xpath 65536 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1576 Xout v:exception "in" v:throwpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1577 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1578 break " discard error for $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1579 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1580 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1581
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1582 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1583 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1584 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1585 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1586 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1587 Xpath 131072 " X: 131072
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1588 throw "x"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1589 catch /do_not_catch/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1590 Xpath 262144 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1591 " if 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1592 " Missing :endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1593 catch /x/ " throw error exception
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1594 Xpath 524288 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1595 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1596 Xpath 1048576 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1597 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1598 catch /^Vim(/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1599 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1600 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1601 Xpath 2097152 " X: 2097152
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1602 if caught || $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1603 Xpath 4194304 " X: 4194304
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1604 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1605 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1606 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1607 Xpath 8388608 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1608 Xout v:exception "in" v:throwpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1609 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1610 break " discard error for $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1611 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1612 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1613
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1614 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1615 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1616 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1617 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1618 Xpath 16777216 " X: 16777216
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1619 " endif " :endif without :if; throw error exception
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1620 " if 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1621 " Missing :endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1622 catch /do_not_catch/ " ignore new error
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1623 Xpath 33554432 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1624 catch /^Vim(endif):/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1625 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1626 catch /^Vim(/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1627 Xpath 67108864 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1628 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1629 Xpath 134217728 " X: 134217728
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1630 if caught || $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1631 Xpath 268435456 " X: 268435456
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1632 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1633 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1634 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1635 Xpath 536870912 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1636 Xout v:exception "in" v:throwpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1637 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1638 break " discard error for $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1639 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1640 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1641
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1642 Xpath 1073741824 " X: 1073741824
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1643
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1644 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1645
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1646 Xcheck 1499645335
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1647
21666
97b887aecd4a patch 8.2.1383: test 49 is old style
Bram Moolenaar <Bram@vim.org>
parents: 21632
diff changeset
1648 " Test 65 was moved to test_vimscript.vim
97b887aecd4a patch 8.2.1383: test 49 is old style
Bram Moolenaar <Bram@vim.org>
parents: 21632
diff changeset
1649 let Xtest = 66
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1650
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1651 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1652 " Test 66: Stop range :call on error, interrupt, or :throw {{{1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1653 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1654 " When a function which is multiply called for a range since it
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1655 " doesn't handle the range itself has an error in a command
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1656 " dynamically enclosed by :try/:endtry or gets an interrupt or
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1657 " executes a :throw, no more calls for the remaining lines in the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1658 " range are made. On an error in a command not dynamically enclosed
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1659 " by :try/:endtry, the function is executed again for the remaining
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1660 " lines in the range.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1661 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1662
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1663 XpathINIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1664
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1665 if ExtraVim()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1666
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1667 let file = tempname()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1668 exec "edit" file
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1669
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1670 insert
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1671 line 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1672 line 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1673 line 3
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1674 .
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1675
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1676 XloopINIT! 1 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1677
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1678 let taken = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1679 let expected = "G1EF1E(1)F1E(2)F1E(3)G2EF2E(1)G3IF3I(1)G4TF4T(1)G5AF5A(1)"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1680
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1681 function! F(reason, n) abort
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1682 let g:taken = g:taken . "F" . a:n .
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1683 \ substitute(a:reason, '\(\l\).*', '\u\1', "") .
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1684 \ "(" . line(".") . ")"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1685
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1686 if a:reason == "error"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1687 asdf
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1688 elseif a:reason == "interrupt"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1689 "INTERRUPT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1690 let dummy = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1691 elseif a:reason == "throw"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1692 throw "xyz"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1693 elseif a:reason == "aborting error"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1694 XloopNEXT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1695 if g:taken != g:expected
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1696 Xloop 1 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1697 Xout "'taken' is" g:taken "instead of" g:expected
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1698 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1699 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1700 bwipeout!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1701 call delete(file)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1702 asdf
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1703 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1704 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1705 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1706
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1707 function! G(reason, n)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1708 let g:taken = g:taken . "G" . a:n .
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1709 \ substitute(a:reason, '\(\l\).*', '\u\1', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1710 1,3call F(a:reason, a:n)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1711 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1712
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1713 Xpath 8 " X: 8
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1714 call G("error", 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1715 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1716 Xpath 16 " X: 16
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1717 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1718 call G("error", 2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1719 Xpath 32 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1720 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1721 Xpath 64 " X: 64
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1722 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1723 call G("interrupt", 3)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1724 Xpath 128 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1725 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1726 Xpath 256 " X: 256
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1727 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1728 call G("throw", 4)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1729 Xpath 512 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1730 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1731 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1732 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1733 catch /xyz/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1734 Xpath 1024 " X: 1024
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1735 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1736 Xpath 2048 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1737 Xout v:exception "in" ExtraVimThrowpoint()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1738 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1739 Xpath 4096 " X: 4096
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1740 call G("aborting error", 5)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1741 Xpath 8192 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1742 Xout "'taken' is" taken "instead of" expected
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1743
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1744 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1745
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1746 Xcheck 5464
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1747
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1748
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1749 "-------------------------------------------------------------------------------
303
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1750 " Test 67: :throw across :call command {{{1
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1751 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1752 " On a call command, an exception might be thrown when evaluating the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1753 " function name, during evaluation of the arguments, or when the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1754 " function is being executed. The exception can be caught by the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1755 " caller.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1756 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1757
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1758 XpathINIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1759
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1760 function! THROW(x, n)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1761 if a:n == 1
303
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1762 Xpath 1 " X: 1
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1763 elseif a:n == 2
303
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1764 Xpath 2 " X: 2
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1765 elseif a:n == 3
303
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1766 Xpath 4 " X: 4
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1767 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1768 throw a:x
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1769 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1770
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1771 function! NAME(x, n)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1772 if a:n == 1
303
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1773 Xpath 8 " X: 0
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1774 elseif a:n == 2
303
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1775 Xpath 16 " X: 16
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1776 elseif a:n == 3
303
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1777 Xpath 32 " X: 32
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1778 elseif a:n == 4
303
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1779 Xpath 64 " X: 64
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1780 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1781 return a:x
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1782 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1783
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1784 function! ARG(x, n)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1785 if a:n == 1
303
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1786 Xpath 128 " X: 0
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1787 elseif a:n == 2
303
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1788 Xpath 256 " X: 0
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1789 elseif a:n == 3
303
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1790 Xpath 512 " X: 512
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1791 elseif a:n == 4
303
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1792 Xpath 1024 " X: 1024
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1793 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1794 return a:x
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1795 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1796
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1797 function! F(x, n)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1798 if a:n == 2
303
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1799 Xpath 2048 " X: 0
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1800 elseif a:n == 4
303
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1801 Xpath 4096 " X: 4096
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1802 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1803 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1804
303
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1805 while 1
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1806 try
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1807 let error = 0
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1808 let v:errmsg = ""
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1809
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1810 while 1
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1811 try
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1812 Xpath 8192 " X: 8192
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1813 call {NAME(THROW("name", 1), 1)}(ARG(4711, 1), 1)
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1814 Xpath 16384 " X: 0
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1815 catch /^name$/
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1816 Xpath 32768 " X: 32768
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1817 catch /.*/
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1818 let error = 1
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1819 Xout "1:" v:exception "in" v:throwpoint
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1820 finally
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1821 if !error && $VIMNOERRTHROW && v:errmsg != ""
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1822 let error = 1
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1823 Xout "1:" v:errmsg
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1824 endif
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1825 if error
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1826 Xpath 65536 " X: 0
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1827 endif
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1828 let error = 0
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1829 let v:errmsg = ""
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1830 break " discard error for $VIMNOERRTHROW
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1831 endtry
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1832 endwhile
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1833
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1834 while 1
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1835 try
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1836 Xpath 131072 " X: 131072
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1837 call {NAME("F", 2)}(ARG(THROW("arg", 2), 2), 2)
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1838 Xpath 262144 " X: 0
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1839 catch /^arg$/
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1840 Xpath 524288 " X: 524288
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1841 catch /.*/
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1842 let error = 1
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1843 Xout "2:" v:exception "in" v:throwpoint
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1844 finally
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1845 if !error && $VIMNOERRTHROW && v:errmsg != ""
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1846 let error = 1
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1847 Xout "2:" v:errmsg
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1848 endif
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1849 if error
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1850 Xpath 1048576 " X: 0
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1851 endif
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1852 let error = 0
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1853 let v:errmsg = ""
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1854 break " discard error for $VIMNOERRTHROW
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1855 endtry
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1856 endwhile
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1857
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1858 while 1
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1859 try
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1860 Xpath 2097152 " X: 2097152
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1861 call {NAME("THROW", 3)}(ARG("call", 3), 3)
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1862 Xpath 4194304 " X: 0
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1863 catch /^call$/
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1864 Xpath 8388608 " X: 8388608
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1865 catch /^0$/ " default return value
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1866 Xpath 16777216 " X: 0
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1867 Xout "3:" v:throwpoint
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1868 catch /.*/
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1869 let error = 1
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1870 Xout "3:" v:exception "in" v:throwpoint
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1871 finally
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1872 if !error && $VIMNOERRTHROW && v:errmsg != ""
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1873 let error = 1
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1874 Xout "3:" v:errmsg
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1875 endif
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1876 if error
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1877 Xpath 33554432 " X: 0
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1878 endif
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1879 let error = 0
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1880 let v:errmsg = ""
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1881 break " discard error for $VIMNOERRTHROW
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1882 endtry
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1883 endwhile
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1884
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1885 while 1
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1886 try
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1887 Xpath 67108864 " X: 67108864
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1888 call {NAME("F", 4)}(ARG(4711, 4), 4)
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1889 Xpath 134217728 " X: 134217728
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1890 catch /.*/
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1891 let error = 1
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1892 Xout "4:" v:exception "in" v:throwpoint
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1893 finally
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1894 if !error && $VIMNOERRTHROW && v:errmsg != ""
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1895 let error = 1
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1896 Xout "4:" v:errmsg
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1897 endif
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1898 if error
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1899 Xpath 268435456 " X: 0
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1900 endif
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1901 let error = 0
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1902 let v:errmsg = ""
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1903 break " discard error for $VIMNOERRTHROW
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1904 endtry
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1905 endwhile
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1906
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1907 catch /^0$/ " default return value
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1908 Xpath 536870912 " X: 0
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1909 Xout v:throwpoint
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1910 catch /.*/
303
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1911 let error = 1
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1912 Xout v:exception "in" v:throwpoint
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1913 finally
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1914 if !error && $VIMNOERRTHROW && v:errmsg != ""
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1915 let error = 1
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1916 Xout v:errmsg
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1917 endif
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1918 if error
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1919 Xpath 1073741824 " X: 0
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1920 endif
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1921 break " discard error for $VIMNOERRTHROW
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1922 endtry
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1923 endwhile
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1924
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1925 unlet error
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1926 delfunction F
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1927
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1928 Xcheck 212514423
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1929
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1930 " Leave THROW(), NAME(), and ARG() for the next test.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1931
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1932
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1933 "-------------------------------------------------------------------------------
303
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1934 " Test 68: :throw across function calls in expressions {{{1
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1935 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1936 " On a function call within an expression, an exception might be
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1937 " thrown when evaluating the function name, during evaluation of the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1938 " arguments, or when the function is being executed. The exception
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1939 " can be caught by the caller.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1940 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1941 " This test reuses the functions THROW(), NAME(), and ARG() from the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1942 " previous test.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1943 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1944
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1945 XpathINIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1946
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1947 function! F(x, n)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1948 if a:n == 2
303
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1949 Xpath 2048 " X: 0
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1950 elseif a:n == 4
303
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1951 Xpath 4096 " X: 4096
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1952 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1953 return a:x
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1954 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1955
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1956 unlet! var1 var2 var3 var4
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1957
303
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1958 while 1
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1959 try
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1960 let error = 0
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1961 let v:errmsg = ""
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1962
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1963 while 1
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1964 try
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1965 Xpath 8192 " X: 8192
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1966 let var1 = {NAME(THROW("name", 1), 1)}(ARG(4711, 1), 1)
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1967 Xpath 16384 " X: 0
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1968 catch /^name$/
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1969 Xpath 32768 " X: 32768
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1970 catch /.*/
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1971 let error = 1
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1972 Xout "1:" v:exception "in" v:throwpoint
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1973 finally
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1974 if !error && $VIMNOERRTHROW && v:errmsg != ""
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1975 let error = 1
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1976 Xout "1:" v:errmsg
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1977 endif
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1978 if error
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1979 Xpath 65536 " X: 0
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1980 endif
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1981 let error = 0
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1982 let v:errmsg = ""
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1983 break " discard error for $VIMNOERRTHROW
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1984 endtry
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1985 endwhile
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1986
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1987 while 1
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1988 try
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1989 Xpath 131072 " X: 131072
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1990 let var2 = {NAME("F", 2)}(ARG(THROW("arg", 2), 2), 2)
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1991 Xpath 262144 " X: 0
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1992 catch /^arg$/
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1993 Xpath 524288 " X: 524288
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1994 catch /.*/
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1995 let error = 1
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1996 Xout "2:" v:exception "in" v:throwpoint
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1997 finally
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1998 if !error && $VIMNOERRTHROW && v:errmsg != ""
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1999 let error = 1
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2000 Xout "2:" v:errmsg
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2001 endif
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2002 if error
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2003 Xpath 1048576 " X: 0
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2004 endif
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2005 let error = 0
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2006 let v:errmsg = ""
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2007 break " discard error for $VIMNOERRTHROW
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2008 endtry
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2009 endwhile
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2010
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2011 while 1
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2012 try
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2013 Xpath 2097152 " X: 2097152
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2014 let var3 = {NAME("THROW", 3)}(ARG("call", 3), 3)
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2015 Xpath 4194304 " X: 0
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2016 catch /^call$/
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2017 Xpath 8388608 " X: 8388608
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2018 catch /^0$/ " default return value
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2019 Xpath 16777216 " X: 0
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2020 Xout "3:" v:throwpoint
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2021 catch /.*/
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2022 let error = 1
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2023 Xout "3:" v:exception "in" v:throwpoint
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2024 finally
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2025 if !error && $VIMNOERRTHROW && v:errmsg != ""
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2026 let error = 1
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2027 Xout "3:" v:errmsg
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2028 endif
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2029 if error
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2030 Xpath 33554432 " X: 0
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2031 endif
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2032 let error = 0
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2033 let v:errmsg = ""
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2034 break " discard error for $VIMNOERRTHROW
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2035 endtry
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2036 endwhile
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2037
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2038 while 1
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2039 try
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2040 Xpath 67108864 " X: 67108864
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2041 let var4 = {NAME("F", 4)}(ARG(4711, 4), 4)
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2042 Xpath 134217728 " X: 134217728
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2043 catch /.*/
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2044 let error = 1
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2045 Xout "4:" v:exception "in" v:throwpoint
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2046 finally
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2047 if !error && $VIMNOERRTHROW && v:errmsg != ""
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2048 let error = 1
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2049 Xout "4:" v:errmsg
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2050 endif
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2051 if error
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2052 Xpath 268435456 " X: 0
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2053 endif
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2054 let error = 0
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2055 let v:errmsg = ""
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2056 break " discard error for $VIMNOERRTHROW
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2057 endtry
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2058 endwhile
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2059
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2060 catch /^0$/ " default return value
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2061 Xpath 536870912 " X: 0
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2062 Xout v:throwpoint
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2063 catch /.*/
303
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2064 let error = 1
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2065 Xout v:exception "in" v:throwpoint
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2066 finally
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2067 if !error && $VIMNOERRTHROW && v:errmsg != ""
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2068 let error = 1
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2069 Xout v:errmsg
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2070 endif
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2071 if error
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2072 Xpath 1073741824 " X: 0
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2073 endif
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2074 break " discard error for $VIMNOERRTHROW
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2075 endtry
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2076 endwhile
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2077
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2078 if exists("var1") || exists("var2") || exists("var3") ||
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2079 \ !exists("var4") || var4 != 4711
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2080 " The Xpath command does not accept 2^31 (negative); add explicitly:
303
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2081 let Xpath = Xpath + 2147483648 " X: 0
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2082 if exists("var1")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2083 Xout "var1 =" var1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2084 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2085 if exists("var2")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2086 Xout "var2 =" var2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2087 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2088 if exists("var3")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2089 Xout "var3 =" var3
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2090 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2091 if !exists("var4")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2092 Xout "var4 unset"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2093 elseif var4 != 4711
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2094 Xout "var4 =" var4
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2095 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2096 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2097
303
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2098 unlet! error var1 var2 var3 var4
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2099 delfunction THROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2100 delfunction NAME
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2101 delfunction ARG
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2102 delfunction F
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2103
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2104 Xcheck 212514423
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2105
18504
ece46bd3c9af patch 8.1.2246: some tests are still in old style
Bram Moolenaar <Bram@vim.org>
parents: 18269
diff changeset
2106 " Tests 69 to 75 were moved to test_trycatch.vim
ece46bd3c9af patch 8.1.2246: some tests are still in old style
Bram Moolenaar <Bram@vim.org>
parents: 18269
diff changeset
2107 let Xtest = 76
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2108
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2109
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2110 "-------------------------------------------------------------------------------
303
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2111 " Test 76: Errors, interrupts, :throw during expression evaluation {{{1
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2112 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2113 " When a function call made during expression evaluation is aborted
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2114 " due to an error inside a :try/:endtry region or due to an interrupt
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2115 " or a :throw, the expression evaluation is aborted as well. No
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2116 " message is displayed for the cancelled expression evaluation. On an
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2117 " error not inside :try/:endtry, the expression evaluation continues.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2118 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2119
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2120 XpathINIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2121
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2122 if ExtraVim()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2123
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2124 let taken = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2125
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2126 function! ERR(n)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2127 let g:taken = g:taken . "E" . a:n
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2128 asdf
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2129 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2130
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2131 function! ERRabort(n) abort
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2132 let g:taken = g:taken . "A" . a:n
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2133 asdf
341
b516a9f9d603 updated for version 7.0088
vimboss
parents: 336
diff changeset
2134 endfunction " returns -1; may cause follow-up msg for illegal var/func name
b516a9f9d603 updated for version 7.0088
vimboss
parents: 336
diff changeset
2135
b516a9f9d603 updated for version 7.0088
vimboss
parents: 336
diff changeset
2136 function! WRAP(n, arg)
b516a9f9d603 updated for version 7.0088
vimboss
parents: 336
diff changeset
2137 let g:taken = g:taken . "W" . a:n
b516a9f9d603 updated for version 7.0088
vimboss
parents: 336
diff changeset
2138 let g:saved_errmsg = v:errmsg
b516a9f9d603 updated for version 7.0088
vimboss
parents: 336
diff changeset
2139 return arg
b516a9f9d603 updated for version 7.0088
vimboss
parents: 336
diff changeset
2140 endfunction
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2141
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2142 function! INT(n)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2143 let g:taken = g:taken . "I" . a:n
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2144 "INTERRUPT9
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2145 let dummy = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2146 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2147
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2148 function! THR(n)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2149 let g:taken = g:taken . "T" . a:n
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2150 throw "should not be caught"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2151 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2152
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2153 function! CONT(n)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2154 let g:taken = g:taken . "C" . a:n
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2155 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2156
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2157 function! MSG(n)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2158 let g:taken = g:taken . "M" . a:n
341
b516a9f9d603 updated for version 7.0088
vimboss
parents: 336
diff changeset
2159 let errmsg = (a:n >= 37 && a:n <= 44) ? g:saved_errmsg : v:errmsg
b516a9f9d603 updated for version 7.0088
vimboss
parents: 336
diff changeset
2160 let msgptn = (a:n >= 10 && a:n <= 27) ? "^$" : "asdf"
b516a9f9d603 updated for version 7.0088
vimboss
parents: 336
diff changeset
2161 if errmsg !~ msgptn
b516a9f9d603 updated for version 7.0088
vimboss
parents: 336
diff changeset
2162 let g:taken = g:taken . "x"
b516a9f9d603 updated for version 7.0088
vimboss
parents: 336
diff changeset
2163 Xout "Expr" a:n.": Unexpected message:" v:errmsg
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2164 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2165 let v:errmsg = ""
341
b516a9f9d603 updated for version 7.0088
vimboss
parents: 336
diff changeset
2166 let g:saved_errmsg = ""
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2167 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2168
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2169 let v:errmsg = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2170
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2171 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2172 let t = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2173 XloopINIT 1 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2174 while t <= 9
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2175 Xloop 1 " X: 511
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2176 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2177 if t == 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2178 let v{ERR(t) + CONT(t)} = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2179 elseif t == 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2180 let v{ERR(t) + CONT(t)}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2181 elseif t == 3
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2182 let var = exists('v{ERR(t) + CONT(t)}')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2183 elseif t == 4
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2184 unlet v{ERR(t) + CONT(t)}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2185 elseif t == 5
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2186 function F{ERR(t) + CONT(t)}()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2187 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2188 elseif t == 6
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2189 function F{ERR(t) + CONT(t)}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2190 elseif t == 7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2191 let var = exists('*F{ERR(t) + CONT(t)}')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2192 elseif t == 8
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2193 delfunction F{ERR(t) + CONT(t)}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2194 elseif t == 9
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2195 let var = ERR(t) + CONT(t)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2196 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2197 catch /asdf/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2198 " v:errmsg is not set when the error message is converted to an
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2199 " exception. Set it to the original error message.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2200 let v:errmsg = substitute(v:exception, '^Vim:', '', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2201 catch /^Vim\((\a\+)\)\=:/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2202 " An error exception has been thrown after the original error.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2203 let v:errmsg = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2204 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2205 call MSG(t)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2206 let t = t + 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2207 XloopNEXT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2208 continue " discard an aborting error
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2209 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2210 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2211 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2212 Xpath 512 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2213 Xout v:exception "in" ExtraVimThrowpoint()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2214 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2215
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2216 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2217 let t = 10
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2218 XloopINIT 1024 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2219 while t <= 18
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2220 Xloop 1 " X: 1024 * 511
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2221 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2222 if t == 10
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2223 let v{INT(t) + CONT(t)} = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2224 elseif t == 11
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2225 let v{INT(t) + CONT(t)}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2226 elseif t == 12
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2227 let var = exists('v{INT(t) + CONT(t)}')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2228 elseif t == 13
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2229 unlet v{INT(t) + CONT(t)}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2230 elseif t == 14
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2231 function F{INT(t) + CONT(t)}()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2232 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2233 elseif t == 15
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2234 function F{INT(t) + CONT(t)}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2235 elseif t == 16
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2236 let var = exists('*F{INT(t) + CONT(t)}')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2237 elseif t == 17
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2238 delfunction F{INT(t) + CONT(t)}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2239 elseif t == 18
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2240 let var = INT(t) + CONT(t)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2241 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2242 catch /^Vim\((\a\+)\)\=:\(Interrupt\)\@!/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2243 " An error exception has been triggered after the interrupt.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2244 let v:errmsg = substitute(v:exception,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2245 \ '^Vim\((\a\+)\)\=:', '', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2246 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2247 call MSG(t)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2248 let t = t + 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2249 XloopNEXT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2250 continue " discard interrupt
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2251 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2252 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2253 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2254 Xpath 524288 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2255 Xout v:exception "in" ExtraVimThrowpoint()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2256 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2257
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2258 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2259 let t = 19
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2260 XloopINIT 1048576 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2261 while t <= 27
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2262 Xloop 1 " X: 1048576 * 511
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2263 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2264 if t == 19
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2265 let v{THR(t) + CONT(t)} = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2266 elseif t == 20
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2267 let v{THR(t) + CONT(t)}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2268 elseif t == 21
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2269 let var = exists('v{THR(t) + CONT(t)}')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2270 elseif t == 22
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2271 unlet v{THR(t) + CONT(t)}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2272 elseif t == 23
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2273 function F{THR(t) + CONT(t)}()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2274 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2275 elseif t == 24
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2276 function F{THR(t) + CONT(t)}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2277 elseif t == 25
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2278 let var = exists('*F{THR(t) + CONT(t)}')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2279 elseif t == 26
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2280 delfunction F{THR(t) + CONT(t)}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2281 elseif t == 27
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2282 let var = THR(t) + CONT(t)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2283 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2284 catch /^Vim\((\a\+)\)\=:/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2285 " An error exception has been triggered after the :throw.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2286 let v:errmsg = substitute(v:exception,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2287 \ '^Vim\((\a\+)\)\=:', '', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2288 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2289 call MSG(t)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2290 let t = t + 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2291 XloopNEXT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2292 continue " discard exception
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2293 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2294 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2295 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2296 Xpath 536870912 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2297 Xout v:exception "in" ExtraVimThrowpoint()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2298 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2299
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2300 let v{ERR(28) + CONT(28)} = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2301 call MSG(28)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2302 let v{ERR(29) + CONT(29)}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2303 call MSG(29)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2304 let var = exists('v{ERR(30) + CONT(30)}')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2305 call MSG(30)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2306 unlet v{ERR(31) + CONT(31)}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2307 call MSG(31)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2308 function F{ERR(32) + CONT(32)}()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2309 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2310 call MSG(32)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2311 function F{ERR(33) + CONT(33)}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2312 call MSG(33)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2313 let var = exists('*F{ERR(34) + CONT(34)}')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2314 call MSG(34)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2315 delfunction F{ERR(35) + CONT(35)}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2316 call MSG(35)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2317 let var = ERR(36) + CONT(36)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2318 call MSG(36)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2319
341
b516a9f9d603 updated for version 7.0088
vimboss
parents: 336
diff changeset
2320 let saved_errmsg = ""
b516a9f9d603 updated for version 7.0088
vimboss
parents: 336
diff changeset
2321
b516a9f9d603 updated for version 7.0088
vimboss
parents: 336
diff changeset
2322 let v{WRAP(37, ERRabort(37)) + CONT(37)} = 0
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2323 call MSG(37)
341
b516a9f9d603 updated for version 7.0088
vimboss
parents: 336
diff changeset
2324 let v{WRAP(38, ERRabort(38)) + CONT(38)}
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2325 call MSG(38)
341
b516a9f9d603 updated for version 7.0088
vimboss
parents: 336
diff changeset
2326 let var = exists('v{WRAP(39, ERRabort(39)) + CONT(39)}')
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2327 call MSG(39)
341
b516a9f9d603 updated for version 7.0088
vimboss
parents: 336
diff changeset
2328 unlet v{WRAP(40, ERRabort(40)) + CONT(40)}
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2329 call MSG(40)
341
b516a9f9d603 updated for version 7.0088
vimboss
parents: 336
diff changeset
2330 function F{WRAP(41, ERRabort(41)) + CONT(41)}()
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2331 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2332 call MSG(41)
341
b516a9f9d603 updated for version 7.0088
vimboss
parents: 336
diff changeset
2333 function F{WRAP(42, ERRabort(42)) + CONT(42)}
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2334 call MSG(42)
341
b516a9f9d603 updated for version 7.0088
vimboss
parents: 336
diff changeset
2335 let var = exists('*F{WRAP(43, ERRabort(43)) + CONT(43)}')
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2336 call MSG(43)
341
b516a9f9d603 updated for version 7.0088
vimboss
parents: 336
diff changeset
2337 delfunction F{WRAP(44, ERRabort(44)) + CONT(44)}
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2338 call MSG(44)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2339 let var = ERRabort(45) + CONT(45)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2340 call MSG(45)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2341
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2342 Xpath 1073741824 " X: 1073741824
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2343
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2344 let expected = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2345 \ . "E1M1E2M2E3M3E4M4E5M5E6M6E7M7E8M8E9M9"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2346 \ . "I10M10I11M11I12M12I13M13I14M14I15M15I16M16I17M17I18M18"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2347 \ . "T19M19T20M20T21M21T22M22T23M23T24M24T25M25T26M26T27M27"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2348 \ . "E28C28M28E29C29M29E30C30M30E31C31M31E32C32M32E33C33M33"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2349 \ . "E34C34M34E35C35M35E36C36M36"
341
b516a9f9d603 updated for version 7.0088
vimboss
parents: 336
diff changeset
2350 \ . "A37W37C37M37A38W38C38M38A39W39C39M39A40W40C40M40A41W41C41M41"
b516a9f9d603 updated for version 7.0088
vimboss
parents: 336
diff changeset
2351 \ . "A42W42C42M42A43W43C43M43A44W44C44M44A45C45M45"
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2352
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2353 if taken != expected
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2354 " The Xpath command does not accept 2^31 (negative); display explicitly:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2355 exec "!echo 2147483648 >>" . g:ExtraVimResult
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2356 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2357 Xout "'taken' is" taken "instead of" expected
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2358 if substitute(taken,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2359 \ '\(.*\)E3C3M3x\(.*\)E30C30M30x\(.*\)A39C39M39x\(.*\)',
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2360 \ '\1E3M3\2E30C30M30\3A39C39M39\4',
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2361 \ "") == expected
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2362 Xout "Is ++emsg_skip for var with expr_start non-NULL"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2363 \ "in f_exists ok?"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2364 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2365 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2366
341
b516a9f9d603 updated for version 7.0088
vimboss
parents: 336
diff changeset
2367 unlet! v var saved_errmsg taken expected
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2368 call delete(WA_t5)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2369 call delete(WA_t14)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2370 call delete(WA_t23)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2371 unlet! WA_t5 WA_t14 WA_t23
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2372 delfunction WA_t5
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2373 delfunction WA_t14
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2374 delfunction WA_t23
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2375
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2376 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2377
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2378 Xcheck 1610087935
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2379
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2380
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2381 "-------------------------------------------------------------------------------
303
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2382 " Test 77: Errors, interrupts, :throw in name{brace-expression} {{{1
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2383 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2384 " When a function call made during evaluation of an expression in
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2385 " braces as part of a function name after ":function" is aborted due
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2386 " to an error inside a :try/:endtry region or due to an interrupt or
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2387 " a :throw, the expression evaluation is aborted as well, and the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2388 " function definition is ignored, skipping all commands to the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2389 " ":endfunction". On an error not inside :try/:endtry, the expression
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2390 " evaluation continues and the function gets defined, and can be
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2391 " called and deleted.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2392 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2393
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2394 XpathINIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2395
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2396 XloopINIT 1 4
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2397
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2398 function! ERR() abort
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2399 Xloop 1 " X: 1 + 4 + 16 + 64
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2400 asdf
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2401 endfunction " returns -1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2402
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2403 function! OK()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2404 Xloop 2 " X: 2 * (1 + 4 + 16)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2405 let v:errmsg = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2406 return 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2407 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2408
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2409 let v:errmsg = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2410
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2411 Xpath 4096 " X: 4096
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2412 function! F{1 + ERR() + OK()}(arg)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2413 " F0 should be defined.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2414 if exists("a:arg") && a:arg == "calling"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2415 Xpath 8192 " X: 8192
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2416 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2417 Xpath 16384 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2418 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2419 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2420 if v:errmsg != ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2421 Xpath 32768 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2422 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2423 XloopNEXT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2424
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2425 Xpath 65536 " X: 65536
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2426 call F{1 + ERR() + OK()}("calling")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2427 if v:errmsg != ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2428 Xpath 131072 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2429 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2430 XloopNEXT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2431
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2432 Xpath 262144 " X: 262144
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2433 delfunction F{1 + ERR() + OK()}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2434 if v:errmsg != ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2435 Xpath 524288 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2436 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2437 XloopNEXT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2438
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2439 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2440 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2441 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2442 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2443 Xpath 1048576 " X: 1048576
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2444 function! G{1 + ERR() + OK()}(arg)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2445 " G0 should not be defined, and the function body should be
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2446 " skipped.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2447 if exists("a:arg") && a:arg == "calling"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2448 Xpath 2097152 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2449 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2450 Xpath 4194304 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2451 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2452 " Use an unmatched ":finally" to check whether the body is
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2453 " skipped when an error occurs in ERR(). This works whether or
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2454 " not the exception is converted to an exception.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2455 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2456 Xpath 8388608 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2457 Xout "Body of G{1 + ERR() + OK()}() not skipped"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2458 " Discard the aborting error or exception, and break the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2459 " while loop.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2460 break
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2461 " End the try conditional and start a new one to avoid
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2462 " ":catch after :finally" errors.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2463 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2464 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2465 Xpath 16777216 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2466 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2467
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2468 " When the function was not defined, this won't be reached - whether
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2469 " the body was skipped or not. When the function was defined, it
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2470 " can be called and deleted here.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2471 Xpath 33554432 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2472 Xout "G0() has been defined"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2473 XloopNEXT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2474 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2475 call G{1 + ERR() + OK()}("calling")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2476 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2477 Xpath 67108864 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2478 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2479 Xpath 134217728 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2480 XloopNEXT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2481 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2482 delfunction G{1 + ERR() + OK()}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2483 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2484 Xpath 268435456 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2485 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2486 catch /asdf/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2487 " Jumped to when the function is not defined and the body is
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2488 " skipped.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2489 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2490 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2491 Xpath 536870912 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2492 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2493 if !caught && !$VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2494 Xpath 1073741824 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2495 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2496 break " discard error for $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2497 endtry " jumped to when the body is not skipped
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2498 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2499 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2500 " The Xpath command does not accept 2^31 (negative); add explicitly:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2501 let Xpath = Xpath + 2147483648 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2502 Xout "Body of G{1 + ERR() + OK()}() not skipped, exception caught"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2503 Xout v:exception "in" v:throwpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2504 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2505
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2506 Xcheck 1388671
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2507
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2508
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2509 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2510 " Test 78: Messages on parsing errors in expression evaluation {{{1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2511 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2512 " When an expression evaluation detects a parsing error, an error
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2513 " message is given and converted to an exception, and the expression
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2514 " evaluation is aborted.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2515 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2516
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2517 XpathINIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2518
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2519 if ExtraVim()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2520
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2521 let taken = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2522
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2523 function! F(n)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2524 let g:taken = g:taken . "F" . a:n
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2525 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2526
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2527 function! MSG(n, enr, emsg)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2528 let g:taken = g:taken . "M" . a:n
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2529 let english = v:lang == "C" || v:lang =~ '^[Ee]n'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2530 if a:enr == ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2531 Xout "TODO: Add message number for:" a:emsg
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2532 let v:errmsg = ":" . v:errmsg
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2533 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2534 if v:errmsg !~ '^'.a:enr.':' || (english && v:errmsg !~ a:emsg)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2535 if v:errmsg == ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2536 Xout "Expr" a:n.": Message missing."
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2537 let g:taken = g:taken . "x"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2538 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2539 let v:errmsg = escape(v:errmsg, '"')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2540 Xout "Expr" a:n.": Unexpected message:" v:errmsg
119
e8f07016e34d updated for version 7.0042
vimboss
parents: 108
diff changeset
2541 Xout "Expected: " . a:enr . ': ' . a:emsg
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2542 let g:taken = g:taken . "X"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2543 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2544 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2545 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2546
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2547 function! CONT(n)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2548 let g:taken = g:taken . "C" . a:n
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2549 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2550
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2551 let v:errmsg = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2552 XloopINIT 1 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2553
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2554 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2555 let t = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2556 while t <= 14
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2557 let g:taken = g:taken . "T" . t
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2558 let v:errmsg = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2559 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2560 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2561 if t == 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2562 let v{novar + CONT(t)} = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2563 elseif t == 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2564 let v{novar + CONT(t)}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2565 elseif t == 3
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2566 let var = exists('v{novar + CONT(t)}')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2567 elseif t == 4
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2568 unlet v{novar + CONT(t)}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2569 elseif t == 5
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2570 function F{novar + CONT(t)}()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2571 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2572 elseif t == 6
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2573 function F{novar + CONT(t)}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2574 elseif t == 7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2575 let var = exists('*F{novar + CONT(t)}')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2576 elseif t == 8
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2577 delfunction F{novar + CONT(t)}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2578 elseif t == 9
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2579 echo novar + CONT(t)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2580 elseif t == 10
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2581 echo v{novar + CONT(t)}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2582 elseif t == 11
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2583 echo F{novar + CONT(t)}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2584 elseif t == 12
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2585 let var = novar + CONT(t)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2586 elseif t == 13
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2587 let var = v{novar + CONT(t)}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2588 elseif t == 14
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2589 let var = F{novar + CONT(t)}()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2590 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2591 catch /^Vim\((\a\+)\)\=:/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2592 " v:errmsg is not set when the error message is converted to an
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2593 " exception. Set it to the original error message.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2594 let v:errmsg = substitute(v:exception,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2595 \ '^Vim\((\a\+)\)\=:', '', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2596 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2597 finally
303
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2598 if t <= 8 && t != 3 && t != 7
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2599 call MSG(t, 'E475', 'Invalid argument\>')
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2600 else
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2601 if !caught " no error exceptions ($VIMNOERRTHROW set)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2602 call MSG(t, 'E15', "Invalid expression")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2603 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2604 call MSG(t, 'E121', "Undefined variable")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2605 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2606 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2607 let t = t + 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2608 XloopNEXT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2609 continue " discard an aborting error
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2610 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2611 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2612 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2613 Xloop 1 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2614 Xout t.":" v:exception "in" ExtraVimThrowpoint()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2615 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2616
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2617 function! T(n, expr, enr, emsg)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2618 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2619 let g:taken = g:taken . "T" . a:n
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2620 let v:errmsg = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2621 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2622 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2623 execute "let var = " . a:expr
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2624 catch /^Vim\((\a\+)\)\=:/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2625 " v:errmsg is not set when the error message is converted to an
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2626 " exception. Set it to the original error message.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2627 let v:errmsg = substitute(v:exception,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2628 \ '^Vim\((\a\+)\)\=:', '', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2629 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2630 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2631 if !caught " no error exceptions ($VIMNOERRTHROW set)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2632 call MSG(a:n, 'E15', "Invalid expression")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2633 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2634 call MSG(a:n, a:enr, a:emsg)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2635 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2636 XloopNEXT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2637 " Discard an aborting error:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2638 return
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2639 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2640 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2641 Xloop 1 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2642 Xout a:n.":" v:exception "in" ExtraVimThrowpoint()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2643 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2644 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2645
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2646 call T(15, 'Nofunc() + CONT(15)', 'E117', "Unknown function")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2647 call T(16, 'F(1 2 + CONT(16))', 'E116', "Invalid arguments")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2648 call T(17, 'F(1, 2) + CONT(17)', 'E118', "Too many arguments")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2649 call T(18, 'F() + CONT(18)', 'E119', "Not enough arguments")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2650 call T(19, '{(1} + CONT(19)', 'E110', "Missing ')'")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2651 call T(20, '("abc"[1) + CONT(20)', 'E111', "Missing ']'")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2652 call T(21, '(1 +) + CONT(21)', 'E15', "Invalid expression")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2653 call T(22, '1 2 + CONT(22)', 'E15', "Invalid expression")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2654 call T(23, '(1 ? 2) + CONT(23)', 'E109', "Missing ':' after '?'")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2655 call T(24, '("abc) + CONT(24)', 'E114', "Missing quote")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2656 call T(25, "('abc) + CONT(25)", 'E115', "Missing quote")
102
0aa0e89bfd5f updated for version 7.0039
vimboss
parents: 95
diff changeset
2657 call T(26, '& + CONT(26)', 'E112', "Option name missing")
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2658 call T(27, '&asdf + CONT(27)', 'E113', "Unknown option")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2659
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2660 Xpath 134217728 " X: 134217728
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2661
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2662 let expected = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2663 \ . "T1M1T2M2T3M3T4M4T5M5T6M6T7M7T8M8T9M9T10M10T11M11T12M12T13M13T14M14"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2664 \ . "T15M15T16M16T17M17T18M18T19M19T20M20T21M21T22M22T23M23T24M24T25M25"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2665 \ . "T26M26T27M27"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2666
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2667 if taken != expected
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2668 Xpath 268435456 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2669 Xout "'taken' is" taken "instead of" expected
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2670 if substitute(taken, '\(.*\)T3M3x\(.*\)', '\1T3M3\2', "") == expected
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2671 Xout "Is ++emsg_skip for var with expr_start non-NULL"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2672 \ "in f_exists ok?"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2673 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2674 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2675
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2676 unlet! var caught taken expected
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2677 call delete(WA_t5)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2678 unlet! WA_t5
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2679 delfunction WA_t5
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2680
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2681 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2682
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2683 Xcheck 134217728
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2684
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2685
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2686 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2687 " Test 79: Throwing one of several errors for the same command {{{1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2688 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2689 " When several errors appear in a row (for instance during expression
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2690 " evaluation), the first as the most specific one is used when
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2691 " throwing an error exception. If, however, a syntax error is
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2692 " detected afterwards, this one is used for the error exception.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2693 " On a syntax error, the next command is not executed, on a normal
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2694 " error, however, it is (relevant only in a function without the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2695 " "abort" flag). v:errmsg is not set.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2696 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2697 " If throwing error exceptions is configured off, v:errmsg is always
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2698 " set to the latest error message, that is, to the more general
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2699 " message or the syntax error, respectively.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2700 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2701
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2702 XpathINIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2703
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2704 XloopINIT 1 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2705
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2706 function! NEXT(cmd)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2707 exec a:cmd . " | Xloop 1"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2708 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2709
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2710 call NEXT('echo novar') " X: 1 * 1 (checks nextcmd)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2711 XloopNEXT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2712 call NEXT('let novar #') " X: 0 * 2 (skips nextcmd)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2713 XloopNEXT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2714 call NEXT('unlet novar #') " X: 0 * 4 (skips nextcmd)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2715 XloopNEXT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2716 call NEXT('let {novar}') " X: 0 * 8 (skips nextcmd)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2717 XloopNEXT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2718 call NEXT('unlet{ novar}') " X: 0 * 16 (skips nextcmd)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2719
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2720 function! EXEC(cmd)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2721 exec a:cmd
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2722 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2723
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2724 function! MATCH(expected, msg, enr, emsg)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2725 let msg = a:msg
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2726 if a:enr == ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2727 Xout "TODO: Add message number for:" a:emsg
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2728 let msg = ":" . msg
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2729 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2730 let english = v:lang == "C" || v:lang =~ '^[Ee]n'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2731 if msg !~ '^'.a:enr.':' || (english && msg !~ a:emsg)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2732 let match = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2733 if a:expected " no match although expected
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2734 if a:msg == ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2735 Xout "Message missing."
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2736 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2737 let msg = escape(msg, '"')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2738 Xout "Unexpected message:" msg
108
375b1d0f97b0 updated for version 7.0040
vimboss
parents: 102
diff changeset
2739 Xout "Expected:" a:enr . ": " . a:emsg
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2740 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2741 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2742 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2743 let match = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2744 if !a:expected " match although not expected
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2745 let msg = escape(msg, '"')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2746 Xout "Unexpected message:" msg
108
375b1d0f97b0 updated for version 7.0040
vimboss
parents: 102
diff changeset
2747 Xout "Expected none."
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2748 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2749 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2750 return match
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2751 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2752
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2753 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2754
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2755 while 1 " dummy loop
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2756 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2757 let v:errmsg = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2758 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2759 let thrmsg = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2760 call EXEC('echo novar') " normal error
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2761 catch /^Vim\((\a\+)\)\=:/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2762 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2763 let thrmsg = substitute(v:exception, '^Vim\((\a\+)\)\=:', '', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2764 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2765 Xpath 32 " X: 32
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2766 if !caught
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2767 if !$VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2768 Xpath 64 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2769 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2770 elseif !MATCH(1, thrmsg, 'E121', "Undefined variable")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2771 \ || v:errmsg != ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2772 Xpath 128 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2773 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2774 if !caught && !MATCH(1, v:errmsg, 'E15', "Invalid expression")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2775 Xpath 256 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2776 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2777 break " discard error if $VIMNOERRTHROW == 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2778 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2779 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2780
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2781 Xpath 512 " X: 512
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2782 let cmd = "let"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2783 XloopINIT 1024 32
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2784 while cmd != ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2785 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2786 let v:errmsg = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2787 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2788 let thrmsg = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2789 call EXEC(cmd . ' novar #') " normal plus syntax error
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2790 catch /^Vim\((\a\+)\)\=:/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2791 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2792 let thrmsg = substitute(v:exception, '^Vim\((\a\+)\)\=:', '', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2793 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2794 Xloop 1 " X: 1024 * (1 + 32)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2795 if !caught
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2796 if !$VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2797 Xloop 2 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2798 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2799 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2800 if cmd == "let"
2591
88095f75d63b updated for version 7.3.015
Bram Moolenaar <bram@vim.org>
parents: 849
diff changeset
2801 let match = MATCH(0, thrmsg, 'E121', "Undefined variable")
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2802 elseif cmd == "unlet"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2803 let match = MATCH(0, thrmsg, 'E108', "No such variable")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2804 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2805 if match " normal error
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2806 Xloop 4 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2807 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2808 if !MATCH(1, thrmsg, 'E488', "Trailing characters")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2809 \|| v:errmsg != ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2810 " syntax error
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2811 Xloop 8 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2812 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2813 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2814 if !caught && !MATCH(1, v:errmsg, 'E488', "Trailing characters")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2815 " last error
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2816 Xloop 16 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2817 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2818 if cmd == "let"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2819 let cmd = "unlet"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2820 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2821 let cmd = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2822 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2823 XloopNEXT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2824 continue " discard error if $VIMNOERRTHROW == 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2825 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2826 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2827
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2828 Xpath 1048576 " X: 1048576
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2829 let cmd = "let"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2830 XloopINIT 2097152 32
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2831 while cmd != ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2832 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2833 let v:errmsg = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2834 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2835 let thrmsg = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2836 call EXEC(cmd . ' {novar}') " normal plus syntax error
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2837 catch /^Vim\((\a\+)\)\=:/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2838 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2839 let thrmsg = substitute(v:exception, '^Vim\((\a\+)\)\=:', '', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2840 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2841 Xloop 1 " X: 2097152 * (1 + 32)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2842 if !caught
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2843 if !$VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2844 Xloop 2 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2845 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2846 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2847 if MATCH(0, thrmsg, 'E121', "Undefined variable") " normal error
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2848 Xloop 4 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2849 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2850 if !MATCH(1, thrmsg, 'E475', 'Invalid argument\>')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2851 \ || v:errmsg != "" " syntax error
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2852 Xloop 8 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2853 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2854 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2855 if !caught && !MATCH(1, v:errmsg, 'E475', 'Invalid argument\>')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2856 " last error
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2857 Xloop 16 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2858 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2859 if cmd == "let"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2860 let cmd = "unlet"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2861 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2862 let cmd = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2863 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2864 XloopNEXT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2865 continue " discard error if $VIMNOERRTHROW == 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2866 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2867 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2868
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2869 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2870 " The Xpath command does not accept 2^31 (negative); add explicitly:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2871 let Xpath = Xpath + 2147483648 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2872 Xout v:exception "in" v:throwpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2873 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2874
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2875 unlet! next_command thrmsg match
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2876 delfunction NEXT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2877 delfunction EXEC
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2878 delfunction MATCH
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2879
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2880 Xcheck 70288929
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2881
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2882
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2883 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2884 " Test 80: Syntax error in expression for illegal :elseif {{{1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2885 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2886 " If there is a syntax error in the expression after an illegal
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2887 " :elseif, an error message is given (or an error exception thrown)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2888 " for the illegal :elseif rather than the expression error.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2889 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2890
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2891 XpathINIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2892
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2893 function! MSG(enr, emsg)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2894 let english = v:lang == "C" || v:lang =~ '^[Ee]n'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2895 if a:enr == ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2896 Xout "TODO: Add message number for:" a:emsg
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2897 let v:errmsg = ":" . v:errmsg
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2898 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2899 let match = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2900 if v:errmsg !~ '^'.a:enr.':' || (english && v:errmsg !~ a:emsg)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2901 let match = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2902 if v:errmsg == ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2903 Xout "Message missing."
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2904 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2905 let v:errmsg = escape(v:errmsg, '"')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2906 Xout "Unexpected message:" v:errmsg
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2907 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2908 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2909 return match
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2910 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2911
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2912 let v:errmsg = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2913 if 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2914 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2915 elseif 1 ||| 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2916 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2917 Xpath 1 " X: 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2918 if !MSG('E584', ":elseif after :else")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2919 Xpath 2 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2920 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2921
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2922 let v:errmsg = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2923 if 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2924 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2925 elseif 1 ||| 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2926 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2927 Xpath 4 " X: 4
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2928 if !MSG('E584', ":elseif after :else")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2929 Xpath 8 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2930 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2931
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2932 let v:errmsg = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2933 elseif 1 ||| 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2934 Xpath 16 " X: 16
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2935 if !MSG('E582', ":elseif without :if")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2936 Xpath 32 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2937 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2938
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2939 let v:errmsg = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2940 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2941 elseif 1 ||| 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2942 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2943 Xpath 64 " X: 64
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2944 if !MSG('E582', ":elseif without :if")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2945 Xpath 128 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2946 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2947
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2948 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2949 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2950 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2951 let v:errmsg = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2952 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2953 if 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2954 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2955 elseif 1 ||| 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2956 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2957 catch /^Vim\((\a\+)\)\=:/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2958 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2959 let v:errmsg = substitute(v:exception, '^Vim\((\a\+)\)\=:', '', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2960 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2961 Xpath 256 " X: 256
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2962 if !caught && !$VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2963 Xpath 512 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2964 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2965 if !MSG('E584', ":elseif after :else")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2966 Xpath 1024 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2967 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2968 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2969 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2970 Xpath 2048 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2971 Xout v:exception "in" v:throwpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2972 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2973 break " discard error for $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2974 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2975 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2976
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2977 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2978 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2979 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2980 let v:errmsg = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2981 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2982 if 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2983 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2984 elseif 1 ||| 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2985 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2986 catch /^Vim\((\a\+)\)\=:/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2987 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2988 let v:errmsg = substitute(v:exception, '^Vim\((\a\+)\)\=:', '', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2989 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2990 Xpath 4096 " X: 4096
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2991 if !caught && !$VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2992 Xpath 8192 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2993 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2994 if !MSG('E584', ":elseif after :else")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2995 Xpath 16384 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2996 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2997 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2998 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2999 Xpath 32768 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3000 Xout v:exception "in" v:throwpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3001 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3002 break " discard error for $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3003 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3004 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3005
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3006 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3007 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3008 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3009 let v:errmsg = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3010 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3011 elseif 1 ||| 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3012 catch /^Vim\((\a\+)\)\=:/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3013 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3014 let v:errmsg = substitute(v:exception, '^Vim\((\a\+)\)\=:', '', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3015 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3016 Xpath 65536 " X: 65536
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3017 if !caught && !$VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3018 Xpath 131072 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3019 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3020 if !MSG('E582', ":elseif without :if")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3021 Xpath 262144 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3022 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3023 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3024 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3025 Xpath 524288 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3026 Xout v:exception "in" v:throwpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3027 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3028 break " discard error for $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3029 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3030 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3031
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3032 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3033 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3034 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3035 let v:errmsg = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3036 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3037 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3038 elseif 1 ||| 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3039 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3040 catch /^Vim\((\a\+)\)\=:/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3041 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3042 let v:errmsg = substitute(v:exception, '^Vim\((\a\+)\)\=:', '', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3043 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3044 Xpath 1048576 " X: 1048576
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3045 if !caught && !$VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3046 Xpath 2097152 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3047 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3048 if !MSG('E582', ":elseif without :if")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3049 Xpath 4194304 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3050 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3051 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3052 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3053 Xpath 8388608 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3054 Xout v:exception "in" v:throwpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3055 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3056 break " discard error for $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3057 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3058 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3059
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3060 Xpath 16777216 " X: 16777216
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3061
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3062 unlet! caught
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3063 delfunction MSG
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3064
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3065 Xcheck 17895765
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3066
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3067
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3068 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3069 " Test 81: Discarding exceptions after an error or interrupt {{{1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3070 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3071 " When an exception is thrown from inside a :try conditional without
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3072 " :catch and :finally clauses and an error or interrupt occurs before
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3073 " the :endtry is reached, the exception is discarded.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3074 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3075
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3076 XpathINIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3077
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3078 if ExtraVim()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3079 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3080 Xpath 1 " X: 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3081 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3082 Xpath 2 " X: 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3083 throw "arrgh"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3084 Xpath 4 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3085 " if 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3086 Xpath 8 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3087 " error after :throw: missing :endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3088 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3089 Xpath 16 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3090 catch /arrgh/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3091 Xpath 32 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3092 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3093 Xpath 64 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3094 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3095
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3096 if ExtraVim()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3097 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3098 Xpath 128 " X: 128
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3099 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3100 Xpath 256 " X: 256
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3101 throw "arrgh"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3102 Xpath 512 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3103 endtry " INTERRUPT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3104 Xpath 1024 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3105 catch /arrgh/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3106 Xpath 2048 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3107 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3108 Xpath 4096 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3109 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3110
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3111 Xcheck 387
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3112
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3113
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3114 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3115 " Test 82: Ignoring :catch clauses after an error or interrupt {{{1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3116 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3117 " When an exception is thrown and an error or interrupt occurs before
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3118 " the matching :catch clause is reached, the exception is discarded
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3119 " and the :catch clause is ignored (also for the error or interrupt
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3120 " exception being thrown then).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3121 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3122
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3123 XpathINIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3124
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3125 if ExtraVim()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3126 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3127 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3128 Xpath 1 " X: 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3129 throw "arrgh"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3130 Xpath 2 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3131 " if 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3132 Xpath 4 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3133 " error after :throw: missing :endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3134 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3135 Xpath 8 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3136 Xout v:exception "in" ExtraVimThrowpoint()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3137 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3138 Xpath 16 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3139 Xout v:exception "in" ExtraVimThrowpoint()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3140 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3141 Xpath 32 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3142 catch /arrgh/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3143 Xpath 64 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3144 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3145 Xpath 128 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3146 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3147
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3148 if ExtraVim()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3149 function! E()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3150 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3151 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3152 Xpath 256 " X: 256
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3153 throw "arrgh"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3154 Xpath 512 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3155 " if 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3156 Xpath 1024 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3157 " error after :throw: missing :endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3158 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3159 Xpath 2048 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3160 Xout v:exception "in" ExtraVimThrowpoint()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3161 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3162 Xpath 4096 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3163 Xout v:exception "in" ExtraVimThrowpoint()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3164 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3165 Xpath 8192 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3166 catch /arrgh/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3167 Xpath 16384 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3168 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3169 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3170
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3171 call E()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3172 Xpath 32768 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3173 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3174
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3175 if ExtraVim()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3176 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3177 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3178 Xpath 65536 " X: 65536
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3179 throw "arrgh"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3180 Xpath 131072 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3181 catch /.*/ "INTERRUPT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3182 Xpath 262144 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3183 Xout v:exception "in" ExtraVimThrowpoint()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3184 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3185 Xpath 524288 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3186 Xout v:exception "in" ExtraVimThrowpoint()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3187 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3188 Xpath 1048576 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3189 catch /arrgh/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3190 Xpath 2097152 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3191 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3192 Xpath 4194304 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3193 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3194
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3195 if ExtraVim()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3196 function I()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3197 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3198 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3199 Xpath 8388608 " X: 8388608
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3200 throw "arrgh"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3201 Xpath 16777216 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3202 catch /.*/ "INTERRUPT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3203 Xpath 33554432 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3204 Xout v:exception "in" ExtraVimThrowpoint()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3205 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3206 Xpath 67108864 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3207 Xout v:exception "in" ExtraVimThrowpoint()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3208 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3209 Xpath 134217728 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3210 catch /arrgh/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3211 Xpath 268435456 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3212 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3213 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3214
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3215 call I()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3216 Xpath 536870912 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3217 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3218
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3219 Xcheck 8454401
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3220
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3221
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3222 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3223 " Test 83: Executing :finally clauses after an error or interrupt {{{1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3224 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3225 " When an exception is thrown and an error or interrupt occurs before
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3226 " the :finally of the innermost :try is reached, the exception is
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3227 " discarded and the :finally clause is executed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3228 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3229
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3230 XpathINIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3231
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3232 if ExtraVim()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3233 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3234 Xpath 1 " X: 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3235 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3236 Xpath 2 " X: 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3237 throw "arrgh"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3238 Xpath 4 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3239 " if 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3240 Xpath 8 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3241 " error after :throw: missing :endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3242 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3243 Xpath 16 " X: 16
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3244 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3245 Xpath 32 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3246 catch /arrgh/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3247 Xpath 64 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3248 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3249 Xpath 128 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3250 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3251
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3252 if ExtraVim()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3253 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3254 Xpath 256 " X: 256
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3255 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3256 Xpath 512 " X: 512
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3257 throw "arrgh"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3258 Xpath 1024 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3259 finally "INTERRUPT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3260 Xpath 2048 " X: 2048
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3261 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3262 Xpath 4096 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3263 catch /arrgh/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3264 Xpath 8192 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3265 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3266 Xpath 16384 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3267 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3268
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3269 Xcheck 2835
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3270
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3271
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3272 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3273 " Test 84: Exceptions in autocommand sequences. {{{1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3274 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3275 " When an exception occurs in a sequence of autocommands for
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3276 " a specific event, the rest of the sequence is not executed. The
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3277 " command that triggered the autocommand execution aborts, and the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3278 " exception is propagated to the caller.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3279 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3280 " For the FuncUndefined event under a function call expression or
303
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3281 " :call command, the function is not executed, even when it has
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3282 " been defined by the autocommands before the exception occurred.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3283 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3284
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3285 XpathINIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3286
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3287 if ExtraVim()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3288
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3289 function! INT()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3290 "INTERRUPT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3291 let dummy = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3292 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3293
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3294 aug TMP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3295 autocmd!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3296
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3297 autocmd User x1 Xpath 1 " X: 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3298 autocmd User x1 throw "x1"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3299 autocmd User x1 Xpath 2 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3300
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3301 autocmd User x2 Xpath 4 " X: 4
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3302 autocmd User x2 asdf
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3303 autocmd User x2 Xpath 8 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3304
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3305 autocmd User x3 Xpath 16 " X: 16
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3306 autocmd User x3 call INT()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3307 autocmd User x3 Xpath 32 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3308
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3309 autocmd FuncUndefined U1 function! U1()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3310 autocmd FuncUndefined U1 Xpath 64 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3311 autocmd FuncUndefined U1 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3312 autocmd FuncUndefined U1 Xpath 128 " X: 128
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3313 autocmd FuncUndefined U1 throw "U1"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3314 autocmd FuncUndefined U1 Xpath 256 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3315
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3316 autocmd FuncUndefined U2 function! U2()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3317 autocmd FuncUndefined U2 Xpath 512 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3318 autocmd FuncUndefined U2 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3319 autocmd FuncUndefined U2 Xpath 1024 " X: 1024
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3320 autocmd FuncUndefined U2 ASDF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3321 autocmd FuncUndefined U2 Xpath 2048 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3322
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3323 autocmd FuncUndefined U3 function! U3()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3324 autocmd FuncUndefined U3 Xpath 4096 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3325 autocmd FuncUndefined U3 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3326 autocmd FuncUndefined U3 Xpath 8192 " X: 8192
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3327 autocmd FuncUndefined U3 call INT()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3328 autocmd FuncUndefined U3 Xpath 16384 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3329 aug END
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3330
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3331 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3332 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3333 Xpath 32768 " X: 32768
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3334 doautocmd User x1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3335 catch /x1/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3336 Xpath 65536 " X: 65536
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3337 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3338
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3339 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3340 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3341 Xpath 131072 " X: 131072
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3342 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3343 doautocmd User x2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3344 catch /asdf/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3345 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3346 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3347 Xpath 262144 " X: 262144
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3348 if !caught && !$VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3349 Xpath 524288 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3350 " Propagate uncaught error exception,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3351 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3352 " ... but break loop for caught error exception,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3353 " or discard error and break loop if $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3354 break
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3355 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3356 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3357 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3358
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3359 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3360 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3361 Xpath 1048576 " X: 1048576
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3362 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3363 doautocmd User x3
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3364 catch /Vim:Interrupt/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3365 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3366 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3367 Xpath 2097152 " X: 2097152
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3368 if !caught && !$VIMNOINTTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3369 Xpath 4194304 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3370 " Propagate uncaught interrupt exception,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3371 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3372 " ... but break loop for caught interrupt exception,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3373 " or discard interrupt and break loop if $VIMNOINTTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3374 break
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3375 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3376 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3377 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3378
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3379 if exists("*U1") | delfunction U1 | endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3380 if exists("*U2") | delfunction U2 | endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3381 if exists("*U3") | delfunction U3 | endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3382
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3383 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3384 Xpath 8388608 " X: 8388608
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3385 call U1()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3386 catch /U1/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3387 Xpath 16777216 " X: 16777216
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3388 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3389
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3390 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3391 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3392 Xpath 33554432 " X: 33554432
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3393 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3394 call U2()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3395 catch /ASDF/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3396 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3397 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3398 Xpath 67108864 " X: 67108864
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3399 if !caught && !$VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3400 Xpath 134217728 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3401 " Propagate uncaught error exception,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3402 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3403 " ... but break loop for caught error exception,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3404 " or discard error and break loop if $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3405 break
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3406 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3407 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3408 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3409
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3410 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3411 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3412 Xpath 268435456 " X: 268435456
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3413 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3414 call U3()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3415 catch /Vim:Interrupt/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3416 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3417 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3418 Xpath 536870912 " X: 536870912
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3419 if !caught && !$VIMNOINTTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3420 Xpath 1073741824 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3421 " Propagate uncaught interrupt exception,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3422 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3423 " ... but break loop for caught interrupt exception,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3424 " or discard interrupt and break loop if $VIMNOINTTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3425 break
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3426 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3427 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3428 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3429 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3430 " The Xpath command does not accept 2^31 (negative); display explicitly:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3431 exec "!echo 2147483648 >>" . g:ExtraVimResult
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3432 Xout "Caught" v:exception "in" v:throwpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3433 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3434
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3435 unlet caught
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3436 delfunction INT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3437 delfunction U1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3438 delfunction U2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3439 delfunction U3
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3440 au! TMP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3441 aug! TMP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3442 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3443
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3444 Xcheck 934782101
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3445
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3446
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3447 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3448 " Test 85: Error exceptions in autocommands for I/O command events {{{1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3449 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3450 " When an I/O command is inside :try/:endtry, autocommands to be
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3451 " executed after it should be skipped on an error (exception) in the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3452 " command itself or in autocommands to be executed before the command.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3453 " In the latter case, the I/O command should not be executed either.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3454 " Example 1: BufWritePre, :write, BufWritePost
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3455 " Example 2: FileReadPre, :read, FileReadPost.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3456 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3457
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3458 XpathINIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3459
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3460 function! MSG(enr, emsg)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3461 let english = v:lang == "C" || v:lang =~ '^[Ee]n'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3462 if a:enr == ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3463 Xout "TODO: Add message number for:" a:emsg
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3464 let v:errmsg = ":" . v:errmsg
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3465 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3466 let match = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3467 if v:errmsg !~ '^'.a:enr.':' || (english && v:errmsg !~ a:emsg)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3468 let match = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3469 if v:errmsg == ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3470 Xout "Message missing."
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3471 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3472 let v:errmsg = escape(v:errmsg, '"')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3473 Xout "Unexpected message:" v:errmsg
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3474 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3475 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3476 return match
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3477 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3478
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3479 " Remove the autocommands for the events specified as arguments in all used
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3480 " autogroups.
15406
63b02fcf1361 patch 8.1.0711: test files still use function!
Bram Moolenaar <Bram@vim.org>
parents: 10942
diff changeset
3481 function Delete_autocommands(...)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3482 let augfile = tempname()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3483 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3484 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3485 exec "redir >" . augfile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3486 aug
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3487 redir END
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3488 exec "edit" augfile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3489 g/^$/d
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3490 norm G$
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3491 let wrap = "w"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3492 while search('\%( \|^\)\@<=.\{-}\%( \)\@=', wrap) > 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3493 let wrap = "W"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3494 exec "norm y/ \n"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3495 let argno = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3496 while argno <= a:0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3497 exec "au!" escape(@", " ") a:{argno}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3498 let argno = argno + 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3499 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3500 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3501 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3502 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3503 bwipeout!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3504 call delete(augfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3505 break " discard errors for $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3506 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3507 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3508 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3509
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3510 call Delete_autocommands("BufWritePre", "BufWritePost")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3511
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3512 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3513 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3514 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3515 let post = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3516 aug TMP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3517 au! BufWritePost * let post = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3518 aug END
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3519 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3520 write /n/o/n/e/x/i/s/t/e/n/t
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3521 catch /^Vim(write):/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3522 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3523 let v:errmsg = substitute(v:exception, '^Vim(write):', '', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3524 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3525 Xpath 1 " X: 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3526 if !caught && !$VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3527 Xpath 2 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3528 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3529 let v:errmsg = substitute(v:errmsg, '^"/n/o/n/e/x/i/s/t/e/n/t" ',
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3530 \ '', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3531 if !MSG('E212', "Can't open file for writing")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3532 Xpath 4 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3533 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3534 if post
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3535 Xpath 8 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3536 Xout "BufWritePost commands executed after write error"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3537 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3538 au! TMP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3539 aug! TMP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3540 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3541 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3542 Xpath 16 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3543 Xout v:exception "in" v:throwpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3544 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3545 break " discard error for $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3546 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3547 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3548
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3549 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3550 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3551 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3552 let post = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3553 aug TMP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3554 au! BufWritePre * asdf
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3555 au! BufWritePost * let post = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3556 aug END
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3557 let tmpfile = tempname()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3558 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3559 exec "write" tmpfile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3560 catch /^Vim\((write)\)\=:/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3561 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3562 let v:errmsg = substitute(v:exception, '^Vim\((write)\)\=:', '', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3563 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3564 Xpath 32 " X: 32
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3565 if !caught && !$VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3566 Xpath 64 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3567 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3568 let v:errmsg = substitute(v:errmsg, '^"'.tmpfile.'" ', '', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3569 if !MSG('E492', "Not an editor command")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3570 Xpath 128 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3571 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3572 if filereadable(tmpfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3573 Xpath 256 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3574 Xout ":write command not suppressed after BufWritePre error"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3575 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3576 if post
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3577 Xpath 512 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3578 Xout "BufWritePost commands executed after BufWritePre error"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3579 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3580 au! TMP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3581 aug! TMP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3582 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3583 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3584 Xpath 1024 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3585 Xout v:exception "in" v:throwpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3586 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3587 break " discard error for $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3588 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3589 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3590
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3591 call delete(tmpfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3592
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3593 call Delete_autocommands("BufWritePre", "BufWritePost",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3594 \ "BufReadPre", "BufReadPost", "FileReadPre", "FileReadPost")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3595
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3596 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3597 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3598 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3599 let post = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3600 aug TMP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3601 au! FileReadPost * let post = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3602 aug END
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3603 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3604 read /n/o/n/e/x/i/s/t/e/n/t
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3605 catch /^Vim(read):/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3606 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3607 let v:errmsg = substitute(v:exception, '^Vim(read):', '', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3608 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3609 Xpath 2048 " X: 2048
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3610 if !caught && !$VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3611 Xpath 4096 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3612 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3613 let v:errmsg = substitute(v:errmsg, ' /n/o/n/e/x/i/s/t/e/n/t$',
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3614 \ '', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3615 if !MSG('E484', "Can't open file")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3616 Xpath 8192 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3617 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3618 if post
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3619 Xpath 16384 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3620 Xout "FileReadPost commands executed after write error"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3621 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3622 au! TMP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3623 aug! TMP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3624 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3625 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3626 Xpath 32768 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3627 Xout v:exception "in" v:throwpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3628 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3629 break " discard error for $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3630 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3631 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3632
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3633 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3634 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3635 let infile = tempname()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3636 let tmpfile = tempname()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3637 exec "!echo XYZ >" . infile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3638 exec "edit" tmpfile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3639 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3640 Xpath 65536 " X: 65536
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3641 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3642 let post = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3643 aug TMP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3644 au! FileReadPre * asdf
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3645 au! FileReadPost * let post = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3646 aug END
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3647 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3648 exec "0read" infile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3649 catch /^Vim\((read)\)\=:/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3650 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3651 let v:errmsg = substitute(v:exception, '^Vim\((read)\)\=:', '',
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3652 \ "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3653 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3654 Xpath 131072 " X: 131072
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3655 if !caught && !$VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3656 Xpath 262144 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3657 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3658 let v:errmsg = substitute(v:errmsg, ' '.infile.'$', '', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3659 if !MSG('E492', "Not an editor command")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3660 Xpath 524288 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3661 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3662 if getline("1") == "XYZ"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3663 Xpath 1048576 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3664 Xout ":read command not suppressed after FileReadPre error"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3665 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3666 if post
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3667 Xpath 2097152 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3668 Xout "FileReadPost commands executed after " .
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3669 \ "FileReadPre error"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3670 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3671 au! TMP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3672 aug! TMP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3673 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3674 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3675 bwipeout!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3676 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3677 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3678 Xpath 4194304 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3679 Xout v:exception "in" v:throwpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3680 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3681 break " discard error for $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3682 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3683 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3684
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3685 call delete(infile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3686 call delete(tmpfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3687 unlet! caught post infile tmpfile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3688 delfunction MSG
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3689 delfunction Delete_autocommands
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3690
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3691 Xcheck 198689
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3692
3918
4f0ddf4137ee updated for version 7.3.715
Bram Moolenaar <bram@vim.org>
parents: 2591
diff changeset
3693 "-------------------------------------------------------------------------------
3994
ed936effb1f3 updated for version 7.3.752
Bram Moolenaar <bram@vim.org>
parents: 3918
diff changeset
3694 " Test 86: setloclist crash {{{1
3918
4f0ddf4137ee updated for version 7.3.715
Bram Moolenaar <bram@vim.org>
parents: 2591
diff changeset
3695 "
4f0ddf4137ee updated for version 7.3.715
Bram Moolenaar <bram@vim.org>
parents: 2591
diff changeset
3696 " Executing a setloclist() on BufUnload shouldn't crash Vim
4f0ddf4137ee updated for version 7.3.715
Bram Moolenaar <bram@vim.org>
parents: 2591
diff changeset
3697 "-------------------------------------------------------------------------------
4f0ddf4137ee updated for version 7.3.715
Bram Moolenaar <bram@vim.org>
parents: 2591
diff changeset
3698
4f0ddf4137ee updated for version 7.3.715
Bram Moolenaar <bram@vim.org>
parents: 2591
diff changeset
3699 func F
4f0ddf4137ee updated for version 7.3.715
Bram Moolenaar <bram@vim.org>
parents: 2591
diff changeset
3700 au BufUnload * :call setloclist(0, [{'bufnr':1, 'lnum':1, 'col':1, 'text': 'tango down'}])
4f0ddf4137ee updated for version 7.3.715
Bram Moolenaar <bram@vim.org>
parents: 2591
diff changeset
3701
4774
531e598651fc updated for version 7.3.1134
Bram Moolenaar <bram@vim.org>
parents: 4182
diff changeset
3702 :lvimgrep /.*/ *.mak
3918
4f0ddf4137ee updated for version 7.3.715
Bram Moolenaar <bram@vim.org>
parents: 2591
diff changeset
3703 endfunc
4f0ddf4137ee updated for version 7.3.715
Bram Moolenaar <bram@vim.org>
parents: 2591
diff changeset
3704
4f0ddf4137ee updated for version 7.3.715
Bram Moolenaar <bram@vim.org>
parents: 2591
diff changeset
3705 XpathINIT
4f0ddf4137ee updated for version 7.3.715
Bram Moolenaar <bram@vim.org>
parents: 2591
diff changeset
3706
4f0ddf4137ee updated for version 7.3.715
Bram Moolenaar <bram@vim.org>
parents: 2591
diff changeset
3707 ExecAsScript F
4f0ddf4137ee updated for version 7.3.715
Bram Moolenaar <bram@vim.org>
parents: 2591
diff changeset
3708
4f0ddf4137ee updated for version 7.3.715
Bram Moolenaar <bram@vim.org>
parents: 2591
diff changeset
3709 delfunction F
4f0ddf4137ee updated for version 7.3.715
Bram Moolenaar <bram@vim.org>
parents: 2591
diff changeset
3710 Xout "No Crash for vimgrep on BufUnload"
4f0ddf4137ee updated for version 7.3.715
Bram Moolenaar <bram@vim.org>
parents: 2591
diff changeset
3711 Xcheck 0
4f0ddf4137ee updated for version 7.3.715
Bram Moolenaar <bram@vim.org>
parents: 2591
diff changeset
3712
18504
ece46bd3c9af patch 8.1.2246: some tests are still in old style
Bram Moolenaar <Bram@vim.org>
parents: 18269
diff changeset
3713 " Test 87 was moved to test_vimscript.vim
ece46bd3c9af patch 8.1.2246: some tests are still in old style
Bram Moolenaar <Bram@vim.org>
parents: 18269
diff changeset
3714 let Xtest = 88
ece46bd3c9af patch 8.1.2246: some tests are still in old style
Bram Moolenaar <Bram@vim.org>
parents: 18269
diff changeset
3715
4182
f4960ddda07c updated for version 7.3.843
Bram Moolenaar <bram@vim.org>
parents: 3994
diff changeset
3716
f4960ddda07c updated for version 7.3.843
Bram Moolenaar <bram@vim.org>
parents: 3994
diff changeset
3717 "-------------------------------------------------------------------------------
f4960ddda07c updated for version 7.3.843
Bram Moolenaar <bram@vim.org>
parents: 3994
diff changeset
3718 " Test 88: $VIMNOERRTHROW and $VIMNOINTTHROW support {{{1
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3719 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3720 " It is possible to configure Vim for throwing exceptions on error
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3721 " or interrupt, controlled by variables $VIMNOERRTHROW and
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3722 " $VIMNOINTTHROW. This is just for increasing the number of tests.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3723 " All tests here should run for all four combinations of setting
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3724 " these variables to 0 or 1. The variables are intended for the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3725 " development phase only. In the final release, Vim should be
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3726 " configured to always use error and interrupt exceptions.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3727 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3728 " The test result is "OK",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3729 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3730 " - if the $VIMNOERRTHROW and the $VIMNOINTTHROW control are not
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3731 " configured and exceptions are thrown on error and on
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3732 " interrupt.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3733 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3734 " - if the $VIMNOERRTHROW or the $VIMNOINTTHROW control is
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3735 " configured and works as intended.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3736 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3737 " What actually happens, is shown in the test output.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3738 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3739 " Otherwise, the test result is "FAIL", and the test output describes
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3740 " the problem.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3741 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3742 " IMPORTANT: This must be the last test because it sets $VIMNOERRTHROW and
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3743 " $VIMNOINTTHROW.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3744 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3745
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3746 XpathINIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3747
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3748 if ExtraVim()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3749
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3750 function! ThrowOnError()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3751 XloopNEXT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3752 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3753 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3754 Xloop 1 " X: 1 + 8 + 64
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3755 asdf
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3756 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3757 let caught = 1 " error exception caught
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3758 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3759 Xloop 2 " X: 2 + 16 + 128
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3760 return caught " discard aborting error
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3761 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3762 Xloop 4 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3763 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3764
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3765 let quits_skipped = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3766
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3767 function! ThrowOnInterrupt()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3768 XloopNEXT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3769 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3770 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3771 Xloop 1 " X: (1 + 8 + 64) * 512
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3772 "INTERRUPT3
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3773 let dummy = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3774 let g:quits_skipped = g:quits_skipped + 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3775 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3776 let caught = 1 " interrupt exception caught
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3777 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3778 Xloop 2 " X: (2 + 16 + 128) * 512
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3779 return caught " discard interrupt
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3780 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3781 Xloop 4 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3782 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3783
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3784 function! CheckThrow(Type)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3785 execute 'return ThrowOn' . a:Type . '()'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3786 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3787
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3788 function! CheckConfiguration(type) " type is "error" or "interrupt"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3789
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3790 let type = a:type
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3791 let Type = substitute(type, '.*', '\u&', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3792 let VAR = '$VIMNO' . substitute(type, '\(...\).*', '\U\1', "") . 'THROW'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3793
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3794 if type == "error"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3795 XloopINIT! 1 8
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3796 elseif type == "interrupt"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3797 XloopINIT! 512 8
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3798 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3799
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3800 exec 'let requested_for_tests = exists(VAR) && ' . VAR . ' == 0'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3801 exec 'let suppressed_for_tests = ' . VAR . ' != 0'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3802 let used_in_tests = CheckThrow(Type)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3803
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3804 exec 'let ' . VAR . ' = 0'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3805 let request_works = CheckThrow(Type)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3806
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3807 exec 'let ' . VAR . ' = 1'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3808 let suppress_works = !CheckThrow(Type)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3809
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3810 if type == "error"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3811 XloopINIT! 262144 8
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3812 elseif type == "interrupt"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3813 XloopINIT! 2097152 8
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3814
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3815 if g:quits_skipped != 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3816 Xloop 1 " X: 0*2097152
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3817 Xout "Test environment error. Interrupt breakpoints skipped: "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3818 \ . g:quits_skipped . ".\n"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3819 \ . "Cannot check whether interrupt exceptions are thrown."
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3820 return
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3821 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3822 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3823
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3824 let failure =
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3825 \ !suppressed_for_tests && !used_in_tests
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3826 \ || !request_works
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3827
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3828 let contradiction =
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3829 \ used_in_tests
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3830 \ ? suppressed_for_tests && !request_works
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3831 \ : !suppressed_for_tests
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3832
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3833 if failure
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3834 " Failure in configuration.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3835 Xloop 2 " X: 0 * 2* (262144 + 2097152)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3836 elseif contradiction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3837 " Failure in test logic. Should not happen.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3838 Xloop 4 " X: 0 * 4 * (262144 + 2097152)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3839 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3840
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3841 let var_control_configured =
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3842 \ request_works != used_in_tests
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3843 \ || suppress_works == used_in_tests
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3844
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3845 let var_control_not_configured =
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3846 \ requested_for_tests || suppressed_for_tests
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3847 \ ? request_works && !suppress_works
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3848 \ : request_works == used_in_tests
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3849 \ && suppress_works != used_in_tests
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3850
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3851 let with = used_in_tests ? "with" : "without"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3852
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3853 let set = suppressed_for_tests ? "non-zero" :
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3854 \ requested_for_tests ? "0" : "unset"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3855
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3856 let although = contradiction && !var_control_not_configured
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3857 \ ? ",\nalthough "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3858 \ : ".\n"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3859
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3860 let output = "All tests were run " . with . " throwing exceptions on "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3861 \ . type . although
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3862
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3863 if !var_control_not_configured
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3864 let output = output . VAR . " was " . set . "."
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3865
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3866 if !request_works && !requested_for_tests
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3867 let output = output .
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3868 \ "\n" . Type . " exceptions are not thrown when " . VAR .
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3869 \ " is\nset to 0."
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3870 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3871
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3872 if !suppress_works && (!used_in_tests ||
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3873 \ !request_works &&
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3874 \ !requested_for_tests && !suppressed_for_tests)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3875 let output = output .
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3876 \ "\n" . Type . " exceptions are thrown when " . VAR .
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3877 \ " is set to 1."
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3878 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3879
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3880 if !failure && var_control_configured
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3881 let output = output .
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3882 \ "\nRun tests also with " . substitute(VAR, '^\$', '', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3883 \ . "=" . used_in_tests . "."
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3884 \ . "\nThis is for testing in the development phase only."
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3885 \ . " Remove the \n"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3886 \ . VAR . " control in the final release."
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3887 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3888 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3889 let output = output .
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3890 \ "The " . VAR . " control is not configured."
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3891 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3892
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3893 Xout output
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3894 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3895
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3896 call CheckConfiguration("error")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3897 Xpath 16777216 " X: 16777216
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3898 call CheckConfiguration("interrupt")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3899 Xpath 33554432 " X: 33554432
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3900 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3901
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3902 Xcheck 50443995
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3903
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3904 " IMPORTANT: No test should be added after this test because it changes
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3905 " $VIMNOERRTHROW and $VIMNOINTTHROW.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3906
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3907
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3908 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3909 " Modelines {{{1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3910 " vim: ts=8 sw=4 tw=80 fdm=marker
16760
b55b4a21f006 patch 8.1.1382: error when editing test file
Bram Moolenaar <Bram@vim.org>
parents: 15456
diff changeset
3911 "-------------------------------------------------------------------------------