aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2014-09-12 02:27:10 +0200
committerMartin Odersky <odersky@gmail.com>2014-09-12 02:27:10 +0200
commitedbe9edbbe4cf52ec6f885919253bf7ce4979b38 (patch)
tree90bbc649a18a099b770075860c8540de0fd571df
parent97828b370d9b5e0a4c5b4ec5b1da1c174e417df9 (diff)
downloaddotty-edbe9edbbe4cf52ec6f885919253bf7ce4979b38.tar.gz
dotty-edbe9edbbe4cf52ec6f885919253bf7ce4979b38.tar.bz2
dotty-edbe9edbbe4cf52ec6f885919253bf7ce4979b38.zip
Skip label methods in enclosing method
Otherwise would spuriously treat variables referenced from while loops as captured, because their enclosing method differs from current enclosing method.
-rw-r--r--src/dotty/tools/dotc/core/SymDenotations.scala4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/dotty/tools/dotc/core/SymDenotations.scala b/src/dotty/tools/dotc/core/SymDenotations.scala
index 049c8185f..c9777ebf6 100644
--- a/src/dotty/tools/dotc/core/SymDenotations.scala
+++ b/src/dotty/tools/dotc/core/SymDenotations.scala
@@ -666,7 +666,7 @@ object SymDenotations {
* A local dummy owner is mapped to the primary constructor of the class.
*/
final def enclosingMethod(implicit ctx: Context): Symbol =
- if (this is Method) symbol
+ if (this is (Method, butNot = Label)) symbol
else if (this.isClass) primaryConstructor
else owner.enclosingMethod
@@ -1320,6 +1320,8 @@ object SymDenotations {
baseTypeRefOf(tp1) & baseTypeRefOf(tp2)
case OrType(tp1, tp2) =>
baseTypeRefOf(tp1) | baseTypeRefOf(tp2)
+ case JavaArrayType(_) if symbol == defn.ObjectClass =>
+ this.typeRef
case _ =>
NoType
}