diff options
author | Martin Odersky <odersky@gmail.com> | 2005-11-29 19:10:41 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2005-11-29 19:10:41 +0000 |
commit | 6e137742b177eae56c56a2a778310eee6beca9df (patch) | |
tree | 357ce4d153327c10fe8de59276c224e4894f1018 /sources | |
parent | 97d4a23fa601533adc127e8a3d166aeafd7268ff (diff) | |
download | scala-6e137742b177eae56c56a2a778310eee6beca9df.tar.gz scala-6e137742b177eae56c56a2a778310eee6beca9df.tar.bz2 scala-6e137742b177eae56c56a2a778310eee6beca9df.zip |
*** empty log message ***
Diffstat (limited to 'sources')
-rwxr-xr-x | sources/scala/tools/nsc/symtab/classfile/UnPickler.scala | 7 | ||||
-rwxr-xr-x | sources/scala/tools/nsc/transform/Constructors.scala | 7 | ||||
-rwxr-xr-x | sources/scala/tools/nsc/transform/LambdaLift.scala | 3 |
3 files changed, 14 insertions, 3 deletions
diff --git a/sources/scala/tools/nsc/symtab/classfile/UnPickler.scala b/sources/scala/tools/nsc/symtab/classfile/UnPickler.scala index 0716920b13..3205cb00c1 100755 --- a/sources/scala/tools/nsc/symtab/classfile/UnPickler.scala +++ b/sources/scala/tools/nsc/symtab/classfile/UnPickler.scala @@ -177,7 +177,12 @@ abstract class UnPickler { TypeBounds(readTypeRef(), readTypeRef()) case REFINEDtpe => val clazz = readSymbolRef(); - new RefinedType(until(end, readTypeRef), symScope(clazz)) { override def symbol = clazz } + val ps = until(end, readTypeRef); + val dcls = symScope(clazz); + new RefinedType(ps, dcls) { override def symbol = clazz } +/* //todo replace with but need to rethink initialization first + new RefinedType(until(end, readTypeRef), )) { override def symbol = clazz } +*/ case CLASSINFOtpe => val clazz = readSymbolRef(); ClassInfoType(until(end, readTypeRef), symScope(clazz), clazz) diff --git a/sources/scala/tools/nsc/transform/Constructors.scala b/sources/scala/tools/nsc/transform/Constructors.scala index f7f787d3f2..6f20df4b08 100755 --- a/sources/scala/tools/nsc/transform/Constructors.scala +++ b/sources/scala/tools/nsc/transform/Constructors.scala @@ -74,6 +74,11 @@ abstract class Constructors extends Transform { intoConstructorTransformer.transform( new ChangeOwnerTraverser(oldowner, constr.symbol)(tree)); + def canBeMoved(tree: Tree) = tree match { + case ValDef(_, _, _, _) => !thisRefSeen + case _ => false + } + def mkAssign(to: Symbol, from: Tree): Tree = atPos(to.pos) { localTyper.typed { @@ -102,7 +107,7 @@ abstract class Constructors extends Transform { else { if (rhs != EmptyTree) { val rhs1 = intoConstructor(stat.symbol, rhs); - (if (thisRefSeen) constrStatBuf else constrPrefixBuf) + (if (canBeMoved(stat)) constrPrefixBuf else constrStatBuf) += mkAssign(stat.symbol, rhs1) } defBuf += copy.ValDef(stat, mods, name, tpt, EmptyTree) diff --git a/sources/scala/tools/nsc/transform/LambdaLift.scala b/sources/scala/tools/nsc/transform/LambdaLift.scala index 201f2941fd..04baae1782 100755 --- a/sources/scala/tools/nsc/transform/LambdaLift.scala +++ b/sources/scala/tools/nsc/transform/LambdaLift.scala @@ -265,7 +265,8 @@ abstract class LambdaLift extends InfoTransform { val sym = tree.symbol; tree match { case ClassDef(_, _, _, _, _) => - if (sym.isLocal) liftDef(tree) else tree + val tree1 = addFreeParams(tree, sym); + if (sym.isLocal) liftDef(tree1) else tree1 case DefDef(_, _, _, _, _, _) => val tree1 = addFreeParams(tree, sym); if (sym.isLocal) liftDef(tree1) else tree1 |