summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorschinz <schinz@epfl.ch>2003-12-16 09:10:42 +0000
committerschinz <schinz@epfl.ch>2003-12-16 09:10:42 +0000
commitfd5b71760eca5aeeedd1b734984f29c346712760 (patch)
treefac06c18d22daeced53c7563a060e09d77215c31
parentf5ccd18bd6b12ceb9a75cc3c54f212e26c3105ef (diff)
downloadscala-fd5b71760eca5aeeedd1b734984f29c346712760.tar.gz
scala-fd5b71760eca5aeeedd1b734984f29c346712760.tar.bz2
scala-fd5b71760eca5aeeedd1b734984f29c346712760.zip
- bug fix: correct the symbol of RETURN nodes
-rw-r--r--sources/scalac/transformer/AddInterfaces.java14
1 files changed, 14 insertions, 0 deletions
diff --git a/sources/scalac/transformer/AddInterfaces.java b/sources/scalac/transformer/AddInterfaces.java
index dd58d55799..76326afd5c 100644
--- a/sources/scalac/transformer/AddInterfaces.java
+++ b/sources/scalac/transformer/AddInterfaces.java
@@ -153,6 +153,20 @@ class AddInterfaces extends Transformer {
return newTree;
}
+ case Return(Tree expr): {
+ Symbol sym = tree.symbol();
+ Symbol owner = sym.owner();
+ if (owner.isClass() && phase.needInterface(owner)) {
+ Symbol classOwner = phase.getClassSymbol(owner);
+ Map ownerMemberMap = phase.getClassMemberMap(classOwner);
+ Symbol newSym = (Symbol)ownerMemberMap.get(sym);
+ assert newSym != null
+ : Debug.show(sym) + " not in " + ownerMemberMap;
+ return gen.Return(tree.pos, newSym, transform(expr));
+ } else
+ return super.transform(tree);
+ }
+
case This(_): {
// Use class symbol for references to "this".
Symbol classThisSym = phase.getClassSymbol(tree.symbol());