summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/transform/UnCurry.scala
diff options
context:
space:
mode:
authorBurak Emir <emir@epfl.ch>2006-12-25 11:30:13 +0000
committerBurak Emir <emir@epfl.ch>2006-12-25 11:30:13 +0000
commit8c2a69d14e1566a7468a530ccfc2d08608483753 (patch)
tree3afcb07916c49a5c405a16c4a0e73229e7ec85ad /src/compiler/scala/tools/nsc/transform/UnCurry.scala
parent2820d1ff440f460e4fdd124cccec2bfa52dffaa8 (diff)
downloadscala-8c2a69d14e1566a7468a530ccfc2d08608483753.tar.gz
scala-8c2a69d14e1566a7468a530ccfc2d08608483753.tar.bz2
scala-8c2a69d14e1566a7468a530ccfc2d08608483753.zip
unapply <-> as in "Matching with Objects"
Diffstat (limited to 'src/compiler/scala/tools/nsc/transform/UnCurry.scala')
-rw-r--r--src/compiler/scala/tools/nsc/transform/UnCurry.scala14
1 files changed, 9 insertions, 5 deletions
diff --git a/src/compiler/scala/tools/nsc/transform/UnCurry.scala b/src/compiler/scala/tools/nsc/transform/UnCurry.scala
index 167b8be1c8..05bd8b664d 100644
--- a/src/compiler/scala/tools/nsc/transform/UnCurry.scala
+++ b/src/compiler/scala/tools/nsc/transform/UnCurry.scala
@@ -368,12 +368,16 @@ abstract class UnCurry extends InfoTransform with TypingTransformers {
mainTransform(new TreeSubstituter(vparams map (.symbol), args).transform(body))
}
- case UnApply(fn, args) =>
- if(fn.symbol.name == nme.unapply) copy.UnApply(tree, fn, transformTrees(args))
- else {
- val formals = definitions.unapplySeqResultToMethodSig(fn.tpe)
+ case UnApply(fn, args) if nme.unapply == fn.symbol.name =>
+ copy.UnApply(tree, fn, transformTrees(args))
+
+ case UnApply(fn, args) if nme.unapplySeq == fn.symbol.name =>
+ val formals = definitions.unapplyTypeListFromReturnTypeSeq(fn.tpe)
copy.UnApply(tree, fn, transformTrees(transformArgs(tree.pos, args, formals)))
- }
+
+ case UnApply(_, _) =>
+ assert(false,"internal error: UnApply node has wrong symbol"); null
+
case Apply(fn, args) =>
if (settings.noassertions.value &&
(fn.symbol ne null) &&