aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/typer/Typer.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2014-03-16 12:39:56 +0100
committerDmitry Petrashko <dmitry.petrashko@gmail.com>2014-03-20 13:02:29 +0100
commit574a148fd561a793ee522c2be18ee02214236d80 (patch)
tree34d99eaeed0a35d549c04d8db3ec409e9293baed /src/dotty/tools/dotc/typer/Typer.scala
parentbff6b093d28bfc6918fa86d640353ba60b1a24e4 (diff)
downloaddotty-574a148fd561a793ee522c2be18ee02214236d80.tar.gz
dotty-574a148fd561a793ee522c2be18ee02214236d80.tar.bz2
dotty-574a148fd561a793ee522c2be18ee02214236d80.zip
Added auto-tupling.
Auto-tupling should satisfy the following spec. 1. An application `f(args)` where `f` is a non-overloaded method which has a single, non-repeated parameter as its first parameter list and where args consists of two or more arguments is expanded to `f((args))`. 2. A constructor pattern `C(args)` where `C.unapply` is a non-overloaded method which has a single, non-repeated parameter as its first parameter list and where args consists of two or more arguments is expanded to `C((args))`. Auto-tupling can be disabled by language feature "noAutoTupling". Conflicts: test/dotc/tests.scala
Diffstat (limited to 'src/dotty/tools/dotc/typer/Typer.scala')
-rw-r--r--src/dotty/tools/dotc/typer/Typer.scala12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/dotty/tools/dotc/typer/Typer.scala b/src/dotty/tools/dotc/typer/Typer.scala
index 17c77be89..f961a4544 100644
--- a/src/dotty/tools/dotc/typer/Typer.scala
+++ b/src/dotty/tools/dotc/typer/Typer.scala
@@ -1072,8 +1072,16 @@ class Typer extends Namer with TypeAssigner with Applications with Implicits wit
}
}
- def adaptToArgs(wtp: Type, pt: FunProto) = wtp match {
- case _: MethodType | _: PolyType => tree
+ def adaptToArgs(wtp: Type, pt: FunProto): Tree = wtp match {
+ case _: MethodType | _: PolyType =>
+ def isUnary = wtp.firstParamTypes match {
+ case ptype :: Nil => !ptype.isRepeatedParam
+ case _ => false
+ }
+ if (pt.args.lengthCompare(1) > 0 && isUnary && ctx.canAutoTuple)
+ adaptToArgs(wtp, pt.tupled)
+ else
+ tree
case _ => tryInsertApply(tree, pt) {
val more = tree match {
case Apply(_, _) => " more"