diff options
author | Sean McDirmid <sean.mcdirmid@gmail.com> | 2008-06-04 13:08:18 +0000 |
---|---|---|
committer | Sean McDirmid <sean.mcdirmid@gmail.com> | 2008-06-04 13:08:18 +0000 |
commit | 8c06a1a54516bbbeed907da3446b372b732c4329 (patch) | |
tree | cbdd5d3737c9e3b5fd817f33adc120f8eb68d4f1 /src/compiler/scala/tools/nsc/typechecker/Namers.scala | |
parent | a5ef3d597df276500e294d5f758ce7d7033e8835 (diff) | |
download | scala-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.scala | 20 |
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) |