summaryrefslogtreecommitdiff
path: root/src/compiler
diff options
context:
space:
mode:
authorIulian Dragos <jaguarul@gmail.com>2010-04-09 15:43:44 +0000
committerIulian Dragos <jaguarul@gmail.com>2010-04-09 15:43:44 +0000
commit9fa486fb6e5c4fa660c3d1d2533510b43fc2acb1 (patch)
tree83bddf732956524e5fc8825868450293bca7a72d /src/compiler
parent53256b43ff73b93f91228d262a09467d7d6bcf29 (diff)
downloadscala-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.scala11
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)