diff options
author | Lukas Rytz <lukas.rytz@epfl.ch> | 2012-05-15 15:07:24 +0200 |
---|---|---|
committer | Lukas Rytz <lukas.rytz@epfl.ch> | 2012-05-15 21:43:37 +0200 |
commit | 7d79c4460814c9f8997de0fa1d756a734fb8a3d3 (patch) | |
tree | 39ef01b4ebfdf0afabb3d2d3e568fde0bf16d428 /src | |
parent | b3f7bc996b7a59b951cd0f199a056b6ad99d153b (diff) | |
download | scala-7d79c4460814c9f8997de0fa1d756a734fb8a3d3.tar.gz scala-7d79c4460814c9f8997de0fa1d756a734fb8a3d3.tar.bz2 scala-7d79c4460814c9f8997de0fa1d756a734fb8a3d3.zip |
Fix SI-5259
Calling the type checker on an Ident tree instead of using gen.mkAttributedRef assigns a SingleType to the tree.
Diffstat (limited to 'src')
-rw-r--r-- | src/compiler/scala/tools/nsc/typechecker/NamesDefaults.scala | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/NamesDefaults.scala b/src/compiler/scala/tools/nsc/typechecker/NamesDefaults.scala index bef6f13bc3..8ae254d35d 100644 --- a/src/compiler/scala/tools/nsc/typechecker/NamesDefaults.scala +++ b/src/compiler/scala/tools/nsc/typechecker/NamesDefaults.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 } |