aboutsummaryrefslogtreecommitdiff
path: root/compiler/src/dotty/tools/dotc/core/Types.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2017-03-20 15:51:39 +0100
committerMartin Odersky <odersky@gmail.com>2017-03-20 16:08:53 +0100
commit587a1f45f5cbd8f746b01777ac9b100743161633 (patch)
tree104e19ad18ded60e16e4998b40287c7abb5274f9 /compiler/src/dotty/tools/dotc/core/Types.scala
parentf45dbe7e3722f0c6a814c8afd8481690ac5f1d2c (diff)
downloaddotty-587a1f45f5cbd8f746b01777ac9b100743161633.tar.gz
dotty-587a1f45f5cbd8f746b01777ac9b100743161633.tar.bz2
dotty-587a1f45f5cbd8f746b01777ac9b100743161633.zip
Handle shadowed for TermRefWithSig
Making a name shadowed lost the signature before.
Diffstat (limited to 'compiler/src/dotty/tools/dotc/core/Types.scala')
-rw-r--r--compiler/src/dotty/tools/dotc/core/Types.scala12
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 =>