In the previous section we saw an example of raising an exception when a call to
We can re-write this example to use automatic exception raising:
CONST BIG_AMOUNT = 100000 ENUM ERR_MEM=1 RAISE ERR_MEM IF New()=NIL PROC main() HANDLE DEF block block:=New(BIG_AMOUNT) WriteF('Got enough memory\n') EXCEPT IF exception=ERR_MEM WriteF('Not enough memory\n') ELSE WriteF('Unknown exception\n') ENDIF ENDPROC
The only difference is the removal of the
IF which checked the value of
block, and the addition of a
RAISE part means that whenever the
New function is called in the program, the exception
ERR_MEM will be raised if it returns
NIL (i.e., the exception
ERR_MEM is automatically raised).
This unclutters the program by removing a lot of error checking
The precise form of the
RAISE part is:
RAISE exception IF function() compare value , exception2 IF function2() compare2 value2 , ... exceptionN IF functionN() compareN valueN
The exception is a constant (or number) which represents the exception to be raised, function is the E built-in or system function to be automatically checked, value is the return value to be checked against, and compare is the method of checking (i.e., `=', `<>', `<', `<=', `>' or `>=').
This mechanism only exists for built-in or library functions because they would otherwise have no way of raising exceptions.
The procedures you define yourself can, of course, use
Raise to raise exceptions in a much more flexible way.
Go to the Next or Previous section, the Detailed Contents, or the Amiga E Encyclopedia.