How to resolve the algorithm Exceptions/Catch an exception thrown in a nested call step by step in the Amazing Hopper programming language

Published on 12 May 2024 09:40 PM

How to resolve the algorithm Exceptions/Catch an exception thrown in a nested call step by step in the Amazing Hopper programming language

Table of Contents

Problem Statement

Show how to create a user-defined exception   and   show how to catch an exception raised from several nested calls away.

Show/describe what happens when the program is run.

Let's start with the solution:

Step by Step solution about How to resolve the algorithm Exceptions/Catch an exception thrown in a nested call step by step in the Amazing Hopper programming language

Source code in the amazing programming language

#include 

Main
    e=0, se=""
    Try
        Gosub 'Foo'
    Catch (e)
        Get msg exception, and Move to 'se'
        Printnl ("+-MAIN-FOO CALL Error: ",e, " : ", se )
    Finish
End

Subrutines

Define ' Foo '
    Gosub ' Bar '
Return

Define ' Bar '
    Set '0', Gosub ' Biz '
    Set '1', Gosub ' Biz '
Return

Define ' Biz, x '
    a=0, b=0
    If ( x )
        Let ' b:=Sqrt(-1) '
        Nan( a ) do{ Raise (1000,"\n+----Func BIZ: NaN!") }
    Else
        #( a=log(-1) + log(-1) ) 
        Nan( a ) do{ Raise (1001,"\n+----Func BIZ: NaN!") }
    End If
       
    Printnl ' "a = ", a, " b = ", b '

Return


#include 

Main
    e=0, se=""
    Try
        Gosub 'Foo'
    Catch (e)
        Get msg exception, and Move to 'se'
        Printnl ("+-MAIN Error: ",e, " : ", se )
    Finish
End

Subrutines

/*
This "Try" is not considered nested, then, it is necessary 
to capture the error and raise the error
*/
Define ' Foo '
    Try
        Gosub ' Bar '
    Catch (e)
        Get msg exception, and Move to 'se'
        Free try // absolutly nessesary in this chase!
        Raise (e, Cat ("\n+--FUNC FOO: ", se) )
    Finish
Return

Define ' Bar '
    Try
        Set '0', Gosub ' Biz '
        Set '1', Gosub ' Biz '
    Catch(e)
        Get msg exception, and Move to 'se'
        Free try // absolutly nessesary in this chase!
        Raise (e, Cat ("\n+---FUNC BAR: ", se) )
    Finish

Return

Define ' Biz, x '
    a=0, b=0
    If ( x )
        Let ' b:=Sqrt(-1) '
        Nan( a ) do{ Raise (1000,"\n+----Func BIZ: NaN!") }
    Else
        #( a=log(-1) + log(-1) ) 
        Nan( a ) do{ Raise (1001,"\n+----Func BIZ: NaN!") }
    End If
       
    Printnl ' "a = ", a, " b = ", b '

Return


  

You may also check:How to resolve the algorithm Logistic curve fitting in epidemiology step by step in the Go programming language
You may also check:How to resolve the algorithm Haversine formula step by step in the bc programming language
You may also check:How to resolve the algorithm Environment variables step by step in the Julia programming language
You may also check:How to resolve the algorithm Largest number divisible by its digits step by step in the Wren programming language
You may also check:How to resolve the algorithm Currency step by step in the Frink programming language