rendered paste bodyIndex: class.c
===================================================================
--- class.c (revision 53280)
+++ class.c (working copy)
@@ -2711,6 +2711,23 @@
return class;
}
+/** is klass Nullable<T>? */
+static gboolean
+type_is_nullable (MonoClass* klass)
+{
+ return klass->generic_class != NULL &&
+ klass->generic_class->container_class == mono_defaults.generic_nullable_class;
+}
+
+
+/** if klass is T? return T */
+static MonoClass*
+type_get_nullable_param (MonoClass* klass)
+{
+ g_assert (type_is_nullable (klass));
+ return klass->generic_class->inst->type_argv [0];
+}
+
/*
* Create the `MonoClass' for an instantiation of a generic type.
* We only do this if we actually need it.
@@ -2746,6 +2763,9 @@
klass->cast_class = klass->element_class = klass;
+ if (type_is_nullable (klass))
+ klass->cast_class = klass->element_class = type_get_nullable_param (klass);
+
if (gclass->generic_class.is_dynamic) {
klass->instance_size = gklass->instance_size;
klass->class_size = gklass->class_size;