summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorAdriaan Moors <adriaan.moors@typesafe.com>2013-01-10 14:43:00 -0800
committerAdriaan Moors <adriaan.moors@typesafe.com>2013-01-10 16:04:57 -0800
commit8475807f540a698c8456bc113b9c5b9186ee2cf5 (patch)
treebc0b734a95c90484a9252c24df2df951589bfcc0 /test
parentf219ade08ed8174c7bded654e8070f4b61843513 (diff)
downloadscala-8475807f540a698c8456bc113b9c5b9186ee2cf5.tar.gz
scala-8475807f540a698c8456bc113b9c5b9186ee2cf5.tar.bz2
scala-8475807f540a698c8456bc113b9c5b9186ee2cf5.zip
SI-6955 switch emission no longer foiled by type alias
dealias the type of the scrutinee before checking it's switchable now with tests! (using IcodeTest since javap is not available everywhere)
Diffstat (limited to 'test')
-rw-r--r--test/files/run/t6955.check1
-rw-r--r--test/files/run/t6955.scala26
2 files changed, 27 insertions, 0 deletions
diff --git a/test/files/run/t6955.check b/test/files/run/t6955.check
new file mode 100644
index 0000000000..0cfbf08886
--- /dev/null
+++ b/test/files/run/t6955.check
@@ -0,0 +1 @@
+2
diff --git a/test/files/run/t6955.scala b/test/files/run/t6955.scala
new file mode 100644
index 0000000000..2610acdec4
--- /dev/null
+++ b/test/files/run/t6955.scala
@@ -0,0 +1,26 @@
+import scala.tools.partest.IcodeTest
+
+class Switches {
+ type Tag = Byte
+
+ def switchBad(i: Tag): Int = i match { // notice type of i is Tag = Byte
+ case 1 => 1
+ case 2 => 2
+ case 3 => 3
+ case _ => 0
+ }
+
+ def switchOkay(i: Byte): Int = i match { // notice type of i is Byte
+ case 1 => 1
+ case 2 => 2
+ case 3 => 3
+ case _ => 0
+ }
+}
+
+object Test extends IcodeTest {
+ // ensure we get two switches out of this -- ignore the rest of the output for robustness
+ // exclude the constant we emit for the "SWITCH ..." string below (we get the icode for all the code you see in this file)
+ override def show() = println(collectIcode("").filter(x => x.indexOf("SWITCH ...") >= 0 && x.indexOf("CONSTANT(") == -1).size)
+}
+