1use warnings;
2use strict;
3
4use Test::More tests => 56;
5
6BEGIN { $^H |= 0x20000; }
7
8my $t;
9
10$t = "";
11eval q{
12	use XS::APItest qw(swaplabel);
13	$t .= "a";
14	$t .= "b";
15	swaplabel $t .= "c";
16	swaplabel $t .= "d";
17	$t .= "e";
18};
19is $@, "";
20is $t, "abcde";
21
22$t = "";
23eval q{
24	use XS::APItest qw(swaplabel);
25	$t .= "a";
26	Lb: $t .= "b";
27	swaplabel $t .= "c"; Lc:
28	swaplabel $t .= "d"; Ld:
29	Le: $t .= "e";
30};
31is $@, "";
32is $t, "abcde";
33
34$t = "";
35eval q{
36	use XS::APItest qw(swaplabel);
37	$t .= "a";
38	goto Lb;
39	Lb: $t .= "b";
40	swaplabel $t .= "c"; Lc:
41	swaplabel $t .= "d"; Ld:
42	Le: $t .= "e";
43};
44is $@, "";
45is $t, "abcde";
46
47$t = "";
48eval q{
49	use XS::APItest qw(swaplabel);
50	$t .= "a";
51	goto Lc;
52	Lb: $t .= "b";
53	swaplabel $t .= "c"; Lc:
54	swaplabel $t .= "d"; Ld:
55	Le: $t .= "e";
56};
57is $@, "";
58is $t, "acde";
59
60$t = "";
61eval q{
62	use XS::APItest qw(swaplabel);
63	$t .= "a";
64	goto Ld;
65	Lb: $t .= "b";
66	swaplabel $t .= "c"; Lc:
67	swaplabel $t .= "d"; Ld:
68	Le: $t .= "e";
69};
70is $@, "";
71is $t, "ade";
72
73$t = "";
74eval q{
75	use XS::APItest qw(swaplabel);
76	$t .= "a";
77	goto Le;
78	Lb: $t .= "b";
79	swaplabel $t .= "c"; Lc:
80	swaplabel $t .= "d"; Ld:
81	Le: $t .= "e";
82};
83is $@, "";
84is $t, "ae";
85
86$t = "";
87eval q{
88	use XS::APItest qw(swaplabel);
89	$t .= "a";
90	swaplabel $t .= "b"; y:
91	$t .= "c";
92};
93isnt $@, "";
94is $t, "";
95
96$t = "";
97eval q{
98	use XS::APItest qw(swaplabel);
99	if(1) { $t .= "a"; }
100	if(1) { $t .= "b"; }
101	swaplabel if(1) { $t .= "c"; }
102	swaplabel if(1) { $t .= "d"; }
103	if(1) { $t .= "e"; }
104};
105is $@, "";
106is $t, "abcde";
107
108$t = "";
109eval q{
110	use XS::APItest qw(swaplabel);
111	if(1) { $t .= "a"; }
112	Lb: if(1) { $t .= "b"; }
113	swaplabel if(1) { $t .= "c"; } Lc:
114	swaplabel if(1) { $t .= "d"; } Ld:
115	Le: if(1) { $t .= "e"; }
116};
117is $@, "";
118is $t, "abcde";
119
120$t = "";
121eval q{
122	use XS::APItest qw(swaplabel);
123	if(1) { $t .= "a"; }
124	goto Lb;
125	Lb: if(1) { $t .= "b"; }
126	swaplabel if(1) { $t .= "c"; } Lc:
127	swaplabel if(1) { $t .= "d"; } Ld:
128	Le: if(1) { $t .= "e"; }
129};
130is $@, "";
131is $t, "abcde";
132
133$t = "";
134eval q{
135	use XS::APItest qw(swaplabel);
136	if(1) { $t .= "a"; }
137	goto Lc;
138	Lb: if(1) { $t .= "b"; }
139	swaplabel if(1) { $t .= "c"; } Lc:
140	swaplabel if(1) { $t .= "d"; } Ld:
141	Le: if(1) { $t .= "e"; }
142};
143is $@, "";
144is $t, "acde";
145
146$t = "";
147eval q{
148	use XS::APItest qw(swaplabel);
149	if(1) { $t .= "a"; }
150	goto Ld;
151	Lb: if(1) { $t .= "b"; }
152	swaplabel if(1) { $t .= "c"; } Lc:
153	swaplabel if(1) { $t .= "d"; } Ld:
154	Le: if(1) { $t .= "e"; }
155};
156is $@, "";
157is $t, "ade";
158
159$t = "";
160eval q{
161	use XS::APItest qw(swaplabel);
162	if(1) { $t .= "a"; }
163	goto Le;
164	Lb: if(1) { $t .= "b"; }
165	swaplabel if(1) { $t .= "c"; } Lc:
166	swaplabel if(1) { $t .= "d"; } Ld:
167	Le: if(1) { $t .= "e"; }
168};
169is $@, "";
170is $t, "ae";
171
172$t = "";
173eval q{
174	use XS::APItest qw(swaplabel);
175	if(1) { $t .= "a"; }
176	swaplabel if(1) { $t .= "b"; } y:
177	if(1) { $t .= "c"; }
178};
179isnt $@, "";
180is $t, "";
181
182{
183    use utf8;
184    use open qw( :utf8 :std );
185    
186    $t = "";
187    eval q{
188            use XS::APItest qw(swaplabel);
189            $t .= "���";
190            $t .= "���";
191            swaplabel $t .= "���";
192            swaplabel $t .= "���";
193            $t .= "���";
194    };
195    is $@, "";
196    is $t, "���������������";
197    
198    $t = "";
199    eval q{
200            use XS::APItest qw(swaplabel);
201            $t .= "���";
202            L���: $t .= "���";
203            swaplabel $t .= "���"; L���:
204            swaplabel $t .= "���"; L���:
205            L���: $t .= "���";
206    };
207    is $@, "";
208    is $t, "���������������";
209    
210    $t = "";
211    eval q{
212            use XS::APItest qw(swaplabel);
213            $t .= "���";
214            goto L���;
215            L���: $t .= "���";
216            swaplabel $t .= "���"; L���:
217            swaplabel $t .= "���"; L���:
218            L���: $t .= "���";
219    };
220    is $@, "";
221    is $t, "���������������";
222    
223    $t = "";
224    eval q{
225            use XS::APItest qw(swaplabel);
226            $t .= "���";
227            goto L���;
228            L���: $t .= "���";
229            swaplabel $t .= "���"; L���:
230            swaplabel $t .= "���"; L���:
231            L���: $t .= "���";
232    };
233    is $@, "";
234    is $t, "������������";
235    
236    $t = "";
237    eval q{
238            use XS::APItest qw(swaplabel);
239            $t .= "���";
240            goto L���;
241            L���: $t .= "���";
242            swaplabel $t .= "���"; L���:
243            swaplabel $t .= "���"; L���:
244            L���: $t .= "���";
245    };
246    is $@, "";
247    is $t, "���������";
248    
249    $t = "";
250    eval q{
251            use XS::APItest qw(swaplabel);
252            $t .= "���";
253            goto L���;
254            L���: $t .= "���";
255            swaplabel $t .= "���"; L���:
256            swaplabel $t .= "���"; L���:
257            L���: $t .= "���";
258    };
259    is $@, "";
260    is $t, "������";
261    
262    $t = "";
263    eval q{
264            use XS::APItest qw(swaplabel);
265            $t .= "���";
266            swaplabel $t .= "���"; y:
267            $t .= "���";
268    };
269    isnt $@, "";
270    is $t, "";
271    
272    $t = "";
273    eval q{
274            use XS::APItest qw(swaplabel);
275            if(1) { $t .= "���"; }
276            if(1) { $t .= "���"; }
277            swaplabel if(1) { $t .= "���"; }
278            swaplabel if(1) { $t .= "���"; }
279            if(1) { $t .= "���"; }
280    };
281    is $@, "";
282    is $t, "���������������";
283    
284    $t = "";
285    eval q{
286            use XS::APItest qw(swaplabel);
287            if(1) { $t .= "���"; }
288            L���: if(1) { $t .= "���"; }
289            swaplabel if(1) { $t .= "���"; } L���:
290            swaplabel if(1) { $t .= "���"; } L���:
291            L���: if(1) { $t .= "���"; }
292    };
293    is $@, "";
294    is $t, "���������������";
295    
296    $t = "";
297    eval q{
298            use XS::APItest qw(swaplabel);
299            if(1) { $t .= "���"; }
300            goto L���;
301            L���: if(1) { $t .= "���"; }
302            swaplabel if(1) { $t .= "���"; } L���:
303            swaplabel if(1) { $t .= "���"; } L���:
304            L���: if(1) { $t .= "���"; }
305    };
306    is $@, "";
307    is $t, "���������������";
308    
309    $t = "";
310    eval q{
311            use XS::APItest qw(swaplabel);
312            if(1) { $t .= "���"; }
313            goto L���;
314            L���: if(1) { $t .= "���"; }
315            swaplabel if(1) { $t .= "���"; } L���:
316            swaplabel if(1) { $t .= "���"; } L���:
317            L���: if(1) { $t .= "���"; }
318    };
319    is $@, "";
320    is $t, "������������";
321    
322    $t = "";
323    eval q{
324            use XS::APItest qw(swaplabel);
325            if(1) { $t .= "���"; }
326            goto L���;
327            L���: if(1) { $t .= "���"; }
328            swaplabel if(1) { $t .= "���"; } L���:
329            swaplabel if(1) { $t .= "���"; } L���:
330            L���: if(1) { $t .= "���"; }
331    };
332    is $@, "";
333    is $t, "���������";
334    
335    $t = "";
336    eval q{
337            use XS::APItest qw(swaplabel);
338            if(1) { $t .= "���"; }
339            goto L���;
340            L���: if(1) { $t .= "���"; }
341            swaplabel if(1) { $t .= "���"; } L���:
342            swaplabel if(1) { $t .= "���"; } L���:
343            L���: if(1) { $t .= "���"; }
344    };
345    is $@, "";
346    is $t, "������";
347    
348    $t = "";
349    eval q{
350            use XS::APItest qw(swaplabel);
351            if(1) { $t .= "���"; }
352            swaplabel if(1) { $t .= "���"; } y:
353            if(1) { $t .= "���"; }
354    };
355    isnt $@, "";
356    is $t, "";
357}
358
3591;
360