summaryrefslogtreecommitdiff
path: root/sources/scalac/symtab/classfile
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2004-07-01 14:03:41 +0000
committerMartin Odersky <odersky@gmail.com>2004-07-01 14:03:41 +0000
commitcffaae565155f3ffa95865dc469c1a1d7cbe0498 (patch)
tree4db08d4a30af008e2deeb4ee2ea45f0d69aa7654 /sources/scalac/symtab/classfile
parentc8065927475a558d9ad4580dedcc1b91296f9da4 (diff)
downloadscala-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.java29
-rw-r--r--sources/scalac/symtab/classfile/UnPickle.java1
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;