diff options
author | michelou <michelou@epfl.ch> | 2006-09-14 14:28:15 +0000 |
---|---|---|
committer | michelou <michelou@epfl.ch> | 2006-09-14 14:28:15 +0000 |
commit | 01d4e3645aa72e36b14c97f7ae100ca016deefcb (patch) | |
tree | 1d67f6eb94e029a2cd48d455358934e76ec40d69 /src/compiler/scala/tools/nsc/typechecker/EtaExpansion.scala | |
parent | 0f3a8b5a8e4af920a51ac380c91283338005137a (diff) | |
download | scala-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.scala | 64 |
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))) } } |