diff options
author | Paul Phillips <paulp@improving.org> | 2009-03-02 15:51:07 +0000 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2009-03-02 15:51:07 +0000 |
commit | 3d96a4aa3230a5e1558378b409e84a65f85ac107 (patch) | |
tree | a8fdb6d95cd31ce61e64e9b9d2d9d93296cc1f65 /src/compiler | |
parent | 9fc30e17b2b6550850933b499a211bb7532ff51b (diff) | |
download | scala-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.scala | 5 | ||||
-rw-r--r-- | src/compiler/scala/tools/nsc/symtab/Symbols.scala | 3 |
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 } |