summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2009-03-02 19:09:42 +0000
committerPaul Phillips <paulp@improving.org>2009-03-02 19:09:42 +0000
commitddecab441fd5e7e7ea487b01d02a7f17bcd7747a (patch)
treed9b29f921dfac77dff0fbdb52127b0ea39b17797 /src
parent3d96a4aa3230a5e1558378b409e84a65f85ac107 (diff)
downloadscala-ddecab441fd5e7e7ea487b01d02a7f17bcd7747a.tar.gz
scala-ddecab441fd5e7e7ea487b01d02a7f17bcd7747a.tar.bz2
scala-ddecab441fd5e7e7ea487b01d02a7f17bcd7747a.zip
Fix and test case for #1392.
Diffstat (limited to 'src')
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/Typers.scala5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/Typers.scala b/src/compiler/scala/tools/nsc/typechecker/Typers.scala
index 9518f62c37..427a299d51 100644
--- a/src/compiler/scala/tools/nsc/typechecker/Typers.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/Typers.scala
@@ -572,13 +572,16 @@ 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 && !sym.isValue && !phase.erasedTypes) { // (2)
+ } else if ((mode & (EXPRmode | QUALmode)) == EXPRmode && isNotAValue(sym) && !phase.erasedTypes) { // (2)
errorTree(tree, sym+" is not a value")
} else {
if (sym.isStable && pre.isStable && tree.tpe.typeSymbol != ByNameParamClass &&