From 454b6dc4208c604620798af5f18a3d54b337b234 Mon Sep 17 00:00:00 2001
From: Manos Koukoutos <emmanouil.koukoutos@epfl.ch>
Date: Wed, 10 Aug 2016 12:01:28 +0200
Subject: [PATCH] Fix functionsAvailable, add enum solver

---
 src/main/scala/inox/ast/Definitions.scala         |  4 ++--
 src/main/scala/inox/grammars/utils/Helpers.scala  |  6 +-----
 .../scala/inox/solvers/EnumerationSolver.scala    |  1 -
 src/main/scala/inox/solvers/SolverFactory.scala   | 15 ++++++++++++++-
 4 files changed, 17 insertions(+), 9 deletions(-)

diff --git a/src/main/scala/inox/ast/Definitions.scala b/src/main/scala/inox/ast/Definitions.scala
index 69f9b2269..fda6fb737 100644
--- a/src/main/scala/inox/ast/Definitions.scala
+++ b/src/main/scala/inox/ast/Definitions.scala
@@ -93,8 +93,8 @@ trait Definitions { self: Trees =>
         with Constructors
         with Paths { self0: Symbols =>
 
-    protected[ast] val classes: Map[Identifier, ClassDef]
-    protected[ast] val functions: Map[Identifier, FunDef]
+    val classes: Map[Identifier, ClassDef]
+    val functions: Map[Identifier, FunDef]
 
     private[ast] val trees: self.type = self
     protected val symbols: this.type = this
diff --git a/src/main/scala/inox/grammars/utils/Helpers.scala b/src/main/scala/inox/grammars/utils/Helpers.scala
index 2cc098131..24a689970 100644
--- a/src/main/scala/inox/grammars/utils/Helpers.scala
+++ b/src/main/scala/inox/grammars/utils/Helpers.scala
@@ -103,9 +103,5 @@ trait Helpers { self: GrammarsUniverse =>
    *  - all functions in main units
    *  - all functions imported, or methods of classes imported
    */
-  def functionsAvailable(p: Program): Set[FunDef]// = {
-  //  visibleFunDefsFromMain(p)
-  //}
-
-
+  def functionsAvailable(p: Program): Set[p.trees.FunDef] = p.symbols.functions.values.toSet
 }
diff --git a/src/main/scala/inox/solvers/EnumerationSolver.scala b/src/main/scala/inox/solvers/EnumerationSolver.scala
index 1863547a8..51a7b7db0 100644
--- a/src/main/scala/inox/solvers/EnumerationSolver.scala
+++ b/src/main/scala/inox/solvers/EnumerationSolver.scala
@@ -59,7 +59,6 @@ trait EnumerationSolver extends Solver { self =>
         val evaluator: DeterministicEvaluator { val program: self.program.type } = self.evaluator
         val grammar: grammars.ExpressionGrammar = grammars.ValueGrammar
         val program: self.program.type = self.program
-        def functionsAvailable(p: Program): Set[FunDef] = Set()
       })
 
       if (interrupted) {
diff --git a/src/main/scala/inox/solvers/SolverFactory.scala b/src/main/scala/inox/solvers/SolverFactory.scala
index 392898a05..1d6b48f41 100644
--- a/src/main/scala/inox/solvers/SolverFactory.scala
+++ b/src/main/scala/inox/solvers/SolverFactory.scala
@@ -3,6 +3,8 @@
 package inox
 package solvers
 
+import inox.grammars.GrammarsUniverse
+
 trait SolverFactory {
   val program: Program
 
@@ -38,7 +40,8 @@ object SolverFactory {
     "nativez3" -> "Native Z3 with z3-templates for unrolling (default)",
     "unrollz3" -> "Native Z3 with leon-templates for unrolling",
     "smt-cvc4" -> "CVC4 through SMT-LIB",
-    "smt-z3"   -> "Z3 through SMT-LIB"
+    "smt-z3"   -> "Z3 through SMT-LIB",
+    "enum"     -> "Enumeration-based counter-example finder"
   )
 
   def getFromName(name: String)
@@ -88,6 +91,16 @@ object SolverFactory {
       } with smtlib.Z3Solver
     })
 
+    case "enum" => create(p)(name, () => new {
+      val program: p.type = p
+      val options = opts
+    } with EnumerationSolver with TimeoutSolver {
+      val evaluator = ev
+      val grammars: GrammarsUniverse {val program: p.type} = new GrammarsUniverse {
+        val program: p.type = p
+      }
+    })
+
     case _ => throw FatalError("Unknown solver: " + name)
   }
 
-- 
GitLab