summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2005-11-29 19:10:41 +0000
committerMartin Odersky <odersky@gmail.com>2005-11-29 19:10:41 +0000
commit6e137742b177eae56c56a2a778310eee6beca9df (patch)
tree357ce4d153327c10fe8de59276c224e4894f1018
parent97d4a23fa601533adc127e8a3d166aeafd7268ff (diff)
downloadscala-6e137742b177eae56c56a2a778310eee6beca9df.tar.gz
scala-6e137742b177eae56c56a2a778310eee6beca9df.tar.bz2
scala-6e137742b177eae56c56a2a778310eee6beca9df.zip
*** empty log message ***
-rwxr-xr-xsources/scala/tools/nsc/symtab/classfile/UnPickler.scala7
-rwxr-xr-xsources/scala/tools/nsc/transform/Constructors.scala7
-rwxr-xr-xsources/scala/tools/nsc/transform/LambdaLift.scala3
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