diff options
author | Martin Odersky <odersky@gmail.com> | 2017-03-20 15:51:39 +0100 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2017-03-20 16:08:53 +0100 |
commit | 587a1f45f5cbd8f746b01777ac9b100743161633 (patch) | |
tree | 104e19ad18ded60e16e4998b40287c7abb5274f9 | |
parent | f45dbe7e3722f0c6a814c8afd8481690ac5f1d2c (diff) | |
download | dotty-587a1f45f5cbd8f746b01777ac9b100743161633.tar.gz dotty-587a1f45f5cbd8f746b01777ac9b100743161633.tar.bz2 dotty-587a1f45f5cbd8f746b01777ac9b100743161633.zip |
Handle shadowed for TermRefWithSig
Making a name shadowed lost the signature before.
-rw-r--r-- | compiler/src/dotty/tools/dotc/core/Types.scala | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/compiler/src/dotty/tools/dotc/core/Types.scala b/compiler/src/dotty/tools/dotc/core/Types.scala index 6c27e53f6..c80107f93 100644 --- a/compiler/src/dotty/tools/dotc/core/Types.scala +++ b/compiler/src/dotty/tools/dotc/core/Types.scala @@ -1719,7 +1719,7 @@ object Types { * under both private and public names, so it could still be found by looking up * the public name. */ - final def shadowed(implicit ctx: Context): NamedType = + def shadowed(implicit ctx: Context): NamedType = NamedType(prefix, name.shadowedName) override def equals(that: Any) = that match { @@ -1782,15 +1782,19 @@ object Types { else d.atSignature(sig).checkUnique } - override def newLikeThis(prefix: Type)(implicit ctx: Context): TermRef = { - val candidate = TermRef.withSig(prefix, name, sig) + private def fixDenot(candidate: TermRef, prefix: Type)(implicit ctx: Context): TermRef = if (symbol.exists && !candidate.symbol.exists) { // recompute from previous symbol val ownSym = symbol val newd = asMemberOf(prefix, allowPrivate = ownSym.is(Private)) candidate.withDenot(newd.suchThat(_.signature == ownSym.signature)) } else candidate - } + + override def newLikeThis(prefix: Type)(implicit ctx: Context): TermRef = + fixDenot(TermRef.withSig(prefix, name, sig), prefix) + + override def shadowed(implicit ctx: Context): NamedType = + fixDenot(TermRef.withSig(prefix, name.shadowedName, sig), prefix) override def equals(that: Any) = that match { case that: TermRefWithSignature => |