summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/typechecker/Contexts.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2007-03-06 22:21:39 +0000
committerMartin Odersky <odersky@gmail.com>2007-03-06 22:21:39 +0000
commit198906fb11ee6a5848381ffea95d17003992799f (patch)
treee454894dc6dcd7f9e48d9e499966f720d10708f9 /src/compiler/scala/tools/nsc/typechecker/Contexts.scala
parentb0d5f492099e59d51098de67f404f4e918b325a2 (diff)
downloadscala-198906fb11ee6a5848381ffea95d17003992799f.tar.gz
scala-198906fb11ee6a5848381ffea95d17003992799f.tar.bz2
scala-198906fb11ee6a5848381ffea95d17003992799f.zip
Fixed bug 883
Diffstat (limited to 'src/compiler/scala/tools/nsc/typechecker/Contexts.scala')
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/Contexts.scala19
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
}