diff options
author | Martin Odersky <odersky@gmail.com> | 2016-02-16 16:11:09 +0100 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2016-02-16 16:11:09 +0100 |
commit | 17296763448bf86c9f95b1458e5722b9829e8b3e (patch) | |
tree | 7554d9011d9f9eb140a3e0680265ad3eccb77457 /src/dotty/tools/dotc | |
parent | 06bfbd379fe350a93e3de38940fda0e359a07e1d (diff) | |
download | dotty-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/tools/dotc')
-rw-r--r-- | src/dotty/tools/dotc/ast/Desugar.scala | 9 | ||||
-rw-r--r-- | src/dotty/tools/dotc/typer/Typer.scala | 2 |
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] = |