diff options
author | Jason Zaugg <jzaugg@gmail.com> | 2014-02-22 10:44:48 +0100 |
---|---|---|
committer | Jason Zaugg <jzaugg@gmail.com> | 2014-02-22 11:13:50 +0100 |
commit | 5dfcf5eb6a2fea69327420a3ebc4792f9365bf5a (patch) | |
tree | 4579d84e6063552cea02f4f7a09b02d74ceaef92 /src/reflect | |
parent | 00624a39ed84c3fd245dd9df7454d4cec4399e13 (diff) | |
download | scala-5dfcf5eb6a2fea69327420a3ebc4792f9365bf5a.tar.gz scala-5dfcf5eb6a2fea69327420a3ebc4792f9365bf5a.tar.bz2 scala-5dfcf5eb6a2fea69327420a3ebc4792f9365bf5a.zip |
SI-8324 Fix regression in override checks for sealed classes
adeffda25 changed `Symbol#isEffectivelyFinal` to help the optimizer
by inferring finality within sealed class hierarchies.
However, this change wasn't neccesarily welcome for other clients of
that method. In the enclosed test case, we see that overriding checks
in `RefChecks` regressed.
This commit moves the enhanced version into a new method and
selectively uses it in the optimizer (and the tail call optimizer).
Diffstat (limited to 'src/reflect')
-rw-r--r-- | src/reflect/scala/reflect/internal/Symbols.scala | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/src/reflect/scala/reflect/internal/Symbols.scala b/src/reflect/scala/reflect/internal/Symbols.scala index 83c2e2acdb..03d8f97831 100644 --- a/src/reflect/scala/reflect/internal/Symbols.scala +++ b/src/reflect/scala/reflect/internal/Symbols.scala @@ -943,9 +943,10 @@ trait Symbols extends api.Symbols { self: SymbolTable => || isTerm && ( isPrivate || isLocalToBlock - || isNotOverridden ) ) + /** Is this symbol effectively final or a concrete term member of sealed class whose childred do not override it */ + final def isEffectivelyFinalOrNotOverridden: Boolean = isEffectivelyFinal || (isTerm && !isDeferred && isNotOverridden) /** Is this symbol owned by a package? */ final def isTopLevel = owner.isPackageClass |