From 415dda408d6bee761a6249a4a9578e6f50527a83 Mon Sep 17 00:00:00 2001 From: Simon Ochsenreither Date: Mon, 1 Jul 2013 21:20:05 +0200 Subject: SI-7174 Fix initialization issues Without constant inlining, the compiler would not even bootstrap because it depends on constant inlining hiding initialization issues which would cause a NPE otherwise. In this case, global is null at runtime, but no NPE is happening despite accessing members of global (see SubComponent), because constant inlining has copied the values of those members to the call-sites and eliminated the dereference of global. This commit fixes the initialization order. --- src/compiler/scala/tools/nsc/typechecker/Analyzer.scala | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'src/compiler') diff --git a/src/compiler/scala/tools/nsc/typechecker/Analyzer.scala b/src/compiler/scala/tools/nsc/typechecker/Analyzer.scala index 02e1eb6f00..5c02516c47 100644 --- a/src/compiler/scala/tools/nsc/typechecker/Analyzer.scala +++ b/src/compiler/scala/tools/nsc/typechecker/Analyzer.scala @@ -29,8 +29,9 @@ trait Analyzer extends AnyRef val global : Global import global._ - object namerFactory extends SubComponent { + object namerFactory extends { val global: Analyzer.this.global.type = Analyzer.this.global + } with SubComponent { val phaseName = "namer" val runsAfter = List[String]("parser") val runsRightAfter = None @@ -44,8 +45,9 @@ trait Analyzer extends AnyRef } } - object packageObjects extends SubComponent { + object packageObjects extends { val global: Analyzer.this.global.type = Analyzer.this.global + } with SubComponent { val phaseName = "packageobjects" val runsAfter = List[String]() val runsRightAfter= Some("namer") @@ -71,9 +73,10 @@ trait Analyzer extends AnyRef } } - object typerFactory extends SubComponent { - import scala.reflect.internal.TypesStats.typerNanos + object typerFactory extends { val global: Analyzer.this.global.type = Analyzer.this.global + } with SubComponent { + import scala.reflect.internal.TypesStats.typerNanos val phaseName = "typer" val runsAfter = List[String]() val runsRightAfter = Some("packageobjects") -- cgit v1.2.3