@@ -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 " )
@@ -226,43 +206,32 @@ class TastyPrinter(bytes: Array[Byte]) {
226
206
sb.append(nameStr(s " ${nameRef.index} [ ${tastyName(nameRef)}] " ))
227
207
sb.append(" \n " )
228
208
}
229
-
230
- sb.result
231
209
}
232
210
}
233
211
234
- class CommentSectionUnpickler extends SectionUnpickler [String ](CommentsSection ) {
235
-
236
- private val sb : StringBuilder = new StringBuilder
237
-
238
- def unpickle (reader : TastyReader , tastyName : NameTable ): String = {
212
+ class CommentSectionUnpickler (sb : StringBuilder ) extends SectionUnpickler [Unit ](CommentsSection ) {
213
+ def unpickle (reader : TastyReader , tastyName : NameTable ): Unit = {
239
214
import reader .*
240
215
val comments = new CommentUnpickler (reader).comments
241
216
if ! comments.isEmpty then
242
- sb.append(s " Comments ( ${reader.endAddr.index - reader.startAddr.index} bytes, starting from $base): \n " )
217
+ sb.append(s " \n\n Comments ( ${reader.endAddr.index - reader.startAddr.index} bytes, starting from $base): \n " )
243
218
val sorted = comments.toSeq.sortBy(_._1.index)
244
219
for ((addr, cmt) <- sorted) {
245
220
sb.append(treeStr(" %6d" .format(addr.index)))
246
221
sb.append(s " : ${cmt.raw} (expanded = ${cmt.isExpanded}) \n " )
247
222
}
248
- sb.result
249
223
}
250
224
}
251
225
252
- class AttributesSectionUnpickler extends SectionUnpickler [String ](AttributesSection ) {
226
+ class AttributesSectionUnpickler ( sb : StringBuilder ) extends SectionUnpickler [Unit ](AttributesSection ) {
253
227
import dotty .tools .tasty .TastyFormat .*
254
-
255
- private val sb : StringBuilder = new StringBuilder
256
-
257
- def unpickle (reader : TastyReader , tastyName : NameTable ): String = {
228
+ def unpickle (reader : TastyReader , tastyName : NameTable ): Unit = {
258
229
import reader .*
259
230
val attributes = new AttributeUnpickler (reader).attributes
260
- sb.append(s " Attributes ( ${reader.endAddr.index - reader.startAddr.index} bytes, starting from $base): \n " )
231
+ sb.append(s " \n\n Attributes ( ${reader.endAddr.index - reader.startAddr.index} bytes, starting from $base): \n " )
261
232
262
233
for tag <- attributes.booleanTags do
263
234
sb.append(" " ).append(attributeTagToString(tag)).append(" \n " )
264
-
265
- sb.result
266
235
}
267
236
}
268
237
0 commit comments