From 0ed27cc87d1f080836b319f97cbf900c2ba2c234 Mon Sep 17 00:00:00 2001 From: Martin Odersky Date: Thu, 12 Feb 2015 20:29:11 +0100 Subject: Fix serialization of Bind-defined types in type patterns. These are now represented as BIND nodes in pickled types. --- .../tools/dotc/core/pickling/TreePickler.scala | 23 +++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) (limited to 'src/dotty/tools/dotc/core/pickling/TreePickler.scala') 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) -- cgit v1.2.3