-- Demonstrates causing and handling a storage error (caused by infinite recursion) -- Demonstrates the exceptions package -- Program terminates when exception occurs -- Begin-exception-end is similar to a java try-catch 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 excep1b is -- Force a storage_error with infinite recursion procedure recur is begin -- No base case! recur; end recur; n: Natural; begin get(n); put_line(n'img); recur; -- Cause infinite recursion put_line(n'img); exception when data_error => put_line("You must enter a number!"); when constraint_error => put_line("You must enter an non-negative value!"); when end_error => put_line("Premature end of file!"); when e: others => put_line("Unknown exception occurred!"); put_line("An exception with this name happened: " & exception_name(e) ); put_line("The exception message with this: " & exception_message(e) ); end excep1b; -- Input: 3 -- Output: --| 3 --|Unknown exception occurred! --|An exception with this name happened: STORAGE_ERROR --|The exception message with this: excep1b.adb:12 infinite recursion