aboutsummaryrefslogtreecommitdiff
path: root/tests/pos/pos_valueclasses/optmatch.scala
diff options
context:
space:
mode:
Diffstat (limited to 'tests/pos/pos_valueclasses/optmatch.scala')
-rw-r--r--tests/pos/pos_valueclasses/optmatch.scala35
1 files changed, 35 insertions, 0 deletions
diff --git a/tests/pos/pos_valueclasses/optmatch.scala b/tests/pos/pos_valueclasses/optmatch.scala
new file mode 100644
index 000000000..a7995a455
--- /dev/null
+++ b/tests/pos/pos_valueclasses/optmatch.scala
@@ -0,0 +1,35 @@
+package optmatch
+
+// final case class NonZeroLong(value: Long) extends AnyVal {
+// def get: Long = value
+// def isEmpty: Boolean = get == 0l
+// }
+
+class NonZeroLong(val value: Long) extends AnyVal {
+ def get: Long = value
+ def isDefined: Boolean = get != 0l
+}
+object NonZeroLong {
+ def unapply(value: Long): NonZeroLong = new NonZeroLong(value)
+}
+
+
+object Foo {
+ def unapply(x: Int): NonZeroLong = new NonZeroLong(1L << x)
+ // public long unapply(int);
+ // 0: lconst_1
+ // 1: iload_1
+ // 2: lshl
+ // 3: lreturn
+}
+
+object Test {
+ def f(x: Int): Int = x match {
+ case Foo(1024l) => 1
+ case _ => 2
+ }
+ def main(args: Array[String]): Unit = {
+ println(f(10))
+ println(f(11))
+ }
+}