diff options
author | Martin Odersky <odersky@gmail.com> | 2017-04-09 13:01:14 +0200 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2017-04-09 13:02:59 +0200 |
commit | 10546245dd903a6c132253fc17ee344fbcdd8f70 (patch) | |
tree | 4039f7af69ccf42540102a8b85408c744ae8defb /compiler/src/dotty/tools/dotc/core/Types.scala | |
parent | 4d76265fac7edafc2fcf29ce6873fdb252fbba0d (diff) | |
download | dotty-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.scala | 23 |
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}, |