summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/typechecker/Contexts.scala
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2013-02-19 12:57:21 -0800
committerPaul Phillips <paulp@improving.org>2013-02-19 13:07:55 -0800
commit0eff6cd49d32c20d5648b57a01b5e80339a1cca7 (patch)
tree44e41e47efafccc9ccd343e97de69e486e972104 /src/compiler/scala/tools/nsc/typechecker/Contexts.scala
parentbafebe1c161f8db0be758c30fe5cc51082a56427 (diff)
downloadscala-0eff6cd49d32c20d5648b57a01b5e80339a1cca7.tar.gz
scala-0eff6cd49d32c20d5648b57a01b5e80339a1cca7.tar.bz2
scala-0eff6cd49d32c20d5648b57a01b5e80339a1cca7.zip
Fix and optimization in overriding logic.
Given: trait Foo { def f: Int = 5 } trait Bar extends Foo { def f: Int } I noticed allOverriddenSymbols for the abstract f defined in Bar was returning the method from Foo, even though an abstract method cannot override a concrete one. There were other bits of code which accidentally depended on this outcome. Now allOverriddenSymbols for Bar is empty. The optimization is that whether or not a symbol overrides any other symbols is known at creation time and does not change. We now spend a lot less time looking for overridden symbols in base classes by storing that value, "isOverridingSymbol".
Diffstat (limited to 'src/compiler/scala/tools/nsc/typechecker/Contexts.scala')
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/Contexts.scala3
1 files changed, 1 insertions, 2 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/Contexts.scala b/src/compiler/scala/tools/nsc/typechecker/Contexts.scala
index 711085e6c9..b070bd1b49 100644
--- a/src/compiler/scala/tools/nsc/typechecker/Contexts.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/Contexts.scala
@@ -573,8 +573,7 @@ trait Contexts { self: Analyzer =>
( superAccess
|| pre.isInstanceOf[ThisType]
|| phase.erasedTypes
- || isProtectedAccessOK(sym)
- || (sym.allOverriddenSymbols exists isProtectedAccessOK)
+ || (sym.overrideChain exists isProtectedAccessOK)
// that last condition makes protected access via self types work.
)
)