diff options
author | Geoffrey Washburn <geoffrey.washburn@epfl.ch> | 2008-04-17 14:07:00 +0000 |
---|---|---|
committer | Geoffrey Washburn <geoffrey.washburn@epfl.ch> | 2008-04-17 14:07:00 +0000 |
commit | 2df4b46fb7bec5c04ec10a99ffa265c3e56b5b54 (patch) | |
tree | 6855a34005d8e2ee4896b21cf00a0d6425517d38 | |
parent | 414ab99028b119f2a696acc81c5f49f9c9091de4 (diff) | |
download | scala-2df4b46fb7bec5c04ec10a99ffa265c3e56b5b54.tar.gz scala-2df4b46fb7bec5c04ec10a99ffa265c3e56b5b54.tar.bz2 scala-2df4b46fb7bec5c04ec10a99ffa265c3e56b5b54.zip |
Don't make a virtual class its own parent.
I think we want overridden virtual parents to be of the form
(Virtual.owner).this.Virtual
not
Virtual.this.Virtual
-rw-r--r-- | src/compiler/scala/tools/nsc/typechecker/Namers.scala | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/Namers.scala b/src/compiler/scala/tools/nsc/typechecker/Namers.scala index 8d775ba756..6228429f98 100644 --- a/src/compiler/scala/tools/nsc/typechecker/Namers.scala +++ b/src/compiler/scala/tools/nsc/typechecker/Namers.scala @@ -533,9 +533,10 @@ trait Namers { self: Analyzer => if (parents exists (_.typeSymbol.isVirtualClass)) clazz setFlag DEFERRED // add overridden virtuals to parents - if (clazz.isVirtualClass) - parents = parents ::: (clazz.overriddenVirtuals map ( - TypeRef(clazz.thisType, _, clazz.typeParams map (_.tpe)))) + if (clazz.isVirtualClass) { + parents = parents ::: ((clazz.overriddenVirtuals.filter(_ != clazz)) map ( + sym => TypeRef(sym.owner.thisType, sym, clazz.typeParams map (_.tpe)))) + } // add apply and unapply methods to companion objects of case classes, // unless they exist already caseClassOfModuleClass get clazz match { |