summaryrefslogtreecommitdiff
path: root/sources/scalac/symtab/classfile
diff options
context:
space:
mode:
Diffstat (limited to 'sources/scalac/symtab/classfile')
-rw-r--r--sources/scalac/symtab/classfile/Pickle.java6
-rw-r--r--sources/scalac/symtab/classfile/UnPickle.java9
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();