| [#657] | project: compiler | priority: high | category: bug | |
|---|---|---|---|---|
| submitter | assigned to | status | date submitted | |
| Sean | Martin | fixed | 2006-07-13 17:36:27.0 | |
| subject | mixin VerifyError | |||
| code |
package test;
abstract class BaseList {
type Node <: NodeImpl;
implicit def convertNode(ni : NodeImpl) = ni.asInstanceOf[Node];
abstract class NodeImpl;
}
abstract class LinkedList extends BaseList {
type Node <: NodeImpl;
trait NodeImpl extends super.NodeImpl;
}
trait OffsetList extends LinkedList {
type Node <: NodeImpl;
trait NodeImpl extends super.NodeImpl;
}
trait PriorityTree extends BaseList {
type Node <: NodeImpl;
trait NodeImpl extends super.NodeImpl {
def chop : Node = this;
}
}
trait PrecedenceParser extends LinkedList with PriorityTree {
type Node <: NodeImpl;
trait NodeImpl extends super[LinkedList].NodeImpl with super[PriorityTree].NodeImpl;
}
trait Matcher extends PrecedenceParser {
type Node <: NodeImpl;
trait NodeImpl extends super.NodeImpl;
type Matchable <: Node with MatchableImpl;
implicit def convertMatchable(m : MatchableImpl) = m.asInstanceOf[Matchable];
trait MatchableImpl extends NodeImpl {
override def chop : Node = super.chop;
}
}
class Test extends OffsetList with Matcher {
type Node = NodeImpl;
trait NodeImpl extends super[OffsetList].NodeImpl with super[Matcher].NodeImpl;
class MatchableImpl extends super.MatchableImpl with NodeImpl;
type Matchable = MatchableImpl;
}
object test extends Application {
val test = new Test;
val m = new test.MatchableImpl;
m.chop;
}
|
|||
| what happened | Exception in thread "main" java.lang.VerifyError: (class: test/Test$MatchableImpl, method: test$Matcher$Matchabl\ eImpl$$super$chop signature: ()Ltest/Matcher$NodeImpl;) Illegal use of nonvirtual function call at test.test$.In Matchable.MatchableImpl.super$chop, a non-virtual call is being generated to a method in a class that is not \ extended. |
|||
| what expected | ||||
| [back to overview] | ||||
| Martin edited on 2006-07-14 15:19:06.0 |