aboutsummaryrefslogtreecommitdiff
path: root/src/dotty
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2016-02-16 16:11:09 +0100
committerMartin Odersky <odersky@gmail.com>2016-02-16 16:11:09 +0100
commit17296763448bf86c9f95b1458e5722b9829e8b3e (patch)
tree7554d9011d9f9eb140a3e0680265ad3eccb77457 /src/dotty
parent06bfbd379fe350a93e3de38940fda0e359a07e1d (diff)
downloaddotty-17296763448bf86c9f95b1458e5722b9829e8b3e.tar.gz
dotty-17296763448bf86c9f95b1458e5722b9829e8b3e.tar.bz2
dotty-17296763448bf86c9f95b1458e5722b9829e8b3e.zip
Untuple using `def` not `val`.
As retronym noted on #897, `val` forces to early.
Diffstat (limited to 'src/dotty')
-rw-r--r--src/dotty/tools/dotc/ast/Desugar.scala9
-rw-r--r--src/dotty/tools/dotc/typer/Typer.scala2
2 files changed, 6 insertions, 5 deletions
diff --git a/src/dotty/tools/dotc/ast/Desugar.scala b/src/dotty/tools/dotc/ast/Desugar.scala
index c1083d26d..991940f10 100644
--- a/src/dotty/tools/dotc/ast/Desugar.scala
+++ b/src/dotty/tools/dotc/ast/Desugar.scala
@@ -591,18 +591,19 @@ object desugar {
/** Map n-ary function `(p1, ..., pn) => body` where n != 1 to unary function as follows:
*
* x$1 => {
- * val p1 = x$1._1
+ * def p1 = x$1._1
* ...
- * val pn = x$1._n
+ * def pn = x$1._n
* body
* }
*/
- def makeUnaryCaseLambda(params: List[ValDef], body: Tree)(implicit ctx: Context): Tree = {
+ def makeTupledFunction(params: List[ValDef], body: Tree)(implicit ctx: Context): Tree = {
val param = makeSyntheticParameter()
def selector(n: Int) = Select(refOfDef(param), nme.selectorName(n))
val vdefs =
params.zipWithIndex.map{
- case(param, idx) => cpy.ValDef(param)(rhs = selector(idx))
+ case (param, idx) =>
+ DefDef(param.name, Nil, Nil, TypeTree(), selector(idx)).withPos(param.pos)
}
Function(param :: Nil, Block(vdefs, body))
}
diff --git a/src/dotty/tools/dotc/typer/Typer.scala b/src/dotty/tools/dotc/typer/Typer.scala
index f1e1d9286..4d2ab3552 100644
--- a/src/dotty/tools/dotc/typer/Typer.scala
+++ b/src/dotty/tools/dotc/typer/Typer.scala
@@ -624,7 +624,7 @@ class Typer extends Namer with TypeAssigner with Applications with Implicits wit
val desugared =
if (protoFormals.length == 1 && params.length != 1 && ptIsCorrectProduct(protoFormals.head)) {
- desugar.makeUnaryCaseLambda(params, fnBody)
+ desugar.makeTupledFunction(params, fnBody)
}
else {
val inferredParams: List[untpd.ValDef] =