xref: /openbsd/gnu/usr.bin/perl/t/op/die_except.t (revision b8851fcc)
1898184e3Ssthen#!./perl -w
2898184e3Ssthen
3*b8851fccSafresh1chdir 't' if -d 't';
4898184e3Ssthenrequire './test.pl';
5898184e3Ssthenuse strict;
6898184e3Ssthen
7898184e3Ssthen{
8898184e3Ssthen    package End;
9898184e3Ssthen    sub DESTROY { $_[0]->() }
10898184e3Ssthen    sub main::end(&) {
11898184e3Ssthen	my($cleanup) = @_;
12898184e3Ssthen	return bless(sub { $cleanup->() }, "End");
13898184e3Ssthen    }
14898184e3Ssthen}
15898184e3Ssthen
16898184e3Ssthenmy($val, $err);
17898184e3Ssthen
18898184e3Ssthen$@ = "t0\n";
19898184e3Ssthen$val = eval {
20898184e3Ssthen	$@ = "t1\n";
21898184e3Ssthen	1;
22898184e3Ssthen}; $err = $@;
2391f110e0Safresh1is($val, 1, "true return value from successful eval block");
2491f110e0Safresh1is($err, "", "no exception after successful eval block");
25898184e3Ssthen
26898184e3Ssthen$@ = "t0\n";
27898184e3Ssthen$val = eval {
28898184e3Ssthen	$@ = "t1\n";
29898184e3Ssthen	do {
30898184e3Ssthen		die "t3\n";
31898184e3Ssthen	};
32898184e3Ssthen	1;
33898184e3Ssthen}; $err = $@;
3491f110e0Safresh1is($val, undef, "undefined return value from eval block with 'die'");
3591f110e0Safresh1is($err, "t3\n", "exception after eval block with 'die'");
36898184e3Ssthen
37898184e3Ssthen$@ = "t0\n";
38898184e3Ssthen$val = eval {
39898184e3Ssthen	$@ = "t1\n";
40898184e3Ssthen	local $@ = "t2\n";
41898184e3Ssthen	1;
42898184e3Ssthen}; $err = $@;
4391f110e0Safresh1is($val, 1, "true return value from successful eval block with localized \$@");
4491f110e0Safresh1is($err, "", "no exception after successful eval block with localized \$@");
45898184e3Ssthen
46898184e3Ssthen$@ = "t0\n";
47898184e3Ssthen$val = eval {
48898184e3Ssthen	$@ = "t1\n";
49898184e3Ssthen	local $@ = "t2\n";
50898184e3Ssthen	do {
51898184e3Ssthen		die "t3\n";
52898184e3Ssthen	};
53898184e3Ssthen	1;
54898184e3Ssthen}; $err = $@;
5591f110e0Safresh1is($val, undef,
5691f110e0Safresh1    "undefined return value from eval block with 'die' and localized \$@");
5791f110e0Safresh1is($err, "t3\n",
5891f110e0Safresh1    "exception after eval block with 'die' and localized \$@");
59898184e3Ssthen
60898184e3Ssthen$@ = "t0\n";
61898184e3Ssthen$val = eval {
62898184e3Ssthen	$@ = "t1\n";
63898184e3Ssthen	my $c = end { $@ = "t2\n"; };
64898184e3Ssthen	1;
65898184e3Ssthen}; $err = $@;
6691f110e0Safresh1is($val, 1, "true return value from eval block with 'end'");
6791f110e0Safresh1is($err, "", "no exception after eval block with 'end'");
68898184e3Ssthen
69898184e3Ssthen$@ = "t0\n";
70898184e3Ssthen$val = eval {
71898184e3Ssthen	$@ = "t1\n";
72898184e3Ssthen	my $c = end { $@ = "t2\n"; };
73898184e3Ssthen	do {
74898184e3Ssthen		die "t3\n";
75898184e3Ssthen	};
76898184e3Ssthen	1;
77898184e3Ssthen}; $err = $@;
7891f110e0Safresh1is($val, undef, "undefined return value from eval block with 'end' and 'die'");
7991f110e0Safresh1is($err, "t3\n", "exception after eval block with 'end' and 'die'");
80898184e3Ssthen
81898184e3Ssthendone_testing();
82