| [#920] | project: compiler | priority: low | category: bug | |
|---|---|---|---|---|
| submitter | assigned to | status | date submitted | |
| Sean | Martin | fixed | 2007-01-29 12:19:43.0 | |
| subject | verify error when using method-defined trait that depends on outer context | |||
| code |
package test;
object Test {
trait A;
trait Foo { def foo : A; }
trait Bar extends Foo;
trait B extends A {
def initialize = {
trait Foo extends Test.Foo {
def foo : B.this.type = B.this;
}
class bar extends Bar with Foo;
Console.println(new bar);
}
}
object b extends B;
def main(args : Array[String]) : Unit = {
b.initialize;
}
} |
|||
| what happened | When running test:Exception in thread "main" java.lang.VerifyError: (class: test/Test$B$bar$0, method: test$Test$B$Foo$$$oute\ r signature: ()Ltest/Test$B;) Unable to pop operand off an empty stack at test.Test$B$class.initialize(Test.scala:15) at test.Test$b$.initialize(Test.scala:20) at test.Test$.main(Test.scala:22) at test.Test.main(Test.scala) |
|||
| what expected | ||||
| [back to overview] | ||||
| Iulian edited on 2007-01-29 15:37:25.0 |
| I assigned this to Martin since it is a problem with outer pointers. It seems the trait-inherited outer pointer for Foo is not implemented (and not abstract either) in class Test.B.bar. I added an assertion in the backend that fails for unimplemented concrete methods. |
| Martin edited on 2007-01-30 19:32:12.0 |