aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/transform/Pickler.scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/dotty/tools/dotc/transform/Pickler.scala')
-rw-r--r--src/dotty/tools/dotc/transform/Pickler.scala21
1 files changed, 15 insertions, 6 deletions
diff --git a/src/dotty/tools/dotc/transform/Pickler.scala b/src/dotty/tools/dotc/transform/Pickler.scala
index c09ba6889..50a419589 100644
--- a/src/dotty/tools/dotc/transform/Pickler.scala
+++ b/src/dotty/tools/dotc/transform/Pickler.scala
@@ -11,6 +11,7 @@ import Periods._
import Phases._
import Symbols._
import Flags.Module
+import util.SourceFile
import collection.mutable
/** This phase pickles trees */
@@ -45,8 +46,10 @@ class Pickler extends Phase {
unit.picklers += (cls -> pickler)
val treePkl = new TreePickler(pickler)
treePkl.pickle(tree :: Nil)
- unit.addrOfTree = treePkl.buf.addrOfTree
- unit.addrOfSym = treePkl.addrOfSym
+ pickler.addrOfTree = treePkl.buf.addrOfTree
+ pickler.addrOfSym = treePkl.addrOfSym
+ if (unit.source.exists)
+ pickleSourcefile(pickler, unit.source)
if (tree.pos.exists)
new PositionPickler(pickler, treePkl.buf.addrOfTree).picklePositions(tree :: Nil, tree.pos)
@@ -62,6 +65,12 @@ class Pickler extends Phase {
}
}
+ private def pickleSourcefile(pickler: TastyPickler, source: SourceFile): Unit = {
+ val buf = new TastyBuffer(10)
+ pickler.newSection("Sourcefile", buf)
+ buf.writeNat(pickler.nameBuffer.nameIndex(source.file.path).index)
+ }
+
override def runOn(units: List[CompilationUnit])(implicit ctx: Context): List[CompilationUnit] = {
val result = super.runOn(units)
if (ctx.settings.YtestPickler.value)
@@ -80,16 +89,16 @@ class Pickler extends Phase {
}
pickling.println("************* entered toplevel ***********")
for ((cls, unpickler) <- unpicklers) {
- val unpickled = unpickler.body(readPositions = false)
- testSame(i"$unpickled%\n%", beforePickling(cls), cls)
+ val (unpickled, source) = unpickler.body(readPositions = true)
+ testSame(i"$unpickled%\n%", beforePickling(cls), cls, source)
}
}
- private def testSame(unpickled: String, previous: String, cls: ClassSymbol)(implicit ctx: Context) =
+ private def testSame(unpickled: String, previous: String, cls: ClassSymbol, source: SourceFile)(implicit ctx: Context) =
if (previous != unpickled) {
output("before-pickling.txt", previous)
output("after-pickling.txt", unpickled)
- ctx.error(s"""pickling difference for ${cls.fullName}, for details:
+ ctx.error(s"""pickling difference for ${cls.fullName} in $source, for details:
|
| diff before-pickling.txt after-pickling.txt""".stripMargin)
}