diff options
author | Martin Odersky <odersky@gmail.com> | 2015-02-12 20:29:11 +0100 |
---|---|---|
committer | Dmitry Petrashko <dmitry.petrashko@gmail.com> | 2015-03-18 11:11:05 +0100 |
commit | 0ed27cc87d1f080836b319f97cbf900c2ba2c234 (patch) | |
tree | b49ddea5d864140e6b7e64f2a61a409e348bd745 /src/dotty/tools/dotc/core/pickling/TreePickler.scala | |
parent | 5ae8b128eb3e694c3fbb83124371a9bbb9d698fe (diff) | |
download | dotty-0ed27cc87d1f080836b319f97cbf900c2ba2c234.tar.gz dotty-0ed27cc87d1f080836b319f97cbf900c2ba2c234.tar.bz2 dotty-0ed27cc87d1f080836b319f97cbf900c2ba2c234.zip |
Fix serialization of Bind-defined types in type patterns.
These are now represented as BIND nodes in pickled types.
Diffstat (limited to 'src/dotty/tools/dotc/core/pickling/TreePickler.scala')
-rw-r--r-- | src/dotty/tools/dotc/core/pickling/TreePickler.scala | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/src/dotty/tools/dotc/core/pickling/TreePickler.scala b/src/dotty/tools/dotc/core/pickling/TreePickler.scala index 662637026..7855f5d3e 100644 --- a/src/dotty/tools/dotc/core/pickling/TreePickler.scala +++ b/src/dotty/tools/dotc/core/pickling/TreePickler.scala @@ -129,17 +129,30 @@ class TreePickler(pickler: TastyPickler, picklePositions: Boolean) { case ConstantType(value) => pickleConstant(value) case tpe: WithFixedSym => - if (tpe.symbol.isStatic) { + val sym = tpe.symbol + if (sym.isStatic) { writeByte(if (tpe.isType) TYPEREFstatic else TERMREFstatic) - pickleName(qualifiedName(tpe.symbol)) + pickleName(qualifiedName(sym)) } else if (tpe.prefix == NoPrefix) { - writeByte(if (tpe.isType) TYPEREFdirect else TERMREFdirect) - pickleSym(tpe.symbol) + def pickleRef() = { + writeByte(if (tpe.isType) TYPEREFdirect else TERMREFdirect) + pickleSym(sym) + } + if (sym is Flags.BindDefinedType) { + registerDef(sym) + writeByte(BIND) + withLength { + pickleName(sym.name) + pickleType(sym.info) + pickleRef() + } + } + else pickleRef() } else { writeByte(if (tpe.isType) TYPEREFsymbol else TERMREFsymbol) - pickleType(tpe.prefix); pickleSym(tpe.symbol) + pickleType(tpe.prefix); pickleSym(sym) } case tpe: TermRefWithSignature => writeByte(TERMREF) |