diff options
author | Martin Odersky <odersky@gmail.com> | 2014-01-13 18:29:16 +0100 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2014-01-13 18:29:16 +0100 |
commit | 504ca664b403a942983002e41e06efae20b397b5 (patch) | |
tree | 80c9d871939d5e44a8b919a2599e2ae033cae859 /src/dotty/tools/dotc/typer/Typer.scala | |
parent | bbe5f17384e8e1ed5492516ca0d9e397cd770823 (diff) | |
download | dotty-504ca664b403a942983002e41e06efae20b397b5.tar.gz dotty-504ca664b403a942983002e41e06efae20b397b5.tar.bz2 dotty-504ca664b403a942983002e41e06efae20b397b5.zip |
Better handling of assignment.
Problem:
lhs = expr
where the lhs takes an implicit. An implicit argument might not be available at the assignment site, but the epxression should typecheck anyway. Test case in SymDenotations.NoDenotation.
Diffstat (limited to 'src/dotty/tools/dotc/typer/Typer.scala')
-rw-r--r-- | src/dotty/tools/dotc/typer/Typer.scala | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/src/dotty/tools/dotc/typer/Typer.scala b/src/dotty/tools/dotc/typer/Typer.scala index 18f6fa89a..a416d734a 100644 --- a/src/dotty/tools/dotc/typer/Typer.scala +++ b/src/dotty/tools/dotc/typer/Typer.scala @@ -460,15 +460,15 @@ class Typer extends Namer with Applications with Implicits { untpd.Select(untpd.TypedSplice(fn), nme.update), (args map untpd.TypedSplice) :+ tree.rhs), pt) case lhs => - val lhs1 = typed(lhs) - lhs1.tpe match { + val lhsCore = typedUnadapted(lhs) + def lhs1 = typed(untpd.TypedSplice(lhsCore)) + lhsCore.tpe match { case ref: TermRef if ref.symbol is (Mutable, butNot = Accessor) => cpy.Assign(tree, lhs1, typed(tree.rhs, ref.info)).withType(defn.UnitType) case _ => def reassignmentToVal = - errorTree(cpy.Assign(tree, lhs1, typed(tree.rhs, lhs1.tpe.widen)), + errorTree(cpy.Assign(tree, lhsCore, typed(tree.rhs, lhs1.tpe.widen)), "reassignment to val") - val lhsCore = stripApply(lhs1) // need to strip off any implicit parameters lhsCore.tpe match { case ref: TermRef => // todo: further conditions to impose on getter? val pre = ref.prefix |