From c8002a7ba9366dd047ed5da60bd28889a068fef0 Mon Sep 17 00:00:00 2001
From: Manos Koukoutos <emmanouil.koukoutos@epfl.ch>
Date: Mon, 8 Aug 2016 15:45:27 +0200
Subject: [PATCH] Remove implicit contexts from grammars

---
 src/main/scala/inox/grammars/Aspects.scala                  | 2 +-
 src/main/scala/inox/grammars/BaseGrammars.scala             | 2 +-
 src/main/scala/inox/grammars/ClosureGrammars.scala          | 2 +-
 src/main/scala/inox/grammars/ConstantGrammars.scala         | 2 +-
 src/main/scala/inox/grammars/ElementaryGrammars.scala       | 6 +++---
 src/main/scala/inox/grammars/EqualityGrammars.scala         | 2 +-
 src/main/scala/inox/grammars/ExpressionGrammars.scala       | 6 +++---
 src/main/scala/inox/grammars/FunctionCallsGrammars.scala    | 2 +-
 src/main/scala/inox/grammars/SimpleExpressionGrammars.scala | 6 +++---
 src/main/scala/inox/grammars/ValueGrammars.scala            | 2 +-
 .../scala/inox/grammars/aspects/DepthBoundAspects.scala     | 2 +-
 .../scala/inox/grammars/aspects/ExtraTerminalsAspects.scala | 2 +-
 .../scala/inox/grammars/aspects/PersistentAspects.scala     | 2 +-
 src/main/scala/inox/grammars/aspects/SimilarToAspects.scala | 2 +-
 src/main/scala/inox/grammars/aspects/SizeAspects.scala      | 2 +-
 src/main/scala/inox/grammars/aspects/TaggedAspects.scala    | 2 +-
 .../scala/inox/grammars/aspects/TypeDepthBoundAspects.scala | 2 +-
 17 files changed, 23 insertions(+), 23 deletions(-)

diff --git a/src/main/scala/inox/grammars/Aspects.scala b/src/main/scala/inox/grammars/Aspects.scala
index 027e423f5..7ef23f7b1 100644
--- a/src/main/scala/inox/grammars/Aspects.scala
+++ b/src/main/scala/inox/grammars/Aspects.scala
@@ -27,6 +27,6 @@ trait Aspects { self: GrammarsUniverse =>
   trait Aspect extends Printable {
     final type Production = ProductionRule[Label, Expr]
 
-    def applyTo(l: Label, ps: Seq[Production])(implicit ctx: InoxContext): Seq[Production]
+    def applyTo(l: Label, ps: Seq[Production]): Seq[Production]
   }
 }
