@@ -13,7 +13,8 @@ import Symbols._
13
13
import Flags .Module
14
14
import reporting .ThrowingReporter
15
15
import collection .mutable
16
- import scala .concurrent .ExecutionContext .global
16
+ import scala .concurrent .{Future , Await , ExecutionContext }
17
+ import scala .concurrent .duration .Duration
17
18
18
19
object Pickler {
19
20
val name : String = " pickler"
@@ -100,12 +101,31 @@ class Pickler extends Phase {
100
101
treePkl.compactify()
101
102
pickler.addrOfTree = treePkl.buf.addrOfTree
102
103
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)
109
129
}
110
130
}
111
131
0 commit comments