diff options
author | Paul Phillips <paulp@improving.org> | 2013-05-03 17:39:51 -0700 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2013-05-03 17:40:10 -0700 |
commit | a86c7a15d1a58e828b61fc12a8b3d0ef0b2f8061 (patch) | |
tree | 490f0dbf6c7e64883b2ce4f59aa556a70b835051 /src/compiler/scala/tools | |
parent | 6eb33d4ad15ae3548c21535de652ea246582a44f (diff) | |
download | scala-a86c7a15d1a58e828b61fc12a8b3d0ef0b2f8061.tar.gz scala-a86c7a15d1a58e828b61fc12a8b3d0ef0b2f8061.tar.bz2 scala-a86c7a15d1a58e828b61fc12a8b3d0ef0b2f8061.zip |
Hardening against nulls for deserialization.
When one attempts to populate data structures via
deserialization, nulls tend to show up in unlikely or
"impossible" places. Now there are a few fewer.
Diffstat (limited to 'src/compiler/scala/tools')
6 files changed, 14 insertions, 7 deletions
diff --git a/src/compiler/scala/tools/nsc/backend/icode/BasicBlocks.scala b/src/compiler/scala/tools/nsc/backend/icode/BasicBlocks.scala index 94fbba8066..16ee40280c 100644 --- a/src/compiler/scala/tools/nsc/backend/icode/BasicBlocks.scala +++ b/src/compiler/scala/tools/nsc/backend/icode/BasicBlocks.scala @@ -38,7 +38,7 @@ trait BasicBlocks { import BBFlags._ - def code = method.code + def code = if (method eq null) NoCode else method.code private final class SuccessorList() { private var successors: List[BasicBlock] = Nil diff --git a/src/compiler/scala/tools/nsc/backend/icode/analysis/CopyPropagation.scala b/src/compiler/scala/tools/nsc/backend/icode/analysis/CopyPropagation.scala index 338a07c872..d3016b2d9b 100644 --- a/src/compiler/scala/tools/nsc/backend/icode/analysis/CopyPropagation.scala +++ b/src/compiler/scala/tools/nsc/backend/icode/analysis/CopyPropagation.scala @@ -541,7 +541,8 @@ abstract class CopyPropagation { m.isGetter // abstract getters are still pure, as we 'know' final override def toString() = ( - method.blocks map { b => + if (method eq null) List("<null>") + else method.blocks map { b => "\nIN(%s):\t Bindings: %s".format(b.label, in(b).bindings) + "\nIN(%s):\t Stack: %s".format(b.label, in(b).stack) } diff --git a/src/compiler/scala/tools/nsc/backend/icode/analysis/ReachingDefinitions.scala b/src/compiler/scala/tools/nsc/backend/icode/analysis/ReachingDefinitions.scala index 26b7bc50d8..fecd48ed27 100644 --- a/src/compiler/scala/tools/nsc/backend/icode/analysis/ReachingDefinitions.scala +++ b/src/compiler/scala/tools/nsc/backend/icode/analysis/ReachingDefinitions.scala @@ -240,7 +240,8 @@ abstract class ReachingDefinitions { findDefs(bb, idx, m, 0) override def toString: String = { - method.code.blocks map { b => + if (method eq null) "<null>" + else method.code.blocks map { b => " entry(%s) = %s\n".format(b, in(b)) + " exit(%s) = %s\n".format(b, out(b)) } mkString ("ReachingDefinitions {\n", "\n", "\n}") diff --git a/src/compiler/scala/tools/nsc/backend/opt/ClosureElimination.scala b/src/compiler/scala/tools/nsc/backend/opt/ClosureElimination.scala index aaf2c55dcd..bde17b28fc 100644 --- a/src/compiler/scala/tools/nsc/backend/opt/ClosureElimination.scala +++ b/src/compiler/scala/tools/nsc/backend/opt/ClosureElimination.scala @@ -71,8 +71,10 @@ abstract class ClosureElimination extends SubComponent { def name = phaseName val closser = new ClosureElim - override def apply(c: IClass): Unit = - closser analyzeClass c + override def apply(c: IClass): Unit = { + if (closser ne null) + closser analyzeClass c + } } /** diff --git a/src/compiler/scala/tools/nsc/backend/opt/DeadCodeElimination.scala b/src/compiler/scala/tools/nsc/backend/opt/DeadCodeElimination.scala index 1026e95fac..483bff6467 100644 --- a/src/compiler/scala/tools/nsc/backend/opt/DeadCodeElimination.scala +++ b/src/compiler/scala/tools/nsc/backend/opt/DeadCodeElimination.scala @@ -33,7 +33,7 @@ abstract class DeadCodeElimination extends SubComponent { val dce = new DeadCode() override def apply(c: IClass) { - if (settings.Xdce) + if (settings.Xdce && (dce ne null)) dce.analyzeClass(c) } } diff --git a/src/compiler/scala/tools/nsc/typechecker/Implicits.scala b/src/compiler/scala/tools/nsc/typechecker/Implicits.scala index 875aa5a9d3..04bd342004 100644 --- a/src/compiler/scala/tools/nsc/typechecker/Implicits.scala +++ b/src/compiler/scala/tools/nsc/typechecker/Implicits.scala @@ -217,7 +217,10 @@ trait Implicits { case _ => false } override def hashCode = name.## + pre.## + sym.## - override def toString = name + ": " + tpe + override def toString = ( + if (tpeCache eq null) name + ": ?" + else name + ": " + tpe + ) } /** A sentinel indicating no implicit was found */ |