summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2009-03-31 18:35:16 +0000
committerMartin Odersky <odersky@gmail.com>2009-03-31 18:35:16 +0000
commit68bcc9e7c6fff8d2292527440fa0fe65ef8bdff2 (patch)
tree0e94200baeccd3106174aa6adf0aa152c20a6692 /src/compiler/scala/tools/nsc/typechecker/RefChecks.scala
parent79c1f9882a31a833bb02ecbbdfdcb6ca61d2c522 (diff)
downloadscala-68bcc9e7c6fff8d2292527440fa0fe65ef8bdff2.tar.gz
scala-68bcc9e7c6fff8d2292527440fa0fe65ef8bdff2.tar.bz2
scala-68bcc9e7c6fff8d2292527440fa0fe65ef8bdff2.zip
Suppresses variance checking in type aliases; e...
Suppresses variance checking in type aliases; exapnds all type aliases instead.
Diffstat (limited to 'src/compiler/scala/tools/nsc/typechecker/RefChecks.scala')
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/RefChecks.scala6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala b/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala
index 28fea81d03..360ab6d09d 100644
--- a/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala
@@ -436,7 +436,7 @@ abstract class RefChecks extends InfoTransform {
sym.isTerm && ((sym.isPrivateLocal || sym.isProtectedLocal) && !(escapedPrivateLocals contains sym)))
state = AnyVariance
else if (sym.isAliasType)
- state = NoVariance
+ state = AnyVariance // was NoVariance, but now we always expand aliases.
sym = sym.owner
}
state
@@ -453,7 +453,9 @@ abstract class RefChecks extends InfoTransform {
case SingleType(pre, sym) =>
validateVariance(pre, variance)
case TypeRef(pre, sym, args) =>
- if (sym.variance != NoVariance) {
+ if (sym.isAliasType)
+ validateVariance(tp.normalize, variance)
+ else if (sym.variance != NoVariance) {
val v = relativeVariance(sym);
if (v != AnyVariance && sym.variance != v * variance) {
//Console.println("relativeVariance(" + base + "," + sym + ") = " + v);//DEBUG