Exceptions/Catch an exception thrown in a nested call: Difference between revisions

Add Seed7 example
(→‎{{header|Ruby}}: rescued, not caught.)
(Add Seed7 example)
Line 2,023:
}
</lang>Exception U0 is caught, exception U1 is caught and re-thrown. Program execution is terminated as the U1 exception is not caught when thrown the second time.
 
=={{header|Seed7}}==
When an [http://seed7.sourceforge.net/manual/errors.htm#Exceptions exception] is not [http://seed7.sourceforge.net/manual/errors.htm#Handlers handled]
the program is terminated and a [http://seed7.sourceforge.net/manual/errors.htm#Stack_trace stack trace] is written.
<lang seed7>$ include "seed7_05.s7i";
 
const EXCEPTION: U0 is enumlit;
const EXCEPTION: U1 is enumlit;
 
const proc: baz (in integer: num) is func
begin
if num = 1 then
raise U0;
else
raise U1;
end if;
end func;
 
const proc: bar (in integer: num) is func
begin
baz(num);
end func;
 
const proc: foo is func
local
var integer: num is 0;
begin
for num range 1 to 2 do
block
bar(num);
exception
catch U0: writeln("U0 catched");
end block;
end for;
end func;
 
const proc: main is func
begin
foo;
end func;</lang>
 
{{out}}
<pre>
U0 catched
 
*** Uncaught EXCEPTION U1 raised with
{raise U1 }
 
Stack:
in raise (ref EXCEPTION: anException) at /media/disk2_460GiB/home/tm/seed7_5/prg/seed7_05.s7i(322)
in baz (val integer: num) at rosetta/catchAnExceptionThrownInANestedCall.sd7(11)
in bar (val integer: num) at rosetta/catchAnExceptionThrownInANestedCall.sd7(17)
in foo at rosetta/catchAnExceptionThrownInANestedCall.sd7(26)
in main at rosetta/catchAnExceptionThrownInANestedCall.sd7(35)
</pre>
 
=={{header|Smalltalk}}==