summaryrefslogtreecommitdiff
path: root/src/compiler
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2009-03-02 15:51:07 +0000
committerPaul Phillips <paulp@improving.org>2009-03-02 15:51:07 +0000
commit3d96a4aa3230a5e1558378b409e84a65f85ac107 (patch)
treea8fdb6d95cd31ce61e64e9b9d2d9d93296cc1f65 /src/compiler
parent9fc30e17b2b6550850933b499a211bb7532ff51b (diff)
downloadscala-3d96a4aa3230a5e1558378b409e84a65f85ac107.tar.gz
scala-3d96a4aa3230a5e1558378b409e84a65f85ac107.tar.bz2
scala-3d96a4aa3230a5e1558378b409e84a65f85ac107.zip
Fix and test case for #1107, many long days in ...
Fix and test case for #1107, many long days in the making. If you fully understand why this change causes #1107 to work I implore you to add a comment or two to Symbols.scala.
Diffstat (limited to 'src/compiler')
-rw-r--r--src/compiler/scala/tools/nsc/matching/PatternNodes.scala5
-rw-r--r--src/compiler/scala/tools/nsc/symtab/Symbols.scala3
2 files changed, 5 insertions, 3 deletions
diff --git a/src/compiler/scala/tools/nsc/matching/PatternNodes.scala b/src/compiler/scala/tools/nsc/matching/PatternNodes.scala
index 53dcdc1bb6..83fb17c213 100644
--- a/src/compiler/scala/tools/nsc/matching/PatternNodes.scala
+++ b/src/compiler/scala/tools/nsc/matching/PatternNodes.scala
@@ -83,9 +83,10 @@ trait PatternNodes {
def cmp(other: Type): TypeComparison = TypeComparison(tpe, tpeWRTEquality(other))
def coversSym(sym: Symbol) = {
+ lazy val lmoc = sym.linkedModuleOfClass
val symtpe =
- if ((sym hasFlag Flags.MODULE) && (sym.linkedModuleOfClass ne NoSymbol))
- singleType(sym.tpe.prefix, sym.linkedModuleOfClass) // e.g. None, Nil
+ if ((sym hasFlag Flags.MODULE) && (lmoc ne NoSymbol))
+ singleType(sym.tpe.prefix, lmoc) // e.g. None, Nil
else sym.tpe
(tpe.typeSymbol == sym) ||
diff --git a/src/compiler/scala/tools/nsc/symtab/Symbols.scala b/src/compiler/scala/tools/nsc/symtab/Symbols.scala
index 47048f2acc..0e91e1b5bb 100644
--- a/src/compiler/scala/tools/nsc/symtab/Symbols.scala
+++ b/src/compiler/scala/tools/nsc/symtab/Symbols.scala
@@ -1029,7 +1029,8 @@ trait Symbols {
*/
final def linkedClassOfModule: Symbol = {
if (this != NoSymbol)
- owner.info.decl(name.toTypeName).suchThat(_ isCoDefinedWith this)
+ owner.rawInfo.decl(name.toTypeName).suchThat(
+ sym => !sym.hasFlag(MODULE) && (sym isCoDefinedWith this))
else NoSymbol
}