Skip to content

Commit

Permalink
Merge pull request #10703 from som-snytt/issue/12959-dot
Browse files Browse the repository at this point in the history
Restore dot file output in PhaseAssembly
  • Loading branch information
som-snytt committed Mar 2, 2024
2 parents 577ab8e + 59ccb8a commit 06a7509
Show file tree
Hide file tree
Showing 4 changed files with 11 additions and 8 deletions.
13 changes: 8 additions & 5 deletions src/compiler/scala/tools/nsc/PhaseAssembly.scala
Expand Up @@ -261,13 +261,16 @@ trait PhaseAssembly {
def color(hex: String) = s""" [color="#$hex"]"""
def node(n: graph.Node) = s""""${n.allPhaseNames}(${n.level})""""

val buf = mutable.ListBuffer.empty[String]
buf += "digraph G {"
buf ++= edges.map(e => s"${node(e.frm)}->${node(e.to)}" + color(if (e.hard) "0000ff" else "000000"))
buf ++= extnodes.distinct.map(n => node(n) + color("00ff00"))
buf ++= fatnodes.distinct.map(n => node(n) + color("0000ff"))
buf += "}"

import scala.reflect.io._
val f = Path(d.file) / File(filename)
f.printlnAll("digraph G {")
f.printlnAll(edges.map(e => s"${node(e.frm)}->${node(e.to)}" + color(if (e.hard) "0000ff" else "000000")): _*)
f.printlnAll(extnodes.distinct.map(n => node(n) + color("00ff00")): _*)
f.printlnAll(fatnodes.distinct.map(n => node(n) + color("0000ff")): _*)
f.printlnAll("}")
f.printlnAll(buf.toList: _*)
}
}
}
Expand Up @@ -216,7 +216,7 @@ class MutableSettings(val errorFn: String => Unit, val pathFactory: PathFactory)
add(new MultiChoiceSetting[E](name, helpArg, descr, domain, default))
def OutputSetting(default: String) = add(new OutputSetting(default))
def PhasesSetting(name: String, descr: String, default: String = "") = add(new PhasesSetting(name, descr, default))
def StringSetting(name: String, arg: String, descr: String, default: String, helpText: Option[String] = None) = add(new StringSetting(name, arg, descr, default, helpText))
def StringSetting(name: String, arg: String, descr: String, default: String = "", helpText: Option[String] = None) = add(new StringSetting(name, arg, descr, default, helpText))
def ScalaVersionSetting(name: String, arg: String, descr: String, initial: ScalaVersion, default: Option[ScalaVersion] = None, helpText: Option[String] = None) =
add(new ScalaVersionSetting(name, arg, descr, initial, default, helpText))
def PathSetting(name: String, descr: String, default: String): PathSetting = {
Expand Down
2 changes: 1 addition & 1 deletion src/compiler/scala/tools/nsc/settings/ScalaSettings.scala
Expand Up @@ -95,7 +95,7 @@ trait ScalaSettings extends StandardScalaSettings with Warnings { _: MutableSett
val elidebelow = IntSetting ("-Xelide-below", "Calls to @elidable methods are omitted if method priority is lower than argument",
elidable.MINIMUM, None, elidable.byName get _)
val noForwarders = BooleanSetting ("-Xno-forwarders", "Do not generate static forwarders in mirror classes.")
val genPhaseGraph = StringSetting ("-Xgenerate-phase-graph", "file", "Generate the phase graphs (outputs .dot files) to fileX.dot.", "")
val genPhaseGraph = StringSetting ("-Vphase-graph", arg="file", descr="Generate phase graph to <file>-*.dot.").withAbbreviation("-Xgenerate-phase-graph")
val maxerrs = IntSetting ("-Xmaxerrs", "Maximum errors to print", 100, None, _ => None)
val maxwarns = IntSetting ("-Xmaxwarns", "Maximum warnings to print", 100, None, _ => None)
val Xmigration = ScalaVersionSetting ("-Xmigration", "version", "Warn about constructs whose behavior may have changed since version.", initial = NoScalaVersion, default = Some(AnyScalaVersion))
Expand Down
2 changes: 1 addition & 1 deletion src/manual/scala/man1/scalac.scala
Expand Up @@ -206,7 +206,7 @@ object scalac extends Command {
CmdOption("Xfull-lubs"),
"Retain pre 2.10 behavior of less aggressive truncation of least upper bounds."),
Definition(
CmdOption("Xgenerate-phase-graph", Argument("file")),
CmdOption("Vphase-graph", Argument("file")),
"Generate the phase graphs (outputs .dot files) to fileX.dot."),
Definition(
CmdOption("Xlint"),
Expand Down

0 comments on commit 06a7509

Please sign in to comment.