summaryrefslogtreecommitdiff
path: root/sources/scalac/transformer
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2004-06-03 12:33:10 +0000
committerMartin Odersky <odersky@gmail.com>2004-06-03 12:33:10 +0000
commit682856e0623ddc61442f644e4935ce449480a958 (patch)
treecff46c30cb93f91230cb24713013d3d80ecb1509 /sources/scalac/transformer
parentd94a30d34746ddbe4274c00231734e2bbc3e9ff5 (diff)
downloadscala-682856e0623ddc61442f644e4935ce449480a958.tar.gz
scala-682856e0623ddc61442f644e4935ce449480a958.tar.bz2
scala-682856e0623ddc61442f644e4935ce449480a958.zip
*** empty log message ***
Diffstat (limited to 'sources/scalac/transformer')
-rw-r--r--sources/scalac/transformer/AddInterfaces.java14
-rw-r--r--sources/scalac/transformer/UnCurry.java9
-rw-r--r--sources/scalac/transformer/UnCurryPhase.java2
3 files changed, 19 insertions, 6 deletions
diff --git a/sources/scalac/transformer/AddInterfaces.java b/sources/scalac/transformer/AddInterfaces.java
index 82bd3d4fdd..a54bcc95e8 100644
--- a/sources/scalac/transformer/AddInterfaces.java
+++ b/sources/scalac/transformer/AddInterfaces.java
@@ -222,15 +222,21 @@ public class AddInterfaces extends GenTransformer {
/**
* Returns the tree of the given class whose body is built by
* adding to the given body the class members. Non-abstract
- * methods are removed from the given method map. All other
+ * methods are removed from the ngiven method map. All other
* members are generated from their symbol.
*/
private Tree getClassTree(Symbol clasz, TreeList body, Map methods) {
Scope members = clasz.nextInfo().members();
+ /*
+ for (Scope.SymbolIterator i = members.iterator(false); i.hasNext(); ) {
+ Symbol sym = i.next();
+ System.out.println(clasz + " defines " + sym + ":" + sym.getType());
+ }
+ */
for (Scope.SymbolIterator i = members.iterator(true); i.hasNext(); ) {
Symbol member = i.next();
if (!member.isTerm()) continue;
- body.append(getMemberTree(member, methods));
+ body.append(getMemberTree(clasz, member, methods));
}
return gen.ClassDef(clasz, body.toArray());
}
@@ -240,11 +246,11 @@ public class AddInterfaces extends GenTransformer {
* removed from the given method map. All other members are
* generated from their symbol.
*/
- private Tree getMemberTree(Symbol member, Map methods) {
+ private Tree getMemberTree(Symbol clasz, Symbol member, Map methods) {
if (!member.isMethod()) return gen.ValDef(member, Tree.Empty);
if (member.isDeferred()) return gen.DefDef(member, Tree.Empty);
Tree method = (Tree)methods.remove(member);
- assert method != null: Debug.show(member);
+ assert method != null: Debug.show(clasz + "." + member + ":" + member.info() + member.locationString());
return method;
}
diff --git a/sources/scalac/transformer/UnCurry.java b/sources/scalac/transformer/UnCurry.java
index f088ca6943..9eadc4d85f 100644
--- a/sources/scalac/transformer/UnCurry.java
+++ b/sources/scalac/transformer/UnCurry.java
@@ -113,7 +113,14 @@ public class UnCurry extends OwnerTransformer
System.out.flush();
//uncurry type and symbol
Type prevtype = tree.type;
- if (prevtype != null) tree.type = descr.uncurry(prevtype);
+ if (prevtype != null) {
+ switch (prevtype) {
+ case OverloadedType(_, _):
+ assert tree.symbol() != null;
+ prevtype = tree.symbol().removeInheritedOverloaded(prevtype);
+ }
+ tree.type = descr.uncurry(prevtype);
+ }
switch (tree) {
case ClassDef(_, _, AbsTypeDef[] tparams, ValDef[][] vparams, Tree tpe, Template impl):
return copy.ClassDef(
diff --git a/sources/scalac/transformer/UnCurryPhase.java b/sources/scalac/transformer/UnCurryPhase.java
index 00a966b3eb..79b96f0094 100644
--- a/sources/scalac/transformer/UnCurryPhase.java
+++ b/sources/scalac/transformer/UnCurryPhase.java
@@ -30,7 +30,7 @@ public class UnCurryPhase extends Phase implements Modifiers {
* - if symbol is a def parameter with transformed type T, return () => T
*/
public Type transformInfo(Symbol sym, Type tp0) {
- Type tp1 = uncurry(tp0);
+ Type tp1 = uncurry(sym.removeInheritedOverloaded(tp0));
if (sym.isDefParameter()) return global.definitions.FUNCTION_TYPE(Type.EMPTY_ARRAY, tp1);
else return tp1;
}