diff options
author | Martin Odersky <odersky@gmail.com> | 2004-07-01 14:03:41 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2004-07-01 14:03:41 +0000 |
commit | cffaae565155f3ffa95865dc469c1a1d7cbe0498 (patch) | |
tree | 4db08d4a30af008e2deeb4ee2ea45f0d69aa7654 /sources/scalac/symtab/classfile | |
parent | c8065927475a558d9ad4580dedcc1b91296f9da4 (diff) | |
download | scala-cffaae565155f3ffa95865dc469c1a1d7cbe0498.tar.gz scala-cffaae565155f3ffa95865dc469c1a1d7cbe0498.tar.bz2 scala-cffaae565155f3ffa95865dc469c1a1d7cbe0498.zip |
*** empty log message ***
Diffstat (limited to 'sources/scalac/symtab/classfile')
-rw-r--r-- | sources/scalac/symtab/classfile/ClassfileParser.java | 29 | ||||
-rw-r--r-- | sources/scalac/symtab/classfile/UnPickle.java | 1 |
2 files changed, 28 insertions, 2 deletions
diff --git a/sources/scalac/symtab/classfile/ClassfileParser.java b/sources/scalac/symtab/classfile/ClassfileParser.java index 5220e7d69a..a3470f4964 100644 --- a/sources/scalac/symtab/classfile/ClassfileParser.java +++ b/sources/scalac/symtab/classfile/ClassfileParser.java @@ -144,7 +144,23 @@ public class ClassfileParser implements ClassfileConstants { //System.out.println("module: " + m); //System.out.println("modules class: " + m.type().symbol()); + int savedFlags = c.flags; + c.flags |= Modifiers.INITIALIZED; + // hack to make memberType in addInheritedOverloaded work + addInheritedOverloaded(); + + //if (global.debug) { + // Symbol[] elems = c.members().elements(); + // global.log(c + " defines: "); + // for (int i = 0; i < elems.length; i++) { + // global.log(elems[i] + ":" + elems[i].type()); + // } + //} + + c.flags = savedFlags; + // Add static members of superclass + // todo: remove Symbol superclass = supertpe.symbol(); if (m.isJava() && superclass.isJava()) { Symbol mclass = m.moduleClass(); @@ -172,6 +188,18 @@ public class ClassfileParser implements ClassfileConstants { } } + private void addInheritedOverloaded() { + Symbol[] elems = c.members().elements(); + for (int i = 0; i < elems.length; i++) + addInheritedOverloaded(elems[i]); + } + + private void addInheritedOverloaded(Symbol sym) { + if (sym.isMethod() && !sym.isConstructor()) { + sym.addInheritedOverloaded(sym.type()); + } + } + /** convert Java modifiers into Scala flags */ public int transFlags(int flags) { @@ -253,7 +281,6 @@ public class ClassfileParser implements ClassfileConstants { symbol = owner.newTerm(Position.NOPOS, sflags, name); } setParamOwners(type, symbol); - symbol.addInheritedOverloaded(type); symbol.setInfo(type); attrib.readAttributes(symbol, type, METH_ATTR); if (name != CONSTR_N) { diff --git a/sources/scalac/symtab/classfile/UnPickle.java b/sources/scalac/symtab/classfile/UnPickle.java index 1c41932a6d..fe11fced85 100644 --- a/sources/scalac/symtab/classfile/UnPickle.java +++ b/sources/scalac/symtab/classfile/UnPickle.java @@ -307,7 +307,6 @@ public class UnPickle implements Kinds, Modifiers, EntryTags, TypeTags { assert clasz == sym.moduleClass(): Debug.show(sym); } Type owntype = getType(inforef, sym); - sym.addInheritedOverloaded(owntype); sym.setInfo(owntype); break; |