aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/typer/Typer.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2013-09-24 13:09:35 +0200
committerMartin Odersky <odersky@gmail.com>2013-09-24 13:09:46 +0200
commit1988a740718bc5edd28d8be358576d7033cadd6d (patch)
treee11d26d017c9fc594ab92807364ee3c3b11fc6fc /src/dotty/tools/dotc/typer/Typer.scala
parentcef9496583b027ec93aaa8e6852e91e8e6896c69 (diff)
downloaddotty-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.scala7
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 =>