diff options
author | paltherr <paltherr@epfl.ch> | 2004-08-12 10:43:03 +0000 |
---|---|---|
committer | paltherr <paltherr@epfl.ch> | 2004-08-12 10:43:03 +0000 |
commit | dea91c4e75061cc29d654913a9dc45b7a5c153d1 (patch) | |
tree | 7f6fb6ea911821290db1573f8a88b6016f3eb9c2 /sources/scalac/symtab/classfile/UnPickle.java | |
parent | 0c2274120cc7c295e2e907cbd67ffc57fa78217d (diff) | |
download | scala-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.java | 16 |
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); |