Aladdin - Scala Bugtracking
[#1006] project: compiler priority: low category: bug
submitter assigned to status date submitted
Nikolay Martin fixed 2007-03-15 10:45:59.0
subject [contrib #376] Generic type + subclass runs when compiled but not in interpreter
code
Tested on: OSX 10.4 (JDK 1.5) and Windows XP (JDK 1.6)
Scala version: 2.3.3

I have two programs, almost identical. The first one is compiled with scalac and run with "scalac generic1.scala; scala RunMe".

----------------- generic1.scala ----------------------
abstract class A[T] {
  def myVal: T
}

class B[T](value: T) extends A[T] {
  def myVal = value
}

object RunMe extends Application {
  Console.println(new B[int](23).myVal)
}
--------------------------------------------------------------

The second one is run in script mode, "scala generic2.scala"

----------------- generic2.scala ----------------------
abstract class A[T] {
  def myVal: T
}

class B[T](value: T) extends A[T] {
  def myVal = value
}

Console.println(new B[int](23).myVal)
--------------------------------------------------------------
what happened
generic1.scala compiles and runs, printing "23".

generic2.scala gives an error message:

generic2.scala:6: error: error overriding method myVal in class A of type => T;
 method myVal has incompatible type => T
  def myVal = value
what expected Both programs should run and produce the same output.
[back to overview]
Changes of this bug report
Nikolay  edited on  2007-03-15 10:46:26.0
contribution #376
Lex  edited on  2007-03-16 14:13:05.0
This is something in the type checker. The programs behave differently due, in one case, to the A and B classes being embedded inside a method. Having classes inherit from each other inside a method looks odd to me, but I see no reason to disallow it. Anyway, I have comitted the modified version as test/pending/run/bug1006.scala.
Martin  edited on  2007-03-19 15:19:25.0