Skip to content
Snippets Groups Projects
Commit b67d059d authored by Etienne Kneuss's avatar Etienne Kneuss
Browse files

Getting active functions, visible from main units + main units

parent bf8889f4
Branches
Tags
No related merge requests found
...@@ -78,6 +78,12 @@ object DefOps { ...@@ -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 */ /** Returns true for strict superpackage */
def isSuperPackageOf(p1:PackageRef, p2 : PackageRef) = def isSuperPackageOf(p1:PackageRef, p2 : PackageRef) =
(p2.length > p1.length) && (p2.length > p1.length) &&
......
...@@ -5,10 +5,11 @@ package termination ...@@ -5,10 +5,11 @@ package termination
import purescala.Definitions._ import purescala.Definitions._
import purescala.Trees._ import purescala.Trees._
import purescala.DefOps._
abstract class TerminationChecker(val context: LeonContext, val program: Program) extends LeonComponent { abstract class TerminationChecker(val context: LeonContext, val program: Program) extends LeonComponent {
val functions = program.definedFunctions.toSet val functions = visibleFunDefsFromMain(program)
def initialize() : Unit def initialize() : Unit
def terminates(funDef : FunDef) : TerminationGuarantee def terminates(funDef : FunDef) : TerminationGuarantee
......
...@@ -4,6 +4,7 @@ package leon ...@@ -4,6 +4,7 @@ package leon
package termination package termination
import purescala.Definitions._ import purescala.Definitions._
import purescala.DefOps._
object TerminationPhase extends LeonPhase[Program,TerminationReport] { object TerminationPhase extends LeonPhase[Program,TerminationReport] {
val name = "Termination" val name = "Termination"
...@@ -17,7 +18,7 @@ object TerminationPhase extends LeonPhase[Program,TerminationReport] { ...@@ -17,7 +18,7 @@ object TerminationPhase extends LeonPhase[Program,TerminationReport] {
tc.initialize() 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)) (funDef -> tc.terminates(funDef))
} }
val endTime = System.currentTimeMillis val endTime = System.currentTimeMillis
......
...@@ -38,11 +38,7 @@ class EvaluatorsTests extends leon.test.LeonTestSuite { ...@@ -38,11 +38,7 @@ class EvaluatorsTests extends leon.test.LeonTestSuite {
} }
private def mkCall(name : String, args : Expr*)(implicit p : Program) = { private def mkCall(name : String, args : Expr*)(implicit p : Program) = {
p.definedFunctions.foreach { fd => val fn = s"Program.$name"
println(fullName(fd))
}
val fn = s"<empty>.Program.$name"
searchByFullName(fn, p) match { searchByFullName(fn, p) match {
case Some(fd: FunDef) => case Some(fd: FunDef) =>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment