summaryrefslogtreecommitdiff
path: root/src/compiler
diff options
context:
space:
mode:
Diffstat (limited to 'src/compiler')
-rw-r--r--src/compiler/scala/tools/nsc/backend/opt/DeadCodeElimination.scala9
1 files changed, 5 insertions, 4 deletions
diff --git a/src/compiler/scala/tools/nsc/backend/opt/DeadCodeElimination.scala b/src/compiler/scala/tools/nsc/backend/opt/DeadCodeElimination.scala
index 05f959886d..49cebeb1d7 100644
--- a/src/compiler/scala/tools/nsc/backend/opt/DeadCodeElimination.scala
+++ b/src/compiler/scala/tools/nsc/backend/opt/DeadCodeElimination.scala
@@ -47,8 +47,7 @@ abstract class DeadCodeElimination extends SubComponent {
def analyzeClass(cls: IClass) {
cls.methods.foreach { m =>
this.method = m
-// analyzeMethod(m);
- dieCodeDie(m)
+ dieCodeDie(m)
}
}
@@ -260,11 +259,13 @@ abstract class DeadCodeElimination extends SubComponent {
abort("could not find init in: " + method)
}
+ lazy val RuntimePackage = definitions.getModule("scala.runtime")
/** Is 'sym' a side-effecting method? TODO: proper analysis. */
private def isSideEffecting(sym: Symbol): Boolean = {
- !((sym.isGetter && !sym.hasFlag(Flags.LAZY)) // for testing only
+ !((sym.isGetter && !sym.hasFlag(Flags.LAZY))
|| (sym.isConstructor
- && sym.owner.owner == definitions.getModule("scala.runtime").moduleClass)
+ && !(sym.owner == method.symbol.owner && method.symbol.isConstructor) // a call to another constructor
+ && sym.owner.owner == RuntimePackage.moduleClass)
|| (sym.isConstructor && inliner.isClosureClass(sym.owner))
/* || definitions.isBox(sym)
|| definitions.isUnbox(sym)*/)