From 61b353255e80babd2b00d5299cb6c5c5cade109f Mon Sep 17 00:00:00 2001 From: Martin Odersky Date: Thu, 11 Dec 2008 14:34:37 +0000 Subject: switch to new initialization semantics. --- src/compiler/scala/tools/nsc/Settings.scala | 1 + src/compiler/scala/tools/nsc/transform/Constructors.scala | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/compiler/scala/tools/nsc/Settings.scala b/src/compiler/scala/tools/nsc/Settings.scala index 7a6452709e..911dbba8c4 100644 --- a/src/compiler/scala/tools/nsc/Settings.scala +++ b/src/compiler/scala/tools/nsc/Settings.scala @@ -102,6 +102,7 @@ class Settings(error: String => Unit) { val assemname = StringSetting ("-Xassem", "file", "Name of the output assembly (only relevant with -target:msil)", "").dependsOn(target, "msil").hideToIDE val assemrefs = StringSetting ("-Xassem-path", "path", "List of assemblies referenced by the program (only relevant with -target:msil)", ".").dependsOn(target, "msil").hideToIDE val Xchecknull = BooleanSetting ("-Xcheck-null", "Emit warning on selection of nullable reference") + val Xwarninit = BooleanSetting ("-Xwarninit", "Warn about possible changes in initialization semantics") val checkInit = BooleanSetting ("-Xcheckinit", "Add runtime checks on field accessors. Uninitialized accesses result in an exception being thrown.") val noassertions = BooleanSetting ("-Xdisable-assertions", "Generate no assertions and assumptions") val Xexperimental = BooleanSetting ("-Xexperimental", "Enable experimental extensions") diff --git a/src/compiler/scala/tools/nsc/transform/Constructors.scala b/src/compiler/scala/tools/nsc/transform/Constructors.scala index 9bccf5c95f..c69a288a8c 100644 --- a/src/compiler/scala/tools/nsc/transform/Constructors.scala +++ b/src/compiler/scala/tools/nsc/transform/Constructors.scala @@ -108,13 +108,13 @@ abstract class Constructors extends Transform { def canBeMoved(tree: Tree) = tree match { //todo: eliminate thisRefSeen case ValDef(mods, _, _, _) => - if (settings.Xexperimental.value) + if (settings.Xwarninit.value) if (!(mods hasFlag PRESUPER | PARAMACCESSOR) && !thisRefSeen && { val g = tree.symbol.getter(tree.symbol.owner); g != NoSymbol && !g.allOverriddenSymbols.isEmpty }) unit.warning(tree.pos, "the semantics of this definition has changed;\nthe initialization is no longer be executed before the superclass is called") - (mods hasFlag PRESUPER | PARAMACCESSOR) || !thisRefSeen && (!settings.future.value && !settings.checkInit.value) + (mods hasFlag PRESUPER | PARAMACCESSOR)// || !thisRefSeen && (!settings.future.value && !settings.checkInit.value) case _ => false } -- cgit v1.2.3