aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/core/pickling/DottyUnpickler.scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/dotty/tools/dotc/core/pickling/DottyUnpickler.scala')
-rw-r--r--src/dotty/tools/dotc/core/pickling/DottyUnpickler.scala17
1 files changed, 12 insertions, 5 deletions
diff --git a/src/dotty/tools/dotc/core/pickling/DottyUnpickler.scala b/src/dotty/tools/dotc/core/pickling/DottyUnpickler.scala
index 64be68975..2d8f571ec 100644
--- a/src/dotty/tools/dotc/core/pickling/DottyUnpickler.scala
+++ b/src/dotty/tools/dotc/core/pickling/DottyUnpickler.scala
@@ -7,6 +7,7 @@ import Contexts._, SymDenotations._
import dotty.tools.dotc.ast.tpd
import TastyUnpickler._, TastyBuffer._
import util.Positions._
+import util.{SourceFile, NoSource}
import PositionUnpickler._
object DottyUnpickler {
@@ -18,7 +19,7 @@ object DottyUnpickler {
/** A class for unpickling Tasty trees and symbols.
* @param bytes the bytearray containing the Tasty file from which we unpickle
*/
-class DottyUnpickler(bytes: Array[Byte]) {
+class DottyUnpickler(bytes: Array[Byte]) extends ClassfileParser.Embedded {
import tpd._
private val unpickler = new TastyUnpickler(bytes)
@@ -30,14 +31,20 @@ class DottyUnpickler(bytes: Array[Byte]) {
def enter(roots: Set[SymDenotation])(implicit ctx: Context): Unit =
treeUnpickler.enterTopLevel(roots)
- /** The unpickled trees
+ /** The unpickled trees, and the source file they come from
* @param readPositions if true, trees get decorated with position information.
*/
- def body(readPositions: Boolean = false)(implicit ctx: Context): List[Tree] = {
+ def body(readPositions: Boolean = false)(implicit ctx: Context): (List[Tree], SourceFile) = {
+ val source = unpickler.unpickle(new SourceFileUnpickler).getOrElse(NoSource)
if (readPositions)
- for ((totalRange, positions) <- unpickler.unpickle(new PositionsSectionUnpickler()))
+ for ((totalRange, positions) <- unpickler.unpickle(new PositionsSectionUnpickler))
treeUnpickler.usePositions(totalRange, positions)
- treeUnpickler.unpickle()
+ (treeUnpickler.unpickle(), source)
+ }
+
+ private class SourceFileUnpickler extends SectionUnpickler[SourceFile]("Sourcefile") {
+ def unpickle(reader: TastyReader, tastyName: TastyName.Table) =
+ new SourceFile(tastyName(reader.readNameRef()).toString, Seq())
}
private class TreeSectionUnpickler extends SectionUnpickler[TreeUnpickler]("ASTs") {