@@ -64,8 +64,6 @@ object TastyPrinter:
64
64
65
65
class TastyPrinter (bytes : Array [Byte ]) {
66
66
67
- private val sb : StringBuilder = new StringBuilder
68
-
69
67
class TastyPrinterUnpickler extends TastyUnpickler (bytes) {
70
68
var namesStart : Addr = uninitialized
71
69
var namesEnd : Addr = uninitialized
@@ -83,49 +81,35 @@ class TastyPrinter(bytes: Array[Byte]) {
83
81
84
82
private def nameRefToString (ref : NameRef ): String = nameToString(nameAtRef(ref))
85
83
86
- private def printHeader (): Unit =
84
+ private def printHeader (sb : StringBuilder ): Unit =
87
85
val header = unpickler.header
88
86
sb.append(" Header:\n " )
89
87
sb.append(s " version: ${header.majorVersion}. ${header.minorVersion}. ${header.experimentalVersion}\n " )
90
88
sb.append(" tooling: " ).append(header.toolingVersion).append(" \n " )
91
89
sb.append(" UUID: " ).append(header.uuid).append(" \n " )
92
90
sb.append(" \n " )
93
91
94
- private def printNames (): Unit =
92
+ private def printNames (sb : StringBuilder ): Unit =
95
93
sb.append(s " Names ( ${unpickler.namesEnd.index - unpickler.namesStart.index} bytes, starting from ${unpickler.namesStart.index}): \n " )
96
94
for ((name, idx) <- nameAtRef.contents.zipWithIndex) {
97
95
val index = nameStr(" %6d" .format(idx))
98
96
sb.append(index).append(" : " ).append(nameToString(name)).append(" \n " )
99
97
}
100
98
101
99
def showContents (): String = {
102
- printHeader()
103
- printNames()
104
- unpickle(new TreeSectionUnpickler ) match {
105
- case Some (s) => sb.append(" \n\n " ).append(s)
106
- case _ =>
107
- }
108
- unpickle(new PositionSectionUnpickler ) match {
109
- case Some (s) => sb.append(" \n\n " ).append(s)
110
- case _ =>
111
- }
112
- unpickle(new CommentSectionUnpickler ) match {
113
- case Some (s) => sb.append(" \n\n " ).append(s)
114
- case _ =>
115
- }
116
- unpickle(new AttributesSectionUnpickler ) match {
117
- case Some (s) => sb.append(" \n\n " ).append(s)
118
- case _ =>
119
- }
100
+ val sb : StringBuilder = new StringBuilder
101
+ printHeader(sb)
102
+ printNames(sb)
103
+ unpickle(new TreeSectionUnpickler (sb))
104
+ unpickle(new PositionSectionUnpickler (sb))
105
+ unpickle(new CommentSectionUnpickler (sb))
106
+ unpickle(new AttributesSectionUnpickler (sb))
120
107
sb.result
121
108
}
122
109
123
- class TreeSectionUnpickler extends SectionUnpickler [String ](ASTsSection ) {
110
+ class TreeSectionUnpickler ( sb : StringBuilder ) extends SectionUnpickler [Unit ](ASTsSection ) {
124
111
import dotty .tools .tasty .TastyFormat .*
125
-
126
- private val sb : StringBuilder = new StringBuilder
127
-
128
- def unpickle (reader : TastyReader , tastyName : NameTable ): String = {
112
+ def unpickle (reader : TastyReader , tastyName : NameTable ): Unit = {
129
113
import reader .*
130
114
var indent = 0
131
115
def newLine () = {
@@ -186,23 +170,19 @@ class TastyPrinter(bytes: Array[Byte]) {
186
170
}
187
171
indent -= 2
188
172
}
189
- sb.append(s " Trees ( ${endAddr.index - startAddr.index} bytes, starting from $base): " )
173
+ sb.append(s " \n\n Trees ( ${endAddr.index - startAddr.index} bytes, starting from $base): " )
190
174
while (! isAtEnd) {
191
175
printTree()
192
176
newLine()
193
177
}
194
- sb.result
195
178
}
196
179
}
197
180
198
- class PositionSectionUnpickler extends SectionUnpickler [String ](PositionsSection ) {
199
-
200
- private val sb : StringBuilder = new StringBuilder
201
-
202
- def unpickle (reader : TastyReader , tastyName : NameTable ): String = {
181
+ class PositionSectionUnpickler (sb : StringBuilder ) extends SectionUnpickler [Unit ](PositionsSection ) {
182
+ def unpickle (reader : TastyReader , tastyName : NameTable ): Unit = {
203
183
import reader .*
204
184
val posUnpickler = new PositionUnpickler (reader, tastyName)
205
- sb.append(s " Positions ( ${reader.endAddr.index - reader.startAddr.index} bytes, starting from $base): \n " )
185
+ sb.append(s " \n\n Positions ( ${reader.endAddr.index - reader.startAddr.index} bytes, starting from $base): \n " )
206
186
val lineSizes = posUnpickler.lineSizes
207
187
sb.append(s " lines: ${lineSizes.length}\n " )
208
188
sb.append(s " line sizes: \n " )
@@ -222,48 +202,37 @@ class TastyPrinter(bytes: Array[Byte]) {
222
202
sb.append(s " \n source paths: \n " )
223
203
val sortedPath = sources.toSeq.sortBy(_._1.index)
224
204
for ((addr, nameRef) <- sortedPath) {
225
- sb.append(treeStr(" %6d: " .format(addr.index)))
205
+ sb.append(treeStr(" %6d" .format(addr.index)))
206
+ sb.append(" : " )
226
207
sb.append(nameStr(s " ${nameRef.index} [ ${tastyName(nameRef)}] " ))
227
208
sb.append(" \n " )
228
209
}
229
-
230
- sb.result
231
210
}
232
211
}
233
212
234
- class CommentSectionUnpickler extends SectionUnpickler [String ](CommentsSection ) {
235
-
236
- private val sb : StringBuilder = new StringBuilder
237
-
238
- def unpickle (reader : TastyReader , tastyName : NameTable ): String = {
213
+ class CommentSectionUnpickler (sb : StringBuilder ) extends SectionUnpickler [Unit ](CommentsSection ) {
214
+ def unpickle (reader : TastyReader , tastyName : NameTable ): Unit = {
239
215
import reader .*
240
216
val comments = new CommentUnpickler (reader).comments
241
217
if ! comments.isEmpty then
242
- sb.append(s " Comments ( ${reader.endAddr.index - reader.startAddr.index} bytes, starting from $base): \n " )
218
+ sb.append(s " \n\n Comments ( ${reader.endAddr.index - reader.startAddr.index} bytes, starting from $base): \n " )
243
219
val sorted = comments.toSeq.sortBy(_._1.index)
244
220
for ((addr, cmt) <- sorted) {
245
221
sb.append(treeStr(" %6d" .format(addr.index)))
246
222
sb.append(s " : ${cmt.raw} (expanded = ${cmt.isExpanded}) \n " )
247
223
}
248
- sb.result
249
224
}
250
225
}
251
226
252
- class AttributesSectionUnpickler extends SectionUnpickler [String ](AttributesSection ) {
227
+ class AttributesSectionUnpickler ( sb : StringBuilder ) extends SectionUnpickler [Unit ](AttributesSection ) {
253
228
import dotty .tools .tasty .TastyFormat .*
254
-
255
- private val sb : StringBuilder = new StringBuilder
256
-
257
- def unpickle (reader : TastyReader , tastyName : NameTable ): String = {
229
+ def unpickle (reader : TastyReader , tastyName : NameTable ): Unit = {
258
230
import reader .*
259
- sb.append(s " ${reader.endAddr.index - reader.currentAddr.index}" )
260
231
val attributes = new AttributeUnpickler (reader).attributes
261
- sb.append(s " attributes bytes:\n " )
232
+ sb.append(s " \n\n Attributes ( ${reader.endAddr.index - reader.startAddr.index} bytes, starting from $base ) :\n " )
262
233
263
234
for tag <- attributes.booleanTags do
264
- sb.append(" " ).append(attributeTagToString(tag)).append(" \n " )
265
-
266
- sb.result
235
+ sb.append(" " ).append(attributeTagToString(tag)).append(" \n " )
267
236
}
268
237
}
269
238
0 commit comments