diff options
author | Paul Phillips <paulp@improving.org> | 2010-11-10 15:02:54 +0000 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2010-11-10 15:02:54 +0000 |
commit | 37d9130f9fa9d90d2e4b31d3004e4e1b1df58d5c (patch) | |
tree | 66631774a075482bb6f8221a671f3e12b34fed5e /src | |
parent | 903478337c9b83ea9317d1dab311c62f654a7a45 (diff) | |
download | scala-37d9130f9fa9d90d2e4b31d3004e4e1b1df58d5c.tar.gz scala-37d9130f9fa9d90d2e4b31d3004e4e1b1df58d5c.tar.bz2 scala-37d9130f9fa9d90d2e4b31d3004e4e1b1df58d5c.zip |
protected[this] members should be accessible to...
protected[this] members should be accessible to super.x calls. Closes
#464, review by odersky.
Diffstat (limited to 'src')
-rw-r--r-- | src/compiler/scala/tools/nsc/typechecker/Typers.scala | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/Typers.scala b/src/compiler/scala/tools/nsc/typechecker/Typers.scala index 3d3fbae811..fc1ec8e5e5 100644 --- a/src/compiler/scala/tools/nsc/typechecker/Typers.scala +++ b/src/compiler/scala/tools/nsc/typechecker/Typers.scala @@ -681,13 +681,15 @@ trait Typers { self: Analyzer => } /** The member with given name of given qualifier tree */ - def member(qual: Tree, name: Name) = qual.tpe match { - case ThisType(clazz) if (context.enclClass.owner.hasTransOwner(clazz)) => - // println("member "+qual.tpe+" . "+name+" "+qual.tpe.getClass) - qual.tpe.member(name) - case _ => - if (phase.next.erasedTypes) qual.tpe.member(name) - else qual.tpe.nonLocalMember(name) + def member(qual: Tree, name: Name) = { + def callSiteWithinClass(clazz: Symbol) = context.enclClass.owner hasTransOwner clazz + val includeLocals = qual.tpe match { + case ThisType(clazz) if callSiteWithinClass(clazz) => true + case SuperType(clazz, _) if callSiteWithinClass(clazz.typeSymbol) => true + case _ => phase.next.erasedTypes + } + if (includeLocals) qual.tpe member name + else qual.tpe nonLocalMember name } def silent[T](op: Typer => T, |