aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/core/SymDenotations.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2014-01-03 18:41:09 +0100
committerMartin Odersky <odersky@gmail.com>2014-01-03 18:41:09 +0100
commitffb11f39dce0df32cedca3364727d6b56aa83014 (patch)
tree9e014b6431fba9f5615cd44679deee5e872ac8d1 /src/dotty/tools/dotc/core/SymDenotations.scala
parentbbf09538e1248ea8907e34633ca5235c88533c97 (diff)
downloaddotty-ffb11f39dce0df32cedca3364727d6b56aa83014.tar.gz
dotty-ffb11f39dce0df32cedca3364727d6b56aa83014.tar.bz2
dotty-ffb11f39dce0df32cedca3364727d6b56aa83014.zip
Avoid premature caching of baseClasses and superclass bits.
This can happen while classParents is set to Nil in Namer#classSig. Any call to baseClasses and superClassBits during that time needs to bypass the cache.
Diffstat (limited to 'src/dotty/tools/dotc/core/SymDenotations.scala')
-rw-r--r--src/dotty/tools/dotc/core/SymDenotations.scala20
1 files changed, 12 insertions, 8 deletions
diff --git a/src/dotty/tools/dotc/core/SymDenotations.scala b/src/dotty/tools/dotc/core/SymDenotations.scala
index e9aeb286a..62262db93 100644
--- a/src/dotty/tools/dotc/core/SymDenotations.scala
+++ b/src/dotty/tools/dotc/core/SymDenotations.scala
@@ -843,18 +843,22 @@ object SymDenotations {
}
/** A bitset that contains the superId's of all base classes */
- private def superClassBits(implicit ctx: Context): BitSet = {
- if (mySuperClassBits == null) computeBases
- mySuperClassBits
- }
+ private def superClassBits(implicit ctx: Context): BitSet =
+ if (classParents.isEmpty) BitSet() // can happen when called too early in Namers
+ else {
+ if (mySuperClassBits == null) computeBases
+ mySuperClassBits
+ }
/** The base classes of this class in linearization order,
* with the class itself as first element.
*/
- def baseClasses(implicit ctx: Context): List[ClassSymbol] = {
- if (myBaseClasses == null) computeBases
- myBaseClasses
- }
+ def baseClasses(implicit ctx: Context): List[ClassSymbol] =
+ if (classParents.isEmpty) classSymbol :: Nil // can happen when called too early in Namers
+ else {
+ if (myBaseClasses == null) computeBases
+ myBaseClasses
+ }
final override def derivesFrom(base: Symbol)(implicit ctx: Context): Boolean =
!isAbsent &&