/* * mono_dynamic_image_register_token: * * Register the TOKEN->OBJ mapping in the mapping table in ASSEMBLY. This is required for * the Module.ResolveXXXToken () methods to work. */ void mono_dynamic_image_register_token (MonoDynamicImage *assembly, guint32 token, MonoObjectHandle obj, int how_collide) { MONO_REQ_GC_UNSAFE_MODE; g_assert (!MONO_HANDLE_IS_NULL (obj)); g_assert (strcmp (m_class_get_name (mono_handle_class (obj)), "EnumBuilder")); dynamic_image_lock (assembly); MonoObject *prev = (MonoObject *)mono_g_hash_table_lookup (assembly->tokens, GUINT_TO_POINTER (token)); if (prev) { switch (how_collide) { case MONO_DYN_IMAGE_TOK_NEW: g_warning ("%s: Unexpected previous object when called with MONO_DYN_IMAGE_TOK_NEW", __func__); break; case MONO_DYN_IMAGE_TOK_SAME_OK: if (prev != MONO_HANDLE_RAW (obj)) { g_warning ("%s: condition `prev == MONO_HANDLE_RAW (obj)' not met", __func__); } break; case MONO_DYN_IMAGE_TOK_REPLACE: break; default: g_assert_not_reached (); } } mono_g_hash_table_insert (assembly->tokens, GUINT_TO_POINTER (token), MONO_HANDLE_RAW (obj)); dynamic_image_unlock (assembly); }
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 (m_class_is_valuetype (klass)); *gchandle = mono_gchandle_from_handle (obj, TRUE); return mono_object_unbox_internal (MONO_HANDLE_RAW (obj)); }