aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/core/pickling/TreeUnpickler.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2015-02-26 18:06:52 +0100
committerDmitry Petrashko <dmitry.petrashko@gmail.com>2015-03-18 11:14:11 +0100
commitc669d08e84aa05fb8ee849fbc1ddb09502a76256 (patch)
tree4dff1106da9567733afa4e9d864b1cb6f79e2dbc /src/dotty/tools/dotc/core/pickling/TreeUnpickler.scala
parent66e9c7e74b9548c2f61d6ac7af7de791ee2113f0 (diff)
downloaddotty-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.scala28
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 = {