summaryrefslogtreecommitdiff
path: root/sources/scalac/symtab/classfile/UnPickle.java
diff options
context:
space:
mode:
authorpaltherr <paltherr@epfl.ch>2004-08-12 10:43:03 +0000
committerpaltherr <paltherr@epfl.ch>2004-08-12 10:43:03 +0000
commitdea91c4e75061cc29d654913a9dc45b7a5c153d1 (patch)
tree7f6fb6ea911821290db1573f8a88b6016f3eb9c2 /sources/scalac/symtab/classfile/UnPickle.java
parent0c2274120cc7c295e2e907cbd67ffc57fa78217d (diff)
downloadscala-dea91c4e75061cc29d654913a9dc45b7a5c153d1.tar.gz
scala-dea91c4e75061cc29d654913a9dc45b7a5c153d1.tar.bz2
scala-dea91c4e75061cc29d654913a9dc45b7a5c153d1.zip
- Fixed Pickle and UnPickle to handle correctly...
- Fixed Pickle and UnPickle to handle correctly compound types
Diffstat (limited to 'sources/scalac/symtab/classfile/UnPickle.java')
-rw-r--r--sources/scalac/symtab/classfile/UnPickle.java16
1 files changed, 14 insertions, 2 deletions
diff --git a/sources/scalac/symtab/classfile/UnPickle.java b/sources/scalac/symtab/classfile/UnPickle.java
index aa88139ad2..f3a715b480 100644
--- a/sources/scalac/symtab/classfile/UnPickle.java
+++ b/sources/scalac/symtab/classfile/UnPickle.java
@@ -399,9 +399,21 @@ public class UnPickle implements Kinds, Modifiers, EntryTags, TypeTags {
readTypeRef(owner), readSymbolRef(), readTypeRefs(end, owner));
break;
case COMPOUNDtpe:
- Symbol clazz = readSymbolRef();
+ boolean isCompoundSym = readByte() != 0;
+ Symbol ctOwner = isCompoundSym
+ ? readSymbolRef()
+ : null;
+ int ctClassRef = readNat();
+ Symbol ctClass = isCompoundSym
+ ? (Symbol)entries[ctClassRef]
+ : getSymbol(ctClassRef);
Type[] parents = readTypeRefs(end, owner);
- tpe = Type.compoundType(parents, new Scope(), clazz);
+ if (ctClass == null) {
+ tpe = Type.compoundTypeWithOwner(ctOwner, parents, new Scope());
+ entries[ctClassRef] = tpe.symbol();
+ } else {
+ tpe = Type.compoundType(parents, new Scope(), ctClass);
+ }
break;
case METHODtpe:
Type restype = readTypeRef(owner);