aboutsummaryrefslogtreecommitdiff
path: root/compiler/src/dotty/tools/dotc/core/Types.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2017-04-09 13:01:14 +0200
committerMartin Odersky <odersky@gmail.com>2017-04-09 13:02:59 +0200
commit10546245dd903a6c132253fc17ee344fbcdd8f70 (patch)
tree4039f7af69ccf42540102a8b85408c744ae8defb /compiler/src/dotty/tools/dotc/core/Types.scala
parent4d76265fac7edafc2fcf29ce6873fdb252fbba0d (diff)
downloaddotty-10546245dd903a6c132253fc17ee344fbcdd8f70.tar.gz
dotty-10546245dd903a6c132253fc17ee344fbcdd8f70.tar.bz2
dotty-10546245dd903a6c132253fc17ee344fbcdd8f70.zip
Three fixes wrt handlings of package objects
1. Invalidate packageObj cache when entering a package object 2. Prefer package object members over same-named package members unless we are in the scala package 3. Exclude package objects from no-double-bindings checks, since package objects may now be visited before indexing them.
Diffstat (limited to 'compiler/src/dotty/tools/dotc/core/Types.scala')
-rw-r--r--compiler/src/dotty/tools/dotc/core/Types.scala23
1 files changed, 16 insertions, 7 deletions
diff --git a/compiler/src/dotty/tools/dotc/core/Types.scala b/compiler/src/dotty/tools/dotc/core/Types.scala
index 8ae3aa7ad..e7130ee2f 100644
--- a/compiler/src/dotty/tools/dotc/core/Types.scala
+++ b/compiler/src/dotty/tools/dotc/core/Types.scala
@@ -1504,20 +1504,29 @@ object Types {
case _ => NoType
}
assert(
- (lastSymbol eq sym) ||
- (lastSymbol eq null) || {
+ (lastSymbol eq sym)
+ ||
+ (lastSymbol eq null)
+ || {
val lastDefRunId = lastDenotation match {
case d: SymDenotation => d.validFor.runId
case _ => lastSymbol.defRunId
}
(lastDefRunId != sym.defRunId) ||
(lastDefRunId == NoRunId)
- } ||
- (lastSymbol.infoOrCompleter.isInstanceOf[ErrorType] ||
+ }
+ ||
+ lastSymbol.infoOrCompleter.isInstanceOf[ErrorType]
+ ||
+ sym.isPackageObject // package objects can be visited before we get around to index them
+ ||
sym.owner != lastSymbol.owner &&
- (sym.owner.derivesFrom(lastSymbol.owner) ||
- selfTypeOf(sym).derivesFrom(lastSymbol.owner) ||
- selfTypeOf(lastSymbol).derivesFrom(sym.owner))),
+ (sym.owner.derivesFrom(lastSymbol.owner)
+ ||
+ selfTypeOf(sym).derivesFrom(lastSymbol.owner)
+ ||
+ selfTypeOf(lastSymbol).derivesFrom(sym.owner)
+ ),
i"""data race? overwriting symbol of type $this,
|long form = $toString of class $getClass,
|last sym id = ${lastSymbol.id}, new sym id = ${sym.id},