diff options
author | schinz <schinz@epfl.ch> | 2003-12-16 09:10:42 +0000 |
---|---|---|
committer | schinz <schinz@epfl.ch> | 2003-12-16 09:10:42 +0000 |
commit | fd5b71760eca5aeeedd1b734984f29c346712760 (patch) | |
tree | fac06c18d22daeced53c7563a060e09d77215c31 | |
parent | f5ccd18bd6b12ceb9a75cc3c54f212e26c3105ef (diff) | |
download | scala-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.java | 14 |
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()); |