summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/typechecker/EtaExpansion.scala
diff options
context:
space:
mode:
authormichelou <michelou@epfl.ch>2006-09-14 14:28:15 +0000
committermichelou <michelou@epfl.ch>2006-09-14 14:28:15 +0000
commit01d4e3645aa72e36b14c97f7ae100ca016deefcb (patch)
tree1d67f6eb94e029a2cd48d455358934e76ec40d69 /src/compiler/scala/tools/nsc/typechecker/EtaExpansion.scala
parent0f3a8b5a8e4af920a51ac380c91283338005137a (diff)
downloadscala-01d4e3645aa72e36b14c97f7ae100ca016deefcb.tar.gz
scala-01d4e3645aa72e36b14c97f7ae100ca016deefcb.tar.bz2
scala-01d4e3645aa72e36b14c97f7ae100ca016deefcb.zip
removed leading/trailing tabs/blanks in typeche...
removed leading/trailing tabs/blanks in typechecker/*.scala
Diffstat (limited to 'src/compiler/scala/tools/nsc/typechecker/EtaExpansion.scala')
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/EtaExpansion.scala64
1 files changed, 40 insertions, 24 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/EtaExpansion.scala b/src/compiler/scala/tools/nsc/typechecker/EtaExpansion.scala
index de70ccf5a7..154ec66c09 100644
--- a/src/compiler/scala/tools/nsc/typechecker/EtaExpansion.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/EtaExpansion.scala
@@ -1,17 +1,23 @@
-/* NSC -- new scala compiler
- * Copyright 2005 LAMP/EPFL
+/* NSC -- new Scala compiler
+ * Copyright 2005-2006 LAMP/EPFL
* @author Martin Odersky
*/
// $Id$
-package scala.tools.nsc.typechecker;
-import scala.collection.mutable.ListBuffer;
-import symtab.Flags._;
+package scala.tools.nsc.typechecker
+import scala.collection.mutable.ListBuffer
+import symtab.Flags._
+
+/** This trait ...
+ *
+ * @author Martin Odersky
+ * @version 1.0
+ */
trait EtaExpansion requires Analyzer {
- import global._;
- import posAssigner.atPos;
+ import global._
+ import posAssigner.atPos
/** Expand partial function applications of type `type'.
*
@@ -27,47 +33,57 @@ trait EtaExpansion requires Analyzer {
* tree is already attributed
*/
def etaExpand(tree: Tree): Tree = {
- val tpe = tree.tpe;
- var cnt = 0;
+ val tpe = tree.tpe
+ var cnt = 0
def freshName() = { cnt = cnt + 1; newTermName("eta$" + cnt) }
- val defs = new ListBuffer[Tree];
+ val defs = new ListBuffer[Tree]
/** Append to `defs' value definitions for all non-stable subexpressions
- * of the function application `tree' */
+ * of the function application <code>tree</code>
+ *
+ * @param tree ...
+ * @return ...
+ */
def liftoutPrefix(tree: Tree): Tree = {
def liftout(tree: Tree): Tree =
- if (treeInfo.isPureExpr(tree)) tree
- else {
- val vname: Name = freshName();
- defs += atPos(tree.pos)(ValDef(Modifiers(SYNTHETIC), vname, TypeTree(), tree));
- Ident(vname) setPos tree.pos
- }
+ if (treeInfo.isPureExpr(tree)) tree
+ else {
+ val vname: Name = freshName()
+ defs += atPos(tree.pos)(ValDef(Modifiers(SYNTHETIC), vname, TypeTree(), tree))
+ Ident(vname) setPos tree.pos
+ }
tree match {
- case Apply(fn, args) =>
+ case Apply(fn, args) =>
copy.Apply(tree, liftoutPrefix(fn), List.mapConserve(args)(liftout)) setType null
- case TypeApply(fn, args) =>
+ case TypeApply(fn, args) =>
copy.TypeApply(tree, liftoutPrefix(fn), args) setType null
- case Select(qual, name) =>
+ case Select(qual, name) =>
copy.Select(tree, liftout(qual), name) setSymbol NoSymbol setType null
case Ident(name) =>
tree
}
}
- /** Eta-expand lifted tree */
+ /** Eta-expand lifted tree.
+ *
+ * @param tree ...
+ * @param tpe ...
+ * @return ...
+ */
def expand(tree: Tree, tpe: Type): Tree = tpe match {
case mt: ImplicitMethodType =>
tree
case MethodType(formals, restpe) =>
val params = formals map (formal =>
- ValDef(Modifiers(SYNTHETIC | PARAM), freshName(), TypeTree().setType(formal), EmptyTree));
- val args = params map (param => Ident(param.name));
+ ValDef(Modifiers(SYNTHETIC | PARAM), freshName(), TypeTree()
+ .setType(formal), EmptyTree))
+ val args = params map (param => Ident(param.name))
atPos(tree.pos)(Function(params, expand(Apply(tree, args), restpe)))
case _ =>
tree
}
- val tree1 = liftoutPrefix(tree);
+ val tree1 = liftoutPrefix(tree)
atPos(tree.pos)(Block(defs.toList, expand(tree1, tpe)))
}
}