From 3c77e1f5cd6c4abbb50ca2ea702550bab3872c9d Mon Sep 17 00:00:00 2001
From: Manos Koukoutos <emmanouil.koukoutos@epfl.ch>
Date: Fri, 21 Aug 2015 15:08:48 +0200
Subject: [PATCH] Hopefully a little more readable

---
 .../leon/termination/ProcessingPipeline.scala | 50 +++++++++----------
 1 file changed, 25 insertions(+), 25 deletions(-)

diff --git a/src/main/scala/leon/termination/ProcessingPipeline.scala b/src/main/scala/leon/termination/ProcessingPipeline.scala
index 6e7da22ce..d2bae17b3 100644
--- a/src/main/scala/leon/termination/ProcessingPipeline.scala
+++ b/src/main/scala/leon/termination/ProcessingPipeline.scala
@@ -126,36 +126,36 @@ abstract class ProcessingPipeline(context: LeonContext, initProgram: Program) ex
   }
 
   private val terminationMap : MutableMap[FunDef, TerminationGuarantee] = MutableMap.empty
-  def terminates(funDef: FunDef): TerminationGuarantee = terminationMap.get(funDef) match {
-    case Some(guarantee) => guarantee
-    case None =>
-      val guarantee = brokenMap.get(funDef) match {
-        case Some((reason, args)) => LoopsGivenInputs(reason, args)
-        case None => maybeBrokenMap.get(funDef) match {
-          case Some((reason, args)) => MaybeLoopsGivenInputs(reason, args)
-          case None =>
-            val callees = program.callGraph.transitiveCallees(funDef)
-            val broken = brokenMap.keys.toSet ++ maybeBrokenMap.keys
-            callees intersect broken match {
-              case set if set.nonEmpty => CallsNonTerminating(set)
-              case _ if isProblem(funDef) => NoGuarantee
-              case _ => clearedMap.get(funDef) match {
-                case Some(reason) => Terminates(reason)
-                case None if !running =>
-                  verifyTermination(funDef)
-                  terminates(funDef)
-                case _ =>
-                  if (!dependencies.exists(_.contains(funDef))) {
-                    dependencies ++= generateProblems(funDef)
-                  }
-                  NoGuarantee
+  def terminates(funDef: FunDef): TerminationGuarantee = {
+    val guarantee = {
+      terminationMap.get(funDef) orElse
+      brokenMap.get(funDef).map { case (reason, args) => LoopsGivenInputs(reason, args) } orElse
+      maybeBrokenMap.get(funDef).map { case (reason, args) => MaybeLoopsGivenInputs(reason, args)} getOrElse {
+        val callees = program.callGraph.transitiveCallees(funDef)
+        val broken = brokenMap.keys.toSet ++ maybeBrokenMap.keys
+        val brokenCallees = callees intersect broken
+        if (brokenCallees.nonEmpty) {
+          CallsNonTerminating(brokenCallees)
+        } else if (isProblem(funDef)) {
+          NoGuarantee
+        } else {
+          clearedMap.get(funDef).map(Terminates).getOrElse(
+            if (!running) {
+              verifyTermination(funDef)
+              terminates(funDef)
+            } else {
+              if (!dependencies.exists(_.contains(funDef))) {
+                dependencies ++= generateProblems(funDef)
               }
+              NoGuarantee
             }
+          )
         }
       }
+    }
 
-      if (!running) terminationMap(funDef) = guarantee
-      guarantee
+    if (!running) terminationMap(funDef) = guarantee
+    guarantee
   }
 
   private def generateProblems(funDef: FunDef): Seq[Problem] = {
-- 
GitLab