From 8af07f4223f76bfcc06d0571ef63bda692723095 Mon Sep 17 00:00:00 2001
From: "Emmanouil (Manos) Koukoutos" <emmanouil.koukoutos@epfl.ch>
Date: Tue, 16 Dec 2014 17:43:55 +0100
Subject: [PATCH] Custom interruption of checkVerificationConditions

---
 .../leon/verification/AnalysisPhase.scala     | 20 +++++++++++++++----
 1 file changed, 16 insertions(+), 4 deletions(-)

diff --git a/src/main/scala/leon/verification/AnalysisPhase.scala b/src/main/scala/leon/verification/AnalysisPhase.scala
index 2aaa00756..470b03873 100644
--- a/src/main/scala/leon/verification/AnalysisPhase.scala
+++ b/src/main/scala/leon/verification/AnalysisPhase.scala
@@ -72,7 +72,12 @@ object AnalysisPhase extends LeonPhase[Program,VerificationReport] {
     allVCs
   }
 
-  def checkVerificationConditions(vctx: VerificationContext, vcs: Map[FunDef, List[VerificationCondition]], checkInParallel: Boolean = false) : VerificationReport = {
+  def checkVerificationConditions(
+      vctx: VerificationContext, 
+      vcs: Map[FunDef, List[VerificationCondition]], 
+      checkInParallel: Boolean = false,
+      interruptOn : VerificationCondition => Boolean = { _ => false }
+  ) : VerificationReport = {
     import vctx.reporter
     import vctx.solverFactory
     import vctx.program
@@ -150,15 +155,22 @@ object AnalysisPhase extends LeonPhase[Program,VerificationReport] {
       }
     }
     
+    var interrupt = false 
+    
     if (checkInParallel) {
       val allVCsPar = (for {(_, vcs) <- vcs.toSeq; vcInfo <- vcs} yield vcInfo).par
-      for (vc <- allVCsPar if !interruptManager.isInterrupted()) 
+      for (vc <- allVCsPar if !interruptManager.isInterrupted() && !interrupt) {
         checkVC(vc)
+        interrupt = interruptOn(vc)
+      }
     } else {
       for {
         (funDef, vcs) <- vcs.toSeq.sortWith((a,b) => a._1.getPos < b._1.getPos)
-        vcInfo <- vcs if !interruptManager.isInterrupted()
-      } checkVC(vcInfo)
+        vc <- vcs if !interruptManager.isInterrupted() && !interrupt
+      } {
+        checkVC(vc)
+        interrupt = interruptOn(vc)
+      }
     }
     
     val report = new VerificationReport(vcs)
-- 
GitLab