summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorIulian Dragos <jaguarul@gmail.com>2008-10-30 13:23:19 +0000
committerIulian Dragos <jaguarul@gmail.com>2008-10-30 13:23:19 +0000
commit6ae2c86f2f10964586eba23c4e9af0097716520f (patch)
tree14efc6120f48c9a22b8bef05b787a7a498ab178f /src
parent9da19f07f16f96a2a55f0b48ec49573137cbca4b (diff)
downloadscala-6ae2c86f2f10964586eba23c4e9af0097716520f.tar.gz
scala-6ae2c86f2f10964586eba23c4e9af0097716520f.tar.bz2
scala-6ae2c86f2f10964586eba23c4e9af0097716520f.zip
Fixed annoying dead-code elimination bug.
Diffstat (limited to 'src')
-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)*/)