diff options
author | schinz <schinz@epfl.ch> | 2003-03-06 08:05:20 +0000 |
---|---|---|
committer | schinz <schinz@epfl.ch> | 2003-03-06 08:05:20 +0000 |
commit | efa9d346d48c7aa6179b0b60561f1e49fa1d8f9b (patch) | |
tree | bdb2901820982da18ee9d7bf3883407c07a68df5 /sources | |
parent | dc5897f483aa623fd278bf455e4eafd699ff927e (diff) | |
download | scala-efa9d346d48c7aa6179b0b60561f1e49fa1d8f9b.tar.gz scala-efa9d346d48c7aa6179b0b60561f1e49fa1d8f9b.tar.bz2 scala-efa9d346d48c7aa6179b0b60561f1e49fa1d8f9b.zip |
- bug fix: correct owner of values belonging to...
- bug fix: correct owner of values belonging to methods
Diffstat (limited to 'sources')
-rw-r--r-- | sources/scalac/transformer/AddInterfaces.java | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/sources/scalac/transformer/AddInterfaces.java b/sources/scalac/transformer/AddInterfaces.java index 5715edb7b9..95da9d90b3 100644 --- a/sources/scalac/transformer/AddInterfaces.java +++ b/sources/scalac/transformer/AddInterfaces.java @@ -18,6 +18,8 @@ import Tree.*; import java.util.*; +// TODO see why lambda-lifted functions end up in the interface + /** * Add, for each class, an interface with the same name, to be used * later by mixin expansion. More specifically: @@ -131,7 +133,7 @@ class AddInterfaces extends SubstTransformer { case Kinds.CLASS: return needInterface(member); case Kinds.VAL: - return member.isMethod(); + return member.isMethod() && !member.isPrimaryConstructor(); default: throw Debug.abort("unknown kind: " + member.kind); } @@ -487,6 +489,17 @@ class AddInterfaces extends SubstTransformer { return super.transform(tree); } + case ValDef(_, _, _, _): { + Symbol sym = tree.symbol(); + Symbol owner = sym.owner(); + if (!sym.isParameter() && ifaceMemberToClass.containsKey(owner)) { + Symbol newOwner = (Symbol)ifaceMemberToClass.get(owner); + sym.setOwner(newOwner); + global.log("new owner for " + Debug.show(sym) + " => " + newOwner); + } + return super.transform(tree); + } + case Select(Super(_), Name selector): { // Use class member symbol for "super" references. Symbol sym = tree.symbol(); |