diff --git a/src/main/scala/inox/grammars/BaseGrammars.scala b/src/main/scala/inox/grammars/BaseGrammars.scala
index f1d4559b6..b5800c333 100644
--- a/src/main/scala/inox/grammars/BaseGrammars.scala
+++ b/src/main/scala/inox/grammars/BaseGrammars.scala
@@ -15,7 +15,7 @@ trait BaseGrammars { self: GrammarsUniverse =>
     */
   case object BaseGrammar extends SimpleExpressionGrammar {
 
-    def computeProductions(t: Type)(implicit ctx: InoxContext): Seq[Prod] = t match {
+    def computeProductions(t: Type): Seq[Prod] = t match {
       case BooleanType =>
         List(
           terminal(BooleanLiteral(false), BooleanC),
diff --git a/src/main/scala/inox/grammars/ClosureGrammars.scala b/src/main/scala/inox/grammars/ClosureGrammars.scala
index 5695a724f..cbf304ab5 100644
--- a/src/main/scala/inox/grammars/ClosureGrammars.scala
+++ b/src/main/scala/inox/grammars/ClosureGrammars.scala
@@ -9,7 +9,7 @@ trait ClosureGrammars { self: GrammarsUniverse =>
   import symbols._
 
   case object Closures extends ExpressionGrammar {
-    def computeProductions(lab: Label)(implicit ctx: InoxContext): Seq[ProductionRule[Label, Expr]] = lab.getType match {
+    def computeProductions(lab: Label): Seq[ProductionRule[Label, Expr]] = lab.getType match {
       case FunctionType(argsTpes, ret) =>
         val args = argsTpes.zipWithIndex.map { case (tpe, i) =>
           ValDef(FreshIdentifier("a"+i), tpe)
diff --git a/src/main/scala/inox/grammars/ConstantGrammars.scala b/src/main/scala/inox/grammars/ConstantGrammars.scala
index 88aa7d5b0..f4b33ade7 100644
--- a/src/main/scala/inox/grammars/ConstantGrammars.scala
+++ b/src/main/scala/inox/grammars/ConstantGrammars.scala
@@ -22,7 +22,7 @@ trait ConstantGrammars { self: GrammarsUniverse =>
       BooleanLiteral(false)
     )
 
-    def computeProductions(t: Type)(implicit ctx: InoxContext): Seq[Prod] = {
+    def computeProductions(t: Type): Seq[Prod] = {
       val literals = collect[Expr]{
         case IsTyped(l:Literal[_], `t`) => Set(l)
         case _ => Set()
diff --git a/src/main/scala/inox/grammars/ElementaryGrammars.scala b/src/main/scala/inox/grammars/ElementaryGrammars.scala
index d38b2956a..520d29c6e 100644
--- a/src/main/scala/inox/grammars/ElementaryGrammars.scala
+++ b/src/main/scala/inox/grammars/ElementaryGrammars.scala
@@ -9,7 +9,7 @@ trait ElementaryGrammars { self: GrammarsUniverse =>
 
   /** Generates one production rule for each expression in a sequence that has compatible type */
   case class OneOf(inputs: Seq[Expr]) extends SimpleExpressionGrammar {
-    def computeProductions(lab: Type)(implicit ctx: InoxContext): Seq[Prod] = {
+    def computeProductions(lab: Type): Seq[Prod] = {
       inputs.collect {
         case i if isSubtypeOf(i.getType, lab.getType) =>
           terminal(i)
@@ -23,13 +23,13 @@ trait ElementaryGrammars { self: GrammarsUniverse =>
       case g => Seq(g)
     }
 
-    def computeProductions(label: Label)(implicit ctx: InoxContext): Seq[ProductionRule[Label, Expr]] =
+    def computeProductions(label: Label): Seq[ProductionRule[Label, Expr]] =
       subGrammars.flatMap(_.computeProductions(label))
   }
 
   /** The empty expression grammar */
   case class Empty() extends ExpressionGrammar {
-    def computeProductions(l: Label)(implicit ctx: InoxContext) = Nil
+    def computeProductions(l: Label) = Nil
   }
 
 }
diff --git a/src/main/scala/inox/grammars/EqualityGrammars.scala b/src/main/scala/inox/grammars/EqualityGrammars.scala
index 45a031405..e5a7bc729 100644
--- a/src/main/scala/inox/grammars/EqualityGrammars.scala
+++ b/src/main/scala/inox/grammars/EqualityGrammars.scala
@@ -13,7 +13,7 @@ trait EqualityGrammars { self: GrammarsUniverse =>
     * @param types The set of types for which equalities will be generated
     */
   case class EqualityGrammar(types: Set[Type]) extends SimpleExpressionGrammar {
-    def computeProductions(t: Type)(implicit ctx: InoxContext): Seq[Prod] = t match {
+    def computeProductions(t: Type): Seq[Prod] = t match {
       case BooleanType =>
         types.toList map { tp =>
           nonTerminal(List(tp, tp), { case Seq(a, b) => equality(a, b) }, Equals)
diff --git a/src/main/scala/inox/grammars/ExpressionGrammars.scala b/src/main/scala/inox/grammars/ExpressionGrammars.scala
index 908a662a1..36c44cd61 100644
--- a/src/main/scala/inox/grammars/ExpressionGrammars.scala
+++ b/src/main/scala/inox/grammars/ExpressionGrammars.scala
@@ -18,7 +18,7 @@ trait ExpressionGrammars { self: GrammarsUniverse =>
       * @param lab The nonterminal for which production rules will be generated
       * @note This is the cached version of [[computeProductions]]. Clients should use this method.
       */
-    final def getProductions(lab: Label)(implicit ctx: InoxContext) = {
+    final def getProductions(lab: Label) = {
       cache.getOrElse(lab, {
         val res = applyAspects(lab, computeProductions(lab))
         cache += lab -> res
@@ -31,7 +31,7 @@ trait ExpressionGrammars { self: GrammarsUniverse =>
       * @param lab The nonterminal for which production rules will be generated
       * @note Clients should use the cached version, [[getProductions]] instead
       */
-    def computeProductions(lab: Label)(implicit ctx: InoxContext): Seq[ProductionRule[Label, Expr]]
+    def computeProductions(lab: Label): Seq[ProductionRule[Label, Expr]]
 
     protected def applyAspects(lab: Label, ps: Seq[ProductionRule[Label, Expr]])(implicit ctx: InoxContext) = {
       lab.aspects.foldLeft(ps) {
@@ -44,7 +44,7 @@ trait ExpressionGrammars { self: GrammarsUniverse =>
     //  Union(Seq(this, that))
     //}
 
-    final def printProductions(printer: String => Unit)(implicit ctx: InoxContext) {
+    final def printProductions(printer: String => Unit) {
       def sorter(lp1: (Label, Seq[ProductionRule[Label, Expr]]), lp2: (Label, Seq[ProductionRule[Label, Expr]])): Boolean = {
         val l1 = lp1._1
         val l2 = lp2._1
diff --git a/src/main/scala/inox/grammars/FunctionCallsGrammars.scala b/src/main/scala/inox/grammars/FunctionCallsGrammars.scala
index 52b2de1d1..b798e360a 100644
--- a/src/main/scala/inox/grammars/FunctionCallsGrammars.scala
+++ b/src/main/scala/inox/grammars/FunctionCallsGrammars.scala
@@ -16,7 +16,7 @@ trait FunctionCallsGrammars extends utils.Helpers { self: GrammarsUniverse =>
     * @param exclude An additional set of functions for which no calls will be generated
     */
   case class FunctionCalls(prog: Program, currentFunction: FunDef, types: Seq[Type], exclude: Set[FunDef]) extends SimpleExpressionGrammar {
-    def computeProductions(t: Type)(implicit ctx: InoxContext): Seq[Prod] = {
+    def computeProductions(t: Type): Seq[Prod] = {
 
       def getCandidates(fd: FunDef): Seq[TypedFunDef] = {
         // Prevents recursive calls
diff --git a/src/main/scala/inox/grammars/SimpleExpressionGrammars.scala b/src/main/scala/inox/grammars/SimpleExpressionGrammars.scala
index b571a3254..6282c5254 100644
--- a/src/main/scala/inox/grammars/SimpleExpressionGrammars.scala
+++ b/src/main/scala/inox/grammars/SimpleExpressionGrammars.scala
@@ -25,20 +25,20 @@ trait SimpleExpressionGrammars { self: GrammarsUniverse =>
 
     def filter(f: Prod => Boolean) = {
       new SimpleExpressionGrammar {
-        def computeProductions(lab: Type)(implicit ctx: InoxContext) = {
+        def computeProductions(lab: Type) = {
           SimpleExpressionGrammar.this.computeProductions(lab).filter(f)
         }
       }
     }
 
     // Finalize this to depend only on the type of the label
-    final def computeProductions(lab: Label)(implicit ctx: InoxContext): Seq[ProductionRule[Label, Expr]] = {
+    final def computeProductions(lab: Label): Seq[ProductionRule[Label, Expr]] = {
       computeProductions(lab.getType).map { p =>
         ProductionRule(p.subTrees.map(Label(_)), p.builder, p.tag, p.cost)
       }
     }
 
     /** Version of [[ExpressionGrammar.computeProductions]] which depends only a [[Type]] */
-    def computeProductions(tpe: Type)(implicit ctx: InoxContext): Seq[Prod]
+    def computeProductions(tpe: Type): Seq[Prod]
   }
 }
diff --git a/src/main/scala/inox/grammars/ValueGrammars.scala b/src/main/scala/inox/grammars/ValueGrammars.scala
index ea38e87b6..81055c3ba 100644
--- a/src/main/scala/inox/grammars/ValueGrammars.scala
+++ b/src/main/scala/inox/grammars/ValueGrammars.scala
@@ -10,7 +10,7 @@ trait ValueGrammars { self: GrammarsUniverse =>
 
   /** A grammar of values (ground terms) */
   case object ValueGrammar extends SimpleExpressionGrammar {
-    def computeProductions(t: Type)(implicit ctx: InoxContext): Seq[Prod] = t match {
+    def computeProductions(t: Type): Seq[Prod] = t match {
       case BooleanType =>
         List(
           terminal(BooleanLiteral(true), One),
diff --git a/src/main/scala/inox/grammars/aspects/DepthBoundAspects.scala b/src/main/scala/inox/grammars/aspects/DepthBoundAspects.scala
index 82c35c28c..3f617782a 100644
--- a/src/main/scala/inox/grammars/aspects/DepthBoundAspects.scala
+++ b/src/main/scala/inox/grammars/aspects/DepthBoundAspects.scala
@@ -13,7 +13,7 @@ trait DepthBoundAspects { self: GrammarsUniverse =>
 
     def asString(implicit opts: PrinterOptions): String = s"D$depth"
 
-    def applyTo(l: Label, ps: Seq[Production])(implicit ctx: InoxContext) = {
+    def applyTo(l: Label, ps: Seq[Production]) = {
       if (depth == 0) Nil
       else if (depth == 1) ps.filter(_.isTerminal)
       else {
diff --git a/src/main/scala/inox/grammars/aspects/ExtraTerminalsAspects.scala b/src/main/scala/inox/grammars/aspects/ExtraTerminalsAspects.scala
index a64294ae8..209037698 100644
--- a/src/main/scala/inox/grammars/aspects/ExtraTerminalsAspects.scala
+++ b/src/main/scala/inox/grammars/aspects/ExtraTerminalsAspects.scala
@@ -19,7 +19,7 @@ trait ExtraTerminalsAspects { self: GrammarsUniverse =>
       s.toList.map(_.asString(opts)).mkString("{", ",", "}")
     }
 
-    override def applyTo(lab: Label, ps: Seq[Production])(implicit ctx: InoxContext) = {
+    override def applyTo(lab: Label, ps: Seq[Production]) = {
       super.applyTo(lab, ps) ++ {
         s.filter(e => isSubtypeOf(e.getType, lab.getType)).map { e =>
           ProductionRule[Label, Expr](Nil, { (es: Seq[Expr]) => e }, Top, formulaSize(e))
diff --git a/src/main/scala/inox/grammars/aspects/PersistentAspects.scala b/src/main/scala/inox/grammars/aspects/PersistentAspects.scala
index 6f35c218b..ff54abec8 100644
--- a/src/main/scala/inox/grammars/aspects/PersistentAspects.scala
+++ b/src/main/scala/inox/grammars/aspects/PersistentAspects.scala
@@ -20,7 +20,7 @@ trait PersistentAspects { self: GrammarsUniverse =>
    *   e + 1
    */
   abstract class PersistentAspect extends Aspect {
-    def applyTo(lab: Label, ps: Seq[Production])(implicit ctx: InoxContext) = {
+    def applyTo(lab: Label, ps: Seq[Production]) = {
       ps.map { p =>
         p.copy(subTrees = p.subTrees.map(lab => lab.withAspect(this)))
       }
diff --git a/src/main/scala/inox/grammars/aspects/SimilarToAspects.scala b/src/main/scala/inox/grammars/aspects/SimilarToAspects.scala
index abbbe29d7..f5ed9bd5c 100644
--- a/src/main/scala/inox/grammars/aspects/SimilarToAspects.scala
+++ b/src/main/scala/inox/grammars/aspects/SimilarToAspects.scala
@@ -28,7 +28,7 @@ trait SimilarToAspects { self: GrammarsUniverse =>
      *                f(a, ~b~)
      *                f(b, a)   // if non-commut
      */
-    def applyTo(lab: Label, ps: Seq[Production])(implicit ctx: InoxContext) = {
+    def applyTo(lab: Label, ps: Seq[Production]) = {
       def isCommutative(e: Expr) = e match {
         case _: EPlus | _: ETimes => true
         case _ => false
diff --git a/src/main/scala/inox/grammars/aspects/SizeAspects.scala b/src/main/scala/inox/grammars/aspects/SizeAspects.scala
index 2d39d2fee..911b79798 100644
--- a/src/main/scala/inox/grammars/aspects/SizeAspects.scala
+++ b/src/main/scala/inox/grammars/aspects/SizeAspects.scala
@@ -15,7 +15,7 @@ trait SizeAspects { self: GrammarsUniverse =>
   case class Sized(size: Int) extends Aspect {
     def asString(implicit opts: PrinterOptions) = "|"+size+"|"
 
-    def applyTo(lab: Label, ps: Seq[Production])(implicit ctx: InoxContext) = {
+    def applyTo(lab: Label, ps: Seq[Production]) = {
       val optimizeCommut = true
 
       ps.flatMap { p =>
diff --git a/src/main/scala/inox/grammars/aspects/TaggedAspects.scala b/src/main/scala/inox/grammars/aspects/TaggedAspects.scala
index ab9736938..34126a2c5 100644
--- a/src/main/scala/inox/grammars/aspects/TaggedAspects.scala
+++ b/src/main/scala/inox/grammars/aspects/TaggedAspects.scala
@@ -19,7 +19,7 @@ trait TaggedAspects { self: GrammarsUniverse =>
       */
     def asString(implicit opts: PrinterOptions): String = s"#$tag$cString@$pos"
 
-    def applyTo(lab: Label, ps: Seq[Production])(implicit ctx: InoxContext) = {
+    def applyTo(lab: Label, ps: Seq[Production]) = {
 
       // Tags to avoid depending on parent aspect
       val excludedTags: Set[Tag] = (tag, pos) match {
diff --git a/src/main/scala/inox/grammars/aspects/TypeDepthBoundAspects.scala b/src/main/scala/inox/grammars/aspects/TypeDepthBoundAspects.scala
index 5338f213b..c1fc410a4 100644
--- a/src/main/scala/inox/grammars/aspects/TypeDepthBoundAspects.scala
+++ b/src/main/scala/inox/grammars/aspects/TypeDepthBoundAspects.scala
@@ -12,7 +12,7 @@ trait TypeDepthBoundAspects { self: GrammarsUniverse =>
   case class TypeDepthBound(bound: Int) extends PersistentAspect {
     override def asString(implicit opts: PrinterOptions): String = "" // This is just debug pollution to print
 
-    override def applyTo(lab: Label, ps: Seq[Production])(implicit ctx: InoxContext) = {
+    override def applyTo(lab: Label, ps: Seq[Production]) = {
       if (depth(lab.getType) > bound) Nil
       else super.applyTo(lab, ps)
     }
-- 
GitLab