From b67d059d8ef98ea0cb0328c176ab74b9616cd465 Mon Sep 17 00:00:00 2001
From: Etienne Kneuss <etienne.kneuss@epfl.ch>
Date: Mon, 27 Oct 2014 17:12:53 +0100
Subject: [PATCH] Getting active functions, visible from main units + main
 units

---
 src/main/scala/leon/purescala/DefOps.scala                | 6 ++++++
 src/main/scala/leon/termination/TerminationChecker.scala  | 3 ++-
 src/main/scala/leon/termination/TerminationPhase.scala    | 3 ++-
 src/test/scala/leon/test/evaluators/EvaluatorsTests.scala | 6 +-----
 4 files changed, 11 insertions(+), 7 deletions(-)

diff --git a/src/main/scala/leon/purescala/DefOps.scala b/src/main/scala/leon/purescala/DefOps.scala
index 3e716313b..c374d664a 100644
--- a/src/main/scala/leon/purescala/DefOps.scala
+++ b/src/main/scala/leon/purescala/DefOps.scala
@@ -78,6 +78,12 @@ object DefOps {
     }
   }
 
+  def visibleFunDefsFromMain(p: Program): Set[FunDef] = {
+    p.units.filter(_.isMainUnit).toSet.flatMap{ (u: UnitDef) =>
+      visibleFunDefsFrom(u) ++ u.definedFunctions
+    }
+  }
+
   /** Returns true for strict superpackage */ 
   def isSuperPackageOf(p1:PackageRef, p2 : PackageRef) = 
     (p2.length > p1.length) && 
diff --git a/src/main/scala/leon/termination/TerminationChecker.scala b/src/main/scala/leon/termination/TerminationChecker.scala
index d90333484..e4273dd85 100644
--- a/src/main/scala/leon/termination/TerminationChecker.scala
+++ b/src/main/scala/leon/termination/TerminationChecker.scala
@@ -5,10 +5,11 @@ package termination
 
 import purescala.Definitions._
 import purescala.Trees._
+import purescala.DefOps._
 
 abstract class TerminationChecker(val context: LeonContext, val program: Program) extends LeonComponent {
 
-  val functions = program.definedFunctions.toSet
+  val functions = visibleFunDefsFromMain(program)
 
   def initialize() : Unit
   def terminates(funDef : FunDef) : TerminationGuarantee
diff --git a/src/main/scala/leon/termination/TerminationPhase.scala b/src/main/scala/leon/termination/TerminationPhase.scala
index 727f9dda4..eeba3a0ad 100644
--- a/src/main/scala/leon/termination/TerminationPhase.scala
+++ b/src/main/scala/leon/termination/TerminationPhase.scala
@@ -4,6 +4,7 @@ package leon
 package termination
 
 import purescala.Definitions._
+import purescala.DefOps._
 
 object TerminationPhase extends LeonPhase[Program,TerminationReport] {
   val name = "Termination"
@@ -17,7 +18,7 @@ object TerminationPhase extends LeonPhase[Program,TerminationReport] {
 
     tc.initialize()
 
-    val results = program.definedFunctions.toList.sortWith(_.getPos < _.getPos).map { funDef =>
+    val results = visibleFunDefsFromMain(program).toList.sortWith(_.getPos < _.getPos).map { funDef =>
       (funDef -> tc.terminates(funDef))
     }
     val endTime = System.currentTimeMillis
diff --git a/src/test/scala/leon/test/evaluators/EvaluatorsTests.scala b/src/test/scala/leon/test/evaluators/EvaluatorsTests.scala
index bc203c2b8..2234f9ff3 100644
--- a/src/test/scala/leon/test/evaluators/EvaluatorsTests.scala
+++ b/src/test/scala/leon/test/evaluators/EvaluatorsTests.scala
@@ -38,11 +38,7 @@ class EvaluatorsTests extends leon.test.LeonTestSuite {
   }
 
   private def mkCall(name : String, args : Expr*)(implicit p : Program) = {
-    p.definedFunctions.foreach { fd =>
-      println(fullName(fd))
-    }
-
-    val fn = s"<empty>.Program.$name"
+    val fn = s"Program.$name"
 
     searchByFullName(fn, p) match {
       case Some(fd: FunDef) =>
-- 
GitLab