[#406] | project: compiler | priority: high | category: bug | |
---|---|---|---|---|
submitter | assigned to | status | date submitted | |
Martin | Burak | fixed | 2005-03-07 13:09:40.0 | |
subject | Pattern matcher generates wrong code | |||
code |
object Test with Application { class Type; case class A() extends Type; case class B() extends Type; case class C() extends Type; def foo(x: Type, y: Type) = Pair(x, y) match { case Pair(A(), A()) | Pair(A(), B()) | Pair(B(), A()) | Pair(B(), B()) => System.out.println("3") case Pair(C(), C()) => System.out.println("4") case Pair(A(), _) | Pair(B(), _) => System.out.println("7") case _ => System.out.println("8") } foo(A(), C()) } |
|||
what happened | prints: 8 |
|||
what expected | should have printed: 7. Note that the problem goes away if we split the alternative in the last pattern into two cases, i.e. case Pair(A(), _) => System.out.println("7") case Pair(B(), _) => System.out.println("7") works correctly. | |||
[back to overview] |
Burak edited on 2005-03-07 15:19:46.0 |
top-down nondeterministic pattern, similar to #188 (which affects the SequenceMatcher), only that this time, it's the old PatternMatcher which is affected. To be detected and solved by new pattern matching scheme... |
Burak edited on 2005-06-10 18:38:19.0 |