From 7bcd4243263c8104202cd1d370e918be54be64e5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?R=C3=A9gis=20Blanc?= <regwblanc@gmail.com>
Date: Wed, 12 Dec 2012 22:17:26 +0100
Subject: [PATCH] use LeonFatalError to exit

---
 src/main/scala/leon/LeonFatalError.scala           | 3 +++
 src/main/scala/leon/Main.scala                     | 8 ++++++--
 src/main/scala/leon/Reporter.scala                 | 2 +-
 src/main/scala/leon/plugin/AnalysisComponent.scala | 2 +-
 4 files changed, 11 insertions(+), 4 deletions(-)
 create mode 100644 src/main/scala/leon/LeonFatalError.scala

diff --git a/src/main/scala/leon/LeonFatalError.scala b/src/main/scala/leon/LeonFatalError.scala
new file mode 100644
index 000000000..6fc773292
--- /dev/null
+++ b/src/main/scala/leon/LeonFatalError.scala
@@ -0,0 +1,3 @@
+package leon
+
+case class LeonFatalError() extends Exception
diff --git a/src/main/scala/leon/Main.scala b/src/main/scala/leon/Main.scala
index 2e1e6634f..1e4592f5e 100644
--- a/src/main/scala/leon/Main.scala
+++ b/src/main/scala/leon/Main.scala
@@ -157,7 +157,11 @@ object Main {
     // Compute leon pipeline
     val pipeline = computePipeline(ctx.settings)
 
-    // Run pipeline
-    pipeline.run(ctx)(args.toList)
+    try {
+      // Run pipeline
+      pipeline.run(ctx)(args.toList)
+    } catch {
+      case LeonFatalError() => sys.exit(1)
+    }
   }
 }
diff --git a/src/main/scala/leon/Reporter.scala b/src/main/scala/leon/Reporter.scala
index 81ed31be8..a9bff0440 100644
--- a/src/main/scala/leon/Reporter.scala
+++ b/src/main/scala/leon/Reporter.scala
@@ -53,7 +53,7 @@ class DefaultReporter extends Reporter {
   def errorFunction(msg: Any) = output(reline(errorPfx, msg.toString))
   def warningFunction(msg: Any) = output(reline(warningPfx, msg.toString))
   def infoFunction(msg: Any) = output(reline(infoPfx, msg.toString))
-  def fatalErrorFunction(msg: Any) = { output(reline(fatalPfx, msg.toString)); sys.exit(0) }
+  def fatalErrorFunction(msg: Any) = { output(reline(fatalPfx, msg.toString)); throw LeonFatalError() }
 }
 
 class QuietReporter extends DefaultReporter {
diff --git a/src/main/scala/leon/plugin/AnalysisComponent.scala b/src/main/scala/leon/plugin/AnalysisComponent.scala
index 1cc1cde07..783d86b5c 100644
--- a/src/main/scala/leon/plugin/AnalysisComponent.scala
+++ b/src/main/scala/leon/plugin/AnalysisComponent.scala
@@ -24,7 +24,7 @@ class AnalysisComponent(val global: Global, val pluginInstance: LeonPlugin)
   
   protected def stopIfErrors: Unit = {
     if(reporter.hasErrors) {
-      sys.exit(1)
+      throw LeonFatalError()
     }
   }
 
-- 
GitLab