%%% $Id: except.oz,v 1.0 2002/08/19 16:19:00 dada Exp $ %%% http://dada.perl.it/shootout/ %%% %%% contributed by Isaac Gouy %% Usage: start from command line with %% ozc -x except.oz -o except.oz.exe %% except.oz.exe 2000 functor import System Application define LoCount HiCount proc {Blowup N} if N mod 2 == 0 then raise loException() end else raise hiException() end end end proc {LoFun N} try {Blowup N} catch loException then {Assign LoCount {Access LoCount}+1} end end proc {HiFun N} try {LoFun N} catch hiException then {Assign HiCount {Access HiCount}+1} end end proc {SomeFun N} if N > 0 then try {HiFun N} catch loException then {System.showInfo 'loException should not get here'} [] hiException then {System.showInfo 'hiException should not get here'} end {SomeFun N-1} end end in local Args N in [Args] = {Application.getArgs plain} N = {String.toInt Args} LoCount = {NewCell 0} HiCount = {NewCell 0} {SomeFun N} {System.printInfo "Exceptions: HI="} {System.printInfo {Access HiCount}} {System.printInfo " / LO="} {System.showInfo {Access LoCount}} end {Application.exit 0} end