diff options
author | Martin Odersky <odersky@gmail.com> | 2016-09-04 15:01:05 +0200 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2016-10-02 16:11:21 +0200 |
commit | 333ec27c9e503f428c86a155351d11f332f2892d (patch) | |
tree | 99c9c9638de688e4a3369cedb61d9046427cc4b8 /src/dotty/tools/dotc/transform/Pickler.scala | |
parent | 688cc890ceadb42f742579494a560159334c85aa (diff) | |
download | dotty-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.scala | 5 |
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) } } |