[coop handles] Add mono_object_handle_pin_unbox
authorAleksey Kliger <aleksey@xamarin.com>
Tue, 6 Jun 2017 22:03:30 +0000 (18:03 -0400)
committerAleksey Kliger <aleksey@xamarin.com>
Tue, 20 Jun 2017 15:29:43 +0000 (11:29 -0400)
mono/metadata/handle.c
mono/metadata/handle.h

index 736fd56a7a94e7aa4d9715e43d51a13f6beb7177..fe367dd6bf5b35ff6bb7175a1bf7fc851ae8a4cf 100644 (file)
@@ -552,6 +552,16 @@ mono_string_handle_pin_chars (MonoStringHandle handle, uint32_t *gchandle)
        return mono_string_chars (raw);
 }
 
+gpointer
+mono_object_handle_pin_unbox (MonoObjectHandle obj, uint32_t *gchandle)
+{
+       g_assert (!MONO_HANDLE_IS_NULL (obj));
+       MonoClass *klass = mono_handle_class (obj);
+       g_assert (klass->valuetype);
+       *gchandle = mono_gchandle_from_handle (obj, TRUE);
+       return mono_object_unbox (MONO_HANDLE_RAW (obj));
+}
+
 void
 mono_array_handle_memcpy_refs (MonoArrayHandle dest, uintptr_t dest_idx, MonoArrayHandle src, uintptr_t src_idx, uintptr_t len)
 {
index eb3175a4f9aca0d9a7b0ddaa88a78775784f057d..e0bf25281c58746e008076e0717e0f077ba94cdc 100644 (file)
@@ -497,6 +497,9 @@ mono_array_handle_pin_with_size (MonoArrayHandle handle, int size, uintptr_t ind
 gunichar2 *
 mono_string_handle_pin_chars (MonoStringHandle s, uint32_t *gchandle_out);
 
+gpointer
+mono_object_handle_pin_unbox (MonoObjectHandle boxed_valuetype_obj, uint32_t *gchandle_out);
+
 void
 mono_error_set_exception_handle (MonoError *error, MonoExceptionHandle exc);