summaryrefslogtreecommitdiff
path: root/sources/scalac/symtab
diff options
context:
space:
mode:
Diffstat (limited to 'sources/scalac/symtab')
-rw-r--r--sources/scalac/symtab/Symbol.java7
-rw-r--r--sources/scalac/symtab/classfile/Pickle.java6
-rw-r--r--sources/scalac/symtab/classfile/UnPickle.java11
3 files changed, 15 insertions, 9 deletions
diff --git a/sources/scalac/symtab/Symbol.java b/sources/scalac/symtab/Symbol.java
index 6d441e5f29..fa2bdbe0ca 100644
--- a/sources/scalac/symtab/Symbol.java
+++ b/sources/scalac/symtab/Symbol.java
@@ -1278,6 +1278,11 @@ public class TermSymbol extends Symbol {
return sym;
}
+ public TermSymbol makeConstructor(ClassSymbol clazz) {
+ this.clazz = clazz;
+ return this;
+ }
+
public static TermSymbol newJavaConstructor(Symbol clazz) {
return newConstructor(clazz, clazz.flags & (ACCESSFLAGS | JAVA));
}
@@ -1840,7 +1845,7 @@ public class ClassSymbol extends TypeSymbol {
}
for (int i = 0; i < index; i++)
sym = it.next();
- System.out.println("field accessor = " + sym);
+ //System.out.println("field accessor = " + sym);//DEBUG
}
assert sym != null : this;
return sym;
diff --git a/sources/scalac/symtab/classfile/Pickle.java b/sources/scalac/symtab/classfile/Pickle.java
index 871a417509..3a3747822b 100644
--- a/sources/scalac/symtab/classfile/Pickle.java
+++ b/sources/scalac/symtab/classfile/Pickle.java
@@ -133,7 +133,8 @@ public class Pickle implements Kinds, Modifiers, EntryTags {
putSymbol(it.next());
break;
case VAL:
- if (sym.isPrimaryConstructor())
+ if (sym.isConstructor() &&
+ sym == sym.constructorClass().allConstructors())
putSymbol(sym.constructorClass());
else if (sym.isModule())
putSymbol(sym.moduleClass());
@@ -341,7 +342,8 @@ public class Pickle implements Kinds, Modifiers, EntryTags {
writeRef(sym.allConstructors());
break;
case VAL:
- if (sym.isPrimaryConstructor())
+ if (sym.isConstructor() &&
+ sym == sym.constructorClass().allConstructors())
writeRef(sym.constructorClass());
else if (sym.isModule())
writeRef(sym.moduleClass());
diff --git a/sources/scalac/symtab/classfile/UnPickle.java b/sources/scalac/symtab/classfile/UnPickle.java
index e4413be233..905e5a8b22 100644
--- a/sources/scalac/symtab/classfile/UnPickle.java
+++ b/sources/scalac/symtab/classfile/UnPickle.java
@@ -246,18 +246,17 @@ public class UnPickle implements Kinds, Modifiers, EntryTags, TypeTags {
sym.setFirstInfo(getType(inforef));
sym.setTypeOfThis(readTypeRef());
Symbol constr = readSymbolRef();
- if (constr != sym.primaryConstructor()) {
- assert constr.type() instanceof Type.OverloadedType
- : sym + " " + constr + ":" + constr.type();
- constr.copyTo(sym.allConstructors());
- }
+ assert constr == sym.allConstructors();
+ Symbol[] alts = constr.alternativeSymbols();
+ for (int i = 0; i < alts.length; i++)
+ ((TermSymbol)alts[i]).makeConstructor((ClassSymbol)sym);
break;
case VALsym:
if (bp < end) {
Symbol tsym = readSymbolRef();
if (name == Names.CONSTRUCTOR) {
- entries[n] = sym = tsym.primaryConstructor();
+ entries[n] = sym = tsym.allConstructors();
sym.flags = flags;
} else {
assert (flags & MODUL) != 0 : name;