summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2011-01-09 04:11:43 +0000
committerPaul Phillips <paulp@improving.org>2011-01-09 04:11:43 +0000
commitd4748121aa58aa048a751a02d8f9910deab7f915 (patch)
tree5c9a3a55a14bc8e1c8f99d23f7da0d9322f9e22a /src
parent0dea879a7663a3b46ae7edab609ba06b425845cb (diff)
downloadscala-d4748121aa58aa048a751a02d8f9910deab7f915.tar.gz
scala-d4748121aa58aa048a751a02d8f9910deab7f915.tar.bz2
scala-d4748121aa58aa048a751a02d8f9910deab7f915.zip
Warded off an NPE (which only arose on erroneou...
Warded off an NPE (which only arose on erroneous code) in the continuations plugin. Closes #4132, no review.
Diffstat (limited to 'src')
-rw-r--r--src/compiler/scala/tools/nsc/ast/Trees.scala1
-rw-r--r--src/continuations/plugin/scala/tools/selectivecps/CPSAnnotationChecker.scala8
2 files changed, 5 insertions, 4 deletions
diff --git a/src/compiler/scala/tools/nsc/ast/Trees.scala b/src/compiler/scala/tools/nsc/ast/Trees.scala
index 25c053c36d..30af9b0e8e 100644
--- a/src/compiler/scala/tools/nsc/ast/Trees.scala
+++ b/src/compiler/scala/tools/nsc/ast/Trees.scala
@@ -59,6 +59,7 @@ trait Trees extends reflect.generic.Trees { self: SymbolTable =>
}
def isErroneous = (tree.tpe ne null) && tree.tpe.isErroneous
+ def isTyped = (tree.tpe ne null) && !tree.tpe.isErroneous
/** Apply `f' to each subtree */
def foreach(f: Tree => Unit) { new ForeachTreeTraverser(f).traverse(tree) }
diff --git a/src/continuations/plugin/scala/tools/selectivecps/CPSAnnotationChecker.scala b/src/continuations/plugin/scala/tools/selectivecps/CPSAnnotationChecker.scala
index 9f38b9c15a..5151f1eeee 100644
--- a/src/continuations/plugin/scala/tools/selectivecps/CPSAnnotationChecker.scala
+++ b/src/continuations/plugin/scala/tools/selectivecps/CPSAnnotationChecker.scala
@@ -362,7 +362,7 @@ abstract class CPSAnnotationChecker extends CPSUtils {
tree match {
- case Apply(fun @ Select(qual, name), args) if (fun.tpe ne null) && !fun.tpe.isErroneous =>
+ case Apply(fun @ Select(qual, name), args) if fun.isTyped =>
// HACK: With overloaded methods, fun will never get annotated. This is because
// the 'overloaded' type gets annotated, but not the alternatives (among which
@@ -372,12 +372,12 @@ abstract class CPSAnnotationChecker extends CPSUtils {
transChildrenInOrder(tree, tpe, qual::(transArgList(fun, args).flatten), Nil)
- case TypeApply(fun @ Select(qual, name), args) if (fun.tpe ne null) && !fun.tpe.isErroneous =>
+ case TypeApply(fun @ Select(qual, name), args) if fun.isTyped =>
vprintln("[checker] checking select apply " + tree + "/" + tpe)
transChildrenInOrder(tree, tpe, List(qual, fun), Nil)
- case Apply(fun, args) if (fun.tpe ne null) && !fun.tpe.isErroneous =>
+ case Apply(fun, args) if fun.isTyped =>
vprintln("[checker] checking unknown apply " + tree + "/" + tpe)
@@ -389,7 +389,7 @@ abstract class CPSAnnotationChecker extends CPSUtils {
transChildrenInOrder(tree, tpe, List(fun), Nil)
- case Select(qual, name) =>
+ case Select(qual, name) if qual.isTyped =>
vprintln("[checker] checking select " + tree + "/" + tpe)