Skip to content

Commit 3857489

Browse files
committed
Fix #3917: Properly desugar Ident
1 parent 5b1b747 commit 3857489

File tree

2 files changed

+39
-7
lines changed

2 files changed

+39
-7
lines changed

compiler/src/dotty/tools/dotc/ast/tpd.scala

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -826,14 +826,19 @@ object tpd extends Trees.Instance[Type] with TypedTreeInfo {
826826
*/
827827
def becomes(rhs: Tree)(implicit ctx: Context): Tree =
828828
if (tree.symbol is Method) {
829-
val setr = tree match {
830-
case Ident(_) =>
831-
val setter = tree.symbol.setter
832-
assert(setter.exists, tree.symbol.showLocated)
833-
ref(tree.symbol.setter)
834-
case Select(qual, _) => qual.select(tree.symbol.setter)
829+
val setter = tree.symbol.setter
830+
assert(setter.exists, tree.symbol.showLocated)
831+
val qual = tree match {
832+
case id: Ident =>
833+
id.tpe match {
834+
case TermRef(prefix: TermRef, _) =>
835+
ref(prefix)
836+
case TermRef(prefix: ThisType, _) =>
837+
This(prefix.cls)
838+
}
839+
case Select(qual, _) => qual
835840
}
836-
setr.appliedTo(rhs)
841+
qual.select(setter).appliedTo(rhs)
837842
}
838843
else Assign(tree, rhs)
839844

tests/pos/i3917.scala

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
class A {
2+
var a = false
3+
}
4+
5+
object B {
6+
var b = false
7+
}
8+
9+
class C {
10+
var c = false
11+
}
12+
13+
object C extends A {
14+
def test = {
15+
a = true
16+
C.a = true
17+
this.a = true
18+
C.this.a = true
19+
20+
import B._
21+
b = true
22+
23+
val c0 = new C
24+
import c0._
25+
c = true
26+
}
27+
}

0 commit comments

Comments
 (0)