diff options
author | Dmitry Petrashko <dmitry.petrashko@gmail.com> | 2015-12-20 11:44:08 +0100 |
---|---|---|
committer | Dmitry Petrashko <dmitry.petrashko@gmail.com> | 2015-12-20 15:38:23 +0100 |
commit | 906a7a7dfa38e53bfdffa2e94ddbf5eb23587592 (patch) | |
tree | b565b35021dce50a4e6a09e6bc2d594b437e6610 /src/dotty/tools/dotc/core/tasty | |
parent | c864e118e7bd04dcbd0503ab9af6729fda94ff3f (diff) | |
download | dotty-906a7a7dfa38e53bfdffa2e94ddbf5eb23587592.tar.gz dotty-906a7a7dfa38e53bfdffa2e94ddbf5eb23587592.tar.bz2 dotty-906a7a7dfa38e53bfdffa2e94ddbf5eb23587592.zip |
Linker Specific: allow phases to get to TASTY section.
Makes all classes and fields on the way to TASTY section accessible.
Example of usage can be found here:
https://gist.github.com/DarkDimius/0f9dc769b0dd7a3c7365
Diffstat (limited to 'src/dotty/tools/dotc/core/tasty')
-rw-r--r-- | src/dotty/tools/dotc/core/tasty/DottyUnpickler.scala | 33 |
1 files changed, 17 insertions, 16 deletions
diff --git a/src/dotty/tools/dotc/core/tasty/DottyUnpickler.scala b/src/dotty/tools/dotc/core/tasty/DottyUnpickler.scala index ccd3f78e8..d62762571 100644 --- a/src/dotty/tools/dotc/core/tasty/DottyUnpickler.scala +++ b/src/dotty/tools/dotc/core/tasty/DottyUnpickler.scala @@ -6,6 +6,7 @@ package tasty import Contexts._, SymDenotations._ import dotty.tools.dotc.ast.tpd import TastyUnpickler._, TastyBuffer._ +import dotty.tools.dotc.core.tasty.DottyUnpickler.{SourceFileUnpickler, TreeSectionUnpickler, PositionsSectionUnpickler} import util.Positions._ import util.{SourceFile, NoSource} import PositionUnpickler._ @@ -15,6 +16,21 @@ object DottyUnpickler { /** Exception thrown if classfile is corrupted */ class BadSignature(msg: String) extends RuntimeException(msg) + + class SourceFileUnpickler extends SectionUnpickler[SourceFile]("Sourcefile") { + def unpickle(reader: TastyReader, tastyName: TastyName.Table) = + new SourceFile(tastyName(reader.readNameRef()).toString, Seq()) + } + + class TreeSectionUnpickler extends SectionUnpickler[TreeUnpickler]("ASTs") { + def unpickle(reader: TastyReader, tastyName: TastyName.Table) = + new TreeUnpickler(reader, tastyName) + } + + class PositionsSectionUnpickler extends SectionUnpickler[(Position, AddrToPosition)]("Positions") { + def unpickle(reader: TastyReader, tastyName: TastyName.Table) = + new PositionUnpickler(reader).unpickle() + } } /** A class for unpickling Tasty trees and symbols. @@ -23,7 +39,7 @@ object DottyUnpickler { class DottyUnpickler(bytes: Array[Byte]) extends ClassfileParser.Embedded { import tpd._ - private val unpickler = new TastyUnpickler(bytes) + val unpickler = new TastyUnpickler(bytes) private val treeUnpickler = unpickler.unpickle(new TreeSectionUnpickler).get /** Enter all toplevel classes and objects into their scopes @@ -42,19 +58,4 @@ class DottyUnpickler(bytes: Array[Byte]) extends ClassfileParser.Embedded { treeUnpickler.usePositions(totalRange, positions) (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") { - def unpickle(reader: TastyReader, tastyName: TastyName.Table) = - new TreeUnpickler(reader, tastyName) - } - - private class PositionsSectionUnpickler extends SectionUnpickler[(Position, AddrToPosition)]("Positions") { - def unpickle(reader: TastyReader, tastyName: TastyName.Table) = - new PositionUnpickler(reader).unpickle() - } } |