diff options
author | Martin Odersky <odersky@gmail.com> | 2009-10-13 15:39:22 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2009-10-13 15:39:22 +0000 |
commit | 820e0bd94001e2732b119d217a12844e4720d165 (patch) | |
tree | 0307e5751c9b3e2decb605ed7145429887df73d1 /src/compiler/scala/tools/nsc/transform/UnCurry.scala | |
parent | 04d037f2e1addcd36f0d990c4f1d37106317959e (diff) | |
download | scala-820e0bd94001e2732b119d217a12844e4720d165.tar.gz scala-820e0bd94001e2732b119d217a12844e4720d165.tar.bz2 scala-820e0bd94001e2732b119d217a12844e4720d165.zip |
Fixed #2422 abd #2461
Diffstat (limited to 'src/compiler/scala/tools/nsc/transform/UnCurry.scala')
-rw-r--r-- | src/compiler/scala/tools/nsc/transform/UnCurry.scala | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/src/compiler/scala/tools/nsc/transform/UnCurry.scala b/src/compiler/scala/tools/nsc/transform/UnCurry.scala index 12711a36c6..a0afdeabaf 100644 --- a/src/compiler/scala/tools/nsc/transform/UnCurry.scala +++ b/src/compiler/scala/tools/nsc/transform/UnCurry.scala @@ -392,7 +392,9 @@ abstract class UnCurry extends InfoTransform with TypingTransformers { Select(predef, "wrap"+elemtp.typeSymbol.name+"Array") else TypeApply(Select(predef, "genericWrapArray"), List(TypeTree(elemtp))) - Apply(meth, List(tree)) + val adaptedTree = // need to cast to Array[elemtp], as arrays are not covariant + gen.mkCast(tree, arrayType(elemtp)) + Apply(meth, List(adaptedTree)) } } } @@ -401,11 +403,15 @@ abstract class UnCurry extends InfoTransform with TypingTransformers { def sequenceToArray(tree: Tree) = { val toArraySym = tree.tpe member nme.toArray assert(toArraySym != NoSymbol) + def getManifest(tp: Type): Tree = { + val manifestOpt = localTyper.findManifest(tp, false) + if (!manifestOpt.tree.isEmpty) manifestOpt.tree + else if (tp.bounds.hi ne tp) getManifest(tp.bounds.hi) + else localTyper.getManifestTree(tree.pos, tp, false) + } atPhase(phase.next) { localTyper.typedPos(pos) { - Apply( - gen.mkAttributedSelect(tree, toArraySym), - List(localTyper.getManifestTree(tree.pos, tree.tpe.typeArgs.head, false))) + Apply(gen.mkAttributedSelect(tree, toArraySym), List(getManifest(tree.tpe.typeArgs.head))) } } } |