From 6fc6e8c3e8ee92578bd51b15054e5061f1e548c7 Mon Sep 17 00:00:00 2001
From: Manos Koukoutos <emmanouil.koukoutos@epfl.ch>
Date: Wed, 12 Oct 2016 15:01:36 +0200
Subject: [PATCH] Identifier is not a dep. type. Small changes to
 CollectorWithPC

---
 src/main/scala/inox/ast/Trees.scala                        | 4 ----
 src/main/scala/inox/datagen/ModelEnumerator.scala          | 1 +
 src/main/scala/inox/datagen/SolverDataGen.scala            | 1 +
 src/main/scala/inox/evaluators/RecursiveEvaluator.scala    | 1 +
 src/main/scala/inox/grammars/ClosureGrammars.scala         | 2 ++
 src/main/scala/inox/grammars/ExpressionGrammars.scala      | 1 +
 src/main/scala/inox/grammars/ValueGrammars.scala           | 2 ++
 src/main/scala/inox/grammars/utils/Helpers.scala           | 2 ++
 src/main/scala/inox/package.scala                          | 2 ++
 src/main/scala/inox/solvers/ADTManagers.scala              | 1 +
 src/main/scala/inox/solvers/smtlib/CVC4Target.scala        | 1 +
 src/main/scala/inox/solvers/smtlib/SMTLIBTarget.scala      | 1 +
 src/main/scala/inox/solvers/smtlib/Z3Target.scala          | 1 +
 src/main/scala/inox/solvers/theories/BagEncoder.scala      | 2 ++
 src/main/scala/inox/solvers/theories/StringEncoder.scala   | 1 +
 .../scala/inox/solvers/unrolling/DatatypeTemplates.scala   | 1 +
 .../scala/inox/solvers/unrolling/FunctionTemplates.scala   | 3 +--
 .../scala/inox/solvers/unrolling/LambdaTemplates.scala     | 2 +-
 .../inox/solvers/unrolling/QuantificationTemplates.scala   | 1 +
 .../scala/inox/solvers/unrolling/TemplateGenerator.scala   | 1 +
 src/main/scala/inox/solvers/unrolling/Templates.scala      | 1 +
 .../scala/inox/solvers/unrolling/UnrollingSolver.scala     | 1 +
 src/main/scala/inox/solvers/z3/AbstractZ3Solver.scala      | 1 +
 src/main/scala/inox/tip/Parser.scala                       | 5 +++--
 src/main/scala/inox/tip/Printer.scala                      | 3 ++-
 src/main/scala/inox/transformers/CollectorWithPC.scala     | 7 +++++--
 src/main/scala/inox/transformers/ScopeSimplifier.scala     | 2 ++
 27 files changed, 39 insertions(+), 12 deletions(-)

diff --git a/src/main/scala/inox/ast/Trees.scala b/src/main/scala/inox/ast/Trees.scala
index 57a9bdc17..272ff38c5 100644
--- a/src/main/scala/inox/ast/Trees.scala
+++ b/src/main/scala/inox/ast/Trees.scala
@@ -3,7 +3,6 @@
 package inox
 package ast
 
-import utils._
 import scala.language.implicitConversions
 
 case object DebugSectionTrees extends DebugSection("trees")
