diff options
author | Iulian Dragos <jaguarul@gmail.com> | 2010-04-09 15:43:44 +0000 |
---|---|---|
committer | Iulian Dragos <jaguarul@gmail.com> | 2010-04-09 15:43:44 +0000 |
commit | 9fa486fb6e5c4fa660c3d1d2533510b43fc2acb1 (patch) | |
tree | 83bddf732956524e5fc8825868450293bca7a72d /src/compiler | |
parent | 53256b43ff73b93f91228d262a09467d7d6bcf29 (diff) | |
download | scala-9fa486fb6e5c4fa660c3d1d2533510b43fc2acb1.tar.gz scala-9fa486fb6e5c4fa660c3d1d2533510b43fc2acb1.tar.bz2 scala-9fa486fb6e5c4fa660c3d1d2533510b43fc2acb1.zip |
Added a cast for alias replacement that caused
code to be untypable. The optimization that replaced an overriding param
field with its super field now downcasts when they don't have the same
type.
Diffstat (limited to 'src/compiler')
-rw-r--r-- | src/compiler/scala/tools/nsc/typechecker/SuperAccessors.scala | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/SuperAccessors.scala b/src/compiler/scala/tools/nsc/typechecker/SuperAccessors.scala index 95c79eb97e..6f5175c0ea 100644 --- a/src/compiler/scala/tools/nsc/typechecker/SuperAccessors.scala +++ b/src/compiler/scala/tools/nsc/typechecker/SuperAccessors.scala @@ -182,15 +182,16 @@ abstract class SuperAccessors extends transform.Transform with transform.TypingT mayNeedProtectedAccessor(sel, args, false) case sel @ Select(qual @ This(_), name) => - if ((sym hasFlag PARAMACCESSOR) && (sym.alias != NoSymbol)) { + if ((sym hasFlag PARAMACCESSOR) + && (sym.alias != NoSymbol)) { val result = localTyper.typed { - Select( - Super(qual.symbol, nme.EMPTY.toTypeName/*qual.symbol.info.parents.head.symbol.name*/) setPos qual.pos, - sym.alias) setPos tree.pos + Select( + Super(qual.symbol, nme.EMPTY.toTypeName/*qual.symbol.info.parents.head.symbol.name*/) setPos qual.pos, + sym.alias) setPos tree.pos } if (settings.debug.value) Console.println("alias replacement: " + tree + " ==> " + result);//debug - transformSuperSelect(result) + localTyper.typed(gen.maybeMkAsInstanceOf(transformSuperSelect(result), sym.tpe, sym.alias.tpe, true)) } else mayNeedProtectedAccessor(sel, List(EmptyTree), false) |