Skip to content

Commit d690573

Browse files
committed
Give compilation error when -Yprofile-trace is used without -Yprofile-enabled. Allow to define dependencies in String/Phase settings (previously unused)
1 parent 4993d08 commit d690573

File tree

2 files changed

+9
-8
lines changed

2 files changed

+9
-8
lines changed

compiler/src/dotty/tools/dotc/config/ScalaSettings.scala

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -407,13 +407,13 @@ private sealed trait YSettings:
407407
val YcompileScala2Library: Setting[Boolean] = BooleanSetting(ForkSetting, "Ycompile-scala2-library", "Used when compiling the Scala 2 standard library.")
408408
val YoutputOnlyTasty: Setting[Boolean] = BooleanSetting(ForkSetting, "Youtput-only-tasty", "Used to only generate the TASTy file without the classfiles")
409409
val YprofileEnabled: Setting[Boolean] = BooleanSetting(ForkSetting, "Yprofile-enabled", "Enable profiling.")
410-
val YprofileDestination: Setting[String] = StringSetting(ForkSetting, "Yprofile-destination", "file", "Where to send profiling output - specify a file, default is to the console.", "")
410+
val YprofileDestination: Setting[String] = StringSetting(ForkSetting, "Yprofile-destination", "file", "Where to send profiling output - specify a file, default is to the console.", "", depends = List(YprofileEnabled -> true))
411411
//.withPostSetHook( _ => YprofileEnabled.value = true )
412-
val YprofileExternalTool: Setting[List[String]] = PhasesSetting(ForkSetting, "Yprofile-external-tool", "Enable profiling for a phase using an external tool hook. Generally only useful for a single phase.", "typer")
412+
val YprofileExternalTool: Setting[List[String]] = PhasesSetting(ForkSetting, "Yprofile-external-tool", "Enable profiling for a phase using an external tool hook. Generally only useful for a single phase.", "typer", depends = List(YprofileEnabled -> true))
413413
//.withPostSetHook( _ => YprofileEnabled.value = true )
414-
val YprofileRunGcBetweenPhases: Setting[List[String]] = PhasesSetting(ForkSetting, "Yprofile-run-gc", "Run a GC between phases - this allows heap size to be accurate at the expense of more time. Specify a list of phases, or *", "_")
414+
val YprofileRunGcBetweenPhases: Setting[List[String]] = PhasesSetting(ForkSetting, "Yprofile-run-gc", "Run a GC between phases - this allows heap size to be accurate at the expense of more time. Specify a list of phases, or *", "_", depends = List(YprofileEnabled -> true))
415415
//.withPostSetHook( _ => YprofileEnabled.value = true )
416-
val YprofileTrace: Setting[String] = StringSetting(ForkSetting, "Yprofile-trace", "file", "Capture trace of compilation in Chrome Trace format", "profile.trace")
416+
val YprofileTrace: Setting[String] = StringSetting(ForkSetting, "Yprofile-trace", "file", s"Capture trace of compilation in Chrome Trace format, requires ${YprofileEnabled.name}", "", depends = List(YprofileEnabled -> true))
417417
//.withPostSetHook( _ => YprofileEnabled.value = true )
418418

419419
// Experimental language features

compiler/src/dotty/tools/dotc/config/Settings.scala

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ object Settings:
6767
def validateSettingString(name: String): Unit =
6868
assert(settingCharacters.matches(name), s"Setting string $name contains invalid characters")
6969

70+
type SettingDependencies = List[(Setting[?], Any)]
7071

7172
case class Setting[T: ClassTag] private[Settings] (
7273
category: SettingCategory,
@@ -77,7 +78,7 @@ object Settings:
7778
choices: Option[Seq[?]] = None,
7879
prefix: Option[String] = None,
7980
aliases: List[String] = Nil,
80-
depends: List[(Setting[?], Any)] = Nil,
81+
depends: SettingDependencies = Nil,
8182
ignoreInvalidArgs: Boolean = false,
8283
preferPrevious: Boolean = false,
8384
propertyClass: Option[Class[?]] = None,
@@ -346,8 +347,8 @@ object Settings:
346347
def BooleanSetting(category: SettingCategory, name: String, descr: String, initialValue: Boolean = false, aliases: List[String] = Nil, preferPrevious: Boolean = false): Setting[Boolean] =
347348
publish(Setting(category, prependName(name), descr, initialValue, aliases = aliases, preferPrevious = preferPrevious))
348349

349-
def StringSetting(category: SettingCategory, name: String, helpArg: String, descr: String, default: String, aliases: List[String] = Nil): Setting[String] =
350-
publish(Setting(category, prependName(name), descr, default, helpArg, aliases = aliases))
350+
def StringSetting(category: SettingCategory, name: String, helpArg: String, descr: String, default: String, aliases: List[String] = Nil, depends: SettingDependencies = Nil): Setting[String] =
351+
publish(Setting(category, prependName(name), descr, default, helpArg, aliases = aliases, depends = depends))
351352

352353
def ChoiceSetting(category: SettingCategory, name: String, helpArg: String, descr: String, choices: List[String], default: String, aliases: List[String] = Nil, legacyArgs: Boolean = false): Setting[String] =
353354
publish(Setting(category, prependName(name), descr, default, helpArg, Some(choices), aliases = aliases, legacyArgs = legacyArgs))
@@ -373,7 +374,7 @@ object Settings:
373374
def PathSetting(category: SettingCategory, name: String, descr: String, default: String, aliases: List[String] = Nil): Setting[String] =
374375
publish(Setting(category, prependName(name), descr, default, aliases = aliases))
375376

376-
def PhasesSetting(category: SettingCategory, name: String, descr: String, default: String = "", aliases: List[String] = Nil): Setting[List[String]] =
377+
def PhasesSetting(category: SettingCategory, name: String, descr: String, default: String = "", aliases: List[String] = Nil, depends: SettingDependencies = Nil): Setting[List[String]] =
377378
publish(Setting(category, prependName(name), descr, if (default.isEmpty) Nil else List(default), aliases = aliases))
378379

379380
def PrefixSetting(category: SettingCategory, name: String, descr: String): Setting[List[String]] =

0 commit comments

Comments
 (0)