@@ -12,6 +12,10 @@ import util.Spans.offsetToInt
1212import dotty .tools .tasty .TastyFormat .{ASTsSection , PositionsSection , CommentsSection }
1313import java .nio .file .{Files , Paths }
1414import dotty .tools .io .{JarArchive , Path }
15+ import dotty .tools .tasty .TastyFormat .header
16+
17+ import scala .compiletime .uninitialized
18+ import dotty .tools .tasty .TastyBuffer .Addr
1519
1620object TastyPrinter :
1721
@@ -62,26 +66,43 @@ class TastyPrinter(bytes: Array[Byte]) {
6266
6367 private val sb : StringBuilder = new StringBuilder
6468
65- private val unpickler : TastyUnpickler = new TastyUnpickler (bytes)
69+ class TastyPrinterUnpickler extends TastyUnpickler (bytes) {
70+ var namesStart : Addr = uninitialized
71+ var namesEnd : Addr = uninitialized
72+ override def readNames () = {
73+ namesStart = reader.currentAddr
74+ super .readNames()
75+ namesEnd = reader.currentAddr
76+ }
77+ }
78+
79+ private val unpickler : TastyPrinterUnpickler = new TastyPrinterUnpickler
6680 import unpickler .{nameAtRef , unpickle }
6781
6882 private def nameToString (name : Name ): String = name.debugString
6983
7084 private def nameRefToString (ref : NameRef ): String = nameToString(nameAtRef(ref))
7185
86+ private def printHeader (): Unit =
87+ val header = unpickler.header
88+ sb.append(" Header:\n " )
89+ sb.append(s " version: ${header.majorVersion}. ${header.minorVersion}. ${header.experimentalVersion}\n " )
90+ sb.append(" tooling: " ).append(header.toolingVersion).append(" \n " )
91+ sb.append(" UUID: " ).append(header.uuid).append(" \n " )
92+ sb.append(" \n " )
93+
7294 private def printNames (): Unit =
95+ sb.append(s " Names ( ${unpickler.namesEnd.index - unpickler.namesStart.index} bytes, starting from ${unpickler.namesStart.index}): \n " )
7396 for ((name, idx) <- nameAtRef.contents.zipWithIndex) {
74- val index = nameStr(" %4d " .format(idx))
97+ val index = nameStr(" %6d " .format(idx))
7598 sb.append(index).append(" : " ).append(nameToString(name)).append(" \n " )
7699 }
77100
78101 def showContents (): String = {
79- sb.append( " Names: \n " )
102+ printHeader( )
80103 printNames()
81- sb.append(" \n " )
82- sb.append(" Trees:\n " )
83104 unpickle(new TreeSectionUnpickler ) match {
84- case Some (s) => sb.append(s)
105+ case Some (s) => sb.append(" \n\n " ).append( s)
85106 case _ =>
86107 }
87108 sb.append(" \n\n " )
@@ -106,8 +127,8 @@ class TastyPrinter(bytes: Array[Byte]) {
106127 import reader .*
107128 var indent = 0
108129 def newLine () = {
109- val length = treeStr(" %5d " .format(index(currentAddr) - index(startAddr)))
110- sb.append(s " \n $length: " + " " * indent)
130+ val length = treeStr(" %6d " .format(index(currentAddr) - index(startAddr)))
131+ sb.append(s " \n $length: " + " " * indent)
111132 }
112133 def printNat () = sb.append(treeStr(" " + readNat()))
113134 def printName () = {
@@ -163,8 +184,7 @@ class TastyPrinter(bytes: Array[Byte]) {
163184 }
164185 indent -= 2
165186 }
166- sb.append(s " start = ${reader.startAddr}, base = $base, current = $currentAddr, end = $endAddr\n " )
167- sb.append(s " ${endAddr.index - startAddr.index} bytes of AST, base = $currentAddr\n " )
187+ sb.append(s " Trees ( ${endAddr.index - startAddr.index} bytes, starting from $base): " )
168188 while (! isAtEnd) {
169189 printTree()
170190 newLine()
@@ -178,26 +198,30 @@ class TastyPrinter(bytes: Array[Byte]) {
178198 private val sb : StringBuilder = new StringBuilder
179199
180200 def unpickle (reader : TastyReader , tastyName : NameTable ): String = {
201+ import reader .*
181202 val posUnpickler = new PositionUnpickler (reader, tastyName)
182- sb.append(s " ${reader.endAddr.index - reader.currentAddr.index}" )
183- sb.append(" position bytes:\n " )
203+ sb.append(s " Positions ( ${reader.endAddr.index - reader.startAddr.index} bytes, starting from $base): \n " )
184204 val lineSizes = posUnpickler.lineSizes
185- sb.append(s " lines: ${lineSizes.length}\n " )
186- sb.append(posUnpickler.lineSizes.mkString(" line sizes: " , " , " , " \n " ))
187- sb.append(" positions:\n " )
205+ sb.append(s " lines: ${lineSizes.length}\n " )
206+ sb.append(s " line sizes: \n " )
207+ val windowSize = 20
208+ for window <- posUnpickler.lineSizes.sliding(windowSize, windowSize) do
209+ sb.append(" " ).append(window.mkString(" , " )).append(" \n " )
210+ // sb.append(posUnpickler.lineSizes.mkString(" line sizes: ", ", ", "\n"))
211+ sb.append(" positions:\n " )
188212 val spans = posUnpickler.spans
189213 val sorted = spans.toSeq.sortBy(_._1.index)
190214 for ((addr, pos) <- sorted) {
191- sb.append(treeStr(" %10d " .format(addr.index)))
215+ sb.append(treeStr(" %6d " .format(addr.index)))
192216 sb.append(s " : ${offsetToInt(pos.start)} .. ${pos.end}\n " )
193217 }
194218
195- val sources = posUnpickler.sourcePaths
196- sb.append(s " \n source paths: \n " )
219+ val sources = posUnpickler.sourceNameRefs
220+ sb.append(s " \n source paths: \n " )
197221 val sortedPath = sources.toSeq.sortBy(_._1.index)
198- for ((addr, path ) <- sortedPath) {
199- sb.append(treeStr(" %10d : " .format(addr.index)))
200- sb.append(path )
222+ for ((addr, nameRef ) <- sortedPath) {
223+ sb.append(treeStr(" %6d : " .format(addr.index)))
224+ sb.append(nameStr( s " ${nameRef.index} [ ${tastyName(nameRef)} ] " ) )
201225 sb.append(" \n " )
202226 }
203227
@@ -210,14 +234,15 @@ class TastyPrinter(bytes: Array[Byte]) {
210234 private val sb : StringBuilder = new StringBuilder
211235
212236 def unpickle (reader : TastyReader , tastyName : NameTable ): String = {
213- sb.append( s " ${ reader.endAddr.index - reader.currentAddr.index} " )
237+ import reader .*
214238 val comments = new CommentUnpickler (reader).comments
215- sb.append(s " comment bytes: \n " )
216- val sorted = comments.toSeq.sortBy(_._1.index)
217- for ((addr, cmt) <- sorted) {
218- sb.append(treeStr(" %10d" .format(addr.index)))
219- sb.append(s " : ${cmt.raw} (expanded = ${cmt.isExpanded}) \n " )
220- }
239+ if ! comments.isEmpty then
240+ sb.append(s " Comments ( ${reader.endAddr.index - reader.startAddr.index} bytes, starting from $base): \n " )
241+ val sorted = comments.toSeq.sortBy(_._1.index)
242+ for ((addr, cmt) <- sorted) {
243+ sb.append(treeStr(" %6d" .format(addr.index)))
244+ sb.append(s " : ${cmt.raw} (expanded = ${cmt.isExpanded}) \n " )
245+ }
221246 sb.result
222247 }
223248 }
0 commit comments