From 2d647439fb14155aa1e24e42c11bdcc7596d08d9 Mon Sep 17 00:00:00 2001 From: Jason Zaugg Date: Tue, 28 Oct 2014 22:00:45 +1000 Subject: [PATCH] SIP-23 Account for literal types in varargs translation Before: sandbox/test.scala:2: error: type mismatch; found : Array[1] required: Array[Int] --- src/compiler/scala/tools/nsc/transform/UnCurry.scala | 2 +- test/files/run/literal-type-varargs.flags | 1 + test/files/run/literal-type-varargs.scala | 4 ++++ 3 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 test/files/run/literal-type-varargs.flags create mode 100644 test/files/run/literal-type-varargs.scala diff --git a/src/compiler/scala/tools/nsc/transform/UnCurry.scala b/src/compiler/scala/tools/nsc/transform/UnCurry.scala index 3544dc9966d..19b2d4a66d2 100644 --- a/src/compiler/scala/tools/nsc/transform/UnCurry.scala +++ b/src/compiler/scala/tools/nsc/transform/UnCurry.scala @@ -322,7 +322,7 @@ abstract class UnCurry extends InfoTransform args.take(formals.length - 1) :+ (suffix setType formals.last) } - val args1 = if (isVarArgTypes(formals)) transformVarargs(formals.last.typeArgs.head) else args + val args1 = if (isVarArgTypes(formals)) transformVarargs(formals.last.typeArgs.head.widen) else args map2(formals, args1) { (formal, arg) => if (!isByNameParamType(formal)) diff --git a/test/files/run/literal-type-varargs.flags b/test/files/run/literal-type-varargs.flags new file mode 100644 index 00000000000..48fd867160b --- /dev/null +++ b/test/files/run/literal-type-varargs.flags @@ -0,0 +1 @@ +-Xexperimental diff --git a/test/files/run/literal-type-varargs.scala b/test/files/run/literal-type-varargs.scala new file mode 100644 index 00000000000..3b78af727dc --- /dev/null +++ b/test/files/run/literal-type-varargs.scala @@ -0,0 +1,4 @@ +object Test extends App { + val x = List.apply[1](1) + assert(x == List(1)) +}