Skip to content

Commit 9f7bb74

Browse files
committed
Fix #3917: Prefix setter call by this when applied on Ident
1 parent 5b1b747 commit 9f7bb74

File tree

2 files changed

+18
-7
lines changed

2 files changed

+18
-7
lines changed

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

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -826,14 +826,13 @@ 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 _: Ident => This(ctx.owner.enclosingClass.asClass)
833+
case Select(qual, _) => qual
835834
}
836-
setr.appliedTo(rhs)
835+
qual.select(setter).appliedTo(rhs)
837836
}
838837
else Assign(tree, rhs)
839838

tests/pos/i3917.scala

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
class Hello {
2+
var verbose = false
3+
}
4+
5+
object Main extends Hello {
6+
def test = {
7+
verbose = true
8+
Main.verbose = true
9+
this.verbose = true
10+
Main.this.verbose = true
11+
}
12+
}

0 commit comments

Comments
 (0)