diff --git a/src/main/scala/leon/synthesis/utils/ExpressionGrammar.scala b/src/main/scala/leon/synthesis/utils/ExpressionGrammar.scala index a53a04f3e348dd5ee080dc377c827a03d4282f69..3c53247ae3646e1a577221508dcc65efb8849b4d 100644 --- a/src/main/scala/leon/synthesis/utils/ExpressionGrammar.scala +++ b/src/main/scala/leon/synthesis/utils/ExpressionGrammar.scala @@ -13,12 +13,10 @@ import purescala.Common._ import purescala.Definitions._ import purescala.Types._ import purescala.ExprOps._ -import purescala.DefOps._ import purescala.TypeOps._ import purescala.Extractors._ import purescala.Constructors._ import purescala.ScalaPrinter -import purescala.Constructors.finiteSet import scala.language.implicitConversions @@ -40,16 +38,15 @@ abstract class ExpressionGrammar[T <% Typed] { def computeProductions(t: T): Seq[Gen] def filter(f: Gen => Boolean) = { - val that = this new ExpressionGrammar[T] { - def computeProductions(t: T) = that.computeProductions(t).filter(f) + def computeProductions(t: T) = ExpressionGrammar.this.computeProductions(t).filter(f) } } final def ||(that: ExpressionGrammar[T]): ExpressionGrammar[T] = { ExpressionGrammars.Or(Seq(this, that)) } - + final def printProductions(printer: String => Unit) { for ((t, gs) <- cache; g <- gs) { @@ -221,11 +218,12 @@ object ExpressionGrammars { type L = Label[String] - private var counter = -1 - - def getNext(): Int = { - counter += 1 - counter + val getNext: () => Int = { + var counter = -1 + () => { + counter += 1 + counter + } } lazy val allSimilar = computeSimilar(e).groupBy(_._1).mapValues(_.map(_._2)) @@ -241,7 +239,7 @@ object ExpressionGrammars { def getLabel(t: TypeTree) = { val tpe = bestRealType(t) - val c = getNext + val c = getNext() Label(tpe, "G"+c) }