[Mono-dev] Generic Variance

Rodrigo Kumpera kumpera at gmail.com
Mon Feb 16 09:23:45 EST 2009

Hi Scott, your patch now is now pretty close to been ok, only a few
remaining details are left.

@@ -2128,6 +2129,36 @@
     return (key->interface_id - element->interface_id);

+static gboolean
+mono_class_is_variant_of (MonoClass *klass, MonoClass *vklass) {

This function takes arguments in the opposite order of
I notices now while reviewing the details of the check. It's better keep the
same ordering
of (target, source) for type query like functions [1].

+        if (container->type_params [i].flags &
+            if ((container->type_params [i].flags &
GENERIC_PARAMETER_ATTRIBUTE_CONTRAVARIANT) && !mono_class_is_assignable_from
(param_class, vparam_class))
+                return FALSE;
+            if ((container->type_params [i].flags &
GENERIC_PARAMETER_ATTRIBUTE_COVARIANT) && !mono_class_is_assignable_from
(vparam_class, param_class))
+                return FALSE;
+        } else if (param_class != vparam_class)
+            return FALSE;

Good call to change from the broken named we had internally to something

+++ mono/mini/ChangeLog    (working copy)
@@ -1,3 +1,13 @@
+2009-02-13  Scott Peterson  <lunchtimemama at gmail.com>
+    Contributed under the MIT/X11 license.
+    * mini-trampolines.cs: Use the
+    new mono_class_interface_offset_with_variance method to find interface
+    offsets.

It's better to error on the side of been to verbose than the opposite when
changelog entries. Please mention that this change is required because
of variant interfaces may do through a different interface than the one the
implements but due to variance it's valid.

Oh, and you mention the wrong file name ;)

+2009-02-13  Scott Peterson  <lunchtimemama at gmail.com>
+    This adds runtime generic variance support for reference types.
+    This patch is contributed under the MIT/X11 license.
+    * class.c: Added mono_class_has_variant_generic_params which determins
+    if a generic class has a variant type parameter.

mono_class_has_variant_generic_params is already there.

Besides this minor issues, your patch looks great. Thanks for contributing
to mono.


[1] It's easier to read F(A,B) a a test for the A =? B relation, where =?
could be things like
type assignable or generics variance assignable.

On Fri, Feb 13, 2009 at 1:07 AM, Scott Peterson <lunchtimemama at gmail.com>wrote:

> This patch syncs with SVN.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.ximian.com/pipermail/mono-devel-list/attachments/20090216/bedddb65/attachment.html 

More information about the Mono-devel-list mailing list