Skip to content
Permalink
Browse files

Fix SI-5259

Calling the type checker on an Ident tree instead of using gen.mkAttributedRef assigns a SingleType to the tree.
  • Loading branch information
lrytz committed May 15, 2012
1 parent b3f7bc9 commit 7d79c4460814c9f8997de0fa1d756a734fb8a3d3
Showing with 27 additions and 6 deletions.
  1. +6 −6 src/compiler/scala/tools/nsc/typechecker/NamesDefaults.scala
  2. +21 −0 test/files/pos/t5259.scala
@@ -158,20 +158,20 @@ trait NamesDefaults { self: Analyzer =>
// it stays in Vegas: SI-5720, SI-5727
qual changeOwner (blockTyper.context.owner -> sym)

val newQual = atPos(qual.pos.focus)(blockTyper.typedQualifier(Ident(sym.name)))
var baseFunTransformed = atPos(baseFun.pos.makeTransparent) {
// don't use treeCopy: it would assign opaque position.
val f = Select(gen.mkAttributedRef(sym), selected)
.setType(baseFun1.tpe).setSymbol(baseFun1.symbol)
// setSymbol below is important because the 'selected' function might be overloaded. by
// assigning the correct method symbol, typedSelect will just assign the type. the reason
// to still call 'typed' is to correctly infer singleton types, SI-5259.
val f = blockTyper.typedOperator(Select(newQual, selected).setSymbol(baseFun1.symbol))
if (funTargs.isEmpty) f
else TypeApply(f, funTargs).setType(baseFun.tpe)
}

val b = Block(List(vd), baseFunTransformed)
.setType(baseFunTransformed.tpe).setPos(baseFun.pos)

val defaultQual = Some(atPos(qual.pos.focus)(gen.mkAttributedRef(sym)))
context.namedApplyBlockInfo =
Some((b, NamedApplyInfo(defaultQual, defaultTargs, Nil, blockTyper)))
Some((b, NamedApplyInfo(Some(newQual), defaultTargs, Nil, blockTyper)))
b
}

@@ -0,0 +1,21 @@
class A[T]
class B {
def m(a: A[this.type] = new A[this.type]) { }
}

class C {
def foo(a: Int, b: Int = 0) = 0
def foo() = 0
}

object Test {
def newB = new B
newB.m()

val stableB = new B
stableB.m()

def f {
println((new C).foo(0))
}
}

0 comments on commit 7d79c44

Please sign in to comment.
You can’t perform that action at this time.