diff options
author | odersky <odersky@gmail.com> | 2014-12-18 22:27:59 +0100 |
---|---|---|
committer | odersky <odersky@gmail.com> | 2014-12-18 22:27:59 +0100 |
commit | f3c0eaa2a2e02e3bd832bf9d30bc7f8e3397ef88 (patch) | |
tree | f796849defd72e798d32f74422666ec1905576c1 /src | |
parent | 83c3f7a64899011fa1260bc699ca06728173bc50 (diff) | |
parent | 7bef54de2fcdb5585031c2d6a81952659f4e5d7c (diff) | |
download | dotty-f3c0eaa2a2e02e3bd832bf9d30bc7f8e3397ef88.tar.gz dotty-f3c0eaa2a2e02e3bd832bf9d30bc7f8e3397ef88.tar.bz2 dotty-f3c0eaa2a2e02e3bd832bf9d30bc7f8e3397ef88.zip |
Merge pull request #308 from smarter/change/Ylog-2
-Ylog:X now only log phase X, use -Ylog:X+ to also log phase X+1
Diffstat (limited to 'src')
-rw-r--r-- | src/dotty/tools/dotc/config/CompilerCommand.scala | 10 | ||||
-rw-r--r-- | src/dotty/tools/dotc/core/Decorators.scala | 19 | ||||
-rw-r--r-- | src/dotty/tools/dotc/reporting/Reporter.scala | 12 |
3 files changed, 23 insertions, 18 deletions
diff --git a/src/dotty/tools/dotc/config/CompilerCommand.scala b/src/dotty/tools/dotc/config/CompilerCommand.scala index ec8b17b0d..aa8e7abbf 100644 --- a/src/dotty/tools/dotc/config/CompilerCommand.scala +++ b/src/dotty/tools/dotc/config/CompilerCommand.scala @@ -19,11 +19,13 @@ object CompilerCommand extends DotClass { |Where multiple values are accepted, they should be comma-separated. | example: -Xplugin:plugin1,plugin2 |<phases> means one or a comma-separated list of: - | (partial) phase names, phase ids, phase id ranges, or the string "all". + | - (partial) phase names with an optional "+" suffix to include the next phase + | - the string "all" | example: -Xprint:all prints all phases. - | example: -Xprint:expl,24-26 prints phases explicitouter, closelim, dce, jvm. - | example: -Xprint:-4 prints only the phases up to typer. - | + | example: -Xprint:front,mixin prints the frontend and mixin phases. + | example: -Ylog:erasure+ logs the erasure phase and the phase after the erasure phase. + | This is useful because during the tree transform of phase X, we often + | already are in phase X+1. """.stripMargin.trim + "\n" def shortUsage = s"Usage: $cmdName <options> <source files>" diff --git a/src/dotty/tools/dotc/core/Decorators.scala b/src/dotty/tools/dotc/core/Decorators.scala index e0d7fae33..882729063 100644 --- a/src/dotty/tools/dotc/core/Decorators.scala +++ b/src/dotty/tools/dotc/core/Decorators.scala @@ -128,15 +128,22 @@ object Decorators { def show(implicit ctx: Context) = text.mkString(ctx.settings.pageWidth.value) } - /** Implements a test whether a list of strings representing phases contains - * a given phase. The test returns true if the given phase starts with - * one of the names in the list of strings, or if the list of strings - * contains "all". + /** Test whether a list of strings representing phases contains + * a given phase. See [[config.CompilerCommand#explainAdvanced]] for the + * exact meaning of "contains" here. */ implicit class PhaseListDecorator(val names: List[String]) extends AnyVal { - def containsPhase(phase: Phase): Boolean = phase match { + def containsPhase(phase: Phase): Boolean = phase match { case phase: TreeTransformer => phase.transformations.exists(trans => containsPhase(trans.phase)) - case _ => names exists (n => n == "all" || phase.phaseName.startsWith(n)) + case _ => + names exists { name => + name == "all" || { + val strippedName = name.stripSuffix("+") + val logNextPhase = name ne strippedName + phase.phaseName.startsWith(strippedName) || + (logNextPhase && phase.prev.phaseName.startsWith(strippedName)) + } + } } } diff --git a/src/dotty/tools/dotc/reporting/Reporter.scala b/src/dotty/tools/dotc/reporting/Reporter.scala index dc6d8c6ab..41f007e66 100644 --- a/src/dotty/tools/dotc/reporting/Reporter.scala +++ b/src/dotty/tools/dotc/reporting/Reporter.scala @@ -101,16 +101,12 @@ trait Reporting { this: Context => def incompleteInputError(msg: String, pos: SourcePosition = NoSourcePosition)(implicit ctx: Context): Unit = reporter.incomplete(new Error(msg, pos))(ctx) - /** Log msg if current phase or its precedessor is mentioned in - * settings.log. - * The reason we also pick the predecessor is that during the - * tree transform of phase X, we often are already in phase X+1. - * It's convenient to have logging work independently of whether - * we have advanced the phase or not. + /** Log msg if settings.log contains the current phase. + * See [[config.CompilerCommand#explainAdvanced]] for the exact meaning of + * "contains" here. */ def log(msg: => String): Unit = - if (this.settings.log.value.containsPhase(phase) || - this.settings.log.value.containsPhase(phase.prev)) + if (this.settings.log.value.containsPhase(phase)) echo(s"[log ${ctx.phasesStack.reverse.mkString(" -> ")}] $msg") def debuglog(msg: => String): Unit = |