summaryrefslogtreecommitdiff
path: root/sources/scalac/transformer/AddInterfaces.java
diff options
context:
space:
mode:
authorschinz <schinz@epfl.ch>2003-03-06 08:05:20 +0000
committerschinz <schinz@epfl.ch>2003-03-06 08:05:20 +0000
commitefa9d346d48c7aa6179b0b60561f1e49fa1d8f9b (patch)
treebdb2901820982da18ee9d7bf3883407c07a68df5 /sources/scalac/transformer/AddInterfaces.java
parentdc5897f483aa623fd278bf455e4eafd699ff927e (diff)
downloadscala-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/scalac/transformer/AddInterfaces.java')
-rw-r--r--sources/scalac/transformer/AddInterfaces.java15
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();