From d604417bac9a583048d750f627c2de5f8e46424f Mon Sep 17 00:00:00 2001 From: Martin Odersky Date: Wed, 22 Feb 2012 19:02:34 +0100 Subject: Fixes in namers and extension methods to support nested value classes and generic value classes. --- src/compiler/scala/tools/nsc/typechecker/Namers.scala | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'src/compiler/scala/tools/nsc/typechecker/Namers.scala') diff --git a/src/compiler/scala/tools/nsc/typechecker/Namers.scala b/src/compiler/scala/tools/nsc/typechecker/Namers.scala index 9027b6039c..5207fe8331 100644 --- a/src/compiler/scala/tools/nsc/typechecker/Namers.scala +++ b/src/compiler/scala/tools/nsc/typechecker/Namers.scala @@ -73,7 +73,7 @@ trait Namers extends MethodSynthesis { classAndNamerOfModule.clear() } - abstract class Namer(val context: Context) extends MethodSynth with NamerContextErrors { + abstract class Namer(val context: Context) extends MethodSynth with NamerContextErrors { thisNamer => import NamerErrorGen._ val typer = newTyper(context) @@ -99,6 +99,13 @@ trait Namers extends MethodSynthesis { owner.unsafeTypeParams foreach (paramContext.scope enter _) newNamer(paramContext) } + + def enclosingNamerWithScope(scope: Scope) = { + var cx = context + while (cx != NoContext && cx.scope != scope) cx = cx.outer + if (cx == context) thisNamer + else newNamer(cx) + } def enterValueParams(vparamss: List[List[ValDef]]): List[List[Symbol]] = { mmap(vparamss) { param => @@ -1265,7 +1272,7 @@ trait Namers extends MethodSynthesis { clazz setInfo result if (clazz.isDerivedValueClass) { clazz setFlag FINAL - ensureCompanionObject(cdef) + enclosingNamerWithScope(clazz.owner.info.decls).ensureCompanionObject(cdef) } result -- cgit v1.2.3