summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/typechecker/Namers.scala
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2011-08-01 22:45:28 +0000
committerPaul Phillips <paulp@improving.org>2011-08-01 22:45:28 +0000
commit2b748e9ce721e2f11a5022c47a032d2e605c2f82 (patch)
tree8a23e5290d7ecde319f04a2e1adc459b892b0732 /src/compiler/scala/tools/nsc/typechecker/Namers.scala
parent60ee9924b7449ec64cffcecd6accd1a856c4fa3a (diff)
downloadscala-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.scala24
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
}
}