summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpaltherr <paltherr@epfl.ch>2003-12-16 07:41:51 +0000
committerpaltherr <paltherr@epfl.ch>2003-12-16 07:41:51 +0000
commit0310ff02f3553c59dafd717c70f9bf6568f76f1e (patch)
treec8d7f7f006fa94a330ec159d8e5f21c2f3526888
parent76d02d660b9fd2d4e3418ce00fa8b6b6f3ed7575 (diff)
downloadscala-0310ff02f3553c59dafd717c70f9bf6568f76f1e.tar.gz
scala-0310ff02f3553c59dafd717c70f9bf6568f76f1e.tar.bz2
scala-0310ff02f3553c59dafd717c70f9bf6568f76f1e.zip
- Added some code to make sure that owner of no...
- Added some code to make sure that owner of non-member is always a member
-rw-r--r--sources/scalac/transformer/LambdaLift.java18
1 files changed, 17 insertions, 1 deletions
diff --git a/sources/scalac/transformer/LambdaLift.java b/sources/scalac/transformer/LambdaLift.java
index 028dda4316..c29232bfd5 100644
--- a/sources/scalac/transformer/LambdaLift.java
+++ b/sources/scalac/transformer/LambdaLift.java
@@ -525,10 +525,14 @@ public class LambdaLift extends OwnerTransformer
return newparams;
}
- /** change symbol of tree so that
+ /** For members:
+ * change symbol of tree so that
* owner = currentClass
* newparams are added
* enter symbol in scope of currentClass
+ * For non-members:
+ * change symbol of tree so that
+ * owner = currentMember
*/
void liftSymbol(Tree tree) {
switch (tree) {
@@ -549,6 +553,18 @@ public class LambdaLift extends OwnerTransformer
liftSymbol(
sym, get(free.ftvs, sym).toArray(),
ftvsParams(sym), fvsParams(sym));
+ break;
+
+ case ValDef(_, _, _, _):
+ case LabelDef(_, _, _):
+ Symbol sym = tree.symbol();
+ assert sym.isLocal() : sym;
+ if (!sym.owner().owner().isClass()) {
+ assert sym.owner().owner().owner().isClass(): tree;
+ sym.setOwner(sym.owner().owner());
+ }
+ break;
+
}
}