control structure
rethrow
You can use rethrow
to resume a caught throw
. You can only use rethrow
within a catch
clause. The new instance of the throw
is created regardless of any other
throw
s pending, and is dealt with in the same manner as any other throw
.
The new throw
has the same name and all the parameters of the original throw
.
The following is an example of rethrow
used with #program-error
.
declare catch division-by-zero () define integer function divide (value integer numerator, value integer denominator) as return numerator / denominator catch #program-error code error-code do when error-code = 4006 throw division-by-zero () else rethrow done process local integer numerator initial { 5 } local integer denominator initial { 0 } output "d" % numerator || " divided by " || "d" % denominator || " is: " || "d" % divide (numerator, denominator) || "%n" catch division-by-zero () output "UNDEFINED!%n"
The catch
of #program-error
in the function body deals only with an attempt to divide by zero,
and uses rethrow
so that all other causes of a #program-error
are rethrown and dealt with
appropriately by an other catch
clause, elsehwere in the program (not shown).
If a rethrow
is not caught, the program will terminate.