diff options
author | Paul Phillips <paulp@improving.org> | 2011-05-23 20:36:30 +0000 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2011-05-23 20:36:30 +0000 |
commit | d3ff7ee9fcac1d10c145bbd1f37a69b989a73cdf (patch) | |
tree | d70b1a6a6d73827748f2a7a95d2846867ce12983 | |
parent | e6b0beaa4c41a46bb9eb492f3fad6ff6589fa5ea (diff) | |
download | scala-d3ff7ee9fcac1d10c145bbd1f37a69b989a73cdf.tar.gz scala-d3ff7ee9fcac1d10c145bbd1f37a69b989a73cdf.tar.bz2 scala-d3ff7ee9fcac1d10c145bbd1f37a69b989a73cdf.zip |
Fix for failing { val x = classOf[List[_]] } in...
Fix for failing { val x = classOf[List[_]] } introduced by paulp
in r23262. I already had this in mind (see comments of #4419) but I was
holding back in the runup to 2.9. Closes #4419, review by odersky.
-rw-r--r-- | src/compiler/scala/tools/nsc/typechecker/Namers.scala | 4 | ||||
-rw-r--r-- | test/files/neg/bug4419.check | 4 | ||||
-rw-r--r-- | test/files/neg/bug4419.scala | 3 | ||||
-rw-r--r-- | test/files/pos/widen-existential.scala | 3 |
4 files changed, 12 insertions, 2 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/Namers.scala b/src/compiler/scala/tools/nsc/typechecker/Namers.scala index 8f20f2a120..bc6a468538 100644 --- a/src/compiler/scala/tools/nsc/typechecker/Namers.scala +++ b/src/compiler/scala/tools/nsc/typechecker/Namers.scala @@ -614,7 +614,7 @@ trait Namers { self: Analyzer => * modifier is the present means of signaling that a constant * value should not be widened, so it has a use even in situations * whether it is otherwise redundant (such as in a singleton.) - * Locally defined symbols are also excluded from widening. + * Method-defined locals are also excluded from widening. */ private def widenIfNecessary(sym: Symbol, tpe: Type, pt: Type): Type = { val getter = @@ -636,7 +636,7 @@ trait Namers { self: Analyzer => if ((sym.isVariable || sym.isMethod && !sym.hasAccessorFlag)) if (tpe2 <:< pt) tpe2 else tpe1 else if (isHidden(tpe)) tpe2 - else if (sym.isFinal || sym.isLocal) tpe + else if (sym.isFinal || sym.owner.isMethod) tpe else tpe1 } diff --git a/test/files/neg/bug4419.check b/test/files/neg/bug4419.check new file mode 100644 index 0000000000..488be9a591 --- /dev/null +++ b/test/files/neg/bug4419.check @@ -0,0 +1,4 @@ +bug4419.scala:2: error: forward reference extends over definition of value b + { val b = a; val a = 1 } + ^ +one error found diff --git a/test/files/neg/bug4419.scala b/test/files/neg/bug4419.scala new file mode 100644 index 0000000000..38a34be489 --- /dev/null +++ b/test/files/neg/bug4419.scala @@ -0,0 +1,3 @@ +class A { + { val b = a; val a = 1 } +}
\ No newline at end of file diff --git a/test/files/pos/widen-existential.scala b/test/files/pos/widen-existential.scala new file mode 100644 index 0000000000..90a62e461b --- /dev/null +++ b/test/files/pos/widen-existential.scala @@ -0,0 +1,3 @@ +class A { + { val x = classOf[List[_]] } +}
\ No newline at end of file |