diff options
author | Martin Odersky <odersky@gmail.com> | 2011-01-28 17:31:39 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2011-01-28 17:31:39 +0000 |
commit | b345da5ef44ee1ae1d57b98430baa59c74bf3700 (patch) | |
tree | d9479a1462ff563892e0ae01c81e94bfaf0bdb11 /src/compiler/scala/tools/nsc/typechecker/Namers.scala | |
parent | ad3910e7fe0aedbab09ba6a85614f41b45e8b107 (diff) | |
download | scala-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.scala | 14 |
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 } } |