diff options
author | Paul Phillips <paulp@improving.org> | 2011-08-01 22:45:28 +0000 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2011-08-01 22:45:28 +0000 |
commit | 2b748e9ce721e2f11a5022c47a032d2e605c2f82 (patch) | |
tree | 8a23e5290d7ecde319f04a2e1adc459b892b0732 /src/compiler/scala/tools/nsc/typechecker/Namers.scala | |
parent | 60ee9924b7449ec64cffcecd6accd1a856c4fa3a (diff) | |
download | scala-2b748e9ce721e2f11a5022c47a032d2e605c2f82.tar.gz scala-2b748e9ce721e2f11a5022c47a032d2e605c2f82.tar.bz2 scala-2b748e9ce721e2f11a5022c47a032d2e605c2f82.zip |
A couple low impact cleanups/optimizations, no ...
A couple low impact cleanups/optimizations, no review.
Diffstat (limited to 'src/compiler/scala/tools/nsc/typechecker/Namers.scala')
-rw-r--r-- | src/compiler/scala/tools/nsc/typechecker/Namers.scala | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/Namers.scala b/src/compiler/scala/tools/nsc/typechecker/Namers.scala index ab6d66e111..dde34284b7 100644 --- a/src/compiler/scala/tools/nsc/typechecker/Namers.scala +++ b/src/compiler/scala/tools/nsc/typechecker/Namers.scala @@ -1381,28 +1381,30 @@ trait Namers { self: Analyzer => var lockedCount = 0 - def mkTypeCompleter(t: Tree)(c: Symbol => Unit) = new TypeCompleter { + def mkTypeCompleter(t: Tree)(c: Symbol => Unit) = new LockingTypeCompleter { val tree = t - override def complete(sym: Symbol) = try { + def completeImpl(sym: Symbol) = c(sym) + } + + trait LockingTypeCompleter extends TypeCompleter { + def completeImpl(sym: Symbol): Unit + + override def complete(sym: Symbol) = { lockedCount += 1 - c(sym) - } finally { - lockedCount -= 1 + try completeImpl(sym) + finally lockedCount -= 1 } } /** A class representing a lazy type with known type parameters. */ - class PolyTypeCompleter(tparams: List[Tree], restp: TypeCompleter, owner: Tree, ownerSym: Symbol, ctx: Context) extends TypeCompleter { + class PolyTypeCompleter(tparams: List[Tree], restp: TypeCompleter, owner: Tree, ownerSym: Symbol, ctx: Context) extends LockingTypeCompleter { override val typeParams: List[Symbol]= tparams map (_.symbol) //@M override val tree = restp.tree - override def complete(sym: Symbol) = try { - lockedCount += 1 - if(ownerSym.isAbstractType) //@M an abstract type's type parameters are entered -- TODO: change to isTypeMember ? + def completeImpl(sym: Symbol) = { + 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 } } |