diff --git a/src/funcheck/scalacheck/ForAllTransformer.scala b/src/funcheck/scalacheck/ForAllTransformer.scala index 356f74303de42e83b83279374e40b6b4067ec605..4731bea365baabe1df21dcf9f2c4c67060756ce0 100644 --- a/src/funcheck/scalacheck/ForAllTransformer.scala +++ b/src/funcheck/scalacheck/ForAllTransformer.scala @@ -35,7 +35,7 @@ trait ForAllTransformer extends TypingTransformers case tpe @ TypeRef(_,_,ptpes) => vtpt.tpe match { case TypeRef(_,value,vtpes) => - val fun: Function = { + var fun: Function = { if(vtpes.size <= 1) { f } else { diff --git a/src/funcheck/scalacheck/ScalaCheck.scala b/src/funcheck/scalacheck/ScalaCheck.scala index b1e57db4779775ed7737e52f0886cd63736dcb7d..17fa79e311da8ee43a9a9867d161bf446a8883fe 100644 --- a/src/funcheck/scalacheck/ScalaCheck.scala +++ b/src/funcheck/scalacheck/ScalaCheck.scala @@ -61,6 +61,8 @@ trait ScalaCheck extends FreshNameCreator { def oneOf(generators: List[Symbol]): Tree = Apply(Select(Ident(moduleGenSym), symDecl(moduleGenSym, "oneOf")), generators.map(Ident(_))) + def lzy(generator: Tree): Tree = + Apply(Select(Ident(moduleGenSym), symDecl(moduleGenSym, "lzy")), List(generator)) /** * This creates a Tree node for the call <code>org.scalacheck.Gen.flatMap[T](body)</code>, @@ -81,6 +83,8 @@ trait ScalaCheck extends FreshNameCreator { def map(qualifier: Tree, body: Tree): Tree = Apply(Select(qualifier, symDecl(classGenSym, "map")), List(body)) + + /** * Utilitary method for creating a method symbol for a <code>org.scalacheck.Gen</codee> * generator method. @@ -191,7 +195,7 @@ trait ScalaCheck extends FreshNameCreator { if(cd.symbol.hasFlag(scala.tools.nsc.symtab.Flags.ABSTRACT)) { val generators = retTpe.symbol.children.toList.map(s => genSymbolsForType(s.tpe)).flatMap(v=>v) - DefDef(genDef, Modifiers(0), List(), Gen.oneOf(generators)) + DefDef(genDef, Modifiers(0), List(), Gen.lzy(Gen.oneOf(generators))) } else { @@ -242,7 +246,7 @@ trait ScalaCheck extends FreshNameCreator { } } - body + Gen.lzy(body) } }