summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/typechecker/Namers.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2011-01-28 17:31:39 +0000
committerMartin Odersky <odersky@gmail.com>2011-01-28 17:31:39 +0000
commitb345da5ef44ee1ae1d57b98430baa59c74bf3700 (patch)
treed9479a1462ff563892e0ae01c81e94bfaf0bdb11 /src/compiler/scala/tools/nsc/typechecker/Namers.scala
parentad3910e7fe0aedbab09ba6a85614f41b45e8b107 (diff)
downloadscala-b345da5ef44ee1ae1d57b98430baa59c74bf3700.tar.gz
scala-b345da5ef44ee1ae1d57b98430baa59c74bf3700.tar.bz2
scala-b345da5ef44ee1ae1d57b98430baa59c74bf3700.zip
Various improvements to completion.
onUnitOf moved to CompilerControl and made public, so free for public use now.
Diffstat (limited to 'src/compiler/scala/tools/nsc/typechecker/Namers.scala')
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/Namers.scala14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/Namers.scala b/src/compiler/scala/tools/nsc/typechecker/Namers.scala
index 1f750dd727..3553ac5d99 100644
--- a/src/compiler/scala/tools/nsc/typechecker/Namers.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/Namers.scala
@@ -1347,9 +1347,16 @@ trait Namers { self: Analyzer =>
val tree: Tree
}
+ var lockedCount = 0
+
def mkTypeCompleter(t: Tree)(c: Symbol => Unit) = new TypeCompleter {
val tree = t
- override def complete(sym: Symbol) = c(sym)
+ override def complete(sym: Symbol) = try {
+ lockedCount += 1
+ c(sym)
+ } finally {
+ lockedCount -= 1
+ }
}
/** A class representing a lazy type with known type parameters.
@@ -1357,10 +1364,13 @@ trait Namers { self: Analyzer =>
class PolyTypeCompleter(tparams: List[Tree], restp: TypeCompleter, owner: Tree, ownerSym: Symbol, ctx: Context) extends TypeCompleter {
override val typeParams: List[Symbol]= tparams map (_.symbol) //@M
override val tree = restp.tree
- override def complete(sym: Symbol) {
+ override def complete(sym: Symbol) = try {
+ lockedCount += 1
if(ownerSym.isAbstractType) //@M an abstract type's type parameters are entered -- TODO: change to isTypeMember ?
newNamer(ctx.makeNewScope(owner, ownerSym)).enterSyms(tparams) //@M
restp.complete(sym)
+ } finally {
+ lockedCount -= 1
}
}