diff options
author | Jason Zaugg <jzaugg@gmail.com> | 2012-09-08 18:37:59 +0200 |
---|---|---|
committer | Jason Zaugg <jzaugg@gmail.com> | 2012-09-08 18:47:49 +0200 |
commit | c619f94a9cfbddc12c9c5df3affb4636f8982a0a (patch) | |
tree | 8f0b988c9ab4cdb10723118453a4bda76d753457 /test | |
parent | 5b9b394d99bd7e4446e0f15475b34ec287d91685 (diff) | |
download | scala-c619f94a9cfbddc12c9c5df3affb4636f8982a0a.tar.gz scala-c619f94a9cfbddc12c9c5df3affb4636f8982a0a.tar.bz2 scala-c619f94a9cfbddc12c9c5df3affb4636f8982a0a.zip |
SI-6331 Avoid typing an If tree with a constant type.
The fast path in typedIf added in 8552740b avoided lubbing the if/else branch types
if they are identical, but this fails to deconst the type. This could lead to the entire
if expression being replaced by a constant.
Also introduces a new tool in partest for nicer checkfiles.
// in Test.scala
trace(if (t) -0d else 0d)
// in Test.check
trace> if (Test.this.t)
-0.0
else
0.0
res: Double = -0.0
Diffstat (limited to 'test')
-rw-r--r-- | test/files/run/t6331b.check | 30 | ||||
-rw-r--r-- | test/files/run/t6331b.scala | 20 |
2 files changed, 50 insertions, 0 deletions
diff --git a/test/files/run/t6331b.check b/test/files/run/t6331b.check new file mode 100644 index 0000000000..6ca09e3814 --- /dev/null +++ b/test/files/run/t6331b.check @@ -0,0 +1,30 @@ +trace> if (Test.this.t) + -0.0 +else + 0.0 +res: Double = -0.0 + +trace> if (Test.this.t) + 0.0 +else + -0.0 +res: Double = 0.0 + +trace> Test.this.intercept.apply[Any](if (scala.this.Predef.???) + -0.0 +else + 0.0) +res: Any = class scala.NotImplementedError + +trace> Test.this.intercept.apply[Any](if (scala.this.Predef.???) + 0.0 +else + 0.0) +res: Any = class scala.NotImplementedError + +trace> Test.this.intercept.apply[Any](if (scala.this.Predef.???) + () +else + ()) +res: Any = class scala.NotImplementedError + diff --git a/test/files/run/t6331b.scala b/test/files/run/t6331b.scala new file mode 100644 index 0000000000..f966abea51 --- /dev/null +++ b/test/files/run/t6331b.scala @@ -0,0 +1,20 @@ +import scala.tools.partest._ +import java.io._ +import scala.tools.nsc._ +import scala.tools.nsc.util.CommandLineParser +import scala.tools.nsc.{Global, Settings, CompilerCommand} +import scala.tools.nsc.reporters.ConsoleReporter + +import scala.tools.partest.trace +import scala.util.control.Exception._ + + +object Test extends App { + def intercept = allCatch.withApply(_.getClass) + val t: Boolean = true + trace(if (t) -0d else 0d) + trace(if (t) 0d else -0d) + trace(intercept(if (???) -0d else 0d)) + trace(intercept(if (???) 0d else 0d)) + trace(intercept(if (???) () else ())) +} |