diff options
author | Hubert Plociniczak <hubert.plociniczak@gmail.com> | 2012-02-17 16:41:33 +0100 |
---|---|---|
committer | Hubert Plociniczak <hubert.plociniczak@gmail.com> | 2012-02-17 16:41:33 +0100 |
commit | b10b5821f40ccfad5e97df754ec35be0d256e41e (patch) | |
tree | 88b39582e6a05a55e70cb748efebfc1d24020ba0 /test/files/pos | |
parent | 91148376049a152edec12348ff9b7e9e93e6ebe1 (diff) | |
download | scala-b10b5821f40ccfad5e97df754ec35be0d256e41e.tar.gz scala-b10b5821f40ccfad5e97df754ec35be0d256e41e.tar.bz2 scala-b10b5821f40ccfad5e97df754ec35be0d256e41e.zip |
Closes #5452.
Instead of trying to track the fallback attempts we rely on the
context state to inform us which fallback is the last one.
setError cannot always be called in NoBestMethodAlternativeError
because inferMethodAlternative relies on side-effects.
Review by @paulp.
Diffstat (limited to 'test/files/pos')
-rw-r--r-- | test/files/pos/spurious-overload.scala | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/test/files/pos/spurious-overload.scala b/test/files/pos/spurious-overload.scala new file mode 100644 index 0000000000..9767a44eee --- /dev/null +++ b/test/files/pos/spurious-overload.scala @@ -0,0 +1,32 @@ +object Test extends App { + def foo(bar: Any) = bar + + val code = foo{ + object lazyLib { + + def delay[A](value: => A): Susp[A] = new SuspImpl[A](value) + + implicit def force[A](s: Susp[A]): A = s() + + abstract class Susp[+A] extends Function0[A] + + class SuspImpl[A](lazyValue: => A) extends Susp[A] { + private var maybeValue: Option[A] = None + + override def apply() = maybeValue match { + case None => + val value = lazyValue + maybeValue = Some(value) + value + case Some(value) => + value + } + } + } + + import lazyLib._ + + val s: Susp[Int] = delay { println("evaluating..."); 3 } + println("2 + s = " + (2 + s)) // implicit call to force() + } +}
\ No newline at end of file |