diff options
author | Martin Odersky <odersky@gmail.com> | 2013-08-20 11:55:56 +0200 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2013-08-20 11:59:59 +0200 |
commit | b048b321f5f700804ce4e3e67720eb65297eaf39 (patch) | |
tree | 56205d39392df6526089e82b83094320ea2ed27a /src/dotty/tools/dotc/core/pickling/UnPickler.scala | |
parent | 9113c243875cd7f6c8ae6774834ea9a0a468acbc (diff) | |
download | dotty-b048b321f5f700804ce4e3e67720eb65297eaf39.tar.gz dotty-b048b321f5f700804ce4e3e67720eb65297eaf39.tar.bz2 dotty-b048b321f5f700804ce4e3e67720eb65297eaf39.zip |
Refactored scheme for maintaining sourceModule, moduleClass and decls in lazy types.
New scheme is more composable.
Diffstat (limited to 'src/dotty/tools/dotc/core/pickling/UnPickler.scala')
-rw-r--r-- | src/dotty/tools/dotc/core/pickling/UnPickler.scala | 31 |
1 files changed, 11 insertions, 20 deletions
diff --git a/src/dotty/tools/dotc/core/pickling/UnPickler.scala b/src/dotty/tools/dotc/core/pickling/UnPickler.scala index 65b140edd..d99bc0278 100644 --- a/src/dotty/tools/dotc/core/pickling/UnPickler.scala +++ b/src/dotty/tools/dotc/core/pickling/UnPickler.scala @@ -452,14 +452,14 @@ class UnPickler(bytes: Array[Byte], classRoot: ClassDenotation, moduleClassRoot: // create a type alias instead cctx.newSymbol(owner, name, flags, localMemberUnpickler, coord = start) else { - def completer(cls: Symbol) = + def completer(cls: Symbol) = { + val unpickler = new LocalUnpickler() withDecls symScope(cls) if (flags is ModuleClass) - new LocalClassUnpickler(cls) with LazyTypeOfModuleClass { - override def sourceModule = - cls.owner.decls.lookup(cls.name.stripModuleClassSuffix.toTermName) - .suchThat(_ is Module).symbol - } - else new LocalClassUnpickler(cls) + unpickler withSourceModule ( + cls.owner.decls.lookup(cls.name.stripModuleClassSuffix.toTermName) + .suchThat(_ is Module).symbol) + else unpickler + } cctx.newClassSymbol(owner, name.asTypeName, flags, completer, coord = start) } case MODULEsym | VALsym => @@ -472,7 +472,7 @@ class UnPickler(bytes: Array[Byte], classRoot: ClassDenotation, moduleClassRoot: }) } - abstract class LocalUnpickler extends LazyType { + class LocalUnpickler extends LazyType { def parseToCompletion(denot: SymDenotation) = { val tag = readByte() val end = readNat() + readIndex @@ -520,21 +520,12 @@ class UnPickler(bytes: Array[Byte], classRoot: ClassDenotation, moduleClassRoot: } } - class AtStartUnpickler(start: Coord) extends LocalUnpickler { - override def startCoord(denot: SymDenotation): Coord = start - } - object localMemberUnpickler extends LocalUnpickler - class LocalClassUnpickler(cls: Symbol) - extends ClassCompleterWithDecls(symScope(cls), localMemberUnpickler) - def rootClassUnpickler(start: Coord, cls: Symbol, module: Symbol) = - new ClassCompleterWithDecls(symScope(cls), new AtStartUnpickler(start)) - with LazyTypeOfModuleClass - with SymbolLoaders.SecondCompleter { - override def sourceModule = module - } + (new LocalUnpickler with SymbolLoaders.SecondCompleter { + override def startCoord(denot: SymDenotation): Coord = start + }) withDecls symScope(cls) withSourceModule module /** Convert * tp { type name = sym } forSome { sym >: L <: H } |