@@ -16,9 +15,6 @@ trait Trees
      with Printers
      with TreeOps {
 
-  type Identifier = ast.Identifier
-  val FreshIdentifier = ast.FreshIdentifier
-
   class Unsupported(t: Tree, msg: String)(implicit ctx: Context)
     extends Exception(s"${t.asString(PrinterOptions.fromContext(ctx))}@${t.getPos} $msg")
 
diff --git a/src/main/scala/inox/datagen/ModelEnumerator.scala b/src/main/scala/inox/datagen/ModelEnumerator.scala
index 6cfbc50d8..060168a4a 100644
--- a/src/main/scala/inox/datagen/ModelEnumerator.scala
+++ b/src/main/scala/inox/datagen/ModelEnumerator.scala
@@ -6,6 +6,7 @@ package datagen
 import evaluators._
 import solvers._
 import utils._
+import ast.FreshIdentifier
 
 trait ModelEnumerator {
   val program: Program
diff --git a/src/main/scala/inox/datagen/SolverDataGen.scala b/src/main/scala/inox/datagen/SolverDataGen.scala
index 257674268..432635247 100644
--- a/src/main/scala/inox/datagen/SolverDataGen.scala
+++ b/src/main/scala/inox/datagen/SolverDataGen.scala
@@ -6,6 +6,7 @@ package datagen
 import evaluators._
 import solvers._
 import utils._
+import ast.{FreshIdentifier, Identifier}
 
 trait SolverDataGen extends DataGenerator { self =>
   import program._
diff --git a/src/main/scala/inox/evaluators/RecursiveEvaluator.scala b/src/main/scala/inox/evaluators/RecursiveEvaluator.scala
index d3b0e2da2..4af6b1d73 100644
--- a/src/main/scala/inox/evaluators/RecursiveEvaluator.scala
+++ b/src/main/scala/inox/evaluators/RecursiveEvaluator.scala
@@ -4,6 +4,7 @@ package inox
 package evaluators
 
 import scala.collection.BitSet
+import ast.FreshIdentifier
 
 trait RecursiveEvaluator
   extends ContextualEvaluator
diff --git a/src/main/scala/inox/grammars/ClosureGrammars.scala b/src/main/scala/inox/grammars/ClosureGrammars.scala
index cbf304ab5..2e9ad0ad5 100644
--- a/src/main/scala/inox/grammars/ClosureGrammars.scala
+++ b/src/main/scala/inox/grammars/ClosureGrammars.scala
@@ -3,6 +3,8 @@
 package inox
 package grammars
 
+import ast.FreshIdentifier
+
 trait ClosureGrammars { self: GrammarsUniverse =>
   import program._
   import trees._
diff --git a/src/main/scala/inox/grammars/ExpressionGrammars.scala b/src/main/scala/inox/grammars/ExpressionGrammars.scala
index 0bc1bf875..85b15fc40 100644
--- a/src/main/scala/inox/grammars/ExpressionGrammars.scala
+++ b/src/main/scala/inox/grammars/ExpressionGrammars.scala
@@ -3,6 +3,7 @@
 package inox
 package grammars
 
+import ast.FreshIdentifier
 import scala.collection.mutable.{HashMap => MutableMap}
 
 /** Represents a context-free grammar of expressions */
diff --git a/src/main/scala/inox/grammars/ValueGrammars.scala b/src/main/scala/inox/grammars/ValueGrammars.scala
index cf3f60cc8..7e09acb64 100644
--- a/src/main/scala/inox/grammars/ValueGrammars.scala
+++ b/src/main/scala/inox/grammars/ValueGrammars.scala
@@ -3,6 +3,8 @@
 package inox
 package grammars
 
+import ast.FreshIdentifier
+
 trait ValueGrammars { self: GrammarsUniverse =>
   import program._
   import trees._
diff --git a/src/main/scala/inox/grammars/utils/Helpers.scala b/src/main/scala/inox/grammars/utils/Helpers.scala
index 08e91da1a..2b17c5680 100644
--- a/src/main/scala/inox/grammars/utils/Helpers.scala
+++ b/src/main/scala/inox/grammars/utils/Helpers.scala
@@ -4,6 +4,8 @@ package inox
 package grammars
 package utils
 
+import ast.{Identifier, FreshIdentifier}
+
 trait Helpers { self: GrammarsUniverse =>
   import program._
   import trees.{ Minus => EMinus, Plus => EPlus, Variable => EVariable, _ }
diff --git a/src/main/scala/inox/package.scala b/src/main/scala/inox/package.scala
index 14426583e..6b9220f40 100644
--- a/src/main/scala/inox/package.scala
+++ b/src/main/scala/inox/package.scala
@@ -1,5 +1,7 @@
 /* Copyright 2009-2016 EPFL, Lausanne */
 
+import inox.ast.Identifier
+
 /** Core package of the Inox solving interface
   *
   * == Structure ==
diff --git a/src/main/scala/inox/solvers/ADTManagers.scala b/src/main/scala/inox/solvers/ADTManagers.scala
index 22d8617d8..47e401349 100644
--- a/src/main/scala/inox/solvers/ADTManagers.scala
+++ b/src/main/scala/inox/solvers/ADTManagers.scala
@@ -4,6 +4,7 @@ package inox
 package solvers
 
 import utils._
+import ast.{Identifier, FreshIdentifier}
 
 trait ADTManagers {
   val program: Program
diff --git a/src/main/scala/inox/solvers/smtlib/CVC4Target.scala b/src/main/scala/inox/solvers/smtlib/CVC4Target.scala
index b28755ba2..00c319d35 100644
--- a/src/main/scala/inox/solvers/smtlib/CVC4Target.scala
+++ b/src/main/scala/inox/solvers/smtlib/CVC4Target.scala
@@ -6,6 +6,7 @@ package smtlib
 
 import org.apache.commons.lang3.StringEscapeUtils
 
+import ast.{Identifier, FreshIdentifier}
 import _root_.smtlib.parser.Terms.{Identifier => SMTIdentifier, _}
 import _root_.smtlib.parser.Commands._
 import _root_.smtlib.interpreters.CVC4Interpreter
diff --git a/src/main/scala/inox/solvers/smtlib/SMTLIBTarget.scala b/src/main/scala/inox/solvers/smtlib/SMTLIBTarget.scala
index 890761d96..598264d90 100644
--- a/src/main/scala/inox/solvers/smtlib/SMTLIBTarget.scala
+++ b/src/main/scala/inox/solvers/smtlib/SMTLIBTarget.scala
@@ -4,6 +4,7 @@ package inox
 package solvers
 package smtlib
 
+import ast.{Identifier, FreshIdentifier}
 import utils._
 
 import _root_.smtlib.common._
diff --git a/src/main/scala/inox/solvers/smtlib/Z3Target.scala b/src/main/scala/inox/solvers/smtlib/Z3Target.scala
index e803c54a3..9b9825eba 100644
--- a/src/main/scala/inox/solvers/smtlib/Z3Target.scala
+++ b/src/main/scala/inox/solvers/smtlib/Z3Target.scala
@@ -4,6 +4,7 @@ package inox
 package solvers
 package smtlib
 
+import ast.{Identifier, FreshIdentifier}
 import _root_.smtlib.parser.Terms.{Identifier => SMTIdentifier, Let => SMTLet, _}
 import _root_.smtlib.parser.Commands.{FunDef => SMTFunDef, _}
 import _root_.smtlib.interpreters.Z3Interpreter
diff --git a/src/main/scala/inox/solvers/theories/BagEncoder.scala b/src/main/scala/inox/solvers/theories/BagEncoder.scala
index b91f3e52d..4cd485c72 100644
--- a/src/main/scala/inox/solvers/theories/BagEncoder.scala
+++ b/src/main/scala/inox/solvers/theories/BagEncoder.scala
@@ -4,6 +4,8 @@ package inox
 package solvers
 package theories
 
+import ast.{Identifier, FreshIdentifier}
+
 trait BagEncoder extends TheoryEncoder {
   import trees._
   import trees.dsl._
diff --git a/src/main/scala/inox/solvers/theories/StringEncoder.scala b/src/main/scala/inox/solvers/theories/StringEncoder.scala
index b37b9aaef..b572373e4 100644
--- a/src/main/scala/inox/solvers/theories/StringEncoder.scala
+++ b/src/main/scala/inox/solvers/theories/StringEncoder.scala
@@ -4,6 +4,7 @@ package inox
 package solvers
 package theories
 
+import ast.{Identifier, FreshIdentifier}
 import utils._
 
 trait StringEncoder extends TheoryEncoder {
diff --git a/src/main/scala/inox/solvers/unrolling/DatatypeTemplates.scala b/src/main/scala/inox/solvers/unrolling/DatatypeTemplates.scala
index 9a2f915e3..795a7f799 100644
--- a/src/main/scala/inox/solvers/unrolling/DatatypeTemplates.scala
+++ b/src/main/scala/inox/solvers/unrolling/DatatypeTemplates.scala
@@ -4,6 +4,7 @@ package inox
 package solvers
 package unrolling
 
+import ast.{Identifier, FreshIdentifier}
 import utils._
 
 import scala.collection.mutable.{Map => MutableMap, Set => MutableSet}
diff --git a/src/main/scala/inox/solvers/unrolling/FunctionTemplates.scala b/src/main/scala/inox/solvers/unrolling/FunctionTemplates.scala
index 1b06f3de2..84e5a31ca 100644
--- a/src/main/scala/inox/solvers/unrolling/FunctionTemplates.scala
+++ b/src/main/scala/inox/solvers/unrolling/FunctionTemplates.scala
@@ -5,8 +5,7 @@ package solvers
 package unrolling
 
 import utils._
-
-import scala.collection.generic.CanBuildFrom
+import ast.FreshIdentifier
 
 trait FunctionTemplates { self: Templates =>
   import program._
diff --git a/src/main/scala/inox/solvers/unrolling/LambdaTemplates.scala b/src/main/scala/inox/solvers/unrolling/LambdaTemplates.scala
index 1194bcea1..ebe84c69c 100644
--- a/src/main/scala/inox/solvers/unrolling/LambdaTemplates.scala
+++ b/src/main/scala/inox/solvers/unrolling/LambdaTemplates.scala
@@ -5,7 +5,7 @@ package solvers
 package unrolling
 
 import utils._
-
+import ast.{Identifier, FreshIdentifier}
 import scala.collection.mutable.{Map => MutableMap, Set => MutableSet}
 
 trait LambdaTemplates { self: Templates =>
diff --git a/src/main/scala/inox/solvers/unrolling/QuantificationTemplates.scala b/src/main/scala/inox/solvers/unrolling/QuantificationTemplates.scala
index 4cd8f09a2..33f7f2fe5 100644
--- a/src/main/scala/inox/solvers/unrolling/QuantificationTemplates.scala
+++ b/src/main/scala/inox/solvers/unrolling/QuantificationTemplates.scala
@@ -4,6 +4,7 @@ package inox
 package solvers
 package unrolling
 
+import ast.{Identifier, FreshIdentifier}
 import utils._
 import evaluators._
 
diff --git a/src/main/scala/inox/solvers/unrolling/TemplateGenerator.scala b/src/main/scala/inox/solvers/unrolling/TemplateGenerator.scala
index 62c214b69..255c25bd1 100644
--- a/src/main/scala/inox/solvers/unrolling/TemplateGenerator.scala
+++ b/src/main/scala/inox/solvers/unrolling/TemplateGenerator.scala
@@ -4,6 +4,7 @@ package inox
 package solvers
 package unrolling
 
+import ast.FreshIdentifier
 import utils._
 import scala.collection.mutable.{Map => MutableMap}
 
diff --git a/src/main/scala/inox/solvers/unrolling/Templates.scala b/src/main/scala/inox/solvers/unrolling/Templates.scala
index ddf72be38..9bf18c367 100644
--- a/src/main/scala/inox/solvers/unrolling/Templates.scala
+++ b/src/main/scala/inox/solvers/unrolling/Templates.scala
@@ -4,6 +4,7 @@ package inox
 package solvers
 package unrolling
 
+import ast.FreshIdentifier
 import utils._
 
 import scala.collection.generic.CanBuildFrom
diff --git a/src/main/scala/inox/solvers/unrolling/UnrollingSolver.scala b/src/main/scala/inox/solvers/unrolling/UnrollingSolver.scala
index 57daddc41..d1601e651 100644
--- a/src/main/scala/inox/solvers/unrolling/UnrollingSolver.scala
+++ b/src/main/scala/inox/solvers/unrolling/UnrollingSolver.scala
@@ -4,6 +4,7 @@ package inox
 package solvers
 package unrolling
 
+import ast.FreshIdentifier
 import utils._
 
 import theories._
diff --git a/src/main/scala/inox/solvers/z3/AbstractZ3Solver.scala b/src/main/scala/inox/solvers/z3/AbstractZ3Solver.scala
index a2fc56cf3..461f33d40 100644
--- a/src/main/scala/inox/solvers/z3/AbstractZ3Solver.scala
+++ b/src/main/scala/inox/solvers/z3/AbstractZ3Solver.scala
@@ -3,6 +3,7 @@
 package inox
 package solvers.z3
 
+import ast.FreshIdentifier
 import utils._
 
 import z3.scala.{Z3Solver => ScalaZ3Solver, _}
diff --git a/src/main/scala/inox/tip/Parser.scala b/src/main/scala/inox/tip/Parser.scala
index 51024b61a..bf1e99c77 100644
--- a/src/main/scala/inox/tip/Parser.scala
+++ b/src/main/scala/inox/tip/Parser.scala
@@ -3,6 +3,9 @@
 package inox
 package tip
 
+import ast.{Identifier, FreshIdentifier}
+import utils._
+
 import smtlib.lexer._
 import smtlib.parser.Commands.{FunDef => SMTFunDef, _}
 import smtlib.parser.Terms.{Let => SMTLet, Forall => SMTForall, Identifier => SMTIdentifier, _}
@@ -15,8 +18,6 @@ import smtlib.extensions.tip.Commands._
 import scala.collection.BitSet
 import java.io.{Reader, File, BufferedReader, FileReader}
 
-import utils._
-
 import scala.language.implicitConversions
 
 class MissformedTIPException(reason: String, pos: Position)
diff --git a/src/main/scala/inox/tip/Printer.scala b/src/main/scala/inox/tip/Printer.scala
index aff75f944..324c3c880 100644
--- a/src/main/scala/inox/tip/Printer.scala
+++ b/src/main/scala/inox/tip/Printer.scala
@@ -3,7 +3,7 @@
 package inox
 package tip
 
-import java.io.{File, Writer}
+import ast.Identifier
 
 import smtlib.parser.Terms.{Forall => SMTForall, Identifier => SMTIdentifier, _}
 import smtlib.parser.Commands.{Constructor => SMTConstructor, _}
@@ -11,6 +11,7 @@ import smtlib.extensions.tip.Terms.{Lambda => SMTLambda, Application => SMTAppli
 import smtlib.extensions.tip.Commands._
 import smtlib.Interpreter
 
+import java.io.Writer
 import scala.collection.mutable.{Map => MutableMap}
 
 class Printer(val program: InoxProgram, writer: Writer) extends solvers.smtlib.SMTLIBTarget {
diff --git a/src/main/scala/inox/transformers/CollectorWithPC.scala b/src/main/scala/inox/transformers/CollectorWithPC.scala
index 11f5c26bc..0681991d3 100644
--- a/src/main/scala/inox/transformers/CollectorWithPC.scala
+++ b/src/main/scala/inox/transformers/CollectorWithPC.scala
@@ -7,7 +7,7 @@ package transformers
 trait CollectorWithPC extends TransformerWithPC with Collector
 
 object CollectorWithPC {
-  def apply[T](p: Program)(f: PartialFunction[(p.trees.Expr, p.symbols.Path), T]) = {
+  def apply[T](p: Program)(f: PartialFunction[(p.trees.Expr, p.symbols.Path), T]): CollectorWithPC { type R = T; val program: p.type } = {
     new CollectorWithPC {
 
       type R = T
@@ -17,10 +17,13 @@ object CollectorWithPC {
       import trees._
       val initEnv: Path = Path.empty
 
+      private val fLifted = f.lift
+
       protected def step(e: Expr, env: Path): List[(T, Path)] = {
-        f.lift((e, env)).map((_, env)).toList
+        fLifted((e, env)).map((_, env)).toList
       }
 
     }
   }
+
 }
diff --git a/src/main/scala/inox/transformers/ScopeSimplifier.scala b/src/main/scala/inox/transformers/ScopeSimplifier.scala
index a74653eea..183623266 100644
--- a/src/main/scala/inox/transformers/ScopeSimplifier.scala
+++ b/src/main/scala/inox/transformers/ScopeSimplifier.scala
@@ -3,6 +3,8 @@
 package inox
 package transformers
 
+import ast.{Identifier, FreshIdentifier}
+
 /** Simplifies variable ids in scope */
 trait ScopeSimplifier extends Transformer {
   import trees._
-- 
GitLab