diff options
author | Paul Phillips <paulp@improving.org> | 2009-10-21 20:57:27 +0000 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2009-10-21 20:57:27 +0000 |
commit | 7349476e5cf7984acf40055cb55d78cbaed41043 (patch) | |
tree | 527229fd0cdab2451fd9feabfcdef2730f9ec453 /src/compiler/scala/tools/nsc/transform/UnCurry.scala | |
parent | 322b823276a3f40db95bb3306c842021e77572df (diff) | |
download | scala-7349476e5cf7984acf40055cb55d78cbaed41043.tar.gz scala-7349476e5cf7984acf40055cb55d78cbaed41043.tar.bz2 scala-7349476e5cf7984acf40055cb55d78cbaed41043.zip |
A selection of cleanups stemming from recent in...
A selection of cleanups stemming from recent investigations.
Diffstat (limited to 'src/compiler/scala/tools/nsc/transform/UnCurry.scala')
-rw-r--r-- | src/compiler/scala/tools/nsc/transform/UnCurry.scala | 27 |
1 files changed, 12 insertions, 15 deletions
diff --git a/src/compiler/scala/tools/nsc/transform/UnCurry.scala b/src/compiler/scala/tools/nsc/transform/UnCurry.scala index a0afdeabaf..24c5493858 100644 --- a/src/compiler/scala/tools/nsc/transform/UnCurry.scala +++ b/src/compiler/scala/tools/nsc/transform/UnCurry.scala @@ -72,11 +72,11 @@ abstract class UnCurry extends InfoTransform with TypingTransformers { apply(MethodType(List(), restpe)) case PolyType(tparams, restpe) => PolyType(tparams, apply(MethodType(List(), restpe))) - case TypeRef(pre, sym, List(arg)) if (sym == ByNameParamClass) => + case TypeRef(pre, ByNameParamClass, List(arg)) => apply(functionType(List(), arg)) - case TypeRef(pre, sym, args) if (sym == RepeatedParamClass) => + case TypeRef(pre, RepeatedParamClass, args) => apply(appliedType(SeqClass.typeConstructor, args)) - case TypeRef(pre, sym, args) if (sym == JavaRepeatedParamClass) => + case TypeRef(pre, JavaRepeatedParamClass, args) => apply(arrayType( if (isUnboundedGeneric(args.head)) ObjectClass.tpe else args.head)) case _ => @@ -557,12 +557,11 @@ abstract class UnCurry extends InfoTransform with TypingTransformers { inPattern = false val fn1 = transform(fn) inPattern = true - val args1 = transformTrees( - if (fn.symbol.name == nme.unapply) - args - else if (fn.symbol.name == nme.unapplySeq) - transformArgs(tree.pos, fn.symbol, args, analyzer.unapplyTypeListFromReturnTypeSeq(fn.tpe)) - else { assert(false,"internal error: UnApply node has wrong symbol"); null }) + val args1 = transformTrees(fn.symbol.name match { + case nme.unapply => args + case nme.unapplySeq => transformArgs(tree.pos, fn.symbol, args, analyzer.unapplyTypeListFromReturnTypeSeq(fn.tpe)) + case _ => Predef.error("internal error: UnApply node has wrong symbol") + }) treeCopy.UnApply(tree, fn1, args1) case Apply(fn, args) => @@ -619,7 +618,7 @@ abstract class UnCurry extends InfoTransform with TypingTransformers { } setType uncurryTreeType(tree.tpe) def postTransform(tree: Tree): Tree = atPhase(phase.next) { - def applyUnary(tree: Tree): Tree = + def applyUnary(): Tree = if (tree.symbol.isMethod && (!tree.tpe.isInstanceOf[PolyType] || tree.tpe.typeParams.isEmpty)) { if (!tree.tpe.isInstanceOf[MethodType]) tree.tpe = MethodType(List(), tree.tpe); @@ -666,11 +665,9 @@ abstract class UnCurry extends InfoTransform with TypingTransformers { treeCopy.Apply(tree, fn, args ::: args1) case Ident(name) => assert(name != nme.WILDCARD_STAR.toTypeName) - applyUnary(tree); - case Select(qual, name) => - applyUnary(tree) - case TypeApply(_, _) => - applyUnary(tree) + applyUnary() + case Select(_, _) | TypeApply(_, _) => + applyUnary() case Return(expr) if (tree.symbol != currentOwner.enclMethod || currentOwner.hasFlag(LAZY)) => if (settings.debug.value) log("non local return in "+tree.symbol+" from "+currentOwner.enclMethod) atPos(tree.pos)(nonLocalReturnThrow(expr, tree.symbol)) |