@@ -13,7 +13,8 @@ import Symbols._
1313import Flags .Module
1414import reporting .ThrowingReporter
1515import collection .mutable
16- import scala .concurrent .ExecutionContext .global
16+ import scala .concurrent .{Future , Await , ExecutionContext }
17+ import scala .concurrent .duration .Duration
1718
1819object Pickler {
1920 val name : String = " pickler"
@@ -100,12 +101,31 @@ class Pickler extends Phase {
100101 treePkl.compactify()
101102 pickler.addrOfTree = treePkl.buf.addrOfTree
102103 pickler.addrOfSym = treePkl.addrOfSym
103- val completer = PickleCompleter ()
104- if ctx.settings.YtestPickler .value then
105- completer.complete(pickler, cls, tree)
106- else
107- global.execute(() => completer.complete(pickler, cls, tree))
108- unit.pickled += (cls -> (() => completer.bytes))
104+ val pickledF = Future {
105+ if tree.span.exists then
106+ new PositionPickler (pickler, treePkl.buf.addrOfTree).picklePositions(tree :: Nil )
107+
108+ if ! ctx.settings.YdropComments .value then
109+ new CommentPickler (pickler, treePkl.buf.addrOfTree).pickleComment(tree)
110+
111+ val pickled = pickler.assembleParts()
112+
113+ def rawBytes = // not needed right now, but useful to print raw format.
114+ pickled.iterator.grouped(10 ).toList.zipWithIndex.map {
115+ case (row, i) => s " ${i}0: ${row.mkString(" " )}"
116+ }
117+
118+ // println(i"rawBytes = \n$rawBytes%\n%") // DEBUG
119+ if pickling ne noPrinter then
120+ pickling.synchronized {
121+ println(i " **** pickled info of $cls" )
122+ println(new TastyPrinter (pickled).printContents())
123+ }
124+ pickled
125+ }(using ExecutionContext .global)
126+ def force (): Array [Byte ] = Await .result(pickledF, Duration .Inf )
127+ if ctx.settings.YtestPickler .value then force()
128+ unit.pickled += (cls -> force)
109129 }
110130 }
111131
0 commit comments