diff options
author | Martin Odersky <odersky@gmail.com> | 2007-03-23 18:11:12 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2007-03-23 18:11:12 +0000 |
commit | 98f2f761c7ab896c4ac682f35116b0a88408e45a (patch) | |
tree | 899551f0ed7e03a45c4da3701dffe3ab58c871a6 /src/compiler/scala/tools/nsc/typechecker/Typers.scala | |
parent | b7cd34eda4a72102e119a373e3efa54c07d8b489 (diff) | |
download | scala-98f2f761c7ab896c4ac682f35116b0a88408e45a.tar.gz scala-98f2f761c7ab896c4ac682f35116b0a88408e45a.tar.bz2 scala-98f2f761c7ab896c4ac682f35116b0a88408e45a.zip |
fixed bug1014
Diffstat (limited to 'src/compiler/scala/tools/nsc/typechecker/Typers.scala')
-rw-r--r-- | src/compiler/scala/tools/nsc/typechecker/Typers.scala | 19 |
1 files changed, 8 insertions, 11 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/Typers.scala b/src/compiler/scala/tools/nsc/typechecker/Typers.scala index 7e8f49ad2f..df3ede8eca 100644 --- a/src/compiler/scala/tools/nsc/typechecker/Typers.scala +++ b/src/compiler/scala/tools/nsc/typechecker/Typers.scala @@ -305,7 +305,7 @@ trait Typers requires Analyzer { * @return ... */ def privates[T <: Tree](owner: Symbol, tree: T): T = - check(owner, EmptyScope, tree) + check(owner, EmptyScope, WildcardType, tree) /** Check that type <code>tree</code> does not refer to entities * defined in scope <code>scope</code>. @@ -316,16 +316,18 @@ trait Typers requires Analyzer { * @return ... */ def locals[T <: Tree](scope: Scope, pt: Type, tree: T): T = - if (isFullyDefined(pt)) tree setType pt else check(NoSymbol, scope, tree) + check(NoSymbol, scope, pt, tree) - def check[T <: Tree](owner: Symbol, scope: Scope, tree: T): T = { + def check[T <: Tree](owner: Symbol, scope: Scope, pt: Type, tree: T): T = { this.owner = owner this.scope = scope badSymbol = NoSymbol - assert(tree.tpe ne null, tree)//debug apply(tree.tpe) if (badSymbol == NoSymbol) tree else if (badSymbol.isErroneous) setError(tree) + else if (isFullyDefined(pt)) tree setType pt + else if (tree.tpe.symbol.isAnonymousClass) + check(owner, scope, pt, tree setType anonymousClassRefinement(tree.tpe.symbol)) else { val tp1 = try { heal(tree.tpe) @@ -341,7 +343,7 @@ trait Typers requires Analyzer { " escapes its defining scope as part of type "+tree.tpe) setError(tree) } else - check(owner, scope, tree setType tp1) + check(owner, scope, pt, tree setType tp1) } } @@ -1196,12 +1198,7 @@ trait Typers requires Analyzer { val expr1 = typed(block.expr, mode & ~(FUNmode | QUALmode), pt) val block1 = copy.Block(block, stats1, expr1) .setType(if (treeInfo.isPureExpr(block)) expr1.tpe else expr1.tpe.deconst) - if (isFullyDefined(pt)) block1 - else { - if (block1.tpe.symbol.isAnonymousClass) - block1 setType anonymousClassRefinement(block1.tpe.symbol) - checkNoEscaping.locals(context.scope, pt, block1) - } + checkNoEscaping.locals(context.scope, pt, block1) } /** |