From b345da5ef44ee1ae1d57b98430baa59c74bf3700 Mon Sep 17 00:00:00 2001 From: Martin Odersky Date: Fri, 28 Jan 2011 17:31:39 +0000 Subject: Various improvements to completion. onUnitOf moved to CompilerControl and made public, so free for public use now. --- src/compiler/scala/tools/nsc/typechecker/Namers.scala | 14 ++++++++++++-- 1 file changed, 12 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 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 } } -- cgit v1.2.3