aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/transform/Pickler.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2016-09-04 15:01:05 +0200
committerMartin Odersky <odersky@gmail.com>2016-10-02 16:11:21 +0200
commit333ec27c9e503f428c86a155351d11f332f2892d (patch)
tree99c9c9638de688e4a3369cedb61d9046427cc4b8 /src/dotty/tools/dotc/transform/Pickler.scala
parent688cc890ceadb42f742579494a560159334c85aa (diff)
downloaddotty-333ec27c9e503f428c86a155351d11f332f2892d.tar.gz
dotty-333ec27c9e503f428c86a155351d11f332f2892d.tar.bz2
dotty-333ec27c9e503f428c86a155351d11f332f2892d.zip
Set the positions of inlined trees wehn read form Tasty
This required a major change in the way positions are handled, as the previous scheme did not allow to read the positions of arbitrary subtrees selectively. Fortunately, it's altogether a major simplification. Also, this fixed a bug in the previous scheme, where positions were generated before compactification, resulting in addresses being wrong.
Diffstat (limited to 'src/dotty/tools/dotc/transform/Pickler.scala')
-rw-r--r--src/dotty/tools/dotc/transform/Pickler.scala5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/dotty/tools/dotc/transform/Pickler.scala b/src/dotty/tools/dotc/transform/Pickler.scala
index 4bcc90a41..90e62b65c 100644
--- a/src/dotty/tools/dotc/transform/Pickler.scala
+++ b/src/dotty/tools/dotc/transform/Pickler.scala
@@ -45,10 +45,11 @@ class Pickler extends Phase {
unit.picklers += (cls -> pickler)
val treePkl = pickler.treePkl
treePkl.pickle(tree :: Nil)
+ treePkl.compactify()
pickler.addrOfTree = treePkl.buf.addrOfTree
pickler.addrOfSym = treePkl.addrOfSym
if (tree.pos.exists)
- new PositionPickler(pickler, treePkl.buf.addrOfTree).picklePositions(tree :: Nil, tree.pos)
+ new PositionPickler(pickler, treePkl.buf.addrOfTree).picklePositions(tree :: Nil)
def rawBytes = // not needed right now, but useful to print raw format.
pickler.assembleParts().iterator.grouped(10).toList.zipWithIndex.map {
@@ -80,7 +81,7 @@ class Pickler extends Phase {
}
pickling.println("************* entered toplevel ***********")
for ((cls, unpickler) <- unpicklers) {
- val unpickled = unpickler.body(readPositions = true)
+ val unpickled = unpickler.body(ctx.addMode(Mode.ReadPositions))
testSame(i"$unpickled%\n%", beforePickling(cls), cls)
}
}