summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/typechecker/Typers.scala
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2010-02-27 23:49:51 +0000
committerPaul Phillips <paulp@improving.org>2010-02-27 23:49:51 +0000
commit7476ed45af6cf90f8c0e03f6ed429dcb436baf87 (patch)
tree4d89f0d765ecbc8851b10eee6e1b6d0662a16466 /src/compiler/scala/tools/nsc/typechecker/Typers.scala
parent646c478b3aeb05079c915c217272bcb64dc324fc (diff)
downloadscala-7476ed45af6cf90f8c0e03f6ed429dcb436baf87.tar.gz
scala-7476ed45af6cf90f8c0e03f6ed429dcb436baf87.tar.bz2
scala-7476ed45af6cf90f8c0e03f6ed429dcb436baf87.zip
Expanded the check from #1392 to enclose #3123 ...
Expanded the check from #1392 to enclose #3123 as well so that "case Int => " doesn't crash. Closes #3123. Review by odersky.
Diffstat (limited to 'src/compiler/scala/tools/nsc/typechecker/Typers.scala')
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/Typers.scala9
1 files changed, 4 insertions, 5 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/Typers.scala b/src/compiler/scala/tools/nsc/typechecker/Typers.scala
index 504e940848..98ee29c32b 100644
--- a/src/compiler/scala/tools/nsc/typechecker/Typers.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/Typers.scala
@@ -642,16 +642,15 @@ trait Typers { self: Analyzer =>
* </ol>
*/
private def stabilize(tree: Tree, pre: Type, mode: Int, pt: Type): Tree = {
- def isNotAValue(sym: Symbol) = // bug #1392
- !sym.isValue || (sym.isModule && isValueClass(sym.linkedClassOfModule))
-
if (tree.symbol.hasFlag(OVERLOADED) && (mode & FUNmode) == 0)
inferExprAlternative(tree, pt)
val sym = tree.symbol
+
if (tree.tpe.isError) tree
else if ((mode & (PATTERNmode | FUNmode)) == PATTERNmode && tree.isTerm) { // (1)
- checkStable(tree)
- } else if ((mode & (EXPRmode | QUALmode)) == EXPRmode && isNotAValue(sym) && !phase.erasedTypes) { // (2)
+ if (sym.isNotAValue) errorTree(tree, sym+" is not a value")
+ else checkStable(tree)
+ } else if ((mode & (EXPRmode | QUALmode)) == EXPRmode && sym.isNotAValue && !phase.erasedTypes) { // (2)
errorTree(tree, sym+" is not a value")
} else {
if (sym.isStable && pre.isStable && tree.tpe.typeSymbol != ByNameParamClass &&