diff options
author | Martin Odersky <odersky@gmail.com> | 2015-02-26 18:06:52 +0100 |
---|---|---|
committer | Dmitry Petrashko <dmitry.petrashko@gmail.com> | 2015-03-18 11:14:11 +0100 |
commit | c669d08e84aa05fb8ee849fbc1ddb09502a76256 (patch) | |
tree | 4dff1106da9567733afa4e9d864b1cb6f79e2dbc /src/dotty/tools/dotc/core/pickling/TreeUnpickler.scala | |
parent | 66e9c7e74b9548c2f61d6ac7af7de791ee2113f0 (diff) | |
download | dotty-c669d08e84aa05fb8ee849fbc1ddb09502a76256.tar.gz dotty-c669d08e84aa05fb8ee849fbc1ddb09502a76256.tar.bz2 dotty-c669d08e84aa05fb8ee849fbc1ddb09502a76256.zip |
Added pickling part of new scheme.
Diffstat (limited to 'src/dotty/tools/dotc/core/pickling/TreeUnpickler.scala')
-rw-r--r-- | src/dotty/tools/dotc/core/pickling/TreeUnpickler.scala | 28 |
1 files changed, 7 insertions, 21 deletions
diff --git a/src/dotty/tools/dotc/core/pickling/TreeUnpickler.scala b/src/dotty/tools/dotc/core/pickling/TreeUnpickler.scala index ceb1f7db1..eaf7dfc55 100644 --- a/src/dotty/tools/dotc/core/pickling/TreeUnpickler.scala +++ b/src/dotty/tools/dotc/core/pickling/TreeUnpickler.scala @@ -13,6 +13,7 @@ import TastyUnpickler._, TastyBuffer._ import annotation.switch import scala.collection.{ mutable, immutable } import typer.Mode +import PositionPickler._ /** Unpickler for typed trees * @param reader the reader from which to unpickle @@ -686,29 +687,14 @@ class TreeUnpickler(reader: TastyReader, tastyName: TastyName.Table, } } - trait DeferredPosition { - var parentPos: Position = NoPosition + private def setNormalized(tree: Tree, parentPos: Position): Unit = { + assert(tree.pos.exists) + val absPos = Position(parentPos.start + tree.pos.start, parentPos.end - tree.pos.end) + tree.setPosUnchecked(absPos) } - def normalizePos(x: Any, parentPos: Position)(implicit ctx: Context): Unit = { - if (parentPos.exists) - x match { - case x: Tree @unchecked if !x.pos.isSynthetic => - assert(x.pos.exists) - val absPos = Position(parentPos.start + x.pos.start, parentPos.end - x.pos.end) - x.setPosUnchecked(absPos) - x match { - case x: MemberDef => normalizePos(x.symbol.annotations, absPos) - case _ => - } - normalizePos(x.productIterator, absPos) - case x: DeferredPosition => - x.parentPos = parentPos - case xs: List[_] => - xs.foreach(normalizePos(_, parentPos)) - case _ => - } - } + def normalizePos(x: Any, parentPos: Position)(implicit ctx: Context): Unit = + traverse(x, parentPos, setNormalized) class LazyReader[T <: AnyRef](reader: TreeReader, op: TreeReader => Context => T) extends Trees.Lazy[T] with DeferredPosition { def complete(implicit ctx: Context): T = { |