#6 feature fuly implemented
[svn/Cll1h/.git] / demos / exceptions / advanced-failures.c
diff --git a/demos/exceptions/advanced-failures.c b/demos/exceptions/advanced-failures.c
new file mode 100644 (file)
index 0000000..1f1f674
--- /dev/null
@@ -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.");
+ }
+}
This page took 0.112034 seconds and 4 git commands to generate.