[svn] r6487: nemerle/trunk/ncc: hierarchy/ClassMembers.n
testsuite/negative/co-contravariant-native.n
nazgul
svnadmin at nemerle.org
Sun Aug 6 15:55:33 CEST 2006
Log:
Correctly invert the variance check
Author: nazgul
Date: Sun Aug 6 15:54:52 2006
New Revision: 6487
Modified:
nemerle/trunk/ncc/hierarchy/ClassMembers.n
nemerle/trunk/ncc/testsuite/negative/co-contravariant-native.n
Modified: nemerle/trunk/ncc/hierarchy/ClassMembers.n
==============================================================================
--- nemerle/trunk/ncc/hierarchy/ClassMembers.n (original)
+++ nemerle/trunk/ncc/hierarchy/ClassMembers.n Sun Aug 6 15:54:52 2006
@@ -917,13 +917,13 @@
!tr.IsCovariant
else
!tr.IsCovariant && !tr.IsContravariant
- | MType.Array (t, _) => check_variance_valid (t, 1) // array types behave covariantly
+ | MType.Array (t, _) => check_variance_valid (t, enforced_variance_sign) // array types behave covariantly
| MType.Class (tc, args) =>
List.ForAll2 (tc.Typarms, args, fun (parm, arg) {
def enforce_sign = if (parm.IsCovariant) 1
else if (parm.IsContravariant) -1
else 0;
- check_variance_valid (arg, enforce_sign)
+ check_variance_valid (arg, enforce_sign * enforced_variance_sign)
})
| MType.Fun (a,b) => check_variance_valid (a, 0) && check_variance_valid (b, 0)
Modified: nemerle/trunk/ncc/testsuite/negative/co-contravariant-native.n
==============================================================================
--- nemerle/trunk/ncc/testsuite/negative/co-contravariant-native.n (original)
+++ nemerle/trunk/ncc/testsuite/negative/co-contravariant-native.n Sun Aug 6 15:54:52 2006
@@ -10,4 +10,18 @@
MeGene ['a] (x : int) : void where 'a : P; // E: constraints of generic parameters of method `MeGene' must behave contravariantly
}
+public interface ICovariantEnumerator [+T]
+{
+ MoveNext () : bool;
+ Current : T { get; }
+}
+
+public interface ICovariantEnumerable [+T]
+{
+ GetEnumerator () : ICovariantEnumerator [T];
+ SetEnumerator(e : ICovariantEnumerator [T]) : void; // E: type of `SetEnumerator' method's parameter `e' must behave contravariantly
+ SetArray (x : array [T]) : void; // E: type of `SetArray' method's parameter `x' must behave contravariantly
+}
+
+
()
More information about the svn
mailing list