From 562344c21671b6d02ac92f4aa3fda2756386aed5 Mon Sep 17 00:00:00 2001 From: Wojciech Mazur Date: Tue, 25 Jun 2024 12:47:19 +0200 Subject: [PATCH 1/3] Homogenize TASTy printer formatting [Cherry-picked 5add9b78927ff0715ae5214859adb111044491e6][modified] From 49ab72360b319a53883cf19a41b1743f5b02308c Mon Sep 17 00:00:00 2001 From: Wojciech Mazur Date: Tue, 25 Jun 2024 12:49:06 +0200 Subject: [PATCH 2/3] Reuse the `StringBuilder` in `TastyPrinter` [Cherry-picked d74496e84cd9f579eb087c4959885348ed4fa69f][modified] --- .../tools/dotc/core/tasty/TastyPrinter.scala | 59 ++++++------------- 1 file changed, 17 insertions(+), 42 deletions(-) diff --git a/compiler/src/dotty/tools/dotc/core/tasty/TastyPrinter.scala b/compiler/src/dotty/tools/dotc/core/tasty/TastyPrinter.scala index c0d7762542e9..563d768b0608 100644 --- a/compiler/src/dotty/tools/dotc/core/tasty/TastyPrinter.scala +++ b/compiler/src/dotty/tools/dotc/core/tasty/TastyPrinter.scala @@ -64,8 +64,6 @@ object TastyPrinter: class TastyPrinter(bytes: Array[Byte]) { - private val sb: StringBuilder = new StringBuilder - class TastyPrinterUnpickler extends TastyUnpickler(bytes) { var namesStart: Addr = uninitialized var namesEnd: Addr = uninitialized @@ -83,7 +81,7 @@ class TastyPrinter(bytes: Array[Byte]) { private def nameRefToString(ref: NameRef): String = nameToString(nameAtRef(ref)) - private def printHeader(): Unit = + private def printHeader(sb: StringBuilder): Unit = val header = unpickler.header sb.append("Header:\n") sb.append(s" version: ${header.majorVersion}.${header.minorVersion}.${header.experimentalVersion}\n") @@ -91,7 +89,7 @@ class TastyPrinter(bytes: Array[Byte]) { sb.append(" UUID: ").append(header.uuid).append("\n") sb.append("\n") - private def printNames(): Unit = + private def printNames(sb: StringBuilder): Unit = sb.append(s"Names (${unpickler.namesEnd.index - unpickler.namesStart.index} bytes, starting from ${unpickler.namesStart.index}):\n") for ((name, idx) <- nameAtRef.contents.zipWithIndex) { val index = nameStr("%6d".format(idx)) @@ -99,31 +97,18 @@ class TastyPrinter(bytes: Array[Byte]) { } def showContents(): String = { - printHeader() - printNames() - unpickle(new TreeSectionUnpickler) match { - case Some(s) => sb.append("\n\n").append(s) - case _ => - } - sb.append("\n\n") - unpickle(new PositionSectionUnpickler) match { - case Some(s) => sb.append(s) - case _ => - } - sb.append("\n\n") - unpickle(new CommentSectionUnpickler) match { - case Some(s) => sb.append(s) - case _ => - } + val sb: StringBuilder = new StringBuilder + printHeader(sb) + printNames(sb) + unpickle(new TreeSectionUnpickler(sb)) + unpickle(new PositionSectionUnpickler(sb)) + unpickle(new CommentSectionUnpickler(sb)) sb.result } - class TreeSectionUnpickler extends SectionUnpickler[String](ASTsSection) { + class TreeSectionUnpickler(sb: StringBuilder) extends SectionUnpickler[Unit](ASTsSection) { import dotty.tools.tasty.TastyFormat.* - - private val sb: StringBuilder = new StringBuilder - - def unpickle(reader: TastyReader, tastyName: NameTable): String = { + def unpickle(reader: TastyReader, tastyName: NameTable): Unit = { import reader.* var indent = 0 def newLine() = { @@ -184,23 +169,19 @@ class TastyPrinter(bytes: Array[Byte]) { } indent -= 2 } - sb.append(s"Trees (${endAddr.index - startAddr.index} bytes, starting from $base):") + sb.append(s"\n\nTrees (${endAddr.index - startAddr.index} bytes, starting from $base):") while (!isAtEnd) { printTree() newLine() } - sb.result } } - class PositionSectionUnpickler extends SectionUnpickler[String](PositionsSection) { - - private val sb: StringBuilder = new StringBuilder - - def unpickle(reader: TastyReader, tastyName: NameTable): String = { + class PositionSectionUnpickler(sb: StringBuilder) extends SectionUnpickler[Unit](PositionsSection) { + def unpickle(reader: TastyReader, tastyName: NameTable): Unit = { import reader.* val posUnpickler = new PositionUnpickler(reader, tastyName) - sb.append(s"Positions (${reader.endAddr.index - reader.startAddr.index} bytes, starting from $base):\n") + sb.append(s"\n\nPositions (${reader.endAddr.index - reader.startAddr.index} bytes, starting from $base):\n") val lineSizes = posUnpickler.lineSizes sb.append(s" lines: ${lineSizes.length}\n") sb.append(s" line sizes:\n") @@ -224,26 +205,20 @@ class TastyPrinter(bytes: Array[Byte]) { sb.append(nameStr(s"${nameRef.index} [${tastyName(nameRef)}]")) sb.append("\n") } - - sb.result } } - class CommentSectionUnpickler extends SectionUnpickler[String](CommentsSection) { - - private val sb: StringBuilder = new StringBuilder - - def unpickle(reader: TastyReader, tastyName: NameTable): String = { + class CommentSectionUnpickler(sb: StringBuilder) extends SectionUnpickler[Unit](CommentsSection) { + def unpickle(reader: TastyReader, tastyName: NameTable): Unit = { import reader.* val comments = new CommentUnpickler(reader).comments if !comments.isEmpty then - sb.append(s"Comments (${reader.endAddr.index - reader.startAddr.index} bytes, starting from $base):\n") + sb.append(s"\n\nComments (${reader.endAddr.index - reader.startAddr.index} bytes, starting from $base):\n") val sorted = comments.toSeq.sortBy(_._1.index) for ((addr, cmt) <- sorted) { sb.append(treeStr("%6d".format(addr.index))) sb.append(s": ${cmt.raw} (expanded = ${cmt.isExpanded})\n") } - sb.result } } From 87f8a9575cdefed0ff5533ab981ca879023b0836 Mon Sep 17 00:00:00 2001 From: Nicolas Stucki Date: Fri, 1 Dec 2023 14:25:45 +0100 Subject: [PATCH 3/3] Fix source path index color [Cherry-picked 9b1a32e60e0db559748a97a7057fc7155d4a6965] --- compiler/src/dotty/tools/dotc/core/tasty/TastyPrinter.scala | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/compiler/src/dotty/tools/dotc/core/tasty/TastyPrinter.scala b/compiler/src/dotty/tools/dotc/core/tasty/TastyPrinter.scala index 563d768b0608..8bd94b553545 100644 --- a/compiler/src/dotty/tools/dotc/core/tasty/TastyPrinter.scala +++ b/compiler/src/dotty/tools/dotc/core/tasty/TastyPrinter.scala @@ -201,7 +201,8 @@ class TastyPrinter(bytes: Array[Byte]) { sb.append(s"\n source paths:\n") val sortedPath = sources.toSeq.sortBy(_._1.index) for ((addr, nameRef) <- sortedPath) { - sb.append(treeStr("%6d: ".format(addr.index))) + sb.append(treeStr("%6d".format(addr.index))) + sb.append(": ") sb.append(nameStr(s"${nameRef.index} [${tastyName(nameRef)}]")) sb.append("\n") }