diff options
author | Dmitry Petrashko <dark@d-d.me> | 2015-05-02 18:48:08 +0200 |
---|---|---|
committer | Dmitry Petrashko <dark@d-d.me> | 2015-05-02 18:48:08 +0200 |
commit | ac46a0e4489bba4f76863cc1491bf2b8441ed1cb (patch) | |
tree | 35cb0aa59d10931f6201f1069d70172a43228a86 /src/dotty/tools/dotc/transform/Pickler.scala | |
parent | 2dbabca38cee0ff27c92a9a7079959b2461c9869 (diff) | |
parent | 10a5f9198f03ae5b8dc54f1113f98da585c4e81a (diff) | |
download | dotty-ac46a0e4489bba4f76863cc1491bf2b8441ed1cb.tar.gz dotty-ac46a0e4489bba4f76863cc1491bf2b8441ed1cb.tar.bz2 dotty-ac46a0e4489bba4f76863cc1491bf2b8441ed1cb.zip |
Merge pull request #507 from dotty-staging/add/from-tasty
Compile from Tasty
Diffstat (limited to 'src/dotty/tools/dotc/transform/Pickler.scala')
-rw-r--r-- | src/dotty/tools/dotc/transform/Pickler.scala | 21 |
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) } |