diff options
author | Martin Odersky <odersky@gmail.com> | 2004-06-03 12:33:10 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2004-06-03 12:33:10 +0000 |
commit | 682856e0623ddc61442f644e4935ce449480a958 (patch) | |
tree | cff46c30cb93f91230cb24713013d3d80ecb1509 /sources/scalac/transformer | |
parent | d94a30d34746ddbe4274c00231734e2bbc3e9ff5 (diff) | |
download | scala-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.java | 14 | ||||
-rw-r--r-- | sources/scalac/transformer/UnCurry.java | 9 | ||||
-rw-r--r-- | sources/scalac/transformer/UnCurryPhase.java | 2 |
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; } |