diff options
author | Martin Odersky <odersky@gmail.com> | 2007-03-06 22:21:39 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2007-03-06 22:21:39 +0000 |
commit | 198906fb11ee6a5848381ffea95d17003992799f (patch) | |
tree | e454894dc6dcd7f9e48d9e499966f720d10708f9 /src | |
parent | b0d5f492099e59d51098de67f404f4e918b325a2 (diff) | |
download | scala-198906fb11ee6a5848381ffea95d17003992799f.tar.gz scala-198906fb11ee6a5848381ffea95d17003992799f.tar.bz2 scala-198906fb11ee6a5848381ffea95d17003992799f.zip |
Fixed bug 883
Diffstat (limited to 'src')
-rw-r--r-- | src/compiler/scala/tools/nsc/typechecker/Contexts.scala | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/Contexts.scala b/src/compiler/scala/tools/nsc/typechecker/Contexts.scala index 34bafa6705..6157e32aad 100644 --- a/src/compiler/scala/tools/nsc/typechecker/Contexts.scala +++ b/src/compiler/scala/tools/nsc/typechecker/Contexts.scala @@ -408,26 +408,31 @@ trait Contexts requires Analyzer { } def implicitss: List[List[ImplicitInfo]] = { + val nextOuter = + if (owner.isConstructor) { + if (outer.tree.isInstanceOf[Template]) outer.outer.outer + else outer.outer + } else outer if (implicitsRunId != currentRunId) { implicitsRunId = currentRunId implicitsCache = List() val newImplicits: List[ImplicitInfo] = - if (owner != outer.owner && owner.isClass && !owner.isPackageClass) { - if (!owner.isInitialized) return outer.implicitss + if (owner != nextOuter.owner && owner.isClass && !owner.isPackageClass) { + if (!owner.isInitialized) return nextOuter.implicitss if (settings.debug.value) log("collect member implicits " + owner + ", implicit members = " + owner.thisType.implicitMembers)//debug collectImplicits(owner.thisType.implicitMembers, owner.thisType) - } else if (scope != outer.scope && !owner.isPackageClass) { + } else if (scope != nextOuter.scope && !owner.isPackageClass) { if (settings.debug.value) log("collect local implicits " + scope.toList)//debug collectImplicits(scope.toList, NoPrefix) - } else if (imports != outer.imports) { - assert(imports.tail == outer.imports) + } else if (imports != nextOuter.imports) { + assert(imports.tail == nextOuter.imports) collectImplicitImports(imports.head) } else List() - implicitsCache = if (newImplicits.isEmpty) outer.implicitss - else newImplicits :: outer.implicitss + implicitsCache = if (newImplicits.isEmpty) nextOuter.implicitss + else newImplicits :: nextOuter.implicitss } implicitsCache } |