summaryrefslogtreecommitdiff
path: root/sources/scalac/transformer/AddInterfaces.java
diff options
context:
space:
mode:
Diffstat (limited to 'sources/scalac/transformer/AddInterfaces.java')
-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());