X-Git-Url: http://git.harvie.cz/?p=svn%2FCll1h%2F.git;a=blobdiff_plain;f=demos%2Fexceptions%2Fadvanced-failures.c;fp=demos%2Fexceptions%2Fadvanced-failures.c;h=1f1f674b25442eae0cce3d2e06ad47cefdaea6e0;hp=0000000000000000000000000000000000000000;hb=eac5d6c70c3babc9056f059edd88a2c1a82bc7e9;hpb=7e4d757514e0d9904d6b31b5a08760eff306a9f2 diff --git a/demos/exceptions/advanced-failures.c b/demos/exceptions/advanced-failures.c new file mode 100644 index 0000000..1f1f674 --- /dev/null +++ b/demos/exceptions/advanced-failures.c @@ -0,0 +1,66 @@ +#include "cll1.h" + +void private_method(int i) +{ + if(i==2) + { + fail(LOCAL_FAILURE); + } + else if(i==6) + { + fail(EVIL_FAILURE); + } + else + { + printf("nuda #%d\n",i); + } +} + +void some_job(int i) +{ + try + { + private_method(i); + private_method(i+1); + private_method(i+2); + } + else_switch_failures + { + case EVIL_FAILURE: puts("[serious error]"); pass_failure; + case LOCAL_FAILURE: puts("[non-fatal error detected]"); break; + default : puts("[sorry, vole, error]"); + } +} + +program +{ + + try + { + some_job(1); + some_job(3); + some_job(6); + some_job(2); + some_job(7); + } + else + { + puts("sorry, vole, error!"); + } + + try + { + some_job(1); + some_job(2); + some_job(4); + some_job(7); + } + else_catch(EVIL_FAILURE) + { + puts("totaly screwed."); + } + else + { + puts("ahem... something went wrong."); + } +}