aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/core/pickling/TreePickler.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2015-02-12 20:29:11 +0100
committerDmitry Petrashko <dmitry.petrashko@gmail.com>2015-03-18 11:11:05 +0100
commit0ed27cc87d1f080836b319f97cbf900c2ba2c234 (patch)
treeb49ddea5d864140e6b7e64f2a61a409e348bd745 /src/dotty/tools/dotc/core/pickling/TreePickler.scala
parent5ae8b128eb3e694c3fbb83124371a9bbb9d698fe (diff)
downloaddotty-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.scala23
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)