Merge pull request #717 from mono/client_websockets_impl
[mono.git] / mono / metadata / verify.c
index 20dbb1ac93d46df68aa962ac5bb57db0b9ef85c9..3c29b116e4c5522eb4a9176455a8c10ee2d8a9c2 100644 (file)
@@ -2088,6 +2088,28 @@ get_icollection_class (void)
                return generic_icollection_class;
 }
 
+static MonoClass*
+get_ireadonlylist_class (void)
+{
+       static MonoClass* generic_ireadonlylist_class = NULL;
+
+       if (generic_ireadonlylist_class == NULL)
+               generic_ireadonlylist_class = mono_class_from_name (mono_defaults.corlib,
+                       "System.Collections.Generic", "IReadOnlyList`1");
+       return generic_ireadonlylist_class;
+}
+
+static MonoClass*
+get_ireadonlycollection_class (void)
+{
+       static MonoClass* generic_ireadonlycollection_class = NULL;
+
+       if (generic_ireadonlycollection_class == NULL)
+               generic_ireadonlycollection_class = mono_class_from_name (mono_defaults.corlib,
+                       "System.Collections.Generic", "IReadOnlyCollection`1");
+       return generic_ireadonlycollection_class;
+}
+
 static MonoClass*
 inflate_class_one_arg (MonoClass *gtype, MonoClass *arg0)
 {
@@ -2128,6 +2150,10 @@ verifier_class_is_assignable_from (MonoClass *target, MonoClass *candidate)
                                        return TRUE;
                                if (verifier_inflate_and_check_compat (target, get_ienumerable_class (), candidate->element_class))
                                        return TRUE;
+                               if (verifier_inflate_and_check_compat (target, get_ireadonlylist_class (), candidate->element_class))
+                                       return TRUE;
+                               if (verifier_inflate_and_check_compat (target, get_ireadonlycollection_class (), candidate->element_class))
+                                       return TRUE;
                        } else {
                                MonoError error;
                                int i;