Aladdin - Scala Bugtracking
[#1213] project: compiler priority: medium category: bug
submitter assigned to status date submitted
Iulian Burak fixed 2007-07-16 13:17:03.0
subject Pattern matching on constructor parameters crashes the compiler
code
abstract class MapLocation(ID:int) {
  abstract class Message
  case class ReceivePlayer(id: int) extends Message

  def foo(p: Message) {
    p match {
      case ReceivePlayer(ID) =>
        ()
    }
  }
}
what happened
'foo' is translated to something like:
if (scala.Int.box(temp5.$asInstanceOf[MapLocation$ReceivePlayer]().id())
       .equals(scala.Int.box(scala.this.$asInstanceOf[MapLocation]().ID1)))
          ()
        else
          throw new MatchError(temp5)

Besides comparing ints by first boxing them, a strange piece of code is "scala.this.$asInstanceOf[MapLocation]()\
.ID1", which casts the scala package to something.

Making 'ID' a proper valdef in the class instead of a constructor parameter makes the compiler happy.
what expected No error.
[back to overview]
Changes of this bug report
Burak  edited on  2007-08-14 18:11:30.0