Index: class.c =================================================================== --- class.c (revision 53280) +++ class.c (working copy) @@ -2711,6 +2711,23 @@ return class; } +/** is klass Nullable? */ +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;