annotate src/testdir/test49.vim @ 21632:792398a9fe39 v8.2.1366

patch 8.2.1366: test 49 is old style Commit: https://github.com/vim/vim/commit/a6296200bd5191bab7efcdcc16c9e79eb498e8e0 Author: Bram Moolenaar <Bram@vim.org> Date: Wed Aug 5 11:23:13 2020 +0200 patch 8.2.1366: test 49 is old style Problem: Test 49 is old style. Solution: Convert several tests to new style. (Yegappan Lakshmanan, closes #6629)
author Bram Moolenaar <Bram@vim.org>
date Wed, 05 Aug 2020 11:30:03 +0200
parents eff8d8f72a82
children 97b887aecd4a
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
21632
792398a9fe39 patch 8.2.1366: test 49 is old style
Bram Moolenaar <Bram@vim.org>
parents: 18829
diff changeset
610 " Tests 1 to 50, 87 were moved to test_vimscript.vim
792398a9fe39 patch 8.2.1366: test 49 is old style
Bram Moolenaar <Bram@vim.org>
parents: 18829
diff changeset
611 " Tests 25, 26, 32, 33, 41-48, 51, 69-75 were moved to test_trycatch.vim
18504
ece46bd3c9af patch 8.1.2246: some tests are still in old style
Bram Moolenaar <Bram@vim.org>
parents: 18269
diff changeset
612 let Xtest = 52
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
613
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
614 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
615 " Test 52: Uncaught exceptions {{{1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
616 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
617 " When an exception is thrown but not caught, an error message is
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
618 " displayed when the script is terminated. In case of an interrupt
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
619 " or error exception, the normal interrupt or error message(s) are
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
620 " displayed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
621 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
622
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
623 XpathINIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
624
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
625 let msgfile = tempname()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
626
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
627 function! MESSAGES(...)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
628 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
629 exec "edit" g:msgfile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
630 catch /^Vim(edit):/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
631 return 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
632 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
633
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
634 let english = v:lang == "C" || v:lang =~ '^[Ee]n'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
635 let match = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
636 norm gg
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
637
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
638 let num = a:0 / 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
639 let cnt = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
640 while cnt <= num
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
641 let enr = a:{2*cnt - 1}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
642 let emsg= a:{2*cnt}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
643 let cnt = cnt + 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
644
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
645 if enr == ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
646 Xout "TODO: Add message number for:" emsg
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
647 elseif enr == "INT"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
648 let enr = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
649 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
650 if enr == "" && !english
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
651 continue
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
652 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
653 let pattern = (enr != "") ? enr . ':.*' : ''
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
654 if english
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
655 let pattern = pattern . emsg
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
656 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
657 if !search(pattern, "W")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
658 let match = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
659 Xout "No match for:" pattern
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
660 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
661 norm $
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
662 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
663
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
664 bwipeout!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
665 return match
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
666 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
667
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
668 if ExtraVim(msgfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
669 Xpath 1 " X: 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
670 throw "arrgh"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
671 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
672
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
673 Xpath 2 " X: 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
674 if !MESSAGES('E605', "Exception not caught")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
675 Xpath 4 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
676 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
677
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
678 if ExtraVim(msgfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
679 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
680 Xpath 8 " X: 8
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
681 throw "oops"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
682 catch /arrgh/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
683 Xpath 16 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
684 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
685 Xpath 32 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
686 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
687
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
688 Xpath 64 " X: 64
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
689 if !MESSAGES('E605', "Exception not caught")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
690 Xpath 128 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
691 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
692
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
693 if ExtraVim(msgfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
694 function! T()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
695 throw "brrr"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
696 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
697
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
698 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
699 Xpath 256 " X: 256
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
700 throw "arrgh"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
701 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
702 Xpath 512 " X: 512
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
703 call T()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
704 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
705 Xpath 1024 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
706 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
707
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
708 Xpath 2048 " X: 2048
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
709 if !MESSAGES('E605', "Exception not caught")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
710 Xpath 4096 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
711 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
712
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
713 if ExtraVim(msgfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
714 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
715 Xpath 8192 " X: 8192
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
716 throw "arrgh"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
717 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
718 Xpath 16384 " X: 16384
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
719 throw "brrr"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
720 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
721 Xpath 32768 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
722 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
723
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
724 Xpath 65536 " X: 65536
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
725 if !MESSAGES('E605', "Exception not caught")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
726 Xpath 131072 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
727 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
728
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
729 if ExtraVim(msgfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
730 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
731 Xpath 262144 " X: 262144
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
732 "INTERRUPT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
733 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
734 Xpath 524288 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
735 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
736
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
737 Xpath 1048576 " X: 1048576
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
738 if !MESSAGES('INT', "Interrupted")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
739 Xpath 2097152 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
740 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
741
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
742 if ExtraVim(msgfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
743 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
744 Xpath 4194304 " X: 4194304
15456
f01eb1aed348 patch 8.1.0736: code for Blob not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 15406
diff changeset
745 let x = novar " error E121; exception: E121
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
746 catch /E15:/ " should not catch
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
747 Xpath 8388608 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
748 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
749 Xpath 16777216 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
750 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
751
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
752 Xpath 33554432 " X: 33554432
15456
f01eb1aed348 patch 8.1.0736: code for Blob not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 15406
diff changeset
753 if !MESSAGES('E121', "Undefined variable")
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
754 Xpath 67108864 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
755 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
756
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
757 if ExtraVim(msgfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
758 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
759 Xpath 134217728 " X: 134217728
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
760 " unlet novar # " error E108/E488; exception: E488
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
761 catch /E108:/ " should not catch
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
762 Xpath 268435456 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
763 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
764 Xpath 536870912 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
765 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
766
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
767 Xpath 1073741824 " X: 1073741824
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
768 if !MESSAGES('E108', "No such variable", 'E488', "Trailing characters")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
769 " The Xpath command does not accept 2^31 (negative); add explicitly:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
770 let Xpath = Xpath + 2147483648 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
771 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
772
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
773 call delete(msgfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
774 unlet msgfile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
775
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
776 Xcheck 1247112011
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
777
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
778 " Leave MESSAGES() for the next tests.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
779
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
780
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
781 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
782 " Test 53: Nesting errors: :endif/:else/:elseif {{{1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
783 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
784 " For nesting errors of :if conditionals the correct error messages
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
785 " should be given.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
786 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
787 " This test reuses the function MESSAGES() from the previous test.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
788 " This functions checks the messages in g:msgfile.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
789 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
790
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
791 XpathINIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
792
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
793 let msgfile = tempname()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
794
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
795 if ExtraVim(msgfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
796 " endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
797 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
798 if MESSAGES('E580', ":endif without :if")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
799 Xpath 1 " X: 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
800 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
801
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
802 if ExtraVim(msgfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
803 " while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
804 " endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
805 " endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
806 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
807 if MESSAGES('E580', ":endif without :if")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
808 Xpath 2 " X: 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
809 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
810
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
811 if ExtraVim(msgfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
812 " try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
813 " finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
814 " endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
815 " endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
816 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
817 if MESSAGES('E580', ":endif without :if")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
818 Xpath 4 " X: 4
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
819 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
820
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
821 if ExtraVim(msgfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
822 " try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
823 " endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
824 " endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
825 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
826 if MESSAGES('E580', ":endif without :if")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
827 Xpath 8 " X: 8
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
828 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
829
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
830 if ExtraVim(msgfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
831 " try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
832 " throw "a"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
833 " catch /a/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
834 " endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
835 " endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
836 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
837 if MESSAGES('E580', ":endif without :if")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
838 Xpath 16 " X: 16
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
839 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
840
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
841 if ExtraVim(msgfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
842 " else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
843 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
844 if MESSAGES('E581', ":else without :if")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
845 Xpath 32 " X: 32
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
846 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
847
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
848 if ExtraVim(msgfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
849 " while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
850 " else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
851 " endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
852 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
853 if MESSAGES('E581', ":else without :if")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
854 Xpath 64 " X: 64
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
855 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
856
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
857 if ExtraVim(msgfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
858 " try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
859 " finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
860 " else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
861 " endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
862 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
863 if MESSAGES('E581', ":else without :if")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
864 Xpath 128 " X: 128
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
865 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
866
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
867 if ExtraVim(msgfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
868 " try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
869 " else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
870 " endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
871 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
872 if MESSAGES('E581', ":else without :if")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
873 Xpath 256 " X: 256
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
874 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
875
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
876 if ExtraVim(msgfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
877 " try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
878 " throw "a"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
879 " catch /a/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
880 " else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
881 " endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
882 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
883 if MESSAGES('E581', ":else without :if")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
884 Xpath 512 " X: 512
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
885 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
886
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
887 if ExtraVim(msgfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
888 " elseif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
889 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
890 if MESSAGES('E582', ":elseif without :if")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
891 Xpath 1024 " X: 1024
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
892 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
893
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
894 if ExtraVim(msgfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
895 " while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
896 " elseif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
897 " endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
898 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
899 if MESSAGES('E582', ":elseif without :if")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
900 Xpath 2048 " X: 2048
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
901 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
902
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
903 if ExtraVim(msgfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
904 " try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
905 " finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
906 " elseif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
907 " endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
908 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
909 if MESSAGES('E582', ":elseif without :if")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
910 Xpath 4096 " X: 4096
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
911 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
912
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
913 if ExtraVim(msgfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
914 " try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
915 " elseif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
916 " endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
917 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
918 if MESSAGES('E582', ":elseif without :if")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
919 Xpath 8192 " X: 8192
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
920 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
921
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
922 if ExtraVim(msgfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
923 " try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
924 " throw "a"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
925 " catch /a/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
926 " elseif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
927 " endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
928 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
929 if MESSAGES('E582', ":elseif without :if")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
930 Xpath 16384 " X: 16384
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
931 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
932
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
933 if ExtraVim(msgfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
934 " if 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
935 " else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
936 " else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
937 " endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
938 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
939 if MESSAGES('E583', "multiple :else")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
940 Xpath 32768 " X: 32768
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
941 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
942
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
943 if ExtraVim(msgfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
944 " if 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
945 " else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
946 " elseif 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
947 " endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
948 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
949 if MESSAGES('E584', ":elseif after :else")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
950 Xpath 65536 " X: 65536
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
951 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
952
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
953 call delete(msgfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
954 unlet msgfile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
955
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
956 Xcheck 131071
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
957
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
958 " Leave MESSAGES() for the next test.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
959
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
960
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
961 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
962 " Test 54: Nesting errors: :while/:endwhile {{{1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
963 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
964 " For nesting errors of :while conditionals the correct error messages
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
965 " should be given.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
966 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
967 " This test reuses the function MESSAGES() from the previous test.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
968 " This functions checks the messages in g:msgfile.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
969 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
970
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
971 XpathINIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
972
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
973 let msgfile = tempname()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
974
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
975 if ExtraVim(msgfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
976 " endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
977 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
978 if MESSAGES('E588', ":endwhile without :while")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
979 Xpath 1 " X: 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
980 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
981
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
982 if ExtraVim(msgfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
983 " if 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
984 " endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
985 " endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
986 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
987 if MESSAGES('E588', ":endwhile without :while")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
988 Xpath 2 " X: 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
989 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
990
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
991 if ExtraVim(msgfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
992 " while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
993 " if 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
994 " endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
995 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
996 if MESSAGES('E171', "Missing :endif")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
997 Xpath 4 " X: 4
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
998 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
999
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1000 if ExtraVim(msgfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1001 " try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1002 " finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1003 " endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1004 " endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1005 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1006 if MESSAGES('E588', ":endwhile without :while")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1007 Xpath 8 " X: 8
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1008 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1009
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1010 if ExtraVim(msgfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1011 " while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1012 " try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1013 " finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1014 " endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1015 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1016 if MESSAGES('E600', "Missing :endtry")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1017 Xpath 16 " X: 16
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1018 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1019
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1020 if ExtraVim(msgfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1021 " while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1022 " if 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1023 " try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1024 " finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1025 " endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1026 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1027 if MESSAGES('E600', "Missing :endtry")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1028 Xpath 32 " X: 32
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1029 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1030
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1031 if ExtraVim(msgfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1032 " while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1033 " try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1034 " finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1035 " if 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1036 " endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1037 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1038 if MESSAGES('E171', "Missing :endif")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1039 Xpath 64 " X: 64
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1040 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1041
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1042 if ExtraVim(msgfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1043 " try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1044 " endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1045 " endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1046 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1047 if MESSAGES('E588', ":endwhile without :while")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1048 Xpath 128 " X: 128
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1049 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1050
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1051 if ExtraVim(msgfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1052 " while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1053 " try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1054 " endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1055 " endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1056 " endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1057 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1058 if MESSAGES('E588', ":endwhile without :while")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1059 Xpath 256 " X: 256
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1060 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1061
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1062 if ExtraVim(msgfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1063 " try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1064 " throw "a"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1065 " catch /a/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1066 " endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1067 " endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1068 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1069 if MESSAGES('E588', ":endwhile without :while")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1070 Xpath 512 " X: 512
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1071 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1072
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1073 if ExtraVim(msgfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1074 " while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1075 " try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1076 " throw "a"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1077 " catch /a/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1078 " endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1079 " endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1080 " endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1081 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1082 if MESSAGES('E588', ":endwhile without :while")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1083 Xpath 1024 " X: 1024
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1084 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1085
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1086
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1087 call delete(msgfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1088 unlet msgfile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1089
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1090 Xcheck 2047
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1091
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1092 " Leave MESSAGES() for the next test.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1093
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1094
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1095 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1096 " Test 55: Nesting errors: :continue/:break {{{1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1097 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1098 " For nesting errors of :continue and :break commands the correct
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1099 " error messages should be given.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1100 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1101 " This test reuses the function MESSAGES() from the previous test.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1102 " This functions checks the messages in g:msgfile.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1103 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1104
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1105 XpathINIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1106
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1107 let msgfile = tempname()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1108
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1109 if ExtraVim(msgfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1110 " continue
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1111 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1112 if MESSAGES('E586', ":continue without :while")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1113 Xpath 1 " X: 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1114 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1115
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1116 if ExtraVim(msgfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1117 " if 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1118 " continue
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1119 " endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1120 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1121 if MESSAGES('E586', ":continue without :while")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1122 Xpath 2 " X: 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1123 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1124
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1125 if ExtraVim(msgfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1126 " try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1127 " finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1128 " continue
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1129 " endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1130 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1131 if MESSAGES('E586', ":continue without :while")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1132 Xpath 4 " X: 4
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1133 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1134
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1135 if ExtraVim(msgfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1136 " try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1137 " continue
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1138 " endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1139 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1140 if MESSAGES('E586', ":continue without :while")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1141 Xpath 8 " X: 8
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1142 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1143
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1144 if ExtraVim(msgfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1145 " try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1146 " throw "a"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1147 " catch /a/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1148 " continue
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1149 " endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1150 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1151 if MESSAGES('E586', ":continue without :while")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1152 Xpath 16 " X: 16
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1153 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1154
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1155 if ExtraVim(msgfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1156 " break
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1157 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1158 if MESSAGES('E587', ":break without :while")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1159 Xpath 32 " X: 32
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1160 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1161
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1162 if ExtraVim(msgfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1163 " if 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1164 " break
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1165 " endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1166 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1167 if MESSAGES('E587', ":break without :while")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1168 Xpath 64 " X: 64
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1169 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1170
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1171 if ExtraVim(msgfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1172 " try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1173 " finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1174 " break
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1175 " endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1176 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1177 if MESSAGES('E587', ":break without :while")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1178 Xpath 128 " X: 128
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1179 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1180
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1181 if ExtraVim(msgfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1182 " try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1183 " break
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1184 " endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1185 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1186 if MESSAGES('E587', ":break without :while")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1187 Xpath 256 " X: 256
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1188 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1189
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1190 if ExtraVim(msgfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1191 " try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1192 " throw "a"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1193 " catch /a/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1194 " break
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1195 " endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1196 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1197 if MESSAGES('E587', ":break without :while")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1198 Xpath 512 " X: 512
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1199 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1200
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1201 call delete(msgfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1202 unlet msgfile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1203
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1204 Xcheck 1023
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1205
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1206 " Leave MESSAGES() for the next test.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1207
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1208
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1209 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1210 " Test 56: Nesting errors: :endtry {{{1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1211 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1212 " For nesting errors of :try conditionals the correct error messages
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1213 " should be given.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1214 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1215 " This test reuses the function MESSAGES() from the previous test.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1216 " This functions checks the messages in g:msgfile.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1217 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1218
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1219 XpathINIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1220
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1221 let msgfile = tempname()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1222
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1223 if ExtraVim(msgfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1224 " endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1225 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1226 if MESSAGES('E602', ":endtry without :try")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1227 Xpath 1 " X: 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1228 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1229
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1230 if ExtraVim(msgfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1231 " if 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1232 " endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1233 " endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1234 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1235 if MESSAGES('E602', ":endtry without :try")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1236 Xpath 2 " X: 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1237 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1238
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1239 if ExtraVim(msgfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1240 " while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1241 " endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1242 " endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1243 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1244 if MESSAGES('E602', ":endtry without :try")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1245 Xpath 4 " X: 4
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1246 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1247
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1248 if ExtraVim(msgfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1249 " try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1250 " if 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1251 " endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1252 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1253 if MESSAGES('E171', "Missing :endif")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1254 Xpath 8 " X: 8
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1255 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1256
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1257 if ExtraVim(msgfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1258 " try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1259 " while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1260 " endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1261 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1262 if MESSAGES('E170', "Missing :endwhile")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1263 Xpath 16 " X: 16
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1264 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1265
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1266 if ExtraVim(msgfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1267 " try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1268 " finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1269 " if 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1270 " endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1271 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1272 if MESSAGES('E171', "Missing :endif")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1273 Xpath 32 " X: 32
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1274 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1275
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1276 if ExtraVim(msgfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1277 " try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1278 " finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1279 " while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1280 " endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1281 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1282 if MESSAGES('E170', "Missing :endwhile")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1283 Xpath 64 " X: 64
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1284 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1285
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1286 if ExtraVim(msgfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1287 " try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1288 " throw "a"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1289 " catch /a/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1290 " if 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1291 " endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1292 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1293 if MESSAGES('E171', "Missing :endif")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1294 Xpath 128 " X: 128
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1295 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1296
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1297 if ExtraVim(msgfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1298 " try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1299 " throw "a"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1300 " catch /a/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1301 " while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1302 " endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1303 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1304 if MESSAGES('E170', "Missing :endwhile")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1305 Xpath 256 " X: 256
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1306 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1307
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1308 call delete(msgfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1309 unlet msgfile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1310
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1311 delfunction MESSAGES
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1312
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1313 Xcheck 511
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1314
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1315
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1316 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1317 " Test 57: v:exception and v:throwpoint for user exceptions {{{1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1318 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1319 " v:exception evaluates to the value of the exception that was caught
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1320 " most recently and is not finished. (A caught exception is finished
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1321 " when the next ":catch", ":finally", or ":endtry" is reached.)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1322 " v:throwpoint evaluates to the script/function name and line number
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1323 " where that exception has been thrown.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1324 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1325
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1326 XpathINIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1327
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1328 function! FuncException()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1329 let g:exception = v:exception
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1330 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1331
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1332 function! FuncThrowpoint()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1333 let g:throwpoint = v:throwpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1334 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1335
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1336 let scriptException = MakeScript("FuncException")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1337 let scriptThrowPoint = MakeScript("FuncThrowpoint")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1338
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1339 command! CmdException let g:exception = v:exception
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1340 command! CmdThrowpoint let g:throwpoint = v:throwpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1341
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1342 XloopINIT! 1 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1343
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1344 function! CHECK(n, exception, throwname, throwline)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1345 XloopNEXT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1346 let error = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1347 if v:exception != a:exception
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1348 Xout a:n.": v:exception is" v:exception "instead of" a:exception
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1349 let error = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1350 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1351 if v:throwpoint !~ a:throwname
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1352 let name = escape(a:throwname, '\')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1353 Xout a:n.": v:throwpoint (".v:throwpoint.") does not match" name
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1354 let error = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1355 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1356 if v:throwpoint !~ a:throwline
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1357 let line = escape(a:throwline, '\')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1358 Xout a:n.": v:throwpoint (".v:throwpoint.") does not match" line
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1359 let error = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1360 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1361 if error
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1362 Xloop 1 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1363 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1364 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1365
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1366 function! T(arg, line)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1367 if a:line == 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1368 throw a:arg " in line 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1369 elseif a:line == 4
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1370 throw a:arg " in line 4
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1371 elseif a:line == 6
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1372 throw a:arg " in line 6
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1373 elseif a:line == 8
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1374 throw a:arg " in line 8
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1375 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1376 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1377
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1378 function! G(arg, line)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1379 call T(a:arg, a:line)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1380 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1381
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1382 function! F(arg, line)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1383 call G(a:arg, a:line)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1384 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1385
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1386 let scriptT = MakeScript("T")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1387 let scriptG = MakeScript("G", scriptT)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1388 let scriptF = MakeScript("F", scriptG)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1389
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1390 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1391 Xpath 32768 " X: 32768
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1392 call F("oops", 2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1393 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1394 Xpath 65536 " X: 65536
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1395 let exception = v:exception
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1396 let throwpoint = v:throwpoint
7139
d1e35ca56c73 commit https://github.com/vim/vim/commit/0a777ab9890ba0e8dd57f082e98fde1adab36aa0
Christian Brabandt <cb@256bit.org>
parents: 4774
diff changeset
1397 call CHECK(1, "oops", '\<F\[1]\.\.G\[1]\.\.T\>', '\<2\>')
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1398 exec "let exception = v:exception"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1399 exec "let throwpoint = v:throwpoint"
7139
d1e35ca56c73 commit https://github.com/vim/vim/commit/0a777ab9890ba0e8dd57f082e98fde1adab36aa0
Christian Brabandt <cb@256bit.org>
parents: 4774
diff changeset
1400 call CHECK(2, "oops", '\<F\[1]\.\.G\[1]\.\.T\>', '\<2\>')
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1401 CmdException
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1402 CmdThrowpoint
7139
d1e35ca56c73 commit https://github.com/vim/vim/commit/0a777ab9890ba0e8dd57f082e98fde1adab36aa0
Christian Brabandt <cb@256bit.org>
parents: 4774
diff changeset
1403 call CHECK(3, "oops", '\<F\[1]\.\.G\[1]\.\.T\>', '\<2\>')
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1404 call FuncException()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1405 call FuncThrowpoint()
7139
d1e35ca56c73 commit https://github.com/vim/vim/commit/0a777ab9890ba0e8dd57f082e98fde1adab36aa0
Christian Brabandt <cb@256bit.org>
parents: 4774
diff changeset
1406 call CHECK(4, "oops", '\<F\[1]\.\.G\[1]\.\.T\>', '\<2\>')
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1407 exec "source" scriptException
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1408 exec "source" scriptThrowPoint
7139
d1e35ca56c73 commit https://github.com/vim/vim/commit/0a777ab9890ba0e8dd57f082e98fde1adab36aa0
Christian Brabandt <cb@256bit.org>
parents: 4774
diff changeset
1409 call CHECK(5, "oops", '\<F\[1]\.\.G\[1]\.\.T\>', '\<2\>')
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1410 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1411 Xpath 131072 " X: 131072
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1412 call G("arrgh", 4)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1413 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1414 Xpath 262144 " X: 262144
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1415 let exception = v:exception
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1416 let throwpoint = v:throwpoint
7139
d1e35ca56c73 commit https://github.com/vim/vim/commit/0a777ab9890ba0e8dd57f082e98fde1adab36aa0
Christian Brabandt <cb@256bit.org>
parents: 4774
diff changeset
1417 call CHECK(6, "arrgh", '\<G\[1]\.\.T\>', '\<4\>')
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1418 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1419 Xpath 524288 " X: 524288
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1420 let g:arg = "autsch"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1421 let g:line = 6
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1422 exec "source" scriptF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1423 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1424 Xpath 1048576 " X: 1048576
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1425 let exception = v:exception
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1426 let throwpoint = v:throwpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1427 " Symbolic links in tempname()s are not resolved, whereas resolving
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1428 " is done for v:throwpoint. Resolve the temporary file name for
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1429 " scriptT, so that it can be matched against v:throwpoint.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1430 call CHECK(7, "autsch", resolve(scriptT), '\<6\>')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1431 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1432 Xpath 2097152 " X: 2097152
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1433 let exception = v:exception
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1434 let throwpoint = v:throwpoint
7139
d1e35ca56c73 commit https://github.com/vim/vim/commit/0a777ab9890ba0e8dd57f082e98fde1adab36aa0
Christian Brabandt <cb@256bit.org>
parents: 4774
diff changeset
1435 call CHECK(8, "arrgh", '\<G\[1]\.\.T\>', '\<4\>')
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1436 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1437 Xpath 4194304 " X: 4194304
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1438 let g:arg = "brrrr"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1439 let g:line = 8
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1440 exec "source" scriptG
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1441 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1442 Xpath 8388608 " X: 8388608
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1443 let exception = v:exception
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1444 let throwpoint = v:throwpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1445 " Resolve scriptT for matching it against v:throwpoint.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1446 call CHECK(9, "brrrr", resolve(scriptT), '\<8\>')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1447 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1448 Xpath 16777216 " X: 16777216
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1449 let exception = v:exception
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1450 let throwpoint = v:throwpoint
7139
d1e35ca56c73 commit https://github.com/vim/vim/commit/0a777ab9890ba0e8dd57f082e98fde1adab36aa0
Christian Brabandt <cb@256bit.org>
parents: 4774
diff changeset
1451 call CHECK(10, "arrgh", '\<G\[1]\.\.T\>', '\<4\>')
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1452 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1453 Xpath 33554432 " X: 33554432
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1454 let exception = v:exception
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1455 let throwpoint = v:throwpoint
7139
d1e35ca56c73 commit https://github.com/vim/vim/commit/0a777ab9890ba0e8dd57f082e98fde1adab36aa0
Christian Brabandt <cb@256bit.org>
parents: 4774
diff changeset
1456 call CHECK(11, "arrgh", '\<G\[1]\.\.T\>', '\<4\>')
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1457 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1458 Xpath 67108864 " X: 67108864
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1459 let exception = v:exception
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1460 let throwpoint = v:throwpoint
7139
d1e35ca56c73 commit https://github.com/vim/vim/commit/0a777ab9890ba0e8dd57f082e98fde1adab36aa0
Christian Brabandt <cb@256bit.org>
parents: 4774
diff changeset
1461 call CHECK(12, "arrgh", '\<G\[1]\.\.T\>', '\<4\>')
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1462 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1463 Xpath 134217728 " X: 134217728
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1464 let exception = v:exception
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1465 let throwpoint = v:throwpoint
7139
d1e35ca56c73 commit https://github.com/vim/vim/commit/0a777ab9890ba0e8dd57f082e98fde1adab36aa0
Christian Brabandt <cb@256bit.org>
parents: 4774
diff changeset
1466 call CHECK(13, "oops", '\<F\[1]\.\.G\[1]\.\.T\>', '\<2\>')
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1467 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1468 Xpath 268435456 " X: 268435456
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1469 let exception = v:exception
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1470 let throwpoint = v:throwpoint
7139
d1e35ca56c73 commit https://github.com/vim/vim/commit/0a777ab9890ba0e8dd57f082e98fde1adab36aa0
Christian Brabandt <cb@256bit.org>
parents: 4774
diff changeset
1471 call CHECK(14, "oops", '\<F\[1]\.\.G\[1]\.\.T\>', '\<2\>')
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1472 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1473 Xpath 536870912 " X: 536870912
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1474 let exception = v:exception
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1475 let throwpoint = v:throwpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1476 call CHECK(15, "", '^$', '^$')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1477 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1478
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1479 Xpath 1073741824 " X: 1073741824
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1480
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1481 unlet exception throwpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1482 delfunction FuncException
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1483 delfunction FuncThrowpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1484 call delete(scriptException)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1485 call delete(scriptThrowPoint)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1486 unlet scriptException scriptThrowPoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1487 delcommand CmdException
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1488 delcommand CmdThrowpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1489 delfunction T
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1490 delfunction G
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1491 delfunction F
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1492 call delete(scriptT)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1493 call delete(scriptG)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1494 call delete(scriptF)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1495 unlet scriptT scriptG scriptF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1496
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1497 Xcheck 2147450880
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1498
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1499
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1500 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1501 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1502 " Test 58: v:exception and v:throwpoint for error/interrupt exceptions {{{1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1503 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1504 " v:exception and v:throwpoint work also for error and interrupt
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1505 " exceptions.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1506 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1507
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1508 XpathINIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1509
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1510 if ExtraVim()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1511
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1512 function! T(line)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1513 if a:line == 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1514 delfunction T " error (function in use) in line 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1515 elseif a:line == 4
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1516 let dummy = 0 " INTERRUPT1 - interrupt in line 4
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1517 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1518 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1519
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1520 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1521 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1522 Xpath 1 " X: 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1523 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1524 call T(2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1525 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1526 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1527 if v:exception !~ 'Vim(delfunction):'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1528 Xpath 2 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1529 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1530 if v:throwpoint !~ '\<T\>'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1531 Xpath 4 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1532 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1533 if v:throwpoint !~ '\<2\>'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1534 Xpath 8 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1535 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1536 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1537 Xpath 16 " X: 16
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 32 " X: 32
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1540 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1541 if v:exception != ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1542 Xpath 64 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1543 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1544 if v:throwpoint != ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1545 Xpath 128 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1546 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1547 break " discard error for $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1548 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1549 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1550
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1551 Xpath 256 " X: 256
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1552 if v:exception != ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1553 Xpath 512 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1554 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1555 if v:throwpoint != ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1556 Xpath 1024 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1557 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1558
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1559 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1560 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1561 Xpath 2048 " X: 2048
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1562 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1563 call T(4)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1564 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1565 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1566 if v:exception != 'Vim:Interrupt'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1567 Xpath 4096 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1568 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1569 if v:throwpoint !~ '\<T\>'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1570 Xpath 8192 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1571 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1572 if v:throwpoint !~ '\<4\>'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1573 Xpath 16384 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1574 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1575 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1576 Xpath 32768 " X: 32768
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1577 if caught || $VIMNOINTTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1578 Xpath 65536 " X: 65536
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1579 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1580 if v:exception != ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1581 Xpath 131072 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1582 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1583 if v:throwpoint != ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1584 Xpath 262144 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1585 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1586 break " discard error for $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1587 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1588 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1589
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1590 Xpath 524288 " X: 524288
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1591 if v:exception != ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1592 Xpath 1048576 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1593 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1594 if v:throwpoint != ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1595 Xpath 2097152 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1596 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1597
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1598 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1599
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1600 Xcheck 624945
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1601
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1602
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1603 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1604 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1605 " Test 59: v:exception and v:throwpoint when discarding exceptions {{{1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1606 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1607 " When a :catch clause is left by a ":break" etc or an error or
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1608 " interrupt exception, v:exception and v:throwpoint are reset. They
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1609 " are not affected by an exception that is discarded before being
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1610 " caught.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1611 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1612
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1613 XpathINIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1614
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1615 if ExtraVim()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1616
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1617 XloopINIT! 1 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1618
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1619 let sfile = expand("<sfile>")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1620
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1621 function! LineNumber()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1622 return substitute(substitute(v:throwpoint, g:sfile, '', ""),
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1623 \ '\D*\(\d*\).*', '\1', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1624 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1625
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1626 command! -nargs=1 SetLineNumber
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1627 \ try | throw "line" | catch /.*/ | let <args> = LineNumber() | endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1628
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1629 " Check v:exception/v:throwpoint against second/fourth parameter if
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1630 " specified, check for being empty else.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1631 function! CHECK(n, ...)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1632 XloopNEXT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1633 let exception = a:0 != 0 ? a:1 : "" " second parameter (optional)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1634 let emsg = a:0 != 0 ? a:2 : "" " third parameter (optional)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1635 let line = a:0 != 0 ? a:3 : 0 " fourth parameter (optional)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1636 let error = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1637 if emsg != ""
303
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
1638 " exception is the error number, emsg the English error message text
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1639 if exception !~ '^E\d\+$'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1640 Xout "TODO: Add message number for:" emsg
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1641 elseif v:lang == "C" || v:lang =~ '^[Ee]n'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1642 if exception == "E492" && emsg == "Not an editor command"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1643 let exception = '^Vim:' . exception . ': ' . emsg
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1644 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1645 let exception = '^Vim(\a\+):' . exception . ': ' . emsg
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1646 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1647 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1648 if exception == "E492"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1649 let exception = '^Vim:' . exception
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1650 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1651 let exception = '^Vim(\a\+):' . exception
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1652 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1653 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1654 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1655 if exception == "" && v:exception != ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1656 Xout a:n.": v:exception is set:" v:exception
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1657 let error = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1658 elseif exception != "" && v:exception !~ exception
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1659 Xout a:n.": v:exception (".v:exception.") does not match" exception
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1660 let error = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1661 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1662 if line == 0 && v:throwpoint != ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1663 Xout a:n.": v:throwpoint is set:" v:throwpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1664 let error = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1665 elseif line != 0 && v:throwpoint !~ '\<' . line . '\>'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1666 Xout a:n.": v:throwpoint (".v:throwpoint.") does not match" line
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1667 let error = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1668 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1669 if !error
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1670 Xloop 1 " X: 2097151
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1671 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1672 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1673
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1674 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1675 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1676 throw "x1"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1677 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1678 break
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1679 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1680 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1681 call CHECK(1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1682
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1683 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1684 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1685 throw "x2"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1686 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1687 break
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1688 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1689 call CHECK(2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1690 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1691 break
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1692 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1693 call CHECK(3)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1694
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1695 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1696 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1697 let errcaught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1698 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1699 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1700 throw "x3"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1701 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1702 SetLineNumber line_before_error
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1703 asdf
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1704 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1705 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1706 let errcaught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1707 call CHECK(4, 'E492', "Not an editor command",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1708 \ line_before_error + 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1709 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1710 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1711 if !errcaught && $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1712 call CHECK(4)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1713 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1714 break " discard error for $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1715 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1716 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1717 call CHECK(5)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1718
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1719 Xpath 2097152 " X: 2097152
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1720
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1721 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1722 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1723 let intcaught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1724 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1725 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1726 throw "x4"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1727 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1728 SetLineNumber two_lines_before_interrupt
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1729 "INTERRUPT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1730 let dummy = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1731 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1732 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1733 let intcaught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1734 call CHECK(6, "Vim:Interrupt", '',
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1735 \ two_lines_before_interrupt + 2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1736 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1737 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1738 if !intcaught && $VIMNOINTTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1739 call CHECK(6)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1740 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1741 break " discard interrupt for $VIMNOINTTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1742 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1743 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1744 call CHECK(7)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1745
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1746 Xpath 4194304 " X: 4194304
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1747
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1748 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1749 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1750 let errcaught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1751 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1752 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1753 " if 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1754 SetLineNumber line_before_throw
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1755 throw "x5"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1756 " missing endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1757 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1758 Xpath 8388608 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1759 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1760 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1761 let errcaught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1762 call CHECK(8, 'E171', "Missing :endif", line_before_throw + 3)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1763 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1764 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1765 if !errcaught && $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1766 call CHECK(8)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1767 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1768 break " discard error for $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1769 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1770 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1771 call CHECK(9)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1772
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1773 Xpath 16777216 " X: 16777216
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1774
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1775 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1776 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1777 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1778 throw "x6"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1779 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1780 break
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1781 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1782 break
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1783 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1784 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1785 Xpath 33554432 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1786 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1787 call CHECK(10)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1788
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1789 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1790 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1791 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1792 throw "x7"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1793 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1794 break
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1795 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1796 break
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1797 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1798 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1799 Xpath 67108864 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1800 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1801 call CHECK(11)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1802 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1803 call CHECK(12)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1804
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1805 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1806 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1807 let errcaught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1808 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1809 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1810 throw "x8"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1811 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1812 SetLineNumber line_before_error
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1813 asdf
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1814 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1815 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1816 let errcaught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1817 call CHECK(13, 'E492', "Not an editor command",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1818 \ line_before_error + 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1819 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1820 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1821 if !errcaught && $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1822 call CHECK(13)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1823 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1824 break " discard error for $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1825 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1826 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1827 call CHECK(14)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1828
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1829 Xpath 134217728 " X: 134217728
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1830
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1831 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1832 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1833 let intcaught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1834 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1835 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1836 throw "x9"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1837 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1838 SetLineNumber two_lines_before_interrupt
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1839 "INTERRUPT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1840 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1841 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1842 let intcaught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1843 call CHECK(15, "Vim:Interrupt", '',
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1844 \ two_lines_before_interrupt + 2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1845 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1846 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1847 if !intcaught && $VIMNOINTTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1848 call CHECK(15)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1849 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1850 break " discard interrupt for $VIMNOINTTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1851 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1852 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1853 call CHECK(16)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1854
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1855 Xpath 268435456 " X: 268435456
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1856
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1857 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1858 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1859 let errcaught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1860 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1861 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1862 " if 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1863 SetLineNumber line_before_throw
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1864 throw "x10"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1865 " missing endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1866 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1867 call CHECK(17)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1868 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1869 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1870 let errcaught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1871 call CHECK(18, 'E171', "Missing :endif", line_before_throw + 3)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1872 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1873 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1874 if !errcaught && $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1875 call CHECK(18)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1876 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1877 break " discard error for $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1878 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1879 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1880 call CHECK(19)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1881
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1882 Xpath 536870912 " X: 536870912
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1883
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1884 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1885 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1886 let errcaught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1887 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1888 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1889 " if 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1890 SetLineNumber line_before_throw
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1891 throw "x11"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1892 " missing endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1893 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1894 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1895 let errcaught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1896 call CHECK(20, 'E171', "Missing :endif", line_before_throw + 3)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1897 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1898 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1899 if !errcaught && $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1900 call CHECK(20)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1901 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1902 break " discard error for $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1903 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1904 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1905 call CHECK(21)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1906
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1907 Xpath 1073741824 " X: 1073741824
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1908
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1909 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1910
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1911 Xcheck 2038431743
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1912
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1913
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1914 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1915 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1916 " Test 60: (Re)throwing v:exception; :echoerr. {{{1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1917 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1918 " A user exception can be rethrown after catching by throwing
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1919 " v:exception. An error or interrupt exception cannot be rethrown
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1920 " because Vim exceptions cannot be faked. A Vim exception using the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1921 " value of v:exception can, however, be triggered by the :echoerr
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1922 " command.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1923 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1924
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1925 XpathINIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1926
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1927 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1928 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1929 Xpath 1 " X: 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1930 throw "oops"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1931 catch /oops/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1932 Xpath 2 " X: 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1933 throw v:exception " rethrow user exception
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1934 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1935 Xpath 4 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1936 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1937 catch /^oops$/ " catches rethrown user exception
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1938 Xpath 8 " X: 8
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1939 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1940 Xpath 16 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1941 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1942
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1943 function! F()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1944 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1945 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1946 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1947 Xpath 32 " X: 32
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1948 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
1949 Xpath 64 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1950 Xout "did_emsg was reset before executing " .
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1951 \ "BufWritePost autocommands."
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1952 catch /^Vim(write):/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1953 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1954 throw v:exception " throw error: cannot fake Vim exception
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1955 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1956 Xpath 128 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1957 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1958 Xpath 256 " X: 256
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1959 if !caught && !$VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1960 Xpath 512 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1961 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1962 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1963 catch /^Vim(throw):/ " catches throw error
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1964 let caught = caught + 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1965 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1966 Xpath 1024 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1967 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1968 Xpath 2048 " X: 2048
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1969 if caught != 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1970 if !caught && !$VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1971 Xpath 4096 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1972 elseif caught
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1973 Xpath 8192 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1974 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1975 return | " discard error for $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1976 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1977 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1978 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1979
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1980 call F()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1981 delfunction F
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1982
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1983 function! G()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1984 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1985 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1986 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1987 Xpath 16384 " X: 16384
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1988 asdf
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1989 catch /^Vim/ " catch error exception
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1990 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1991 " Trigger Vim error exception with value specified after :echoerr
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1992 let value = substitute(v:exception, '^Vim\((.*)\)\=:', '', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1993 echoerr value
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1994 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1995 Xpath 32768 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1996 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1997 Xpath 65536 " X: 65536
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1998 if !caught
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1999 if !$VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2000 Xpath 131072 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2001 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2002 let value = "Error"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2003 echoerr value
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2004 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2005 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2006 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2007 catch /^Vim(echoerr):/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2008 let caught = caught + 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2009 if v:exception !~ value
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2010 Xpath 262144 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2011 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2012 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2013 Xpath 524288 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2014 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2015 Xpath 1048576 " X: 1048576
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2016 if caught != 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2017 if !caught && !$VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2018 Xpath 2097152 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2019 elseif caught
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2020 Xpath 4194304 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2021 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2022 return | " discard error for $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2023 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2024 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2025 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2026
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2027 call G()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2028 delfunction G
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2029
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2030 unlet! value caught
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2031
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2032 if ExtraVim()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2033 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2034 let errcaught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2035 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2036 Xpath 8388608 " X: 8388608
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2037 let intcaught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2038 "INTERRUPT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2039 catch /^Vim:/ " catch interrupt exception
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2040 let intcaught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2041 " Trigger Vim error exception with value specified after :echoerr
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2042 echoerr substitute(v:exception, '^Vim\((.*)\)\=:', '', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2043 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2044 Xpath 16777216 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2045 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2046 Xpath 33554432 " X: 33554432
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2047 if !intcaught
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2048 if !$VIMNOINTTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2049 Xpath 67108864 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2050 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2051 echoerr "Interrupt"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2052 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2053 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2054 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2055 catch /^Vim(echoerr):/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2056 let errcaught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2057 if v:exception !~ "Interrupt"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2058 Xpath 134217728 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2059 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2060 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2061 Xpath 268435456 " X: 268435456
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2062 if !errcaught && !$VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2063 Xpath 536870912 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2064 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2065 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2066 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2067
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2068 Xcheck 311511339
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2069
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2070
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2071 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2072 " Test 61: Catching interrupt exceptions {{{1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2073 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2074 " When an interrupt occurs inside a :try/:endtry region, an
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2075 " interrupt exception is thrown and can be caught. Its value is
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2076 " "Vim:Interrupt". If the interrupt occurs after an error or a :throw
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2077 " but before a matching :catch is reached, all following :catches of
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2078 " that try block are ignored, but the interrupt exception can be
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2079 " caught by the next surrounding try conditional. An interrupt is
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2080 " ignored when there is a previous interrupt that has not been caught
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2081 " or causes a :finally clause to be executed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2082 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2083
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2084 XpathINIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2085
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2086 if ExtraVim()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2087
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2088 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2089 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2090 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2091 Xpath 1 " X: 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2092 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2093 "INTERRUPT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2094 Xpath 2 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2095 catch /^Vim:Interrupt$/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2096 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2097 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2098 Xpath 4 " X: 4
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2099 if caught || $VIMNOINTTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2100 Xpath 8 " X: 8
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2101 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2102 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2103 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2104 Xpath 16 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2105 Xout v:exception "in" v:throwpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2106 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2107 break " discard interrupt for $VIMNOINTTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2108 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2109 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2110
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2111 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2112 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2113 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2114 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2115 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2116 Xpath 32 " X: 32
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2117 asdf
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2118 Xpath 64 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2119 catch /do_not_catch/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2120 Xpath 128 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2121 catch /.*/ "INTERRUPT - throw interrupt if !$VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2122 Xpath 256 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2123 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2124 Xpath 512 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2125 finally "INTERRUPT - throw interrupt if $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2126 Xpath 1024 " X: 1024
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2127 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2128 catch /^Vim:Interrupt$/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2129 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2130 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2131 Xpath 2048 " X: 2048
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2132 if caught || $VIMNOINTTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2133 Xpath 4096 " X: 4096
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2134 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2135 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2136 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2137 Xpath 8192 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2138 Xout v:exception "in" v:throwpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2139 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2140 break " discard interrupt for $VIMNOINTTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2141 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2142 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2143
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2144 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2145 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2146 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2147 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2148 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2149 Xpath 16384 " X: 16384
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2150 throw "x"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2151 Xpath 32768 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2152 catch /do_not_catch/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2153 Xpath 65536 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2154 catch /x/ "INTERRUPT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2155 Xpath 131072 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2156 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2157 Xpath 262144 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2158 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2159 catch /^Vim:Interrupt$/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2160 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2161 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2162 Xpath 524288 " X: 524288
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2163 if caught || $VIMNOINTTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2164 Xpath 1048576 " X: 1048576
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2165 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2166 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2167 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2168 Xpath 2097152 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2169 Xout v:exception "in" v:throwpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2170 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2171 break " discard interrupt for $VIMNOINTTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2172 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2173 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2174
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2175 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2176 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2177 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2178 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2179 Xpath 4194304 " X: 4194304
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2180 "INTERRUPT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2181 Xpath 8388608 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2182 catch /do_not_catch/ "INTERRUPT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2183 Xpath 16777216 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2184 catch /^Vim:Interrupt$/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2185 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2186 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2187 Xpath 33554432 " X: 33554432
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2188 if caught || $VIMNOINTTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2189 Xpath 67108864 " X: 67108864
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2190 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2191 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2192 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2193 Xpath 134217728 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2194 Xout v:exception "in" v:throwpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2195 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2196 break " discard interrupt for $VIMNOINTTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2197 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2198 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2199
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2200 Xpath 268435456 " X: 268435456
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2201
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2202 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2203
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2204 Xcheck 374889517
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2205
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2206
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2207 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2208 " Test 62: Catching error exceptions {{{1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2209 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2210 " An error inside a :try/:endtry region is converted to an exception
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2211 " and can be caught. The error exception has a "Vim(cmdname):" prefix
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2212 " where cmdname is the name of the failing command, or a "Vim:" prefix
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2213 " if no command name is known. The "Vim" prefixes cannot be faked.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2214 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2215
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2216 XpathINIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2217
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2218 function! MSG(enr, emsg)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2219 let english = v:lang == "C" || v:lang =~ '^[Ee]n'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2220 if a:enr == ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2221 Xout "TODO: Add message number for:" a:emsg
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2222 let v:errmsg = ":" . v:errmsg
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2223 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2224 let match = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2225 if v:errmsg !~ '^'.a:enr.':' || (english && v:errmsg !~ a:emsg)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2226 let match = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2227 if v:errmsg == ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2228 Xout "Message missing."
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2229 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2230 let v:errmsg = escape(v:errmsg, '"')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2231 Xout "Unexpected message:" v:errmsg
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2232 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2233 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2234 return match
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2235 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2236
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2237 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2238 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2239 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2240 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2241 unlet novar
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2242 catch /^Vim(unlet):/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2243 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2244 let v:errmsg = substitute(v:exception, '^Vim(unlet):', '', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2245 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2246 Xpath 1 " X: 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2247 if !caught && !$VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2248 Xpath 2 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2249 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2250 if !MSG('E108', "No such variable")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2251 Xpath 4 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2252 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2253 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2254 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2255 Xpath 8 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2256 Xout v:exception "in" v:throwpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2257 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2258 break " discard error for $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2259 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2260 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2261
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2262 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2263 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2264 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2265 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2266 throw novar " error in :throw
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2267 catch /^Vim(throw):/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2268 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2269 let v:errmsg = substitute(v:exception, '^Vim(throw):', '', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2270 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2271 Xpath 16 " X: 16
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2272 if !caught && !$VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2273 Xpath 32 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2274 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2275 if caught ? !MSG('E121', "Undefined variable")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2276 \ : !MSG('E15', "Invalid expression")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2277 Xpath 64 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2278 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2279 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2280 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2281 Xpath 128 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2282 Xout v:exception "in" v:throwpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2283 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2284 break " discard error for $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2285 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2286 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2287
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2288 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2289 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2290 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2291 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2292 throw "Vim:faked" " error: cannot fake Vim exception
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2293 catch /^Vim(throw):/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2294 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2295 let v:errmsg = substitute(v:exception, '^Vim(throw):', '', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2296 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2297 Xpath 256 " X: 256
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2298 if !caught && !$VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2299 Xpath 512 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2300 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2301 if !MSG('E608', "Cannot :throw exceptions with 'Vim' prefix")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2302 Xpath 1024 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2303 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2304 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2305 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2306 Xpath 2048 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2307 Xout v:exception "in" v:throwpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2308 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2309 break " discard error for $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2310 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2311 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2312
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2313 function! F()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2314 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2315 " Missing :endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2316 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2317
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2318 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2319 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2320 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2321 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2322 call F()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2323 catch /^Vim(endfunction):/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2324 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2325 let v:errmsg = substitute(v:exception, '^Vim(endfunction):', '', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2326 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2327 Xpath 4096 " X: 4096
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2328 if !caught && !$VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2329 Xpath 8192 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2330 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2331 if !MSG('E170', "Missing :endwhile")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2332 Xpath 16384 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2333 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2334 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2335 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2336 Xpath 32768 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2337 Xout v:exception "in" v:throwpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2338 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2339 break " discard error for $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2340 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2341 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2342
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2343 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2344 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2345 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2346 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2347 ExecAsScript F
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2348 catch /^Vim:/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2349 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2350 let v:errmsg = substitute(v:exception, '^Vim:', '', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2351 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2352 Xpath 65536 " X: 65536
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2353 if !caught && !$VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2354 Xpath 131072 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2355 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2356 if !MSG('E170', "Missing :endwhile")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2357 Xpath 262144 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2358 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2359 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2360 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2361 Xpath 524288 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2362 Xout v:exception "in" v:throwpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2363 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2364 break " discard error for $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2365 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2366 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2367
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2368 function! G()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2369 call G()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2370 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2371
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2372 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2373 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2374 let mfd_save = &mfd
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2375 set mfd=3
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2376 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2377 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2378 call G()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2379 catch /^Vim(call):/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2380 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2381 let v:errmsg = substitute(v:exception, '^Vim(call):', '', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2382 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2383 Xpath 1048576 " X: 1048576
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2384 if !caught && !$VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2385 Xpath 2097152 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2386 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2387 if !MSG('E132', "Function call depth is higher than 'maxfuncdepth'")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2388 Xpath 4194304 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2389 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2390 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2391 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2392 Xpath 8388608 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2393 Xout v:exception "in" v:throwpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2394 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2395 let &mfd = mfd_save
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2396 break " discard error for $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2397 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2398 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2399
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2400 function! H()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2401 return H()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2402 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2403
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2404 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2405 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2406 let mfd_save = &mfd
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2407 set mfd=3
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2408 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2409 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2410 call H()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2411 catch /^Vim(return):/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2412 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2413 let v:errmsg = substitute(v:exception, '^Vim(return):', '', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2414 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2415 Xpath 16777216 " X: 16777216
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2416 if !caught && !$VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2417 Xpath 33554432 " 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 if !MSG('E132', "Function call depth is higher than 'maxfuncdepth'")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2420 Xpath 67108864 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2421 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2422 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2423 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2424 Xpath 134217728 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2425 Xout v:exception "in" v:throwpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2426 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2427 let &mfd = mfd_save
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2428 break " discard error for $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2429 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2430 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2431
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2432 unlet! caught mfd_save
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2433 delfunction F
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2434 delfunction G
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2435 delfunction H
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2436 Xpath 268435456 " X: 268435456
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2437
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2438 Xcheck 286331153
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2439
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2440 " Leave MSG() for the next test.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2441
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2442
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2443 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2444 " Test 63: Suppressing error exceptions by :silent!. {{{1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2445 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2446 " A :silent! command inside a :try/:endtry region suppresses the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2447 " conversion of errors to an exception and the immediate abortion on
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2448 " error. When the commands executed by the :silent! themselves open
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2449 " a new :try/:endtry region, conversion of errors to exception and
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2450 " immediate abortion is switched on again - until the next :silent!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2451 " etc. The :silent! has the effect of setting v:errmsg to the error
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2452 " message text (without displaying it) and continuing with the next
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2453 " script line.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2454 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2455 " When a command triggering autocommands is executed by :silent!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2456 " inside a :try/:endtry, the autocommand execution is not suppressed
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2457 " on error.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2458 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2459 " This test reuses the function MSG() from the previous test.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2460 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2461
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2462 XpathINIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2463
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2464 XloopINIT! 1 4
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2465
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2466 let taken = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2467
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2468 function! S(n) abort
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2469 XloopNEXT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2470 let g:taken = g:taken . "E" . a:n
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2471 let v:errmsg = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2472 exec "asdf" . a:n
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2473
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2474 " Check that ":silent!" continues:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2475 Xloop 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2476
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2477 " Check that ":silent!" sets "v:errmsg":
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2478 if MSG('E492', "Not an editor command")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2479 Xloop 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2480 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2481 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2482
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2483 function! Foo()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2484 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2485 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2486 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2487 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2488 " This is not silent:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2489 call S(3) " X: 0 * 16
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2490 catch /^Vim:/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2491 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2492 let errmsg3 = substitute(v:exception, '^Vim:', '', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2493 silent! call S(4) " X: 3 * 64
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2494 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2495 if !caught
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2496 let errmsg3 = v:errmsg
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2497 " Do call S(4) here if not executed in :catch.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2498 silent! call S(4)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2499 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2500 Xpath 1048576 " X: 1048576
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2501 if !caught && !$VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2502 Xpath 2097152 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2503 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2504 let v:errmsg = errmsg3
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2505 if !MSG('E492', "Not an editor command")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2506 Xpath 4194304 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2507 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2508 silent! call S(5) " X: 3 * 256
303
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2509 " Break out of try conditionals that cover ":silent!". This also
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2510 " discards the aborting error when $VIMNOERRTHROW is non-zero.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2511 break
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2512 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2513 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2514 Xpath 8388608 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2515 Xout v:exception "in" v:throwpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2516 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2517 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2518 " This is a double ":silent!" (see caller).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2519 silent! call S(6) " X: 3 * 1024
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2520 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2521
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2522 function! Bar()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2523 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2524 silent! call S(2) " X: 3 * 4
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2525 " X: 3 * 4096
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2526 silent! execute "call Foo() | call S(7)"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2527 silent! call S(8) " X: 3 * 16384
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2528 endtry " normal end of try cond that covers ":silent!"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2529 " This has a ":silent!" from the caller:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2530 call S(9) " X: 3 * 65536
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2531 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2532
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2533 silent! call S(1) " X: 3 * 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2534 silent! call Bar()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2535 silent! call S(10) " X: 3 * 262144
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2536
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2537 let expected = "E1E2E3E4E5E6E7E8E9E10"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2538 if taken != expected
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2539 Xpath 16777216 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2540 Xout "'taken' is" taken "instead of" expected
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2541 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2542
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2543 augroup TMP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2544 autocmd BufWritePost * Xpath 33554432 " X: 33554432
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2545 augroup END
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2546
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2547 Xpath 67108864 " X: 67108864
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2548 write /i/m/p/o/s/s/i/b/l/e
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2549 Xpath 134217728 " X: 134217728
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2550
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2551 autocmd! TMP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2552 unlet! caught errmsg3 taken expected
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2553 delfunction S
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2554 delfunction Foo
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2555 delfunction Bar
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2556 delfunction MSG
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2557
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2558 Xcheck 236978127
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2559
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2560
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2561 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2562 " Test 64: Error exceptions after error, interrupt or :throw {{{1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2563 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2564 " When an error occurs after an interrupt or a :throw but before
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2565 " a matching :catch is reached, all following :catches of that try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2566 " block are ignored, but the error exception can be caught by the next
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2567 " surrounding try conditional. Any previous error exception is
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2568 " discarded. An error is ignored when there is a previous error that
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2569 " has not been caught.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2570 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2571
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2572 XpathINIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2573
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2574 if ExtraVim()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2575
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2576 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2577 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2578 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2579 Xpath 1 " X: 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2580 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2581 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2582 " if 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2583 " Missing :endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2584 endwhile " throw error exception
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2585 catch /^Vim(/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2586 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2587 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2588 Xpath 2 " X: 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2589 if caught || $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2590 Xpath 4 " X: 4
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2591 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2592 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2593 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2594 Xpath 8 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2595 Xout v:exception "in" v:throwpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2596 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2597 break " discard error for $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2598 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2599 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2600
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2601 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2602 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2603 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2604 Xpath 16 " X: 16
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2605 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2606 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2607 " if 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2608 " Missing :endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2609 catch /.*/ " throw error exception
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2610 Xpath 32 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2611 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2612 Xpath 64 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2613 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2614 catch /^Vim(/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2615 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2616 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2617 Xpath 128 " X: 128
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2618 if caught || $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2619 Xpath 256 " X: 256
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2620 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2621 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2622 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2623 Xpath 512 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2624 Xout v:exception "in" v:throwpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2625 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2626 break " discard error for $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2627 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2628 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2629
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2630 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2631 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2632 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2633 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2634 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2635 Xpath 1024 " X: 1024
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2636 "INTERRUPT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2637 catch /do_not_catch/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2638 Xpath 2048 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2639 " if 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2640 " Missing :endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2641 catch /.*/ " throw error exception
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2642 Xpath 4096 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2643 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2644 Xpath 8192 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2645 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2646 catch /^Vim(/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2647 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2648 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2649 Xpath 16384 " X: 16384
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2650 if caught || $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2651 Xpath 32768 " X: 32768
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2652 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2653 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2654 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2655 Xpath 65536 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2656 Xout v:exception "in" v:throwpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2657 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2658 break " discard error for $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2659 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2660 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2661
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2662 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2663 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2664 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2665 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2666 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2667 Xpath 131072 " X: 131072
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2668 throw "x"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2669 catch /do_not_catch/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2670 Xpath 262144 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2671 " if 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2672 " Missing :endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2673 catch /x/ " throw error exception
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2674 Xpath 524288 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2675 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2676 Xpath 1048576 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2677 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2678 catch /^Vim(/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2679 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2680 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2681 Xpath 2097152 " X: 2097152
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2682 if caught || $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2683 Xpath 4194304 " X: 4194304
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2684 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2685 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2686 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2687 Xpath 8388608 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2688 Xout v:exception "in" v:throwpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2689 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2690 break " discard error for $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2691 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2692 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2693
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2694 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2695 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2696 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2697 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2698 Xpath 16777216 " X: 16777216
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2699 " endif " :endif without :if; throw error exception
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2700 " if 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2701 " Missing :endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2702 catch /do_not_catch/ " ignore new error
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2703 Xpath 33554432 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2704 catch /^Vim(endif):/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2705 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2706 catch /^Vim(/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2707 Xpath 67108864 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2708 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2709 Xpath 134217728 " X: 134217728
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2710 if caught || $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2711 Xpath 268435456 " X: 268435456
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2712 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2713 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2714 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2715 Xpath 536870912 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2716 Xout v:exception "in" v:throwpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2717 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2718 break " discard error for $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2719 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2720 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2721
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2722 Xpath 1073741824 " X: 1073741824
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2723
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2724 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2725
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2726 Xcheck 1499645335
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2727
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2728
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2729 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2730 " Test 65: Errors in the /pattern/ argument of a :catch {{{1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2731 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2732 " On an error in the /pattern/ argument of a :catch, the :catch does
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2733 " not match. Any following :catches of the same :try/:endtry don't
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2734 " match either. Finally clauses are executed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2735 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2736
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2737 XpathINIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2738
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2739 function! MSG(enr, emsg)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2740 let english = v:lang == "C" || v:lang =~ '^[Ee]n'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2741 if a:enr == ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2742 Xout "TODO: Add message number for:" a:emsg
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2743 let v:errmsg = ":" . v:errmsg
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2744 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2745 let match = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2746 if v:errmsg !~ '^'.a:enr.':' || (english && v:errmsg !~ a:emsg)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2747 let match = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2748 if v:errmsg == ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2749 Xout "Message missing."
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2750 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2751 let v:errmsg = escape(v:errmsg, '"')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2752 Xout "Unexpected message:" v:errmsg
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2753 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2754 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2755 return match
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2756 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2757
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2758 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2759 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2760 Xpath 1 " X: 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2761 throw "oops"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2762 catch /^oops$/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2763 Xpath 2 " X: 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2764 catch /\)/ " not checked; exception has already been caught
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2765 Xpath 4 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2766 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2767 Xpath 8 " X: 8
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2768 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2769 Xpath 16 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2770 Xout v:exception "in" v:throwpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2771 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2772
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2773 function! F()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2774 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2775 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2776 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2777 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2778 Xpath 32 " X: 32
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2779 throw "ab"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2780 catch /abc/ " does not catch
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2781 Xpath 64 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2782 catch /\)/ " error; discards exception
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2783 Xpath 128 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2784 catch /.*/ " not checked
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2785 Xpath 256 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2786 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2787 Xpath 512 " X: 512
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2788 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2789 Xpath 1024 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2790 catch /^ab$/ " checked, but original exception is discarded
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2791 Xpath 2048 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2792 catch /^Vim(catch):/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2793 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2794 let v:errmsg = substitute(v:exception, '^Vim(catch):', '', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2795 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2796 Xpath 4096 " X: 4096
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2797 if !caught && !$VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2798 Xpath 8192 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2799 endif
7977
96fe78b32ad5 commit https://github.com/vim/vim/commit/dc94a26a641914df5f1ba1ab47a5752e1137287e
Christian Brabandt <cb@256bit.org>
parents: 7454
diff changeset
2800 if !MSG('E475', "Invalid argument")
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2801 Xpath 16384 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2802 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2803 if !caught
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2804 return | " discard error
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2805 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2806 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2807 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2808 Xpath 32768 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2809 Xout v:exception "in" v:throwpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2810 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2811 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2812
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2813 call F()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2814 Xpath 65536 " X: 65536
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2815
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2816 delfunction MSG
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2817 delfunction F
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2818 unlet! caught
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2819
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2820 Xcheck 70187
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2821
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2822
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2823 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2824 " Test 66: Stop range :call on error, interrupt, or :throw {{{1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2825 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2826 " When a function which is multiply called for a range since it
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2827 " doesn't handle the range itself has an error in a command
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2828 " dynamically enclosed by :try/:endtry or gets an interrupt or
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2829 " executes a :throw, no more calls for the remaining lines in the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2830 " range are made. On an error in a command not dynamically enclosed
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2831 " by :try/:endtry, the function is executed again for the remaining
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2832 " lines in the range.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2833 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2834
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2835 XpathINIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2836
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2837 if ExtraVim()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2838
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2839 let file = tempname()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2840 exec "edit" file
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2841
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2842 insert
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2843 line 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2844 line 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2845 line 3
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2846 .
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2847
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2848 XloopINIT! 1 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2849
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2850 let taken = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2851 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
2852
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2853 function! F(reason, n) abort
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2854 let g:taken = g:taken . "F" . a:n .
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2855 \ substitute(a:reason, '\(\l\).*', '\u\1', "") .
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2856 \ "(" . line(".") . ")"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2857
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2858 if a:reason == "error"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2859 asdf
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2860 elseif a:reason == "interrupt"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2861 "INTERRUPT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2862 let dummy = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2863 elseif a:reason == "throw"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2864 throw "xyz"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2865 elseif a:reason == "aborting error"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2866 XloopNEXT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2867 if g:taken != g:expected
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2868 Xloop 1 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2869 Xout "'taken' is" g:taken "instead of" g:expected
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2870 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2871 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2872 bwipeout!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2873 call delete(file)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2874 asdf
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2875 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2876 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2877 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2878
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2879 function! G(reason, n)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2880 let g:taken = g:taken . "G" . a:n .
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2881 \ substitute(a:reason, '\(\l\).*', '\u\1', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2882 1,3call F(a:reason, a:n)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2883 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2884
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2885 Xpath 8 " X: 8
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2886 call G("error", 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2887 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2888 Xpath 16 " X: 16
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2889 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2890 call G("error", 2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2891 Xpath 32 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2892 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2893 Xpath 64 " X: 64
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2894 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2895 call G("interrupt", 3)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2896 Xpath 128 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2897 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2898 Xpath 256 " X: 256
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2899 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2900 call G("throw", 4)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2901 Xpath 512 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2902 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2903 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2904 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2905 catch /xyz/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2906 Xpath 1024 " X: 1024
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2907 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2908 Xpath 2048 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2909 Xout v:exception "in" ExtraVimThrowpoint()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2910 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2911 Xpath 4096 " X: 4096
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2912 call G("aborting error", 5)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2913 Xpath 8192 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2914 Xout "'taken' is" taken "instead of" expected
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2915
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2916 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2917
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2918 Xcheck 5464
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2919
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2920
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2921 "-------------------------------------------------------------------------------
303
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2922 " Test 67: :throw across :call command {{{1
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2923 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2924 " On a call command, an exception might be thrown when evaluating the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2925 " function name, during evaluation of the arguments, or when the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2926 " function is being executed. The exception can be caught by the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2927 " caller.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2928 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2929
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2930 XpathINIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2931
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2932 function! THROW(x, n)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2933 if a:n == 1
303
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2934 Xpath 1 " X: 1
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2935 elseif a:n == 2
303
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2936 Xpath 2 " X: 2
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2937 elseif a:n == 3
303
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2938 Xpath 4 " X: 4
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2939 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2940 throw a:x
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2941 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2942
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2943 function! NAME(x, n)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2944 if a:n == 1
303
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2945 Xpath 8 " X: 0
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2946 elseif a:n == 2
303
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2947 Xpath 16 " X: 16
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2948 elseif a:n == 3
303
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2949 Xpath 32 " X: 32
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2950 elseif a:n == 4
303
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2951 Xpath 64 " X: 64
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2952 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2953 return a:x
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2954 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2955
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2956 function! ARG(x, n)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2957 if a:n == 1
303
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2958 Xpath 128 " X: 0
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2959 elseif a:n == 2
303
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2960 Xpath 256 " X: 0
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2961 elseif a:n == 3
303
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2962 Xpath 512 " X: 512
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2963 elseif a:n == 4
303
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2964 Xpath 1024 " X: 1024
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2965 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2966 return a:x
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2967 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2968
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2969 function! F(x, n)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2970 if a:n == 2
303
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2971 Xpath 2048 " X: 0
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2972 elseif a:n == 4
303
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2973 Xpath 4096 " X: 4096
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2974 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2975 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2976
303
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2977 while 1
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2978 try
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2979 let error = 0
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2980 let v:errmsg = ""
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2981
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2982 while 1
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2983 try
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2984 Xpath 8192 " X: 8192
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2985 call {NAME(THROW("name", 1), 1)}(ARG(4711, 1), 1)
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2986 Xpath 16384 " X: 0
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2987 catch /^name$/
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2988 Xpath 32768 " X: 32768
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2989 catch /.*/
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2990 let error = 1
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2991 Xout "1:" v:exception "in" v:throwpoint
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2992 finally
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2993 if !error && $VIMNOERRTHROW && v:errmsg != ""
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2994 let error = 1
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2995 Xout "1:" v:errmsg
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2996 endif
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2997 if error
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2998 Xpath 65536 " X: 0
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
2999 endif
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3000 let error = 0
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3001 let v:errmsg = ""
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3002 break " discard error for $VIMNOERRTHROW
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3003 endtry
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3004 endwhile
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3005
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3006 while 1
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3007 try
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3008 Xpath 131072 " X: 131072
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3009 call {NAME("F", 2)}(ARG(THROW("arg", 2), 2), 2)
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3010 Xpath 262144 " X: 0
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3011 catch /^arg$/
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3012 Xpath 524288 " X: 524288
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3013 catch /.*/
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3014 let error = 1
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3015 Xout "2:" v:exception "in" v:throwpoint
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3016 finally
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3017 if !error && $VIMNOERRTHROW && v:errmsg != ""
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3018 let error = 1
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3019 Xout "2:" v:errmsg
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3020 endif
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3021 if error
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3022 Xpath 1048576 " X: 0
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3023 endif
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3024 let error = 0
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3025 let v:errmsg = ""
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3026 break " discard error for $VIMNOERRTHROW
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3027 endtry
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3028 endwhile
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3029
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3030 while 1
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3031 try
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3032 Xpath 2097152 " X: 2097152
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3033 call {NAME("THROW", 3)}(ARG("call", 3), 3)
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3034 Xpath 4194304 " X: 0
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3035 catch /^call$/
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3036 Xpath 8388608 " X: 8388608
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3037 catch /^0$/ " default return value
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3038 Xpath 16777216 " X: 0
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3039 Xout "3:" v:throwpoint
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3040 catch /.*/
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3041 let error = 1
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3042 Xout "3:" v:exception "in" v:throwpoint
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3043 finally
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3044 if !error && $VIMNOERRTHROW && v:errmsg != ""
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3045 let error = 1
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3046 Xout "3:" v:errmsg
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3047 endif
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3048 if error
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3049 Xpath 33554432 " X: 0
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3050 endif
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3051 let error = 0
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3052 let v:errmsg = ""
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3053 break " discard error for $VIMNOERRTHROW
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3054 endtry
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3055 endwhile
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3056
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3057 while 1
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3058 try
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3059 Xpath 67108864 " X: 67108864
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3060 call {NAME("F", 4)}(ARG(4711, 4), 4)
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3061 Xpath 134217728 " X: 134217728
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3062 catch /.*/
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3063 let error = 1
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3064 Xout "4:" v:exception "in" v:throwpoint
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3065 finally
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3066 if !error && $VIMNOERRTHROW && v:errmsg != ""
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3067 let error = 1
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3068 Xout "4:" v:errmsg
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3069 endif
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3070 if error
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3071 Xpath 268435456 " X: 0
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3072 endif
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3073 let error = 0
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3074 let v:errmsg = ""
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3075 break " discard error for $VIMNOERRTHROW
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3076 endtry
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3077 endwhile
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3078
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3079 catch /^0$/ " default return value
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3080 Xpath 536870912 " X: 0
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3081 Xout v:throwpoint
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3082 catch /.*/
303
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3083 let error = 1
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3084 Xout v:exception "in" v:throwpoint
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3085 finally
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3086 if !error && $VIMNOERRTHROW && v:errmsg != ""
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3087 let error = 1
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3088 Xout v:errmsg
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3089 endif
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3090 if error
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3091 Xpath 1073741824 " X: 0
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3092 endif
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3093 break " discard error for $VIMNOERRTHROW
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3094 endtry
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3095 endwhile
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3096
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3097 unlet error
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3098 delfunction F
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3099
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3100 Xcheck 212514423
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3101
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3102 " Leave THROW(), NAME(), and ARG() for the next test.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3103
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3104
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3105 "-------------------------------------------------------------------------------
303
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3106 " Test 68: :throw across function calls in expressions {{{1
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3107 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3108 " On a function call within an expression, an exception might be
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3109 " thrown when evaluating the function name, during evaluation of the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3110 " arguments, or when the function is being executed. The exception
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3111 " can be caught by the caller.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3112 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3113 " This test reuses the functions THROW(), NAME(), and ARG() from the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3114 " previous test.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3115 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3116
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3117 XpathINIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3118
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3119 function! F(x, n)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3120 if a:n == 2
303
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3121 Xpath 2048 " X: 0
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3122 elseif a:n == 4
303
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3123 Xpath 4096 " X: 4096
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3124 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3125 return a:x
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3126 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3127
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3128 unlet! var1 var2 var3 var4
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3129
303
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3130 while 1
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3131 try
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3132 let error = 0
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3133 let v:errmsg = ""
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3134
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3135 while 1
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3136 try
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3137 Xpath 8192 " X: 8192
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3138 let var1 = {NAME(THROW("name", 1), 1)}(ARG(4711, 1), 1)
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3139 Xpath 16384 " X: 0
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3140 catch /^name$/
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3141 Xpath 32768 " X: 32768
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3142 catch /.*/
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3143 let error = 1
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3144 Xout "1:" v:exception "in" v:throwpoint
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3145 finally
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3146 if !error && $VIMNOERRTHROW && v:errmsg != ""
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3147 let error = 1
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3148 Xout "1:" v:errmsg
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3149 endif
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3150 if error
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3151 Xpath 65536 " X: 0
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3152 endif
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3153 let error = 0
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3154 let v:errmsg = ""
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3155 break " discard error for $VIMNOERRTHROW
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3156 endtry
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3157 endwhile
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3158
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3159 while 1
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3160 try
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3161 Xpath 131072 " X: 131072
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3162 let var2 = {NAME("F", 2)}(ARG(THROW("arg", 2), 2), 2)
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3163 Xpath 262144 " X: 0
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3164 catch /^arg$/
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3165 Xpath 524288 " X: 524288
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3166 catch /.*/
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3167 let error = 1
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3168 Xout "2:" v:exception "in" v:throwpoint
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3169 finally
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3170 if !error && $VIMNOERRTHROW && v:errmsg != ""
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3171 let error = 1
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3172 Xout "2:" v:errmsg
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3173 endif
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3174 if error
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3175 Xpath 1048576 " X: 0
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3176 endif
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3177 let error = 0
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3178 let v:errmsg = ""
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3179 break " discard error for $VIMNOERRTHROW
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3180 endtry
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3181 endwhile
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3182
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3183 while 1
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3184 try
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3185 Xpath 2097152 " X: 2097152
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3186 let var3 = {NAME("THROW", 3)}(ARG("call", 3), 3)
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3187 Xpath 4194304 " X: 0
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3188 catch /^call$/
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3189 Xpath 8388608 " X: 8388608
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3190 catch /^0$/ " default return value
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3191 Xpath 16777216 " X: 0
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3192 Xout "3:" v:throwpoint
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3193 catch /.*/
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3194 let error = 1
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3195 Xout "3:" v:exception "in" v:throwpoint
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3196 finally
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3197 if !error && $VIMNOERRTHROW && v:errmsg != ""
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3198 let error = 1
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3199 Xout "3:" v:errmsg
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3200 endif
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3201 if error
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3202 Xpath 33554432 " X: 0
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3203 endif
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3204 let error = 0
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3205 let v:errmsg = ""
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3206 break " discard error for $VIMNOERRTHROW
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3207 endtry
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3208 endwhile
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3209
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3210 while 1
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3211 try
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3212 Xpath 67108864 " X: 67108864
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3213 let var4 = {NAME("F", 4)}(ARG(4711, 4), 4)
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3214 Xpath 134217728 " X: 134217728
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3215 catch /.*/
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3216 let error = 1
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3217 Xout "4:" v:exception "in" v:throwpoint
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3218 finally
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3219 if !error && $VIMNOERRTHROW && v:errmsg != ""
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3220 let error = 1
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3221 Xout "4:" v:errmsg
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3222 endif
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3223 if error
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3224 Xpath 268435456 " X: 0
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3225 endif
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3226 let error = 0
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3227 let v:errmsg = ""
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3228 break " discard error for $VIMNOERRTHROW
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3229 endtry
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3230 endwhile
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3231
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3232 catch /^0$/ " default return value
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3233 Xpath 536870912 " X: 0
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3234 Xout v:throwpoint
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3235 catch /.*/
303
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3236 let error = 1
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3237 Xout v:exception "in" v:throwpoint
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3238 finally
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3239 if !error && $VIMNOERRTHROW && v:errmsg != ""
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3240 let error = 1
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3241 Xout v:errmsg
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3242 endif
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3243 if error
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3244 Xpath 1073741824 " X: 0
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3245 endif
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3246 break " discard error for $VIMNOERRTHROW
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3247 endtry
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3248 endwhile
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3249
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3250 if exists("var1") || exists("var2") || exists("var3") ||
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3251 \ !exists("var4") || var4 != 4711
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3252 " The Xpath command does not accept 2^31 (negative); add explicitly:
303
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3253 let Xpath = Xpath + 2147483648 " X: 0
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3254 if exists("var1")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3255 Xout "var1 =" var1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3256 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3257 if exists("var2")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3258 Xout "var2 =" var2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3259 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3260 if exists("var3")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3261 Xout "var3 =" var3
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3262 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3263 if !exists("var4")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3264 Xout "var4 unset"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3265 elseif var4 != 4711
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3266 Xout "var4 =" var4
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3267 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3268 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3269
303
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3270 unlet! error var1 var2 var3 var4
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3271 delfunction THROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3272 delfunction NAME
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3273 delfunction ARG
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3274 delfunction F
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3275
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3276 Xcheck 212514423
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3277
18504
ece46bd3c9af patch 8.1.2246: some tests are still in old style
Bram Moolenaar <Bram@vim.org>
parents: 18269
diff changeset
3278 " 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
3279 let Xtest = 76
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3280
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3281
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3282 "-------------------------------------------------------------------------------
303
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3283 " Test 76: Errors, interrupts, :throw during expression evaluation {{{1
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3284 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3285 " When a function call made during expression evaluation is aborted
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3286 " due to an error inside a :try/:endtry region or due to an interrupt
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3287 " or a :throw, the expression evaluation is aborted as well. No
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3288 " message is displayed for the cancelled expression evaluation. On an
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3289 " error not inside :try/:endtry, the expression evaluation continues.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3290 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3291
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3292 XpathINIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3293
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3294 if ExtraVim()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3295
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3296 let taken = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3297
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3298 function! ERR(n)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3299 let g:taken = g:taken . "E" . a:n
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3300 asdf
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3301 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3302
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3303 function! ERRabort(n) abort
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3304 let g:taken = g:taken . "A" . a:n
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3305 asdf
341
b516a9f9d603 updated for version 7.0088
vimboss
parents: 336
diff changeset
3306 endfunction " returns -1; may cause follow-up msg for illegal var/func name
b516a9f9d603 updated for version 7.0088
vimboss
parents: 336
diff changeset
3307
b516a9f9d603 updated for version 7.0088
vimboss
parents: 336
diff changeset
3308 function! WRAP(n, arg)
b516a9f9d603 updated for version 7.0088
vimboss
parents: 336
diff changeset
3309 let g:taken = g:taken . "W" . a:n
b516a9f9d603 updated for version 7.0088
vimboss
parents: 336
diff changeset
3310 let g:saved_errmsg = v:errmsg
b516a9f9d603 updated for version 7.0088
vimboss
parents: 336
diff changeset
3311 return arg
b516a9f9d603 updated for version 7.0088
vimboss
parents: 336
diff changeset
3312 endfunction
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3313
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3314 function! INT(n)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3315 let g:taken = g:taken . "I" . a:n
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3316 "INTERRUPT9
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3317 let dummy = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3318 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3319
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3320 function! THR(n)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3321 let g:taken = g:taken . "T" . a:n
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3322 throw "should not be caught"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3323 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3324
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3325 function! CONT(n)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3326 let g:taken = g:taken . "C" . a:n
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3327 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3328
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3329 function! MSG(n)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3330 let g:taken = g:taken . "M" . a:n
341
b516a9f9d603 updated for version 7.0088
vimboss
parents: 336
diff changeset
3331 let errmsg = (a:n >= 37 && a:n <= 44) ? g:saved_errmsg : v:errmsg
b516a9f9d603 updated for version 7.0088
vimboss
parents: 336
diff changeset
3332 let msgptn = (a:n >= 10 && a:n <= 27) ? "^$" : "asdf"
b516a9f9d603 updated for version 7.0088
vimboss
parents: 336
diff changeset
3333 if errmsg !~ msgptn
b516a9f9d603 updated for version 7.0088
vimboss
parents: 336
diff changeset
3334 let g:taken = g:taken . "x"
b516a9f9d603 updated for version 7.0088
vimboss
parents: 336
diff changeset
3335 Xout "Expr" a:n.": Unexpected message:" v:errmsg
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3336 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3337 let v:errmsg = ""
341
b516a9f9d603 updated for version 7.0088
vimboss
parents: 336
diff changeset
3338 let g:saved_errmsg = ""
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3339 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3340
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3341 let v:errmsg = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3342
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3343 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3344 let t = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3345 XloopINIT 1 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3346 while t <= 9
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3347 Xloop 1 " X: 511
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3348 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3349 if t == 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3350 let v{ERR(t) + CONT(t)} = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3351 elseif t == 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3352 let v{ERR(t) + CONT(t)}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3353 elseif t == 3
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3354 let var = exists('v{ERR(t) + CONT(t)}')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3355 elseif t == 4
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3356 unlet v{ERR(t) + CONT(t)}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3357 elseif t == 5
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3358 function F{ERR(t) + CONT(t)}()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3359 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3360 elseif t == 6
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3361 function F{ERR(t) + CONT(t)}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3362 elseif t == 7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3363 let var = exists('*F{ERR(t) + CONT(t)}')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3364 elseif t == 8
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3365 delfunction F{ERR(t) + CONT(t)}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3366 elseif t == 9
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3367 let var = ERR(t) + CONT(t)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3368 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3369 catch /asdf/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3370 " v:errmsg is not set when the error message is converted to an
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3371 " exception. Set it to the original error message.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3372 let v:errmsg = substitute(v:exception, '^Vim:', '', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3373 catch /^Vim\((\a\+)\)\=:/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3374 " An error exception has been thrown after the original error.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3375 let v:errmsg = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3376 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3377 call MSG(t)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3378 let t = t + 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3379 XloopNEXT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3380 continue " discard an aborting error
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3381 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3382 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3383 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3384 Xpath 512 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3385 Xout v:exception "in" ExtraVimThrowpoint()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3386 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3387
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3388 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3389 let t = 10
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3390 XloopINIT 1024 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3391 while t <= 18
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3392 Xloop 1 " X: 1024 * 511
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3393 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3394 if t == 10
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3395 let v{INT(t) + CONT(t)} = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3396 elseif t == 11
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3397 let v{INT(t) + CONT(t)}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3398 elseif t == 12
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3399 let var = exists('v{INT(t) + CONT(t)}')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3400 elseif t == 13
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3401 unlet v{INT(t) + CONT(t)}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3402 elseif t == 14
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3403 function F{INT(t) + CONT(t)}()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3404 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3405 elseif t == 15
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3406 function F{INT(t) + CONT(t)}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3407 elseif t == 16
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3408 let var = exists('*F{INT(t) + CONT(t)}')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3409 elseif t == 17
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3410 delfunction F{INT(t) + CONT(t)}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3411 elseif t == 18
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3412 let var = INT(t) + CONT(t)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3413 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3414 catch /^Vim\((\a\+)\)\=:\(Interrupt\)\@!/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3415 " An error exception has been triggered after the interrupt.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3416 let v:errmsg = substitute(v:exception,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3417 \ '^Vim\((\a\+)\)\=:', '', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3418 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3419 call MSG(t)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3420 let t = t + 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3421 XloopNEXT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3422 continue " discard interrupt
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3423 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3424 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3425 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3426 Xpath 524288 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3427 Xout v:exception "in" ExtraVimThrowpoint()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3428 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3429
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3430 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3431 let t = 19
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3432 XloopINIT 1048576 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3433 while t <= 27
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3434 Xloop 1 " X: 1048576 * 511
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3435 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3436 if t == 19
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3437 let v{THR(t) + CONT(t)} = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3438 elseif t == 20
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3439 let v{THR(t) + CONT(t)}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3440 elseif t == 21
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3441 let var = exists('v{THR(t) + CONT(t)}')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3442 elseif t == 22
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3443 unlet v{THR(t) + CONT(t)}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3444 elseif t == 23
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3445 function F{THR(t) + CONT(t)}()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3446 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3447 elseif t == 24
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3448 function F{THR(t) + CONT(t)}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3449 elseif t == 25
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3450 let var = exists('*F{THR(t) + CONT(t)}')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3451 elseif t == 26
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3452 delfunction F{THR(t) + CONT(t)}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3453 elseif t == 27
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3454 let var = THR(t) + CONT(t)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3455 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3456 catch /^Vim\((\a\+)\)\=:/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3457 " An error exception has been triggered after the :throw.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3458 let v:errmsg = substitute(v:exception,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3459 \ '^Vim\((\a\+)\)\=:', '', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3460 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3461 call MSG(t)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3462 let t = t + 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3463 XloopNEXT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3464 continue " discard exception
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3465 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3466 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3467 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3468 Xpath 536870912 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3469 Xout v:exception "in" ExtraVimThrowpoint()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3470 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3471
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3472 let v{ERR(28) + CONT(28)} = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3473 call MSG(28)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3474 let v{ERR(29) + CONT(29)}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3475 call MSG(29)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3476 let var = exists('v{ERR(30) + CONT(30)}')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3477 call MSG(30)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3478 unlet v{ERR(31) + CONT(31)}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3479 call MSG(31)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3480 function F{ERR(32) + CONT(32)}()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3481 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3482 call MSG(32)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3483 function F{ERR(33) + CONT(33)}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3484 call MSG(33)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3485 let var = exists('*F{ERR(34) + CONT(34)}')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3486 call MSG(34)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3487 delfunction F{ERR(35) + CONT(35)}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3488 call MSG(35)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3489 let var = ERR(36) + CONT(36)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3490 call MSG(36)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3491
341
b516a9f9d603 updated for version 7.0088
vimboss
parents: 336
diff changeset
3492 let saved_errmsg = ""
b516a9f9d603 updated for version 7.0088
vimboss
parents: 336
diff changeset
3493
b516a9f9d603 updated for version 7.0088
vimboss
parents: 336
diff changeset
3494 let v{WRAP(37, ERRabort(37)) + CONT(37)} = 0
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3495 call MSG(37)
341
b516a9f9d603 updated for version 7.0088
vimboss
parents: 336
diff changeset
3496 let v{WRAP(38, ERRabort(38)) + CONT(38)}
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3497 call MSG(38)
341
b516a9f9d603 updated for version 7.0088
vimboss
parents: 336
diff changeset
3498 let var = exists('v{WRAP(39, ERRabort(39)) + CONT(39)}')
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3499 call MSG(39)
341
b516a9f9d603 updated for version 7.0088
vimboss
parents: 336
diff changeset
3500 unlet v{WRAP(40, ERRabort(40)) + CONT(40)}
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3501 call MSG(40)
341
b516a9f9d603 updated for version 7.0088
vimboss
parents: 336
diff changeset
3502 function F{WRAP(41, ERRabort(41)) + CONT(41)}()
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3503 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3504 call MSG(41)
341
b516a9f9d603 updated for version 7.0088
vimboss
parents: 336
diff changeset
3505 function F{WRAP(42, ERRabort(42)) + CONT(42)}
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3506 call MSG(42)
341
b516a9f9d603 updated for version 7.0088
vimboss
parents: 336
diff changeset
3507 let var = exists('*F{WRAP(43, ERRabort(43)) + CONT(43)}')
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3508 call MSG(43)
341
b516a9f9d603 updated for version 7.0088
vimboss
parents: 336
diff changeset
3509 delfunction F{WRAP(44, ERRabort(44)) + CONT(44)}
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3510 call MSG(44)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3511 let var = ERRabort(45) + CONT(45)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3512 call MSG(45)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3513
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3514 Xpath 1073741824 " X: 1073741824
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3515
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3516 let expected = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3517 \ . "E1M1E2M2E3M3E4M4E5M5E6M6E7M7E8M8E9M9"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3518 \ . "I10M10I11M11I12M12I13M13I14M14I15M15I16M16I17M17I18M18"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3519 \ . "T19M19T20M20T21M21T22M22T23M23T24M24T25M25T26M26T27M27"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3520 \ . "E28C28M28E29C29M29E30C30M30E31C31M31E32C32M32E33C33M33"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3521 \ . "E34C34M34E35C35M35E36C36M36"
341
b516a9f9d603 updated for version 7.0088
vimboss
parents: 336
diff changeset
3522 \ . "A37W37C37M37A38W38C38M38A39W39C39M39A40W40C40M40A41W41C41M41"
b516a9f9d603 updated for version 7.0088
vimboss
parents: 336
diff changeset
3523 \ . "A42W42C42M42A43W43C43M43A44W44C44M44A45C45M45"
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3524
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3525 if taken != expected
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3526 " The Xpath command does not accept 2^31 (negative); display explicitly:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3527 exec "!echo 2147483648 >>" . g:ExtraVimResult
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3528 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3529 Xout "'taken' is" taken "instead of" expected
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3530 if substitute(taken,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3531 \ '\(.*\)E3C3M3x\(.*\)E30C30M30x\(.*\)A39C39M39x\(.*\)',
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3532 \ '\1E3M3\2E30C30M30\3A39C39M39\4',
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3533 \ "") == expected
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3534 Xout "Is ++emsg_skip for var with expr_start non-NULL"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3535 \ "in f_exists ok?"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3536 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3537 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3538
341
b516a9f9d603 updated for version 7.0088
vimboss
parents: 336
diff changeset
3539 unlet! v var saved_errmsg taken expected
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3540 call delete(WA_t5)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3541 call delete(WA_t14)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3542 call delete(WA_t23)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3543 unlet! WA_t5 WA_t14 WA_t23
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3544 delfunction WA_t5
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3545 delfunction WA_t14
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3546 delfunction WA_t23
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3547
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3548 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3549
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3550 Xcheck 1610087935
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3551
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3552
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3553 "-------------------------------------------------------------------------------
303
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3554 " Test 77: Errors, interrupts, :throw in name{brace-expression} {{{1
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3555 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3556 " When a function call made during evaluation of an expression in
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3557 " braces as part of a function name after ":function" is aborted due
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3558 " to an error inside a :try/:endtry region or due to an interrupt or
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3559 " a :throw, the expression evaluation is aborted as well, and the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3560 " function definition is ignored, skipping all commands to the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3561 " ":endfunction". On an error not inside :try/:endtry, the expression
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3562 " evaluation continues and the function gets defined, and can be
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3563 " called and deleted.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3564 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3565
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3566 XpathINIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3567
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3568 XloopINIT 1 4
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3569
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3570 function! ERR() abort
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3571 Xloop 1 " X: 1 + 4 + 16 + 64
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3572 asdf
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3573 endfunction " returns -1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3574
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3575 function! OK()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3576 Xloop 2 " X: 2 * (1 + 4 + 16)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3577 let v:errmsg = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3578 return 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3579 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3580
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3581 let v:errmsg = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3582
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3583 Xpath 4096 " X: 4096
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3584 function! F{1 + ERR() + OK()}(arg)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3585 " F0 should be defined.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3586 if exists("a:arg") && a:arg == "calling"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3587 Xpath 8192 " X: 8192
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3588 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3589 Xpath 16384 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3590 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3591 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3592 if v:errmsg != ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3593 Xpath 32768 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3594 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3595 XloopNEXT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3596
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3597 Xpath 65536 " X: 65536
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3598 call F{1 + ERR() + OK()}("calling")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3599 if v:errmsg != ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3600 Xpath 131072 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3601 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3602 XloopNEXT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3603
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3604 Xpath 262144 " X: 262144
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3605 delfunction F{1 + ERR() + OK()}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3606 if v:errmsg != ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3607 Xpath 524288 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3608 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3609 XloopNEXT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3610
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3611 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3612 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3613 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3614 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3615 Xpath 1048576 " X: 1048576
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3616 function! G{1 + ERR() + OK()}(arg)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3617 " G0 should not be defined, and the function body should be
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3618 " skipped.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3619 if exists("a:arg") && a:arg == "calling"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3620 Xpath 2097152 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3621 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3622 Xpath 4194304 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3623 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3624 " Use an unmatched ":finally" to check whether the body is
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3625 " skipped when an error occurs in ERR(). This works whether or
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3626 " not the exception is converted to an exception.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3627 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3628 Xpath 8388608 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3629 Xout "Body of G{1 + ERR() + OK()}() not skipped"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3630 " Discard the aborting error or exception, and break the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3631 " while loop.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3632 break
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3633 " End the try conditional and start a new one to avoid
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3634 " ":catch after :finally" errors.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3635 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3636 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3637 Xpath 16777216 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3638 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3639
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3640 " When the function was not defined, this won't be reached - whether
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3641 " the body was skipped or not. When the function was defined, it
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3642 " can be called and deleted here.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3643 Xpath 33554432 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3644 Xout "G0() has been defined"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3645 XloopNEXT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3646 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3647 call G{1 + ERR() + OK()}("calling")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3648 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3649 Xpath 67108864 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3650 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3651 Xpath 134217728 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3652 XloopNEXT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3653 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3654 delfunction G{1 + ERR() + OK()}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3655 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3656 Xpath 268435456 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3657 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3658 catch /asdf/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3659 " Jumped to when the function is not defined and the body is
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3660 " skipped.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3661 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3662 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3663 Xpath 536870912 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3664 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3665 if !caught && !$VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3666 Xpath 1073741824 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3667 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3668 break " discard error for $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3669 endtry " jumped to when the body is not skipped
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3670 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3671 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3672 " The Xpath command does not accept 2^31 (negative); add explicitly:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3673 let Xpath = Xpath + 2147483648 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3674 Xout "Body of G{1 + ERR() + OK()}() not skipped, exception caught"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3675 Xout v:exception "in" v:throwpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3676 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3677
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3678 Xcheck 1388671
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3679
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3680
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3681 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3682 " Test 78: Messages on parsing errors in expression evaluation {{{1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3683 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3684 " When an expression evaluation detects a parsing error, an error
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3685 " message is given and converted to an exception, and the expression
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3686 " evaluation is aborted.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3687 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3688
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3689 XpathINIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3690
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3691 if ExtraVim()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3692
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3693 let taken = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3694
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3695 function! F(n)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3696 let g:taken = g:taken . "F" . a:n
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3697 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3698
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3699 function! MSG(n, enr, emsg)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3700 let g:taken = g:taken . "M" . a:n
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3701 let english = v:lang == "C" || v:lang =~ '^[Ee]n'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3702 if a:enr == ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3703 Xout "TODO: Add message number for:" a:emsg
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3704 let v:errmsg = ":" . v:errmsg
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3705 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3706 if v:errmsg !~ '^'.a:enr.':' || (english && v:errmsg !~ a:emsg)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3707 if v:errmsg == ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3708 Xout "Expr" a:n.": Message missing."
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3709 let g:taken = g:taken . "x"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3710 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3711 let v:errmsg = escape(v:errmsg, '"')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3712 Xout "Expr" a:n.": Unexpected message:" v:errmsg
119
e8f07016e34d updated for version 7.0042
vimboss
parents: 108
diff changeset
3713 Xout "Expected: " . a:enr . ': ' . a:emsg
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3714 let g:taken = g:taken . "X"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3715 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3716 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3717 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3718
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3719 function! CONT(n)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3720 let g:taken = g:taken . "C" . a:n
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3721 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3722
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3723 let v:errmsg = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3724 XloopINIT 1 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3725
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3726 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3727 let t = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3728 while t <= 14
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3729 let g:taken = g:taken . "T" . t
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3730 let v:errmsg = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3731 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3732 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3733 if t == 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3734 let v{novar + CONT(t)} = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3735 elseif t == 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3736 let v{novar + CONT(t)}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3737 elseif t == 3
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3738 let var = exists('v{novar + CONT(t)}')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3739 elseif t == 4
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3740 unlet v{novar + CONT(t)}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3741 elseif t == 5
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3742 function F{novar + CONT(t)}()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3743 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3744 elseif t == 6
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3745 function F{novar + CONT(t)}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3746 elseif t == 7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3747 let var = exists('*F{novar + CONT(t)}')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3748 elseif t == 8
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3749 delfunction F{novar + CONT(t)}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3750 elseif t == 9
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3751 echo novar + CONT(t)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3752 elseif t == 10
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3753 echo v{novar + CONT(t)}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3754 elseif t == 11
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3755 echo F{novar + CONT(t)}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3756 elseif t == 12
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3757 let var = novar + CONT(t)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3758 elseif t == 13
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3759 let var = v{novar + CONT(t)}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3760 elseif t == 14
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3761 let var = F{novar + CONT(t)}()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3762 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3763 catch /^Vim\((\a\+)\)\=:/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3764 " v:errmsg is not set when the error message is converted to an
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3765 " exception. Set it to the original error message.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3766 let v:errmsg = substitute(v:exception,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3767 \ '^Vim\((\a\+)\)\=:', '', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3768 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3769 finally
303
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3770 if t <= 8 && t != 3 && t != 7
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3771 call MSG(t, 'E475', 'Invalid argument\>')
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3772 else
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
3773 if !caught " no error exceptions ($VIMNOERRTHROW set)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3774 call MSG(t, 'E15', "Invalid expression")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3775 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3776 call MSG(t, 'E121', "Undefined variable")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3777 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3778 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3779 let t = t + 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3780 XloopNEXT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3781 continue " discard an aborting error
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3782 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3783 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3784 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3785 Xloop 1 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3786 Xout t.":" v:exception "in" ExtraVimThrowpoint()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3787 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3788
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3789 function! T(n, expr, enr, emsg)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3790 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3791 let g:taken = g:taken . "T" . a:n
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3792 let v:errmsg = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3793 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3794 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3795 execute "let var = " . a:expr
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3796 catch /^Vim\((\a\+)\)\=:/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3797 " v:errmsg is not set when the error message is converted to an
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3798 " exception. Set it to the original error message.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3799 let v:errmsg = substitute(v:exception,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3800 \ '^Vim\((\a\+)\)\=:', '', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3801 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3802 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3803 if !caught " no error exceptions ($VIMNOERRTHROW set)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3804 call MSG(a:n, 'E15', "Invalid expression")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3805 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3806 call MSG(a:n, a:enr, a:emsg)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3807 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3808 XloopNEXT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3809 " Discard an aborting error:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3810 return
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3811 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3812 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3813 Xloop 1 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3814 Xout a:n.":" v:exception "in" ExtraVimThrowpoint()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3815 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3816 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3817
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3818 call T(15, 'Nofunc() + CONT(15)', 'E117', "Unknown function")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3819 call T(16, 'F(1 2 + CONT(16))', 'E116', "Invalid arguments")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3820 call T(17, 'F(1, 2) + CONT(17)', 'E118', "Too many arguments")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3821 call T(18, 'F() + CONT(18)', 'E119', "Not enough arguments")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3822 call T(19, '{(1} + CONT(19)', 'E110', "Missing ')'")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3823 call T(20, '("abc"[1) + CONT(20)', 'E111', "Missing ']'")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3824 call T(21, '(1 +) + CONT(21)', 'E15', "Invalid expression")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3825 call T(22, '1 2 + CONT(22)', 'E15', "Invalid expression")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3826 call T(23, '(1 ? 2) + CONT(23)', 'E109', "Missing ':' after '?'")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3827 call T(24, '("abc) + CONT(24)', 'E114', "Missing quote")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3828 call T(25, "('abc) + CONT(25)", 'E115', "Missing quote")
102
0aa0e89bfd5f updated for version 7.0039
vimboss
parents: 95
diff changeset
3829 call T(26, '& + CONT(26)', 'E112', "Option name missing")
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3830 call T(27, '&asdf + CONT(27)', 'E113', "Unknown option")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3831
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3832 Xpath 134217728 " X: 134217728
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3833
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3834 let expected = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3835 \ . "T1M1T2M2T3M3T4M4T5M5T6M6T7M7T8M8T9M9T10M10T11M11T12M12T13M13T14M14"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3836 \ . "T15M15T16M16T17M17T18M18T19M19T20M20T21M21T22M22T23M23T24M24T25M25"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3837 \ . "T26M26T27M27"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3838
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3839 if taken != expected
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3840 Xpath 268435456 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3841 Xout "'taken' is" taken "instead of" expected
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3842 if substitute(taken, '\(.*\)T3M3x\(.*\)', '\1T3M3\2', "") == expected
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3843 Xout "Is ++emsg_skip for var with expr_start non-NULL"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3844 \ "in f_exists ok?"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3845 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3846 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3847
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3848 unlet! var caught taken expected
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3849 call delete(WA_t5)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3850 unlet! WA_t5
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3851 delfunction WA_t5
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3852
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3853 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3854
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3855 Xcheck 134217728
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3856
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3857
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3858 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3859 " Test 79: Throwing one of several errors for the same command {{{1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3860 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3861 " When several errors appear in a row (for instance during expression
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3862 " evaluation), the first as the most specific one is used when
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3863 " throwing an error exception. If, however, a syntax error is
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3864 " detected afterwards, this one is used for the error exception.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3865 " On a syntax error, the next command is not executed, on a normal
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3866 " error, however, it is (relevant only in a function without the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3867 " "abort" flag). v:errmsg is not set.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3868 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3869 " If throwing error exceptions is configured off, v:errmsg is always
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3870 " set to the latest error message, that is, to the more general
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3871 " message or the syntax error, respectively.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3872 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3873
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3874 XpathINIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3875
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3876 XloopINIT 1 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3877
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3878 function! NEXT(cmd)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3879 exec a:cmd . " | Xloop 1"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3880 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3881
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3882 call NEXT('echo novar') " X: 1 * 1 (checks nextcmd)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3883 XloopNEXT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3884 call NEXT('let novar #') " X: 0 * 2 (skips nextcmd)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3885 XloopNEXT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3886 call NEXT('unlet novar #') " X: 0 * 4 (skips nextcmd)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3887 XloopNEXT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3888 call NEXT('let {novar}') " X: 0 * 8 (skips nextcmd)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3889 XloopNEXT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3890 call NEXT('unlet{ novar}') " X: 0 * 16 (skips nextcmd)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3891
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3892 function! EXEC(cmd)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3893 exec a:cmd
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 function! MATCH(expected, msg, enr, emsg)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3897 let msg = a:msg
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3898 if a:enr == ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3899 Xout "TODO: Add message number for:" a:emsg
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3900 let msg = ":" . msg
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3901 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3902 let english = v:lang == "C" || v:lang =~ '^[Ee]n'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3903 if msg !~ '^'.a:enr.':' || (english && msg !~ a:emsg)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3904 let match = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3905 if a:expected " no match although expected
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3906 if a:msg == ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3907 Xout "Message missing."
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3908 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3909 let msg = escape(msg, '"')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3910 Xout "Unexpected message:" msg
108
375b1d0f97b0 updated for version 7.0040
vimboss
parents: 102
diff changeset
3911 Xout "Expected:" a:enr . ": " . a:emsg
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3912 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3913 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3914 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3915 let match = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3916 if !a:expected " match although not expected
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3917 let msg = escape(msg, '"')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3918 Xout "Unexpected message:" msg
108
375b1d0f97b0 updated for version 7.0040
vimboss
parents: 102
diff changeset
3919 Xout "Expected none."
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3920 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3921 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3922 return match
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3923 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3924
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3925 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3926
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3927 while 1 " dummy loop
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3928 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3929 let v:errmsg = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3930 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3931 let thrmsg = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3932 call EXEC('echo novar') " normal error
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3933 catch /^Vim\((\a\+)\)\=:/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3934 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3935 let thrmsg = substitute(v:exception, '^Vim\((\a\+)\)\=:', '', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3936 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3937 Xpath 32 " X: 32
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3938 if !caught
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3939 if !$VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3940 Xpath 64 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3941 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3942 elseif !MATCH(1, thrmsg, 'E121', "Undefined variable")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3943 \ || v:errmsg != ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3944 Xpath 128 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3945 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3946 if !caught && !MATCH(1, v:errmsg, 'E15', "Invalid expression")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3947 Xpath 256 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3948 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3949 break " discard error if $VIMNOERRTHROW == 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3950 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3951 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3952
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3953 Xpath 512 " X: 512
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3954 let cmd = "let"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3955 XloopINIT 1024 32
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3956 while cmd != ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3957 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3958 let v:errmsg = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3959 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3960 let thrmsg = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3961 call EXEC(cmd . ' novar #') " normal plus syntax error
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3962 catch /^Vim\((\a\+)\)\=:/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3963 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3964 let thrmsg = substitute(v:exception, '^Vim\((\a\+)\)\=:', '', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3965 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3966 Xloop 1 " X: 1024 * (1 + 32)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3967 if !caught
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3968 if !$VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3969 Xloop 2 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3970 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3971 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3972 if cmd == "let"
2591
88095f75d63b updated for version 7.3.015
Bram Moolenaar <bram@vim.org>
parents: 849
diff changeset
3973 let match = MATCH(0, thrmsg, 'E121', "Undefined variable")
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3974 elseif cmd == "unlet"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3975 let match = MATCH(0, thrmsg, 'E108', "No such variable")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3976 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3977 if match " normal error
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3978 Xloop 4 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3979 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3980 if !MATCH(1, thrmsg, 'E488', "Trailing characters")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3981 \|| v:errmsg != ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3982 " syntax error
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3983 Xloop 8 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3984 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3985 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3986 if !caught && !MATCH(1, v:errmsg, 'E488', "Trailing characters")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3987 " last error
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3988 Xloop 16 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3989 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3990 if cmd == "let"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3991 let cmd = "unlet"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3992 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3993 let cmd = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3994 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3995 XloopNEXT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3996 continue " discard error if $VIMNOERRTHROW == 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3997 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3998 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3999
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4000 Xpath 1048576 " X: 1048576
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4001 let cmd = "let"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4002 XloopINIT 2097152 32
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4003 while cmd != ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4004 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4005 let v:errmsg = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4006 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4007 let thrmsg = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4008 call EXEC(cmd . ' {novar}') " normal plus syntax error
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4009 catch /^Vim\((\a\+)\)\=:/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4010 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4011 let thrmsg = substitute(v:exception, '^Vim\((\a\+)\)\=:', '', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4012 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4013 Xloop 1 " X: 2097152 * (1 + 32)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4014 if !caught
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4015 if !$VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4016 Xloop 2 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4017 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4018 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4019 if MATCH(0, thrmsg, 'E121', "Undefined variable") " normal error
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4020 Xloop 4 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4021 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4022 if !MATCH(1, thrmsg, 'E475', 'Invalid argument\>')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4023 \ || v:errmsg != "" " syntax error
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4024 Xloop 8 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4025 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4026 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4027 if !caught && !MATCH(1, v:errmsg, 'E475', 'Invalid argument\>')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4028 " last error
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4029 Xloop 16 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4030 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4031 if cmd == "let"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4032 let cmd = "unlet"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4033 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4034 let cmd = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4035 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4036 XloopNEXT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4037 continue " discard error if $VIMNOERRTHROW == 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4038 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4039 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4040
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4041 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4042 " The Xpath command does not accept 2^31 (negative); add explicitly:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4043 let Xpath = Xpath + 2147483648 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4044 Xout v:exception "in" v:throwpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4045 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4046
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4047 unlet! next_command thrmsg match
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4048 delfunction NEXT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4049 delfunction EXEC
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4050 delfunction MATCH
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4051
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4052 Xcheck 70288929
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4053
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4054
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4055 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4056 " Test 80: Syntax error in expression for illegal :elseif {{{1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4057 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4058 " If there is a syntax error in the expression after an illegal
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4059 " :elseif, an error message is given (or an error exception thrown)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4060 " for the illegal :elseif rather than the expression error.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4061 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4062
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4063 XpathINIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4064
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4065 function! MSG(enr, emsg)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4066 let english = v:lang == "C" || v:lang =~ '^[Ee]n'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4067 if a:enr == ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4068 Xout "TODO: Add message number for:" a:emsg
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4069 let v:errmsg = ":" . v:errmsg
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4070 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4071 let match = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4072 if v:errmsg !~ '^'.a:enr.':' || (english && v:errmsg !~ a:emsg)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4073 let match = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4074 if v:errmsg == ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4075 Xout "Message missing."
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4076 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4077 let v:errmsg = escape(v:errmsg, '"')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4078 Xout "Unexpected message:" v:errmsg
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4079 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4080 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4081 return match
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4082 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4083
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4084 let v:errmsg = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4085 if 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4086 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4087 elseif 1 ||| 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4088 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4089 Xpath 1 " X: 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4090 if !MSG('E584', ":elseif after :else")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4091 Xpath 2 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4092 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4093
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4094 let v:errmsg = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4095 if 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4096 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4097 elseif 1 ||| 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4098 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4099 Xpath 4 " X: 4
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4100 if !MSG('E584', ":elseif after :else")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4101 Xpath 8 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4102 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4103
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4104 let v:errmsg = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4105 elseif 1 ||| 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4106 Xpath 16 " X: 16
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4107 if !MSG('E582', ":elseif without :if")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4108 Xpath 32 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4109 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4110
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4111 let v:errmsg = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4112 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4113 elseif 1 ||| 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4114 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4115 Xpath 64 " X: 64
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4116 if !MSG('E582', ":elseif without :if")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4117 Xpath 128 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4118 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4119
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4120 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4121 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4122 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4123 let v:errmsg = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4124 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4125 if 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4126 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4127 elseif 1 ||| 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4128 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4129 catch /^Vim\((\a\+)\)\=:/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4130 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4131 let v:errmsg = substitute(v:exception, '^Vim\((\a\+)\)\=:', '', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4132 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4133 Xpath 256 " X: 256
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4134 if !caught && !$VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4135 Xpath 512 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4136 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4137 if !MSG('E584', ":elseif after :else")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4138 Xpath 1024 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4139 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4140 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4141 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4142 Xpath 2048 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4143 Xout v:exception "in" v:throwpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4144 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4145 break " discard error for $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4146 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4147 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4148
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4149 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4150 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4151 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4152 let v:errmsg = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4153 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4154 if 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4155 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4156 elseif 1 ||| 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4157 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4158 catch /^Vim\((\a\+)\)\=:/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4159 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4160 let v:errmsg = substitute(v:exception, '^Vim\((\a\+)\)\=:', '', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4161 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4162 Xpath 4096 " X: 4096
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4163 if !caught && !$VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4164 Xpath 8192 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4165 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4166 if !MSG('E584', ":elseif after :else")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4167 Xpath 16384 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4168 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4169 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4170 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4171 Xpath 32768 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4172 Xout v:exception "in" v:throwpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4173 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4174 break " discard error for $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4175 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4176 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4177
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4178 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4179 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4180 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4181 let v:errmsg = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4182 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4183 elseif 1 ||| 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4184 catch /^Vim\((\a\+)\)\=:/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4185 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4186 let v:errmsg = substitute(v:exception, '^Vim\((\a\+)\)\=:', '', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4187 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4188 Xpath 65536 " X: 65536
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4189 if !caught && !$VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4190 Xpath 131072 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4191 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4192 if !MSG('E582', ":elseif without :if")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4193 Xpath 262144 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4194 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4195 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4196 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4197 Xpath 524288 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4198 Xout v:exception "in" v:throwpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4199 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4200 break " discard error for $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4201 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4202 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4203
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4204 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4205 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4206 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4207 let v:errmsg = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4208 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4209 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4210 elseif 1 ||| 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4211 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4212 catch /^Vim\((\a\+)\)\=:/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4213 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4214 let v:errmsg = substitute(v:exception, '^Vim\((\a\+)\)\=:', '', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4215 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4216 Xpath 1048576 " X: 1048576
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4217 if !caught && !$VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4218 Xpath 2097152 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4219 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4220 if !MSG('E582', ":elseif without :if")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4221 Xpath 4194304 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4222 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4223 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4224 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4225 Xpath 8388608 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4226 Xout v:exception "in" v:throwpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4227 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4228 break " discard error for $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4229 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4230 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4231
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4232 Xpath 16777216 " X: 16777216
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4233
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4234 unlet! caught
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4235 delfunction MSG
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4236
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4237 Xcheck 17895765
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4238
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4239
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4240 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4241 " Test 81: Discarding exceptions after an error or interrupt {{{1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4242 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4243 " When an exception is thrown from inside a :try conditional without
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4244 " :catch and :finally clauses and an error or interrupt occurs before
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4245 " the :endtry is reached, the exception is discarded.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4246 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4247
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4248 XpathINIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4249
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4250 if ExtraVim()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4251 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4252 Xpath 1 " X: 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4253 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4254 Xpath 2 " X: 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4255 throw "arrgh"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4256 Xpath 4 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4257 " if 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4258 Xpath 8 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4259 " error after :throw: missing :endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4260 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4261 Xpath 16 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4262 catch /arrgh/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4263 Xpath 32 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4264 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4265 Xpath 64 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4266 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4267
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4268 if ExtraVim()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4269 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4270 Xpath 128 " X: 128
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4271 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4272 Xpath 256 " X: 256
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4273 throw "arrgh"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4274 Xpath 512 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4275 endtry " INTERRUPT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4276 Xpath 1024 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4277 catch /arrgh/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4278 Xpath 2048 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4279 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4280 Xpath 4096 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4281 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4282
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4283 Xcheck 387
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4284
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4285
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4286 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4287 " Test 82: Ignoring :catch clauses after an error or interrupt {{{1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4288 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4289 " When an exception is thrown and an error or interrupt occurs before
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4290 " the matching :catch clause is reached, the exception is discarded
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4291 " and the :catch clause is ignored (also for the error or interrupt
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4292 " exception being thrown then).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4293 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4294
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4295 XpathINIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4296
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4297 if ExtraVim()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4298 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4299 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4300 Xpath 1 " X: 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4301 throw "arrgh"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4302 Xpath 2 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4303 " if 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4304 Xpath 4 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4305 " error after :throw: missing :endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4306 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4307 Xpath 8 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4308 Xout v:exception "in" ExtraVimThrowpoint()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4309 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4310 Xpath 16 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4311 Xout v:exception "in" ExtraVimThrowpoint()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4312 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4313 Xpath 32 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4314 catch /arrgh/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4315 Xpath 64 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4316 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4317 Xpath 128 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4318 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4319
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4320 if ExtraVim()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4321 function! E()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4322 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4323 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4324 Xpath 256 " X: 256
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4325 throw "arrgh"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4326 Xpath 512 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4327 " if 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4328 Xpath 1024 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4329 " error after :throw: missing :endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4330 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4331 Xpath 2048 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4332 Xout v:exception "in" ExtraVimThrowpoint()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4333 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4334 Xpath 4096 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4335 Xout v:exception "in" ExtraVimThrowpoint()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4336 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4337 Xpath 8192 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4338 catch /arrgh/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4339 Xpath 16384 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4340 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4341 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4342
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4343 call E()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4344 Xpath 32768 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4345 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4346
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4347 if ExtraVim()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4348 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4349 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4350 Xpath 65536 " X: 65536
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4351 throw "arrgh"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4352 Xpath 131072 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4353 catch /.*/ "INTERRUPT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4354 Xpath 262144 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4355 Xout v:exception "in" ExtraVimThrowpoint()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4356 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4357 Xpath 524288 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4358 Xout v:exception "in" ExtraVimThrowpoint()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4359 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4360 Xpath 1048576 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4361 catch /arrgh/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4362 Xpath 2097152 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4363 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4364 Xpath 4194304 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4365 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4366
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4367 if ExtraVim()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4368 function I()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4369 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4370 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4371 Xpath 8388608 " X: 8388608
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4372 throw "arrgh"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4373 Xpath 16777216 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4374 catch /.*/ "INTERRUPT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4375 Xpath 33554432 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4376 Xout v:exception "in" ExtraVimThrowpoint()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4377 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4378 Xpath 67108864 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4379 Xout v:exception "in" ExtraVimThrowpoint()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4380 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4381 Xpath 134217728 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4382 catch /arrgh/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4383 Xpath 268435456 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4384 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4385 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4386
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4387 call I()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4388 Xpath 536870912 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4389 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4390
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4391 Xcheck 8454401
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4392
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4393
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4394 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4395 " Test 83: Executing :finally clauses after an error or interrupt {{{1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4396 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4397 " When an exception is thrown and an error or interrupt occurs before
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4398 " the :finally of the innermost :try is reached, the exception is
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4399 " discarded and the :finally clause is executed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4400 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4401
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4402 XpathINIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4403
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4404 if ExtraVim()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4405 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4406 Xpath 1 " X: 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4407 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4408 Xpath 2 " X: 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4409 throw "arrgh"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4410 Xpath 4 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4411 " if 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4412 Xpath 8 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4413 " error after :throw: missing :endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4414 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4415 Xpath 16 " X: 16
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4416 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4417 Xpath 32 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4418 catch /arrgh/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4419 Xpath 64 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4420 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4421 Xpath 128 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4422 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4423
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4424 if ExtraVim()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4425 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4426 Xpath 256 " X: 256
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4427 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4428 Xpath 512 " X: 512
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4429 throw "arrgh"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4430 Xpath 1024 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4431 finally "INTERRUPT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4432 Xpath 2048 " X: 2048
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4433 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4434 Xpath 4096 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4435 catch /arrgh/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4436 Xpath 8192 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4437 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4438 Xpath 16384 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4439 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4440
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4441 Xcheck 2835
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4442
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4443
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4444 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4445 " Test 84: Exceptions in autocommand sequences. {{{1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4446 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4447 " When an exception occurs in a sequence of autocommands for
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4448 " a specific event, the rest of the sequence is not executed. The
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4449 " command that triggered the autocommand execution aborts, and the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4450 " exception is propagated to the caller.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4451 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4452 " For the FuncUndefined event under a function call expression or
303
6a21eb563c34 updated for version 7.0080
vimboss
parents: 270
diff changeset
4453 " :call command, the function is not executed, even when it has
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4454 " been defined by the autocommands before the exception occurred.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4455 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4456
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4457 XpathINIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4458
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4459 if ExtraVim()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4460
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4461 function! INT()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4462 "INTERRUPT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4463 let dummy = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4464 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4465
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4466 aug TMP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4467 autocmd!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4468
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4469 autocmd User x1 Xpath 1 " X: 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4470 autocmd User x1 throw "x1"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4471 autocmd User x1 Xpath 2 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4472
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4473 autocmd User x2 Xpath 4 " X: 4
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4474 autocmd User x2 asdf
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4475 autocmd User x2 Xpath 8 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4476
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4477 autocmd User x3 Xpath 16 " X: 16
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4478 autocmd User x3 call INT()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4479 autocmd User x3 Xpath 32 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4480
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4481 autocmd FuncUndefined U1 function! U1()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4482 autocmd FuncUndefined U1 Xpath 64 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4483 autocmd FuncUndefined U1 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4484 autocmd FuncUndefined U1 Xpath 128 " X: 128
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4485 autocmd FuncUndefined U1 throw "U1"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4486 autocmd FuncUndefined U1 Xpath 256 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4487
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4488 autocmd FuncUndefined U2 function! U2()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4489 autocmd FuncUndefined U2 Xpath 512 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4490 autocmd FuncUndefined U2 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4491 autocmd FuncUndefined U2 Xpath 1024 " X: 1024
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4492 autocmd FuncUndefined U2 ASDF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4493 autocmd FuncUndefined U2 Xpath 2048 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4494
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4495 autocmd FuncUndefined U3 function! U3()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4496 autocmd FuncUndefined U3 Xpath 4096 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4497 autocmd FuncUndefined U3 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4498 autocmd FuncUndefined U3 Xpath 8192 " X: 8192
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4499 autocmd FuncUndefined U3 call INT()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4500 autocmd FuncUndefined U3 Xpath 16384 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4501 aug END
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4502
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4503 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4504 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4505 Xpath 32768 " X: 32768
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4506 doautocmd User x1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4507 catch /x1/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4508 Xpath 65536 " X: 65536
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4509 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4510
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4511 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4512 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4513 Xpath 131072 " X: 131072
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4514 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4515 doautocmd User x2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4516 catch /asdf/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4517 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4518 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4519 Xpath 262144 " X: 262144
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4520 if !caught && !$VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4521 Xpath 524288 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4522 " Propagate uncaught error exception,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4523 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4524 " ... but break loop for caught error exception,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4525 " or discard error and break loop if $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4526 break
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4527 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4528 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4529 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4530
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4531 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4532 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4533 Xpath 1048576 " X: 1048576
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4534 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4535 doautocmd User x3
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4536 catch /Vim:Interrupt/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4537 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4538 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4539 Xpath 2097152 " X: 2097152
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4540 if !caught && !$VIMNOINTTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4541 Xpath 4194304 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4542 " Propagate uncaught interrupt exception,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4543 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4544 " ... but break loop for caught interrupt exception,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4545 " or discard interrupt and break loop if $VIMNOINTTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4546 break
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4547 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4548 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4549 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4550
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4551 if exists("*U1") | delfunction U1 | endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4552 if exists("*U2") | delfunction U2 | endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4553 if exists("*U3") | delfunction U3 | endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4554
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4555 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4556 Xpath 8388608 " X: 8388608
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4557 call U1()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4558 catch /U1/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4559 Xpath 16777216 " X: 16777216
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4560 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4561
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4562 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4563 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4564 Xpath 33554432 " X: 33554432
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4565 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4566 call U2()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4567 catch /ASDF/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4568 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4569 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4570 Xpath 67108864 " X: 67108864
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4571 if !caught && !$VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4572 Xpath 134217728 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4573 " Propagate uncaught error exception,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4574 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4575 " ... but break loop for caught error exception,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4576 " or discard error and break loop if $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4577 break
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4578 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4579 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4580 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4581
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4582 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4583 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4584 Xpath 268435456 " X: 268435456
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4585 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4586 call U3()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4587 catch /Vim:Interrupt/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4588 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4589 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4590 Xpath 536870912 " X: 536870912
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4591 if !caught && !$VIMNOINTTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4592 Xpath 1073741824 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4593 " Propagate uncaught interrupt exception,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4594 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4595 " ... but break loop for caught interrupt exception,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4596 " or discard interrupt and break loop if $VIMNOINTTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4597 break
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4598 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4599 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4600 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4601 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4602 " The Xpath command does not accept 2^31 (negative); display explicitly:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4603 exec "!echo 2147483648 >>" . g:ExtraVimResult
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4604 Xout "Caught" v:exception "in" v:throwpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4605 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4606
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4607 unlet caught
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4608 delfunction INT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4609 delfunction U1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4610 delfunction U2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4611 delfunction U3
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4612 au! TMP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4613 aug! TMP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4614 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4615
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4616 Xcheck 934782101
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4617
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4618
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4619 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4620 " Test 85: Error exceptions in autocommands for I/O command events {{{1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4621 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4622 " When an I/O command is inside :try/:endtry, autocommands to be
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4623 " executed after it should be skipped on an error (exception) in the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4624 " command itself or in autocommands to be executed before the command.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4625 " In the latter case, the I/O command should not be executed either.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4626 " Example 1: BufWritePre, :write, BufWritePost
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4627 " Example 2: FileReadPre, :read, FileReadPost.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4628 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4629
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4630 XpathINIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4631
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4632 function! MSG(enr, emsg)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4633 let english = v:lang == "C" || v:lang =~ '^[Ee]n'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4634 if a:enr == ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4635 Xout "TODO: Add message number for:" a:emsg
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4636 let v:errmsg = ":" . v:errmsg
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4637 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4638 let match = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4639 if v:errmsg !~ '^'.a:enr.':' || (english && v:errmsg !~ a:emsg)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4640 let match = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4641 if v:errmsg == ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4642 Xout "Message missing."
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4643 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4644 let v:errmsg = escape(v:errmsg, '"')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4645 Xout "Unexpected message:" v:errmsg
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4646 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4647 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4648 return match
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4649 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4650
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4651 " Remove the autocommands for the events specified as arguments in all used
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4652 " autogroups.
15406
63b02fcf1361 patch 8.1.0711: test files still use function!
Bram Moolenaar <Bram@vim.org>
parents: 10942
diff changeset
4653 function Delete_autocommands(...)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4654 let augfile = tempname()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4655 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4656 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4657 exec "redir >" . augfile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4658 aug
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4659 redir END
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4660 exec "edit" augfile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4661 g/^$/d
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4662 norm G$
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4663 let wrap = "w"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4664 while search('\%( \|^\)\@<=.\{-}\%( \)\@=', wrap) > 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4665 let wrap = "W"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4666 exec "norm y/ \n"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4667 let argno = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4668 while argno <= a:0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4669 exec "au!" escape(@", " ") a:{argno}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4670 let argno = argno + 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4671 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4672 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4673 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4674 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4675 bwipeout!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4676 call delete(augfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4677 break " discard errors for $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4678 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4679 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4680 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4681
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4682 call Delete_autocommands("BufWritePre", "BufWritePost")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4683
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4684 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4685 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4686 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4687 let post = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4688 aug TMP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4689 au! BufWritePost * let post = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4690 aug END
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4691 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4692 write /n/o/n/e/x/i/s/t/e/n/t
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4693 catch /^Vim(write):/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4694 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4695 let v:errmsg = substitute(v:exception, '^Vim(write):', '', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4696 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4697 Xpath 1 " X: 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4698 if !caught && !$VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4699 Xpath 2 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4700 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4701 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
4702 \ '', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4703 if !MSG('E212', "Can't open file for writing")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4704 Xpath 4 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4705 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4706 if post
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4707 Xpath 8 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4708 Xout "BufWritePost commands executed after write error"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4709 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4710 au! TMP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4711 aug! TMP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4712 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4713 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4714 Xpath 16 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4715 Xout v:exception "in" v:throwpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4716 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4717 break " discard error for $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4718 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4719 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4720
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4721 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4722 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4723 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4724 let post = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4725 aug TMP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4726 au! BufWritePre * asdf
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4727 au! BufWritePost * let post = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4728 aug END
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4729 let tmpfile = tempname()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4730 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4731 exec "write" tmpfile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4732 catch /^Vim\((write)\)\=:/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4733 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4734 let v:errmsg = substitute(v:exception, '^Vim\((write)\)\=:', '', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4735 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4736 Xpath 32 " X: 32
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4737 if !caught && !$VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4738 Xpath 64 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4739 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4740 let v:errmsg = substitute(v:errmsg, '^"'.tmpfile.'" ', '', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4741 if !MSG('E492', "Not an editor command")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4742 Xpath 128 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4743 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4744 if filereadable(tmpfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4745 Xpath 256 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4746 Xout ":write command not suppressed after BufWritePre error"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4747 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4748 if post
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4749 Xpath 512 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4750 Xout "BufWritePost commands executed after BufWritePre error"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4751 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4752 au! TMP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4753 aug! TMP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4754 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4755 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4756 Xpath 1024 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4757 Xout v:exception "in" v:throwpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4758 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4759 break " discard error for $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4760 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4761 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4762
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4763 call delete(tmpfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4764
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4765 call Delete_autocommands("BufWritePre", "BufWritePost",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4766 \ "BufReadPre", "BufReadPost", "FileReadPre", "FileReadPost")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4767
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4768 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4769 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4770 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4771 let post = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4772 aug TMP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4773 au! FileReadPost * let post = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4774 aug END
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4775 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4776 read /n/o/n/e/x/i/s/t/e/n/t
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4777 catch /^Vim(read):/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4778 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4779 let v:errmsg = substitute(v:exception, '^Vim(read):', '', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4780 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4781 Xpath 2048 " X: 2048
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4782 if !caught && !$VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4783 Xpath 4096 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4784 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4785 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
4786 \ '', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4787 if !MSG('E484', "Can't open file")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4788 Xpath 8192 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4789 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4790 if post
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4791 Xpath 16384 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4792 Xout "FileReadPost commands executed after write error"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4793 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4794 au! TMP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4795 aug! TMP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4796 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4797 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4798 Xpath 32768 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4799 Xout v:exception "in" v:throwpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4800 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4801 break " discard error for $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4802 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4803 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4804
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4805 while 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4806 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4807 let infile = tempname()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4808 let tmpfile = tempname()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4809 exec "!echo XYZ >" . infile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4810 exec "edit" tmpfile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4811 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4812 Xpath 65536 " X: 65536
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4813 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4814 let post = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4815 aug TMP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4816 au! FileReadPre * asdf
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4817 au! FileReadPost * let post = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4818 aug END
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4819 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4820 exec "0read" infile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4821 catch /^Vim\((read)\)\=:/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4822 let caught = 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4823 let v:errmsg = substitute(v:exception, '^Vim\((read)\)\=:', '',
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4824 \ "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4825 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4826 Xpath 131072 " X: 131072
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4827 if !caught && !$VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4828 Xpath 262144 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4829 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4830 let v:errmsg = substitute(v:errmsg, ' '.infile.'$', '', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4831 if !MSG('E492', "Not an editor command")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4832 Xpath 524288 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4833 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4834 if getline("1") == "XYZ"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4835 Xpath 1048576 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4836 Xout ":read command not suppressed after FileReadPre error"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4837 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4838 if post
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4839 Xpath 2097152 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4840 Xout "FileReadPost commands executed after " .
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4841 \ "FileReadPre error"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4842 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4843 au! TMP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4844 aug! TMP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4845 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4846 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4847 bwipeout!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4848 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4849 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4850 Xpath 4194304 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4851 Xout v:exception "in" v:throwpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4852 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4853 break " discard error for $VIMNOERRTHROW
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4854 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4855 endwhile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4856
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4857 call delete(infile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4858 call delete(tmpfile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4859 unlet! caught post infile tmpfile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4860 delfunction MSG
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4861 delfunction Delete_autocommands
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4862
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4863 Xcheck 198689
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4864
3918
4f0ddf4137ee updated for version 7.3.715
Bram Moolenaar <bram@vim.org>
parents: 2591
diff changeset
4865 "-------------------------------------------------------------------------------
3994
ed936effb1f3 updated for version 7.3.752
Bram Moolenaar <bram@vim.org>
parents: 3918
diff changeset
4866 " Test 86: setloclist crash {{{1
3918
4f0ddf4137ee updated for version 7.3.715
Bram Moolenaar <bram@vim.org>
parents: 2591
diff changeset
4867 "
4f0ddf4137ee updated for version 7.3.715
Bram Moolenaar <bram@vim.org>
parents: 2591
diff changeset
4868 " 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
4869 "-------------------------------------------------------------------------------
4f0ddf4137ee updated for version 7.3.715
Bram Moolenaar <bram@vim.org>
parents: 2591
diff changeset
4870
4f0ddf4137ee updated for version 7.3.715
Bram Moolenaar <bram@vim.org>
parents: 2591
diff changeset
4871 func F
4f0ddf4137ee updated for version 7.3.715
Bram Moolenaar <bram@vim.org>
parents: 2591
diff changeset
4872 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
4873
4774
531e598651fc updated for version 7.3.1134
Bram Moolenaar <bram@vim.org>
parents: 4182
diff changeset
4874 :lvimgrep /.*/ *.mak
3918
4f0ddf4137ee updated for version 7.3.715
Bram Moolenaar <bram@vim.org>
parents: 2591
diff changeset
4875 endfunc
4f0ddf4137ee updated for version 7.3.715
Bram Moolenaar <bram@vim.org>
parents: 2591
diff changeset
4876
4f0ddf4137ee updated for version 7.3.715
Bram Moolenaar <bram@vim.org>
parents: 2591
diff changeset
4877 XpathINIT
4f0ddf4137ee updated for version 7.3.715
Bram Moolenaar <bram@vim.org>
parents: 2591
diff changeset
4878
4f0ddf4137ee updated for version 7.3.715
Bram Moolenaar <bram@vim.org>
parents: 2591
diff changeset
4879 ExecAsScript F
4f0ddf4137ee updated for version 7.3.715
Bram Moolenaar <bram@vim.org>
parents: 2591
diff changeset
4880
4f0ddf4137ee updated for version 7.3.715
Bram Moolenaar <bram@vim.org>
parents: 2591
diff changeset
4881 delfunction F
4f0ddf4137ee updated for version 7.3.715
Bram Moolenaar <bram@vim.org>
parents: 2591
diff changeset
4882 Xout "No Crash for vimgrep on BufUnload"
4f0ddf4137ee updated for version 7.3.715
Bram Moolenaar <bram@vim.org>
parents: 2591
diff changeset
4883 Xcheck 0
4f0ddf4137ee updated for version 7.3.715
Bram Moolenaar <bram@vim.org>
parents: 2591
diff changeset
4884
18504
ece46bd3c9af patch 8.1.2246: some tests are still in old style
Bram Moolenaar <Bram@vim.org>
parents: 18269
diff changeset
4885 " 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
4886 let Xtest = 88
ece46bd3c9af patch 8.1.2246: some tests are still in old style
Bram Moolenaar <Bram@vim.org>
parents: 18269
diff changeset
4887
4182
f4960ddda07c updated for version 7.3.843
Bram Moolenaar <bram@vim.org>
parents: 3994
diff changeset
4888
f4960ddda07c updated for version 7.3.843
Bram Moolenaar <bram@vim.org>
parents: 3994
diff changeset
4889 "-------------------------------------------------------------------------------
f4960ddda07c updated for version 7.3.843
Bram Moolenaar <bram@vim.org>
parents: 3994
diff changeset
4890 " Test 88: $VIMNOERRTHROW and $VIMNOINTTHROW support {{{1
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4891 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4892 " It is possible to configure Vim for throwing exceptions on error
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4893 " or interrupt, controlled by variables $VIMNOERRTHROW and
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4894 " $VIMNOINTTHROW. This is just for increasing the number of tests.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4895 " All tests here should run for all four combinations of setting
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4896 " these variables to 0 or 1. The variables are intended for the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4897 " development phase only. In the final release, Vim should be
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4898 " configured to always use error and interrupt exceptions.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4899 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4900 " The test result is "OK",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4901 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4902 " - if the $VIMNOERRTHROW and the $VIMNOINTTHROW control are not
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4903 " configured and exceptions are thrown on error and on
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4904 " interrupt.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4905 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4906 " - if the $VIMNOERRTHROW or the $VIMNOINTTHROW control is
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4907 " configured and works as intended.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4908 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4909 " What actually happens, is shown in the test output.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4910 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4911 " Otherwise, the test result is "FAIL", and the test output describes
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4912 " the problem.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4913 "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4914 " IMPORTANT: This must be the last test because it sets $VIMNOERRTHROW and
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4915 " $VIMNOINTTHROW.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4916 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4917
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4918 XpathINIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4919
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4920 if ExtraVim()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4921
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4922 function! ThrowOnError()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4923 XloopNEXT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4924 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4925 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4926 Xloop 1 " X: 1 + 8 + 64
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4927 asdf
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4928 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4929 let caught = 1 " error exception caught
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4930 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4931 Xloop 2 " X: 2 + 16 + 128
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4932 return caught " discard aborting error
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4933 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4934 Xloop 4 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4935 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4936
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4937 let quits_skipped = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4938
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4939 function! ThrowOnInterrupt()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4940 XloopNEXT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4941 let caught = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4942 try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4943 Xloop 1 " X: (1 + 8 + 64) * 512
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4944 "INTERRUPT3
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4945 let dummy = 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4946 let g:quits_skipped = g:quits_skipped + 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4947 catch /.*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4948 let caught = 1 " interrupt exception caught
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4949 finally
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4950 Xloop 2 " X: (2 + 16 + 128) * 512
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4951 return caught " discard interrupt
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4952 endtry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4953 Xloop 4 " X: 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4954 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4955
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4956 function! CheckThrow(Type)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4957 execute 'return ThrowOn' . a:Type . '()'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4958 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4959
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4960 function! CheckConfiguration(type) " type is "error" or "interrupt"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4961
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4962 let type = a:type
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4963 let Type = substitute(type, '.*', '\u&', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4964 let VAR = '$VIMNO' . substitute(type, '\(...\).*', '\U\1', "") . 'THROW'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4965
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4966 if type == "error"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4967 XloopINIT! 1 8
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4968 elseif type == "interrupt"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4969 XloopINIT! 512 8
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4970 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4971
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4972 exec 'let requested_for_tests = exists(VAR) && ' . VAR . ' == 0'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4973 exec 'let suppressed_for_tests = ' . VAR . ' != 0'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4974 let used_in_tests = CheckThrow(Type)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4975
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4976 exec 'let ' . VAR . ' = 0'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4977 let request_works = CheckThrow(Type)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4978
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4979 exec 'let ' . VAR . ' = 1'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4980 let suppress_works = !CheckThrow(Type)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4981
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4982 if type == "error"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4983 XloopINIT! 262144 8
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4984 elseif type == "interrupt"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4985 XloopINIT! 2097152 8
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4986
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4987 if g:quits_skipped != 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4988 Xloop 1 " X: 0*2097152
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4989 Xout "Test environment error. Interrupt breakpoints skipped: "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4990 \ . g:quits_skipped . ".\n"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4991 \ . "Cannot check whether interrupt exceptions are thrown."
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4992 return
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4993 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4994 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4995
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4996 let failure =
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4997 \ !suppressed_for_tests && !used_in_tests
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4998 \ || !request_works
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4999
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5000 let contradiction =
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5001 \ used_in_tests
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5002 \ ? suppressed_for_tests && !request_works
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5003 \ : !suppressed_for_tests
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5004
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5005 if failure
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5006 " Failure in configuration.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5007 Xloop 2 " X: 0 * 2* (262144 + 2097152)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5008 elseif contradiction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5009 " Failure in test logic. Should not happen.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5010 Xloop 4 " X: 0 * 4 * (262144 + 2097152)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5011 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5012
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5013 let var_control_configured =
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5014 \ request_works != used_in_tests
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5015 \ || suppress_works == used_in_tests
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5016
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5017 let var_control_not_configured =
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5018 \ requested_for_tests || suppressed_for_tests
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5019 \ ? request_works && !suppress_works
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5020 \ : request_works == used_in_tests
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5021 \ && suppress_works != used_in_tests
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5022
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5023 let with = used_in_tests ? "with" : "without"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5024
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5025 let set = suppressed_for_tests ? "non-zero" :
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5026 \ requested_for_tests ? "0" : "unset"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5027
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5028 let although = contradiction && !var_control_not_configured
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5029 \ ? ",\nalthough "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5030 \ : ".\n"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5031
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5032 let output = "All tests were run " . with . " throwing exceptions on "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5033 \ . type . although
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5034
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5035 if !var_control_not_configured
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5036 let output = output . VAR . " was " . set . "."
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5037
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5038 if !request_works && !requested_for_tests
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5039 let output = output .
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5040 \ "\n" . Type . " exceptions are not thrown when " . VAR .
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5041 \ " is\nset to 0."
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5042 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5043
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5044 if !suppress_works && (!used_in_tests ||
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5045 \ !request_works &&
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5046 \ !requested_for_tests && !suppressed_for_tests)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5047 let output = output .
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5048 \ "\n" . Type . " exceptions are thrown when " . VAR .
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5049 \ " is set to 1."
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5050 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5051
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5052 if !failure && var_control_configured
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5053 let output = output .
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5054 \ "\nRun tests also with " . substitute(VAR, '^\$', '', "")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5055 \ . "=" . used_in_tests . "."
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5056 \ . "\nThis is for testing in the development phase only."
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5057 \ . " Remove the \n"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5058 \ . VAR . " control in the final release."
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5059 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5060 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5061 let output = output .
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5062 \ "The " . VAR . " control is not configured."
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5063 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5064
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5065 Xout output
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5066 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5067
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5068 call CheckConfiguration("error")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5069 Xpath 16777216 " X: 16777216
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5070 call CheckConfiguration("interrupt")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5071 Xpath 33554432 " X: 33554432
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5072 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5073
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5074 Xcheck 50443995
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5075
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5076 " IMPORTANT: No test should be added after this test because it changes
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5077 " $VIMNOERRTHROW and $VIMNOINTTHROW.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5078
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5079
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5080 "-------------------------------------------------------------------------------
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5081 " Modelines {{{1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5082 " 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
5083 "-------------------------------------------------------------------------------