summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/typechecker/Namers.scala
diff options
context:
space:
mode:
authorSean McDirmid <sean.mcdirmid@gmail.com>2008-06-04 13:08:18 +0000
committerSean McDirmid <sean.mcdirmid@gmail.com>2008-06-04 13:08:18 +0000
commit8c06a1a54516bbbeed907da3446b372b732c4329 (patch)
treecbdd5d3737c9e3b5fd817f33adc120f8eb68d4f1 /src/compiler/scala/tools/nsc/typechecker/Namers.scala
parenta5ef3d597df276500e294d5f758ce7d7033e8835 (diff)
downloadscala-8c06a1a54516bbbeed907da3446b372b732c4329.tar.gz
scala-8c06a1a54516bbbeed907da3446b372b732c4329.tar.bz2
scala-8c06a1a54516bbbeed907da3446b372b732c4329.zip
Fixing problem with case classes and companion ...
Fixing problem with case classes and companion objects
Diffstat (limited to 'src/compiler/scala/tools/nsc/typechecker/Namers.scala')
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/Namers.scala20
1 files changed, 15 insertions, 5 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/Namers.scala b/src/compiler/scala/tools/nsc/typechecker/Namers.scala
index 2a1bbe1001..05521a0865 100644
--- a/src/compiler/scala/tools/nsc/typechecker/Namers.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/Namers.scala
@@ -43,7 +43,7 @@ trait Namers { self: Analyzer =>
private class NormalNamer(context : Context) extends Namer(context)
def newNamer(context : Context) : Namer = new NormalNamer(context)
- private val caseClassOfModuleClass = new HashMap[Symbol, ClassDef]
+ private[typechecker] val caseClassOfModuleClass = new HashMap[Symbol, ClassDef]
def resetNamer() {
caseClassOfModuleClass.clear
@@ -226,8 +226,8 @@ trait Namers { self: Analyzer =>
// .pos, mods.flags | MODULE | FINAL, name
var m: Symbol = context.scope.lookupWithContext(tree.name)(context.owner)
val moduleFlags = tree.mods.flags | MODULE | FINAL
- if (!inIDE && m.isModule && !m.isPackage && inCurrentScope(m) &&
- (!currentRun.compiles(m) || (m hasFlag SYNTHETIC))) {
+ if (m.isModule && !m.isPackage && inCurrentScope(m) &&
+ ((!inIDE && !currentRun.compiles(m)) || (m hasFlag SYNTHETIC))) {
updatePosFlags(m, tree.pos, moduleFlags)
setPrivateWithin(tree, m, tree.mods)
context.unit.synthetics -= m
@@ -546,8 +546,18 @@ trait Namers { self: Analyzer =>
// unless they exist already
Namers.this.caseClassOfModuleClass get clazz match {
case Some(cdef) =>
- addApplyUnapply(cdef, templateNamer)
- caseClassOfModuleClass -= clazz
+ val go = if (inIDE) { // garbage collect in the presentaiton compiler.
+ assert(cdef.symbol != null && cdef.symbol != NoSymbol)
+ if (!cdef.symbol.isClass || !cdef.symbol.hasFlag(CASE) || cdef.symbol.rawInfo == NoType) false
+ else true
+ } else true
+ if (go)
+ addApplyUnapply(cdef, templateNamer)
+ if (!go || !inIDE) caseClassOfModuleClass -= clazz
+ if (!go) {
+ val rem = clazz.linkedModuleOfClass
+ assert(rem != NoSymbol)
+ }
case None =>
}
ClassInfoType(parents, decls, clazz)