aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools
diff options
context:
space:
mode:
authorDmitry Petrashko <dmitry.petrashko@gmail.com>2015-03-18 21:53:11 +0100
committerDmitry Petrashko <dmitry.petrashko@gmail.com>2015-03-18 21:53:11 +0100
commitfbad1dc0b7b09c9fa4d03761734eee49d0145f3c (patch)
tree9adcbdfb45f2591b75e7d51ee897e055afd1d794 /src/dotty/tools
parentc413eec7d5a11afe74dc2513ab2b2da71809b116 (diff)
downloaddotty-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/dotty/tools')
-rw-r--r--src/dotty/tools/dotc/CompilationUnit.scala6
-rw-r--r--src/dotty/tools/dotc/transform/Pickler.scala10
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
}