diff options
author | Martin Odersky <odersky@gmail.com> | 2013-09-24 13:09:35 +0200 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2013-09-24 13:09:46 +0200 |
commit | 1988a740718bc5edd28d8be358576d7033cadd6d (patch) | |
tree | e11d26d017c9fc594ab92807364ee3c3b11fc6fc /src/dotty/tools/dotc/typer/Typer.scala | |
parent | cef9496583b027ec93aaa8e6852e91e8e6896c69 (diff) | |
download | dotty-1988a740718bc5edd28d8be358576d7033cadd6d.tar.gz dotty-1988a740718bc5edd28d8be358576d7033cadd6d.tar.bz2 dotty-1988a740718bc5edd28d8be358576d7033cadd6d.zip |
Fixing problem related to overloaded symbols
Now that we have no longer termrefs with fixed syms, we need to create TermRefWithSignatures. Just setting symbol/denotation is not enough because of termref caching.
Diffstat (limited to 'src/dotty/tools/dotc/typer/Typer.scala')
-rw-r--r-- | src/dotty/tools/dotc/typer/Typer.scala | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/src/dotty/tools/dotc/typer/Typer.scala b/src/dotty/tools/dotc/typer/Typer.scala index a9f90b9ec..69b79a474 100644 --- a/src/dotty/tools/dotc/typer/Typer.scala +++ b/src/dotty/tools/dotc/typer/Typer.scala @@ -278,8 +278,9 @@ class Typer extends Namer with Applications with Implicits { if (defDenots.exists) { val curOwner = ctx.owner val pre = curOwner.thisType - val found = NamedType(pre, name).withDenot(defDenots toDenot pre) - if (!(curOwner is Package) || isDefinedInCurrentUnit(defDenots)) + val defDenot = defDenots toDenot pre + val found = NamedType(pre, name) withDenot defDenot + if (!(curOwner is Package) || (defDenot.symbol is Package) || isDefinedInCurrentUnit(defDenots)) return checkNewOrShadowed(found, definition) // no need to go further out, we found highest prec entry else if (prevPrec < packageClause) return findRef(found, packageClause, ctx)(outer) @@ -953,7 +954,7 @@ class Typer extends Namer with Applications with Implicits { def adaptOverloaded(ref: TermRef) = { val altDenots = ref.denot.alternatives val alts = altDenots map (alt => - TermRef.withSym(ref.prefix, alt.symbol.asTerm).withDenot(alt)) + TermRef.withSig(ref.prefix, ref.name, alt.info.signature).withDenot(alt)) def expectedStr = err.expectedTypeStr(pt) resolveOverloaded(alts, pt) match { case alt :: Nil => |