summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/typechecker/Typers.scala
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2010-11-10 15:02:54 +0000
committerPaul Phillips <paulp@improving.org>2010-11-10 15:02:54 +0000
commit37d9130f9fa9d90d2e4b31d3004e4e1b1df58d5c (patch)
tree66631774a075482bb6f8221a671f3e12b34fed5e /src/compiler/scala/tools/nsc/typechecker/Typers.scala
parent903478337c9b83ea9317d1dab311c62f654a7a45 (diff)
downloadscala-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/compiler/scala/tools/nsc/typechecker/Typers.scala')
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/Typers.scala16
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,