diff options
author | buraq <buraq@epfl.ch> | 2005-05-25 16:28:05 +0000 |
---|---|---|
committer | buraq <buraq@epfl.ch> | 2005-05-25 16:28:05 +0000 |
commit | 2ab6994175646d212f9254bac51b87527f3150a3 (patch) | |
tree | 5c3069b2a556aa5666895cf0a426ec99f77fad5c | |
parent | 11f1938e73b7748e3d8ef1a532096d2a3a81c4dc (diff) | |
download | scala-2ab6994175646d212f9254bac51b87527f3150a3.tar.gz scala-2ab6994175646d212f9254bac51b87527f3150a3.tar.bz2 scala-2ab6994175646d212f9254bac51b87527f3150a3.zip |
bugfix of #423
-rw-r--r-- | sources/scala/tools/scalac/transformer/UnCurry.scala | 26 | ||||
-rw-r--r-- | sources/scalac/transformer/LambdaLift.java | 6 |
2 files changed, 20 insertions, 12 deletions
diff --git a/sources/scala/tools/scalac/transformer/UnCurry.scala b/sources/scala/tools/scalac/transformer/UnCurry.scala index d5e999f81b..0205e3e0b4 100644 --- a/sources/scala/tools/scalac/transformer/UnCurry.scala +++ b/sources/scala/tools/scalac/transformer/UnCurry.scala @@ -156,17 +156,25 @@ class UnCurry(global: scalac_Global, descr: UnCurryPhase) extends OwnerTransform // argument to parameterless function e => ( => e) val ftype: Type = fn.getType(); val fn1: Tree = transform(fn); - val myInArray: boolean = TreeInfo.methSymbol(fn1) == global.definitions.PREDEF_ARRAY(); - inArray = myInArray; + val myInArray: boolean = + TreeInfo.methSymbol(fn1) == global.definitions.PREDEF_ARRAY(); + val old = inArray; + inArray = myInArray; // a hack to communicate with toSequence. val args1 = transformArgs(tree.pos, args, ftype); - if (myInArray) - fn1 match { - case Tree$Apply(TypeApply(Select(fn2, _), targs), _) => - return gen.mkBlock(args1(0).pos, fn2, args1(0)) - case _ => - assert(false, "dead") + inArray = old; + if (myInArray) { + args1(0).getType().baseType(global.definitions.ARRAY_CLASS).match { + case Type.NoType => + copy.Apply(tree,fn, Predef.Array[Tree]{args1(0)}); + case _ => fn1 match { + case Tree$Apply(TypeApply(Select(fn2, _), targs), _) => + return gen.mkBlock(args1(0).pos, fn2, args1(0)) + case _ => + assert(false, "dead") + } } - if (TreeInfo.methSymbol(fn1) == global.definitions.ANY_MATCH && !(args1(0).isInstanceOf[Tree.Visitor])) { + } + if (TreeInfo.methSymbol(fn1) == global.definitions.ANY_MATCH && !(args1(0).isInstanceOf[Tree.Visitor])) { TreeInfo.methPart(fn1) match { case Tree$Select(qual, name) => assert(name == Names._match); diff --git a/sources/scalac/transformer/LambdaLift.java b/sources/scalac/transformer/LambdaLift.java index 18af31ac55..3a8456d9f4 100644 --- a/sources/scalac/transformer/LambdaLift.java +++ b/sources/scalac/transformer/LambdaLift.java @@ -459,8 +459,8 @@ public class LambdaLift extends OwnerTransformer Tree fn1 = transform(fn); switch (fn1) { case TypeApply(Tree fn2, Tree[] targs): - if (args.length == 1 && fn2.symbol() == definitions.PREDEF_ARRAY()) { - throw new ApplicationError("this should not happen"); + //if (args.length == 1 && fn2.symbol() == definitions.PREDEF_ARRAY()) { + // throw new ApplicationError("this should not happen"); /* // this moved to UnCurry switch (args[0]) { case Sequence(Tree[] items): @@ -479,7 +479,7 @@ public class LambdaLift extends OwnerTransformer } } */ - } + //} fn1 = copy.TypeApply( fn1, fn2, addFreeArgs(tree.pos, get(free.ftvs, fsym), targs, true)); break; |