-- $Id: except.gnat,v 1.0 2003/06/11 12:06:00 dada Exp $
-- http://dada.perl.it/shootout/
-- Ada 95 code by C.C.
with Text_IO, Ada.Strings.Fixed, Ada.Command_Line;
procedure Except is
High_Exception : exception;
Low_Exception : exception;
Low : Integer := 0;
High : Integer := 0;
procedure Blowup (K : Integer) is
pragma Inline (Blowup);
begin
case 1 = (K mod 2) is
when False => raise High_Exception;
when True => raise Low_Exception;
end case;
end Blowup;
procedure Low_Function (K : Integer) is
pragma Inline (Low_Function);
begin
Blowup (K);
exception
when Low_Exception => Low := Low + 1;
end Low_Function;
procedure High_Function (K : Integer) is
pragma Inline (High_Function);
begin
Low_Function (K);
exception
when High_Exception => High := High + 1;
end High_Function;
procedure Some_Function (K : Integer) is
pragma Inline (Some_Function);
begin
High_Function (K);
exception
when others => Text_IO.Put_Line ("We shouldn't get here");
end Some_Function;
function L_Trim (Source : String; Side : Ada.Strings.Trim_End :=
Ada.Strings.Left) return String renames Ada.Strings.Fixed.Trim;
N : Natural := 0;
begin
begin
N := Natural'Value (Ada.Command_Line.Argument (1));
exception
when Constraint_Error => null;
end;
for K in reverse 0 .. N - 1 loop
Some_Function (K);
end loop;
Text_IO.Put_Line ("Exceptions: HI=" & L_Trim (Natural'Image (High)) &
" / LO=" & L_Trim (Natural'Image (Low)));
end Except;