diff options
Diffstat (limited to 'sources/scalac/symtab/classfile')
-rw-r--r-- | sources/scalac/symtab/classfile/Pickle.java | 6 | ||||
-rw-r--r-- | sources/scalac/symtab/classfile/UnPickle.java | 9 |
2 files changed, 11 insertions, 4 deletions
diff --git a/sources/scalac/symtab/classfile/Pickle.java b/sources/scalac/symtab/classfile/Pickle.java index 6b58cbf72c..bdc552e507 100644 --- a/sources/scalac/symtab/classfile/Pickle.java +++ b/sources/scalac/symtab/classfile/Pickle.java @@ -174,7 +174,8 @@ public class Pickle implements Kinds, Modifiers, EntryTags { putTypes(args); break; case CompoundType(Type[] parents, Scope members): - putSymbol(tp.symbol()); + if (!tp.symbol().isCompoundSym()) + putSymbol(tp.symbol()); putTypes(parents); break; case MethodType(Symbol[] vparams, Type result): @@ -377,7 +378,8 @@ public class Pickle implements Kinds, Modifiers, EntryTags { case CompoundType(Type[] parents, Scope members): writeByte(COMPOUNDtpe); writeByte(0); // space for length - writeRef(tp.symbol()); + if (!tp.symbol().isCompoundSym()) + writeRef(tp.symbol()); writeRefs(parents); break; diff --git a/sources/scalac/symtab/classfile/UnPickle.java b/sources/scalac/symtab/classfile/UnPickle.java index d59d2bc192..482287fbb7 100644 --- a/sources/scalac/symtab/classfile/UnPickle.java +++ b/sources/scalac/symtab/classfile/UnPickle.java @@ -333,9 +333,14 @@ public class UnPickle implements Kinds, Modifiers, EntryTags { readTypeRef(), readSymbolRef(), readTypeRefs(end)); break; case COMPOUNDtpe: - Symbol clazz = readSymbolRef(); + Symbol[] clazzs = readSymbolRefs(end); Type[] parents = readTypeRefs(end); - tpe = Type.compoundType(parents, new Scope(), clazz); + if (clazzs.length == 0) { + tpe = Type.compoundType(parents, new Scope()); + } else { + assert clazzs.length == 1; + tpe = Type.compoundType(parents, new Scope(), clazzs[0]); + } break; case METHODtpe: Type restype = readTypeRef(); |