-- Demonstrates:
-- An exception can be raised from an exception handler
with ada.text_io; use ada.text_io;
with ada.integer_text_io; use ada.integer_text_io;
with ada.exceptions; use ada.exceptions;
procedure excep4 is
Invalid_Data: Exception;
subtype Small_Even is Integer range Integer'First .. 1_000
with dynamic_predicate => Small_Even mod 2 = 0;
n: Small_Even;
begin
loop
put("Enter an even number less than 1000, negative to quit:");
begin
get(n);
exception
when data_error =>
put_line("Must enter a number");
raise Invalid_Data;
when constraint_error =>
put_line("Number must be even and less than 1,000");
raise Invalid_Data;
end;
exit when n < 0;
put_line(n'img);
end loop;
exception
when e: Invalid_Data =>
put("Program halted because of invalid data.");
when e: Others =>
put("Something unexpected happened! ");
put(exception_name(e));
put(exception_message(e));
end excep4;