diff options
author | Dmitry Petrashko <dmitry.petrashko@gmail.com> | 2015-03-18 21:53:11 +0100 |
---|---|---|
committer | Dmitry Petrashko <dmitry.petrashko@gmail.com> | 2015-03-18 21:53:11 +0100 |
commit | fbad1dc0b7b09c9fa4d03761734eee49d0145f3c (patch) | |
tree | 9adcbdfb45f2591b75e7d51ee897e055afd1d794 /src | |
parent | c413eec7d5a11afe74dc2513ab2b2da71809b116 (diff) | |
download | dotty-fbad1dc0b7b09c9fa4d03761734eee49d0145f3c.tar.gz dotty-fbad1dc0b7b09c9fa4d03761734eee49d0145f3c.tar.bz2 dotty-fbad1dc0b7b09c9fa4d03761734eee49d0145f3c.zip |
Export pickler and pickled addresses so that other phases can pickle their info
Diffstat (limited to 'src')
-rw-r--r-- | src/dotty/tools/dotc/CompilationUnit.scala | 6 | ||||
-rw-r--r-- | src/dotty/tools/dotc/transform/Pickler.scala | 10 |
2 files changed, 10 insertions, 6 deletions
diff --git a/src/dotty/tools/dotc/CompilationUnit.scala b/src/dotty/tools/dotc/CompilationUnit.scala index 44f9b7e5a..c2cd9361c 100644 --- a/src/dotty/tools/dotc/CompilationUnit.scala +++ b/src/dotty/tools/dotc/CompilationUnit.scala @@ -1,8 +1,10 @@ package dotty.tools package dotc +import dotty.tools.dotc.core.pickling.{TastyBuffer, TastyPickler} import util.SourceFile import ast.{tpd, untpd} +import TastyBuffer._ class CompilationUnit(val source: SourceFile) { @@ -14,5 +16,7 @@ class CompilationUnit(val source: SourceFile) { def isJava = source.file.name.endsWith(".java") - var pickled: Array[Byte] = Array() + lazy val pickled: TastyPickler = new TastyPickler() + + var addrOfTree: tpd.Tree => Option[Addr] = (_ => None) }
\ No newline at end of file diff --git a/src/dotty/tools/dotc/transform/Pickler.scala b/src/dotty/tools/dotc/transform/Pickler.scala index fb6b58e36..0d8acf38a 100644 --- a/src/dotty/tools/dotc/transform/Pickler.scala +++ b/src/dotty/tools/dotc/transform/Pickler.scala @@ -32,19 +32,19 @@ class Pickler extends Phase { pickling.println(i"unpickling in run ${ctx.runId}") if (ctx.settings.YtestPickler.value) beforePickling(unit) = tree.show - val pickler = new TastyPickler + val pickler = unit.pickled val treePkl = new TreePickler(pickler) treePkl.pickle(tree :: Nil) + unit.addrOfTree = treePkl.buf.addrOfTree if (tree.pos.exists) new PositionPickler(pickler, treePkl.buf.addrOfTree).picklePositions(tree :: Nil, tree.pos) - unit.pickled = pickler.assembleParts() def rawBytes = // not needed right now, but useful to print raw format. - unit.pickled.iterator.grouped(10).toList.zipWithIndex.map { + unit.pickled.assembleParts().iterator.grouped(10).toList.zipWithIndex.map { case (row, i) => s"${i}0: ${row.mkString(" ")}" } // println(i"rawBytes = \n$rawBytes%\n%") // DEBUG - if (pickling ne noPrinter) new TastyPrinter(unit.pickled).printContents() + if (pickling ne noPrinter) new TastyPrinter(pickler.assembleParts()).printContents() } } @@ -60,7 +60,7 @@ class Pickler extends Phase { ctx.definitions.init val unpicklers = for (unit <- units) yield { - val unpickler = new DottyUnpickler(unit.pickled) + val unpickler = new DottyUnpickler(unit.pickled.assembleParts()) unpickler.enter(roots = Set()) unpickler } |